Files

1 line
346 KiB
JSON
Raw Permalink 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": "1695365384/hive", "files": {"README.md": {"9bd99ef29cf75ead2e33e012258497f8bbaf8a05": {"t": 1785746461.504687, "n": 13735, "h": "3239a26b357f35b9", "c": "<div align=\"center\">\n <p>\n <img src=\"logo-with-text.svg\" alt=\"Hive\" width=\"160\">\n </p>\n\n <p><strong>The Multi-Agent SDK for TypeScript</strong></p>\n <p>Coordinator-Worker architecture with built-in cost control, permission layers, and Chinese LLM support.</p>\n\n <p>\n <a href=\"#quick-start\">Quick Start</a> &middot;\n <a href=\"#architecture\">Architecture</a> &middot;\n <a href=\"#api-reference\">API</a> &middot;\n <a href=\"#vertical-pack-system\">Vertical Pack</a> &middot;\n <a href=\"#providers\">Providers</a> &middot;\n <a href=\"#faq\">FAQ</a>\n </p>\n\n <p>\n <code>npm i @bundy-lmw/hive-core</code>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.3+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/1337%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n\n <p><a href=\"./README.zh-CN.md\">中文文档</a></p>\n</div>\n\n---\n\n## Why Hive\n\n| Problem | Hive Approach |\n|:--------|:-------------|\n| Agent loops burn tokens on simple queries | Coordinator-Worker pattern — only spawn workers when needed |\n| Expensive models used for everything | Provider presets with per-task model selection via `DispatchOptions.modelId` |\n| Read-only operations can mutate files | Worker agents have enforced tool permissions (explore/plan = read-only, general = full access) |\n| Chinese LLMs need manual parameter hacking | 13 built-in provider adapters (GLM, DeepSeek, Qwen, Kimi, ERNIE, Claude, GPT, Gemini, etc.) |\n| Long-running agents go silent | Built-in heartbeat, stall detection, and abort signals |\n\n---\n\n## Quick Start\n\n### Install\n\n```bash\nnpm i @bundy-lmw/hive-core\n```\n\n### Configure\n\n```bash\nexport GLM_API_KEY=your-key\n# or: DEEPSEEK_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY\n```\n\n### Dispatch\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent();\nconst result = await agent.dispatch('Refactor the login module');\n// Coordinator spawns explore → plan → general workers automatically\n\nconsole.log(result.text); // Final output\nconsole.log(result.usage); // { input: 1234, output: 567 }\nconsole.log(result.tools); // ['glob', 'file', 'bash']\nconsole.log(result.duration); // ms\n```\n\n### Event Stream\n\n```typescript\nconst result = await agent.dispatch('Analyze the auth flow', {\n onPhase: (phase, msg) => console.log(`[${phase}] ${msg}`),\n onText: (text) => process.stdout.write(text),\n onTool: (tool, input) => console.log(`→ ${tool}`),\n onToolResult: (tool, result) => console.log(`← ${tool}`),\n onReasoning: (thought) => console.log(`[reasoning] ${thought}`),\n abortSignal: controller.signal,\n});\n```\n\n### HTTP Server\n\n```bash\npnpm --filter @bundy-lmw/hive-server start\n# POST http://localhost:4450/api/chat\n# WS ws://localhost:4450/ws/chat\n```\n\n---\n\n<div align=\"center\">\n <img src=\"docs/demo.gif\" alt=\"Hive Desktop Demo\" width=\"800\">\n</div>\n\n---\n\n## Architecture\n\nHive uses a **Coordinator-Worker** pattern. The `Agent` class is the single entry point. `dispatch()` delegates to `CoordinatorCapability`, which manages the LLM loop and spawns specialized **worker agents** as tools.\n\n<div align=\"center\">\n <img src=\"docs/architecture.svg\" alt=\"Hive System Architecture\" width=\"860\">\n</div>\n\n### Worker Agent Tool Permissions\n\n| Tool | explore | plan | general | schedule |\n|:-----|:--------|:-----|:--------|:---------|\n| `file` (read) | ✅ | ✅ | ✅ | — |\n| `glob` | ✅ | ✅ | ✅ | — |\n| `grep` | ✅ | ✅ | ✅ | — |\n| `web-search` | ✅ | ✅ | ✅ | — |\n| `web-fetch` | ✅ | ✅ | ✅ | — |\n| `env` | ✅ | ✅ | ✅ | — |\n| `bash` | — | — | ✅ | — |\n| `file` (write) | — | — | ✅ | — |\n| `ask-user` | — | — | ✅ | — |\n| `send-file` | — | — | ✅ | — |\n| `schedule` | — | — | — | ✅ |\n\n### Capabilities\n\n<div align=\"center\">\n\n<table style=\"border:none; margin: 0 auto;\">\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Coordinator</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">dispatch · worker orchestration · cost</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Provider</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">registry · switching · AI SDK</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Skill</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">loading · matching · instruction generation</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Session</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">SQLite persistence · multi-session</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Timeout</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">heartbeat · stall detection · abort</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Schedule</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">cron · task lifecycle</td>\n</tr>\n</table>\n\n</div>\n\n### Server (`@bundy-lmw/hive-server`)\n\nHono HTTP + WebSocket server wrapping the Agent SDK:\n\n| Route | Method | Description |\n|:------|:-------|:------------|\n| `/health` | GET | Health check |\n| `/api/chat` | POST | Chat endpoint |\n| `/api/sessions` | GET | List sessions |\n| `/api/sessions/:id` | GET/DELETE | Session CRUD |\n| `/ws/chat` | WS | Chat streaming |\n| `/ws/admin` | WS | Admin panel |\n| `/webhook/:plugin/:appId` | POST | Plugin webhooks |\n\n---\n\n## API Reference\n\n### Agent\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent(options?);\nawait agent.initialize();\n\n// Task execution\nconst result = await agent.dispatch(task: string, options?: DispatchOptions): Promise<DispatchResult>;\n\n// Provider management\nagent.useProvider(name: string, apiKey?: string): boolean;\nagent.listProviders(): ProviderConfig[];\nagent.listAllProviders(): Promise<PiCatalogProvider[]>;\nagent.listProviderModels(providerId: string): Promise<ModelSpec[]>;\n\n// Skill management\nagent.listSkills(): Skill[];\nagent.matchSkill(input: string): SkillMatchResult | null;\nagent.registerSkill(skill: Skill): void;\n\n// Session management\nawait agent.createSession(config?): Promise<Session>;\nawait agent.loadSession(sessionId: string): Promise<Session | null>;\nagent.getSessionMessages(): Message[];\n\n// Lifecycle\nawait agent.dispose();\n```\n\n### DispatchOptions\n\n```typescript\ninterface DispatchOptions {\n chatId?: string;\n cwd?: string;\n maxTurns?: number;\n modelId?: string; // Override model for this task\n systemPrompt?: string;\n abortSignal?: AbortSignal; // Cancel mid-execution\n onPhase?(phase: string, message: string): void;\n onText?(text: string): void;\n onTool?(tool: string, input?: unknown): void;\n onToolResult?(tool: string, result: unknown): void;\n onReasoning?(text: string): void;\n}\n```\n\n### DispatchResult\n\n```typescript\ninterface DispatchResult {\n text: string;\n success: boolean;\n duration: number; // ms\n tools: string[]; // tools used\n usage?: { input: number; output: number };\n cost?: { input: number; output: number; total: number };\n steps?: StepResult[];\n error?: string;\n}\n```\n\n---\n\n## Providers\n\n### Built-in Adapters\n\n| Adapter | Providers | Protocol |\n|:--------|:---------|:---------|\n| `AnthropicAdapter` | Claude (opus, sonnet, haiku) | Anthropic API |\n| `OpenAIAdapter` | GPT-4o, GPT-4-turbo | OpenAI API |\n| `GoogleAdapter` | Gemini | Google AI |\n| `OpenAICompatibleAdapter` | GLM, DeepSeek, Qwen, Kimi, ERNIE, OpenRouter, Groq, xAI, Mistral, LiteLLM | OpenAI-compatible |\n\n13 providers out of the box. Any OpenAI-compatible endpoint works with `baseUrl` + `apiKey` — no source changes needed.\n\n### Chinese LLM Presets\n\n| Provider | Model Examples | Notes |\n|:---------|:--------------|:------|\n| GLM (Zhipu) | glm-5, glm-4.7 | Long context, multimodal |\n| Qwen (Alibaba) | qwen3-max, qwen-plus | Alibaba Cloud |\n| DeepSeek | deepseek-chat, deepseek-reasoner | Cost-effective |\n| Kimi (Moonshot) | moonshot-v1-128k | Ultra-long context |\n| ERNIE (Baidu) | ernie-4.0-8k | Baidu |\n\n---\n\n## Hook System\n\nIntercept any lifecycle event with priority-based hooks:\n\n```typescript\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'bash') {\n return { proceed: false, error: 'bash is blocked in this environment' };\n }\n}, { priority: 'highest' });\n```\n\n### Available Hooks\n\n| Hook | Trigger |\n|:-----|:--------|\n| `session:start` / `end` / `error` | Session lifecycle |\n| `tool:before` / `after` | Tool execution (can block) |\n| `provider:beforeChange` / `afterChange` | Provider switching |\n| `timeout:stalled` / `health:heartbeat` | Health monitoring |\n| `agent:thinking` / `task:progress` | Agent introspection |\n| `notification:push` | Channel notifications |\n\n---\n\n<details>\n<summary><b>Project Structure</b></summary>\n\n```\nhive/\n├── packages/core/src/\n│ ├── agents/\n│ │ ├── core/\n│ │ │ ├── Agent.ts # Single entry point\n│ │ │ ├── AgentContext.ts # Shared context + hook registry\n│ │ │ ├── agents.ts # Worker definitions (explore/plan/general/schedule)\n│ │ │ └── PiAgentSessionAdapter.ts # pi createAgentSession adapter\n│ │ └── capabilities/\n│ │ ├── CoordinatorCapability.ts # LLM loop + worker orchestration\n│ │ ├── ProviderCapability.ts # Provider registry + AI SDK\n│ │ ├── SkillCapability.ts # Skill loading + matching\n│ │ ├── SessionCapability.ts # SQLite persistence\n│ │ ├── TimeoutCapability.ts # Heartbeat + stall detection\n│ │ └── ScheduleCapability.ts # Cron scheduling\n│ ├── providers/\n│ │ ├── ProviderManager.ts # Provider registry\n│ │ └── adapters/ # Anthropic, OpenAI, Google, OpenAI-compatible\n│ ├── tools/built-in/ # 14 tools (bash, file, glob, grep, web, etc.)\n│ ├── skills/ # SkillLoader, SkillMatcher, SkillRegistry\n│ ├── hooks/ # HookRegistry + types\n│ └── index.ts # Public API exports\n├── apps/server/src/\n│ ├── main.ts # Server entry\n│ └── gateway/ # Hono HTTP + WebSocket routes\n└── apps/desktop-electron/ # Electron 33 desktop app (React 19)\n```\n\n</details>\n\n---\n\n## Development\n\n| Command | Description |\n|:--------|:------------|\n| `pnpm install` | Install dependencies |\n| `pnpm -r build` | Build all packages |\n| `pnpm test` | Run tests (1,337 cases) |\n| `pnpm test:e2e` | E2E tests (requires API key) |\n| `pnpm --filter @bundy-lmw/hive-server start` | Start HTTP server |\n| `pnpm dev` | Build core/server and start the Electron desktop app |\n\n---\n\n## Vertical Pack System\n\nHive 支持通过 **Vertical Pack** 扩展任意垂直业务场景。一个 Vertical Pack 把场景所需的工具、子 Agent、技能、后台服务、生命周期钩子打包为一个声明式 npm 包,多个 pack 可共存且互不干扰。\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\nimport { LegalPack } from '@hive-pack/legal';\nimport { MedicalPack } from '@hive-pack/medical';\n\nconst agent = new Agent();\nagent.use(new LegalPack({ namespaced: true }));\nagent.use(new MedicalPack({ namespaced: true }));\nawait agent.initialize();\n```\n\n📖 完整文档:[docs/vertical-pack.md](docs/vertical-pack.md)\n\n特性:\n- **6 种扩展点**:工具 / 子 Agent / 技能 / 能力模块 / 钩子 / 生命周期\n- **运行时隔离**:冲突检测、命名空间前缀、单独卸载,多 pack 互不污染\n- **CLI 脚手架**:`npx hive-pack init <name>` 生成骨架\n- **npm 分发**:一个 pack 就是一个标准 npm 包\n\n---\n\n## FAQ\n\n<details>\n<summary><b>How does the Coordinator-Worker pattern work?</b></summary>\n\n`Agent.dispatch()` enters a Coordinator LLM loop. The Coordinator has 3 coordinator tools — `agent` (spawn worker), `task-stop` (cancel workers), and `send-message` (push to channels). For complex tasks, it autonomously spawns explore → plan → general workers. For simple queries, it responds directly without spawning any workers.\n\n</details>\n\n<details>\n<summary><b>How do I integrate into an existing project?</b></summary>\n\nInstall `@bundy-lmw/hive-core`, set env vars or pass `AgentInitOptions`, call `agent.dispatch()`. For an HTTP wrapper, use `@bundy-lmw/hive-server`.\n\n</details>\n\n<details>\n<summary><b>How do I add a custom channel?</b></summary>\n\nImplement the Plugin interface, publish as an npm package, and register via webhook route. See `@bundy-lmw/hive-plugin-feishu` as a reference.\n\n</details>\n\n<details>\n<summary><b>Can I use multiple providers simultaneously?</b></summary>\n\nYes. Configure multiple providers and switch at runtime with `agent.useProvider('name')`. Override per-task with `dispatch(task, { modelId: 'deepseek-chat' })`.\n\n</details>\n\n---\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n <a href=\"https://github.com/1695365384/hive/issues\">Issues</a> &middot;\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> &middot;\n <a href=\"https://github.com/1695365384/hive/blob/main/CONTRIBUTING.md\">Contributing</a>\n</p>\n"}, "100061aa76c937522f095c0a6efb54498ff3305e": {"t": 1785764574.682157, "n": 13735, "h": "3239a26b357f35b9", "c": "<div align=\"center\">\n <p>\n <img src=\"logo-with-text.svg\" alt=\"Hive\" width=\"160\">\n </p>\n\n <p><strong>The Multi-Agent SDK for TypeScript</strong></p>\n <p>Coordinator-Worker architecture with built-in cost control, permission layers, and Chinese LLM support.</p>\n\n <p>\n <a href=\"#quick-start\">Quick Start</a> &middot;\n <a href=\"#architecture\">Architecture</a> &middot;\n <a href=\"#api-reference\">API</a> &middot;\n <a href=\"#vertical-pack-system\">Vertical Pack</a> &middot;\n <a href=\"#providers\">Providers</a> &middot;\n <a href=\"#faq\">FAQ</a>\n </p>\n\n <p>\n <code>npm i @bundy-lmw/hive-core</code>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.3+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/1337%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n\n <p><a href=\"./README.zh-CN.md\">中文文档</a></p>\n</div>\n\n---\n\n## Why Hive\n\n| Problem | Hive Approach |\n|:--------|:-------------|\n| Agent loops burn tokens on simple queries | Coordinator-Worker pattern — only spawn workers when needed |\n| Expensive models used for everything | Provider presets with per-task model selection via `DispatchOptions.modelId` |\n| Read-only operations can mutate files | Worker agents have enforced tool permissions (explore/plan = read-only, general = full access) |\n| Chinese LLMs need manual parameter hacking | 13 built-in provider adapters (GLM, DeepSeek, Qwen, Kimi, ERNIE, Claude, GPT, Gemini, etc.) |\n| Long-running agents go silent | Built-in heartbeat, stall detection, and abort signals |\n\n---\n\n## Quick Start\n\n### Install\n\n```bash\nnpm i @bundy-lmw/hive-core\n```\n\n### Configure\n\n```bash\nexport GLM_API_KEY=your-key\n# or: DEEPSEEK_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY\n```\n\n### Dispatch\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent();\nconst result = await agent.dispatch('Refactor the login module');\n// Coordinator spawns explore → plan → general workers automatically\n\nconsole.log(result.text); // Final output\nconsole.log(result.usage); // { input: 1234, output: 567 }\nconsole.log(result.tools); // ['glob', 'file', 'bash']\nconsole.log(result.duration); // ms\n```\n\n### Event Stream\n\n```typescript\nconst result = await agent.dispatch('Analyze the auth flow', {\n onPhase: (phase, msg) => console.log(`[${phase}] ${msg}`),\n onText: (text) => process.stdout.write(text),\n onTool: (tool, input) => console.log(`→ ${tool}`),\n onToolResult: (tool, result) => console.log(`← ${tool}`),\n onReasoning: (thought) => console.log(`[reasoning] ${thought}`),\n abortSignal: controller.signal,\n});\n```\n\n### HTTP Server\n\n```bash\npnpm --filter @bundy-lmw/hive-server start\n# POST http://localhost:4450/api/chat\n# WS ws://localhost:4450/ws/chat\n```\n\n---\n\n<div align=\"center\">\n <img src=\"docs/demo.gif\" alt=\"Hive Desktop Demo\" width=\"800\">\n</div>\n\n---\n\n## Architecture\n\nHive uses a **Coordinator-Worker** pattern. The `Agent` class is the single entry point. `dispatch()` delegates to `CoordinatorCapability`, which manages the LLM loop and spawns specialized **worker agents** as tools.\n\n<div align=\"center\">\n <img src=\"docs/architecture.svg\" alt=\"Hive System Architecture\" width=\"860\">\n</div>\n\n### Worker Agent Tool Permissions\n\n| Tool | explore | plan | general | schedule |\n|:-----|:--------|:-----|:--------|:---------|\n| `file` (read) | ✅ | ✅ | ✅ | — |\n| `glob` | ✅ | ✅ | ✅ | — |\n| `grep` | ✅ | ✅ | ✅ | — |\n| `web-search` | ✅ | ✅ | ✅ | — |\n| `web-fetch` | ✅ | ✅ | ✅ | — |\n| `env` | ✅ | ✅ | ✅ | — |\n| `bash` | — | — | ✅ | — |\n| `file` (write) | — | — | ✅ | — |\n| `ask-user` | — | — | ✅ | — |\n| `send-file` | — | — | ✅ | — |\n| `schedule` | — | — | — | ✅ |\n\n### Capabilities\n\n<div align=\"center\">\n\n<table style=\"border:none; margin: 0 auto;\">\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Coordinator</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">dispatch · worker orchestration · cost</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Provider</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">registry · switching · AI SDK</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Skill</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">loading · matching · instruction generation</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Session</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">SQLite persistence · multi-session</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Timeout</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">heartbeat · stall detection · abort</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Schedule</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">cron · task lifecycle</td>\n</tr>\n</table>\n\n</div>\n\n### Server (`@bundy-lmw/hive-server`)\n\nHono HTTP + WebSocket server wrapping the Agent SDK:\n\n| Route | Method | Description |\n|:------|:-------|:------------|\n| `/health` | GET | Health check |\n| `/api/chat` | POST | Chat endpoint |\n| `/api/sessions` | GET | List sessions |\n| `/api/sessions/:id` | GET/DELETE | Session CRUD |\n| `/ws/chat` | WS | Chat streaming |\n| `/ws/admin` | WS | Admin panel |\n| `/webhook/:plugin/:appId` | POST | Plugin webhooks |\n\n---\n\n## API Reference\n\n### Agent\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent(options?);\nawait agent.initialize();\n\n// Task execution\nconst result = await agent.dispatch(task: string, options?: DispatchOptions): Promise<DispatchResult>;\n\n// Provider management\nagent.useProvider(name: string, apiKey?: string): boolean;\nagent.listProviders(): ProviderConfig[];\nagent.listAllProviders(): Promise<PiCatalogProvider[]>;\nagent.listProviderModels(providerId: string): Promise<ModelSpec[]>;\n\n// Skill management\nagent.listSkills(): Skill[];\nagent.matchSkill(input: string): SkillMatchResult | null;\nagent.registerSkill(skill: Skill): void;\n\n// Session management\nawait agent.createSession(config?): Promise<Session>;\nawait agent.loadSession(sessionId: string): Promise<Session | null>;\nagent.getSessionMessages(): Message[];\n\n// Lifecycle\nawait agent.dispose();\n```\n\n### DispatchOptions\n\n```typescript\ninterface DispatchOptions {\n chatId?: string;\n cwd?: string;\n maxTurns?: number;\n modelId?: string; // Override model for this task\n systemPrompt?: string;\n abortSignal?: AbortSignal; // Cancel mid-execution\n onPhase?(phase: string, message: string): void;\n onText?(text: string): void;\n onTool?(tool: string, input?: unknown): void;\n onToolResult?(tool: string, result: unknown): void;\n onReasoning?(text: string): void;\n}\n```\n\n### DispatchResult\n\n```typescript\ninterface DispatchResult {\n text: string;\n success: boolean;\n duration: number; // ms\n tools: string[]; // tools used\n usage?: { input: number; output: number };\n cost?: { input: number; output: number; total: number };\n steps?: StepResult[];\n error?: string;\n}\n```\n\n---\n\n## Providers\n\n### Built-in Adapters\n\n| Adapter | Providers | Protocol |\n|:--------|:---------|:---------|\n| `AnthropicAdapter` | Claude (opus, sonnet, haiku) | Anthropic API |\n| `OpenAIAdapter` | GPT-4o, GPT-4-turbo | OpenAI API |\n| `GoogleAdapter` | Gemini | Google AI |\n| `OpenAICompatibleAdapter` | GLM, DeepSeek, Qwen, Kimi, ERNIE, OpenRouter, Groq, xAI, Mistral, LiteLLM | OpenAI-compatible |\n\n13 providers out of the box. Any OpenAI-compatible endpoint works with `baseUrl` + `apiKey` — no source changes needed.\n\n### Chinese LLM Presets\n\n| Provider | Model Examples | Notes |\n|:---------|:--------------|:------|\n| GLM (Zhipu) | glm-5, glm-4.7 | Long context, multimodal |\n| Qwen (Alibaba) | qwen3-max, qwen-plus | Alibaba Cloud |\n| DeepSeek | deepseek-chat, deepseek-reasoner | Cost-effective |\n| Kimi (Moonshot) | moonshot-v1-128k | Ultra-long context |\n| ERNIE (Baidu) | ernie-4.0-8k | Baidu |\n\n---\n\n## Hook System\n\nIntercept any lifecycle event with priority-based hooks:\n\n```typescript\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'bash') {\n return { proceed: false, error: 'bash is blocked in this environment' };\n }\n}, { priority: 'highest' });\n```\n\n### Available Hooks\n\n| Hook | Trigger |\n|:-----|:--------|\n| `session:start` / `end` / `error` | Session lifecycle |\n| `tool:before` / `after` | Tool execution (can block) |\n| `provider:beforeChange` / `afterChange` | Provider switching |\n| `timeout:stalled` / `health:heartbeat` | Health monitoring |\n| `agent:thinking` / `task:progress` | Agent introspection |\n| `notification:push` | Channel notifications |\n\n---\n\n<details>\n<summary><b>Project Structure</b></summary>\n\n```\nhive/\n├── packages/core/src/\n│ ├── agents/\n│ │ ├── core/\n│ │ │ ├── Agent.ts # Single entry point\n│ │ │ ├── AgentContext.ts # Shared context + hook registry\n│ │ │ ├── agents.ts # Worker definitions (explore/plan/general/schedule)\n│ │ │ └── PiAgentSessionAdapter.ts # pi createAgentSession adapter\n│ │ └── capabilities/\n│ │ ├── CoordinatorCapability.ts # LLM loop + worker orchestration\n│ │ ├── ProviderCapability.ts # Provider registry + AI SDK\n│ │ ├── SkillCapability.ts # Skill loading + matching\n│ │ ├── SessionCapability.ts # SQLite persistence\n│ │ ├── TimeoutCapability.ts # Heartbeat + stall detection\n│ │ └── ScheduleCapability.ts # Cron scheduling\n│ ├── providers/\n│ │ ├── ProviderManager.ts # Provider registry\n│ │ └── adapters/ # Anthropic, OpenAI, Google, OpenAI-compatible\n│ ├── tools/built-in/ # 14 tools (bash, file, glob, grep, web, etc.)\n│ ├── skills/ # SkillLoader, SkillMatcher, SkillRegistry\n│ ├── hooks/ # HookRegistry + types\n│ └── index.ts # Public API exports\n├── apps/server/src/\n│ ├── main.ts # Server entry\n│ └── gateway/ # Hono HTTP + WebSocket routes\n└── apps/desktop-electron/ # Electron 33 desktop app (React 19)\n```\n\n</details>\n\n---\n\n## Development\n\n| Command | Description |\n|:--------|:------------|\n| `pnpm install` | Install dependencies |\n| `pnpm -r build` | Build all packages |\n| `pnpm test` | Run tests (1,337 cases) |\n| `pnpm test:e2e` | E2E tests (requires API key) |\n| `pnpm --filter @bundy-lmw/hive-server start` | Start HTTP server |\n| `pnpm dev` | Build core/server and start the Electron desktop app |\n\n---\n\n## Vertical Pack System\n\nHive 支持通过 **Vertical Pack** 扩展任意垂直业务场景。一个 Vertical Pack 把场景所需的工具、子 Agent、技能、后台服务、生命周期钩子打包为一个声明式 npm 包,多个 pack 可共存且互不干扰。\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\nimport { LegalPack } from '@hive-pack/legal';\nimport { MedicalPack } from '@hive-pack/medical';\n\nconst agent = new Agent();\nagent.use(new LegalPack({ namespaced: true }));\nagent.use(new MedicalPack({ namespaced: true }));\nawait agent.initialize();\n```\n\n📖 完整文档:[docs/vertical-pack.md](docs/vertical-pack.md)\n\n特性:\n- **6 种扩展点**:工具 / 子 Agent / 技能 / 能力模块 / 钩子 / 生命周期\n- **运行时隔离**:冲突检测、命名空间前缀、单独卸载,多 pack 互不污染\n- **CLI 脚手架**:`npx hive-pack init <name>` 生成骨架\n- **npm 分发**:一个 pack 就是一个标准 npm 包\n\n---\n\n## FAQ\n\n<details>\n<summary><b>How does the Coordinator-Worker pattern work?</b></summary>\n\n`Agent.dispatch()` enters a Coordinator LLM loop. The Coordinator has 3 coordinator tools — `agent` (spawn worker), `task-stop` (cancel workers), and `send-message` (push to channels). For complex tasks, it autonomously spawns explore → plan → general workers. For simple queries, it responds directly without spawning any workers.\n\n</details>\n\n<details>\n<summary><b>How do I integrate into an existing project?</b></summary>\n\nInstall `@bundy-lmw/hive-core`, set env vars or pass `AgentInitOptions`, call `agent.dispatch()`. For an HTTP wrapper, use `@bundy-lmw/hive-server`.\n\n</details>\n\n<details>\n<summary><b>How do I add a custom channel?</b></summary>\n\nImplement the Plugin interface, publish as an npm package, and register via webhook route. See `@bundy-lmw/hive-plugin-feishu` as a reference.\n\n</details>\n\n<details>\n<summary><b>Can I use multiple providers simultaneously?</b></summary>\n\nYes. Configure multiple providers and switch at runtime with `agent.useProvider('name')`. Override per-task with `dispatch(task, { modelId: 'deepseek-chat' })`.\n\n</details>\n\n---\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n <a href=\"https://github.com/1695365384/hive/issues\">Issues</a> &middot;\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> &middot;\n <a href=\"https://github.com/1695365384/hive/blob/main/CONTRIBUTING.md\">Contributing</a>\n</p>\n"}, "09461ebf1617322e2e1e08fd903d6ac48e7fa046": {"t": 1785764576.7463567, "n": 13661, "h": "7ac18b5137a47466", "c": "<div align=\"center\">\n <p>\n <img src=\"logo-with-text.svg\" alt=\"Hive\" width=\"160\">\n </p>\n\n <p><strong>The Multi-Agent SDK for TypeScript</strong></p>\n <p>Coordinator-Worker architecture with built-in cost control, permission layers, and Chinese LLM support.</p>\n\n <p>\n <a href=\"#quick-start\">Quick Start</a> &middot;\n <a href=\"#architecture\">Architecture</a> &middot;\n <a href=\"#api-reference\">API</a> &middot;\n <a href=\"#vertical-pack-system\">Vertical Pack</a> &middot;\n <a href=\"#providers\">Providers</a> &middot;\n <a href=\"#faq\">FAQ</a>\n </p>\n\n <p>\n <code>npm i @bundy-lmw/hive-core</code>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.3+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/1337%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n\n <p><a href=\"./README.zh-CN.md\">中文文档</a></p>\n</div>\n\n---\n\n## Why Hive\n\n| Problem | Hive Approach |\n|:--------|:-------------|\n| Agent loops burn tokens on simple queries | Coordinator-Worker pattern — only spawn workers when needed |\n| Expensive models used for everything | Provider presets with per-task model selection via `DispatchOptions.modelId` |\n| Read-only operations can mutate files | Worker agents have enforced tool permissions (explore/plan = read-only, general = full access) |\n| Chinese LLMs need manual parameter hacking | 13 built-in provider adapters (GLM, DeepSeek, Qwen, Kimi, ERNIE, Claude, GPT, Gemini, etc.) |\n| Long-running agents go silent | Built-in heartbeat, stall detection, and abort signals |\n\n---\n\n## Quick Start\n\n### Install\n\n```bash\nnpm i @bundy-lmw/hive-core\n```\n\n### Configure\n\n```bash\nexport GLM_API_KEY=your-key\n# or: DEEPSEEK_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY\n```\n\n### Dispatch\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent();\nconst result = await agent.dispatch('Refactor the login module');\n// Coordinator spawns explore → plan → general workers automatically\n\nconsole.log(result.text); // Final output\nconsole.log(result.usage); // { input: 1234, output: 567 }\nconsole.log(result.tools); // ['glob', 'file', 'bash']\nconsole.log(result.duration); // ms\n```\n\n### Event Stream\n\n```typescript\nconst result = await agent.dispatch('Analyze the auth flow', {\n onPhase: (phase, msg) => console.log(`[${phase}] ${msg}`),\n onText: (text) => process.stdout.write(text),\n onTool: (tool, input) => console.log(`→ ${tool}`),\n onToolResult: (tool, result) => console.log(`← ${tool}`),\n onReasoning: (thought) => console.log(`[reasoning] ${thought}`),\n abortSignal: controller.signal,\n});\n```\n\n### HTTP Server\n\n```bash\npnpm --filter @bundy-lmw/hive-server start\n# POST http://localhost:4450/api/chat\n# WS ws://localhost:4450/ws/chat\n```\n\n---\n\n<div align=\"center\">\n <img src=\"docs/demo.gif\" alt=\"Hive Desktop Demo\" width=\"800\">\n</div>\n\n---\n\n## Architecture\n\nHive uses a **Coordinator-Worker** pattern. The `Agent` class is the single entry point. `dispatch()` delegates to `CoordinatorCapability`, which manages the LLM loop and spawns specialized **worker agents** as tools.\n\n<div align=\"center\">\n <img src=\"docs/architecture.svg\" alt=\"Hive System Architecture\" width=\"860\">\n</div>\n\n### Worker Agent Tool Permissions\n\n| Tool | explore | plan | general | schedule |\n|:-----|:--------|:-----|:--------|:---------|\n| `file` (read) | ✅ | ✅ | ✅ | — |\n| `glob` | ✅ | ✅ | ✅ | — |\n| `grep` | ✅ | ✅ | ✅ | — |\n| `web-search` | ✅ | ✅ | ✅ | — |\n| `web-fetch` | ✅ | ✅ | ✅ | — |\n| `env` | ✅ | ✅ | ✅ | — |\n| `bash` | — | — | ✅ | — |\n| `file` (write) | — | — | ✅ | — |\n| `ask-user` | — | — | ✅ | — |\n| `send-file` | — | — | ✅ | — |\n| `schedule` | — | — | — | ✅ |\n\n### Capabilities\n\n<div align=\"center\">\n\n<table style=\"border:none; margin: 0 auto;\">\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Coordinator</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">dispatch · worker orchestration · cost</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Provider</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">registry · switching · AI SDK</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Skill</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">loading · matching · instruction generation</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Session</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">SQLite persistence · multi-session</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Timeout</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">heartbeat · stall detection · abort</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Schedule</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">cron · task lifecycle</td>\n</tr>\n</table>\n\n</div>\n\n### Server (`@bundy-lmw/hive-server`)\n\nHono HTTP + WebSocket server wrapping the Agent SDK:\n\n| Route | Method | Description |\n|:------|:-------|:------------|\n| `/health` | GET | Health check |\n| `/api/chat` | POST | Chat endpoint |\n| `/api/sessions` | GET | List sessions |\n| `/api/sessions/:id` | GET/DELETE | Session CRUD |\n| `/ws/chat` | WS | Chat streaming |\n| `/ws/admin` | WS | Admin panel |\n| `/webhook/:plugin/:appId` | POST | Plugin webhooks |\n\n---\n\n## API Reference\n\n### Agent\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent(options?);\nawait agent.initialize();\n\n// Task execution\nconst result = await agent.dispatch(task: string, options?: DispatchOptions): Promise<DispatchResult>;\n\n// Provider management\nagent.useProvider(name: string, apiKey?: string): boolean;\nagent.listProviders(): ProviderConfig[];\nagent.listAllProviders(): Promise<PiCatalogProvider[]>;\nagent.listProviderModels(providerId: string): Promise<ModelSpec[]>;\n\n// Skill management\nagent.listSkills(): Skill[];\nagent.matchSkill(input: string): SkillMatchResult | null;\nagent.registerSkill(skill: Skill): void;\n\n// Session management\nawait agent.createSession(config?): Promise<Session>;\nawait agent.loadSession(sessionId: string): Promise<Session | null>;\nagent.getSessionMessages(): Message[];\n\n// Lifecycle\nawait agent.dispose();\n```\n\n### DispatchOptions\n\n```typescript\ninterface DispatchOptions {\n chatId?: string;\n cwd?: string;\n maxTurns?: number;\n modelId?: string; // Override model for this task\n systemPrompt?: string;\n abortSignal?: AbortSignal; // Cancel mid-execution\n onPhase?(phase: string, message: string): void;\n onText?(text: string): void;\n onTool?(tool: string, input?: unknown): void;\n onToolResult?(tool: string, result: unknown): void;\n onReasoning?(text: string): void;\n}\n```\n\n### DispatchResult\n\n```typescript\ninterface DispatchResult {\n text: string;\n success: boolean;\n duration: number; // ms\n tools: string[]; // tools used\n usage?: { input: number; output: number };\n cost?: { input: number; output: number; total: number };\n steps?: StepResult[];\n error?: string;\n}\n```\n\n---\n\n## Providers\n\n### Built-in Adapters\n\n| Adapter | Providers | Protocol |\n|:--------|:---------|:---------|\n| `AnthropicAdapter` | Claude (opus, sonnet, haiku) | Anthropic API |\n| `OpenAIAdapter` | GPT-4o, GPT-4-turbo | OpenAI API |\n| `GoogleAdapter` | Gemini | Google AI |\n| `OpenAICompatibleAdapter` | GLM, DeepSeek, Qwen, Kimi, ERNIE, OpenRouter, Groq, xAI, Mistral, LiteLLM | OpenAI-compatible |\n\n13 providers out of the box. Any OpenAI-compatible endpoint works with `baseUrl` + `apiKey` — no source changes needed.\n\n### Chinese LLM Presets\n\n| Provider | Model Examples | Notes |\n|:---------|:--------------|:------|\n| GLM (Zhipu) | glm-5, glm-4.7 | Long context, multimodal |\n| Qwen (Alibaba) | qwen3-max, qwen-plus | Alibaba Cloud |\n| DeepSeek | deepseek-chat, deepseek-reasoner | Cost-effective |\n| Kimi (Moonshot) | moonshot-v1-128k | Ultra-long context |\n| ERNIE (Baidu) | ernie-4.0-8k | Baidu |\n\n---\n\n## Hook System\n\nIntercept any lifecycle event with priority-based hooks:\n\n```typescript\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'bash') {\n return { proceed: false, error: 'bash is blocked in this environment' };\n }\n}, { priority: 'highest' });\n```\n\n### Available Hooks\n\n| Hook | Trigger |\n|:-----|:--------|\n| `session:start` / `end` / `error` | Session lifecycle |\n| `tool:before` / `after` | Tool execution (can block) |\n| `provider:beforeChange` / `afterChange` | Provider switching |\n| `timeout:stalled` / `health:heartbeat` | Health monitoring |\n| `agent:thinking` / `task:progress` | Agent introspection |\n| `notification:push` | Channel notifications |\n\n---\n\n<details>\n<summary><b>Project Structure</b></summary>\n\n```\nhive/\n├── packages/core/src/\n│ ├── agents/\n│ │ ├── core/\n│ │ │ ├── Agent.ts # Single entry point\n│ │ │ ├── AgentContext.ts # Shared context + hook registry\n│ │ │ ├── agents.ts # Worker definitions (explore/plan/general/schedule)\n│ │ │ └── PiAgentSessionAdapter.ts # pi createAgentSession adapter\n│ │ └── capabilities/\n│ │ ├── CoordinatorCapability.ts # LLM loop + worker orchestration\n│ │ ├── ProviderCapability.ts # Provider registry + AI SDK\n│ │ ├── SkillCapability.ts # Skill loading + matching\n│ │ ├── SessionCapability.ts # SQLite persistence\n│ │ ├── TimeoutCapability.ts # Heartbeat + stall detection\n│ │ └── ScheduleCapability.ts # Cron scheduling\n│ ├── providers/\n│ │ ├── ProviderManager.ts # Provider registry\n│ │ └── adapters/ # Anthropic, OpenAI, Google, OpenAI-compatible\n│ ├── tools/built-in/ # 14 tools (bash, file, glob, grep, web, etc.)\n│ ├── skills/ # SkillLoader, SkillMatcher, SkillRegistry\n│ ├── hooks/ # HookRegistry + types\n│ └── index.ts # Public API exports\n├── apps/server/src/\n│ ├── main.ts # Server entry\n│ └── gateway/ # Hono HTTP + WebSocket routes\n└── apps/desktop/ # Tauri 2 desktop app (React 19)\n```\n\n</details>\n\n---\n\n## Development\n\n| Command | Description |\n|:--------|:------------|\n| `pnpm install` | Install dependencies |\n| `pnpm -r build` | Build all packages |\n| `pnpm test` | Run tests (1,337 cases) |\n| `pnpm test:e2e` | E2E tests (requires API key) |\n| `pnpm --filter @bundy-lmw/hive-server start` | Start HTTP server |\n\n---\n\n## Vertical Pack System\n\nHive 支持通过 **Vertical Pack** 扩展任意垂直业务场景。一个 Vertical Pack 把场景所需的工具、子 Agent、技能、后台服务、生命周期钩子打包为一个声明式 npm 包,多个 pack 可共存且互不干扰。\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\nimport { LegalPack } from '@hive-pack/legal';\nimport { MedicalPack } from '@hive-pack/medical';\n\nconst agent = new Agent();\nagent.use(new LegalPack({ namespaced: true }));\nagent.use(new MedicalPack({ namespaced: true }));\nawait agent.initialize();\n```\n\n📖 完整文档:[docs/vertical-pack.md](docs/vertical-pack.md)\n\n特性:\n- **6 种扩展点**:工具 / 子 Agent / 技能 / 能力模块 / 钩子 / 生命周期\n- **运行时隔离**:冲突检测、命名空间前缀、单独卸载,多 pack 互不污染\n- **CLI 脚手架**:`npx hive-pack init <name>` 生成骨架\n- **npm 分发**:一个 pack 就是一个标准 npm 包\n\n---\n\n## FAQ\n\n<details>\n<summary><b>How does the Coordinator-Worker pattern work?</b></summary>\n\n`Agent.dispatch()` enters a Coordinator LLM loop. The Coordinator has 3 coordinator tools — `agent` (spawn worker), `task-stop` (cancel workers), and `send-message` (push to channels). For complex tasks, it autonomously spawns explore → plan → general workers. For simple queries, it responds directly without spawning any workers.\n\n</details>\n\n<details>\n<summary><b>How do I integrate into an existing project?</b></summary>\n\nInstall `@bundy-lmw/hive-core`, set env vars or pass `AgentInitOptions`, call `agent.dispatch()`. For an HTTP wrapper, use `@bundy-lmw/hive-server`.\n\n</details>\n\n<details>\n<summary><b>How do I add a custom channel?</b></summary>\n\nImplement the Plugin interface, publish as an npm package, and register via webhook route. See `@bundy-lmw/hive-plugin-feishu` as a reference.\n\n</details>\n\n<details>\n<summary><b>Can I use multiple providers simultaneously?</b></summary>\n\nYes. Configure multiple providers and switch at runtime with `agent.useProvider('name')`. Override per-task with `dispatch(task, { modelId: 'deepseek-chat' })`.\n\n</details>\n\n---\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n <a href=\"https://github.com/1695365384/hive/issues\">Issues</a> &middot;\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> &middot;\n <a href=\"https://github.com/1695365384/hive/blob/main/CONTRIBUTING.md\">Contributing</a>\n</p>\n"}, "c838e1b094eedaf7269b8773fcd51714ed65a379": {"t": 1785764578.3253872, "n": 13666, "h": "41d72b824b243e11", "c": "<div align=\"center\">\n <p>\n <img src=\"logo-with-text.svg\" alt=\"Hive\" width=\"160\">\n </p>\n\n <p><strong>The Multi-Agent SDK for TypeScript</strong></p>\n <p>Coordinator-Worker architecture with built-in cost control, permission layers, and Chinese LLM support.</p>\n\n <p>\n <a href=\"#quick-start\">Quick Start</a> &middot;\n <a href=\"#architecture\">Architecture</a> &middot;\n <a href=\"#api-reference\">API</a> &middot;\n <a href=\"#vertical-pack-system\">Vertical Pack</a> &middot;\n <a href=\"#providers\">Providers</a> &middot;\n <a href=\"#faq\">FAQ</a>\n </p>\n\n <p>\n <code>npm i @bundy-lmw/hive-core</code>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.3+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/1337%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n\n <p><a href=\"./README.zh-CN.md\">中文文档</a></p>\n</div>\n\n---\n\n## Why Hive\n\n| Problem | Hive Approach |\n|:--------|:-------------|\n| Agent loops burn tokens on simple queries | Coordinator-Worker pattern — only spawn workers when needed |\n| Expensive models used for everything | Provider presets with per-task model selection via `DispatchOptions.modelId` |\n| Read-only operations can mutate files | Worker agents have enforced tool permissions (explore/plan = read-only, general = full access) |\n| Chinese LLMs need manual parameter hacking | 13 built-in provider adapters (GLM, DeepSeek, Qwen, Kimi, ERNIE, Claude, GPT, Gemini, etc.) |\n| Long-running agents go silent | Built-in heartbeat, stall detection, and abort signals |\n\n---\n\n## Quick Start\n\n### Install\n\n```bash\nnpm i @bundy-lmw/hive-core\n```\n\n### Configure\n\n```bash\nexport GLM_API_KEY=your-key\n# or: DEEPSEEK_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY\n```\n\n### Dispatch\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent();\nconst result = await agent.dispatch('Refactor the login module');\n// Coordinator spawns explore → plan → general workers automatically\n\nconsole.log(result.text); // Final output\nconsole.log(result.usage); // { input: 1234, output: 567 }\nconsole.log(result.tools); // ['glob', 'file', 'bash']\nconsole.log(result.duration); // ms\n```\n\n### Event Stream\n\n```typescript\nconst result = await agent.dispatch('Analyze the auth flow', {\n onPhase: (phase, msg) => console.log(`[${phase}] ${msg}`),\n onText: (text) => process.stdout.write(text),\n onTool: (tool, input) => console.log(`→ ${tool}`),\n onToolResult: (tool, result) => console.log(`← ${tool}`),\n onReasoning: (thought) => console.log(`[reasoning] ${thought}`),\n abortSignal: controller.signal,\n});\n```\n\n### HTTP Server\n\n```bash\npnpm --filter @bundy-lmw/hive-server start\n# POST http://localhost:4450/api/chat\n# WS ws://localhost:4450/ws/chat\n```\n\n---\n\n<div align=\"center\">\n <img src=\"docs/demo.gif\" alt=\"Hive Desktop Demo\" width=\"800\">\n</div>\n\n---\n\n## Architecture\n\nHive uses a **Coordinator-Worker** pattern. The `Agent` class is the single entry point. `dispatch()` delegates to `CoordinatorCapability`, which manages the LLM loop and spawns specialized **worker agents** as tools.\n\n<div align=\"center\">\n <img src=\"docs/architecture.svg\" alt=\"Hive System Architecture\" width=\"860\">\n</div>\n\n### Worker Agent Tool Permissions\n\n| Tool | explore | plan | general | schedule |\n|:-----|:--------|:-----|:--------|:---------|\n| `file` (read) | ✅ | ✅ | ✅ | — |\n| `glob` | ✅ | ✅ | ✅ | — |\n| `grep` | ✅ | ✅ | ✅ | — |\n| `web-search` | ✅ | ✅ | ✅ | — |\n| `web-fetch` | ✅ | ✅ | ✅ | — |\n| `env` | ✅ | ✅ | ✅ | — |\n| `bash` | — | — | ✅ | — |\n| `file` (write) | — | — | ✅ | — |\n| `ask-user` | — | — | ✅ | — |\n| `send-file` | — | — | ✅ | — |\n| `schedule` | — | — | — | ✅ |\n\n### Capabilities\n\n<div align=\"center\">\n\n<table style=\"border:none; margin: 0 auto;\">\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Coordinator</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">dispatch · worker orchestration · cost</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Provider</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">registry · switching · AI SDK</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Skill</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">loading · matching · instruction generation</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Session</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">SQLite persistence · multi-session</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Timeout</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">heartbeat · stall detection · abort</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Schedule</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">cron · task lifecycle</td>\n</tr>\n</table>\n\n</div>\n\n### Server (`@bundy-lmw/hive-server`)\n\nHono HTTP + WebSocket server wrapping the Agent SDK:\n\n| Route | Method | Description |\n|:------|:-------|:------------|\n| `/health` | GET | Health check |\n| `/api/chat` | POST | Chat endpoint |\n| `/api/sessions` | GET | List sessions |\n| `/api/sessions/:id` | GET/DELETE | Session CRUD |\n| `/ws/chat` | WS | Chat streaming |\n| `/ws/admin` | WS | Admin panel |\n| `/webhook/:plugin/:appId` | POST | Plugin webhooks |\n\n---\n\n## API Reference\n\n### Agent\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent(options?);\nawait agent.initialize();\n\n// Task execution\nconst result = await agent.dispatch(task: string, options?: DispatchOptions): Promise<DispatchResult>;\n\n// Provider management\nagent.useProvider(name: string, apiKey?: string): boolean;\nagent.listProviders(): ProviderConfig[];\nagent.listAllProviders(): Promise<ModelsDevProvider[]>;\nagent.listProviderModels(providerId: string): Promise<ModelSpec[]>;\n\n// Skill management\nagent.listSkills(): Skill[];\nagent.matchSkill(input: string): SkillMatchResult | null;\nagent.registerSkill(skill: Skill): void;\n\n// Session management\nawait agent.createSession(config?): Promise<Session>;\nawait agent.loadSession(sessionId: string): Promise<Session | null>;\nagent.getSessionMessages(): Message[];\n\n// Lifecycle\nawait agent.dispose();\n```\n\n### DispatchOptions\n\n```typescript\ninterface DispatchOptions {\n chatId?: string;\n cwd?: string;\n maxTurns?: number;\n modelId?: string; // Override model for this task\n systemPrompt?: string;\n abortSignal?: AbortSignal; // Cancel mid-execution\n onPhase?(phase: string, message: string): void;\n onText?(text: string): void;\n onTool?(tool: string, input?: unknown): void;\n onToolResult?(tool: string, result: unknown): void;\n onReasoning?(text: string): void;\n}\n```\n\n### DispatchResult\n\n```typescript\ninterface DispatchResult {\n text: string;\n success: boolean;\n duration: number; // ms\n tools: string[]; // tools used\n usage?: { input: number; output: number };\n cost?: { input: number; output: number; total: number };\n steps?: StepResult[];\n error?: string;\n}\n```\n\n---\n\n## Providers\n\n### Built-in Adapters\n\n| Adapter | Providers | Protocol |\n|:--------|:---------|:---------|\n| `AnthropicAdapter` | Claude (opus, sonnet, haiku) | Anthropic API |\n| `OpenAIAdapter` | GPT-4o, GPT-4-turbo | OpenAI API |\n| `GoogleAdapter` | Gemini | Google AI |\n| `OpenAICompatibleAdapter` | GLM, DeepSeek, Qwen, Kimi, ERNIE, OpenRouter, Groq, xAI, Mistral, LiteLLM | OpenAI-compatible |\n\n13 providers out of the box. Any OpenAI-compatible endpoint works with `baseUrl` + `apiKey` — no source changes needed.\n\n### Chinese LLM Presets\n\n| Provider | Model Examples | Notes |\n|:---------|:--------------|:------|\n| GLM (Zhipu) | glm-5, glm-4.7 | Long context, multimodal |\n| Qwen (Alibaba) | qwen3-max, qwen-plus | Alibaba Cloud |\n| DeepSeek | deepseek-chat, deepseek-reasoner | Cost-effective |\n| Kimi (Moonshot) | moonshot-v1-128k | Ultra-long context |\n| ERNIE (Baidu) | ernie-4.0-8k | Baidu |\n\n---\n\n## Hook System\n\nIntercept any lifecycle event with priority-based hooks:\n\n```typescript\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'bash') {\n return { proceed: false, error: 'bash is blocked in this environment' };\n }\n}, { priority: 'highest' });\n```\n\n### Available Hooks\n\n| Hook | Trigger |\n|:-----|:--------|\n| `session:start` / `end` / `error` | Session lifecycle |\n| `tool:before` / `after` | Tool execution (can block) |\n| `provider:beforeChange` / `afterChange` | Provider switching |\n| `timeout:stalled` / `health:heartbeat` | Health monitoring |\n| `agent:thinking` / `task:progress` | Agent introspection |\n| `notification:push` | Channel notifications |\n\n---\n\n<details>\n<summary><b>Project Structure</b></summary>\n\n```\nhive/\n├── packages/core/src/\n│ ├── agents/\n│ │ ├── core/\n│ │ │ ├── Agent.ts # Single entry point\n│ │ │ ├── AgentContext.ts # Shared context + hook registry\n│ │ │ ├── agents.ts # Worker definitions (explore/plan/general/schedule)\n│ │ │ └── runner.ts # AgentRunner — worker execution engine\n│ │ └── capabilities/\n│ │ ├── CoordinatorCapability.ts # LLM loop + worker orchestration\n│ │ ├── ProviderCapability.ts # Provider registry + AI SDK\n│ │ ├── SkillCapability.ts # Skill loading + matching\n│ │ ├── SessionCapability.ts # SQLite persistence\n│ │ ├── TimeoutCapability.ts # Heartbeat + stall detection\n│ │ └── ScheduleCapability.ts # Cron scheduling\n│ ├── providers/\n│ │ ├── ProviderManager.ts # Provider registry\n│ │ └── adapters/ # Anthropic, OpenAI, Google, OpenAI-compatible\n│ ├── tools/built-in/ # 14 tools (bash, file, glob, grep, web, etc.)\n│ ├── skills/ # SkillLoader, SkillMatcher, SkillRegistry\n│ ├── hooks/ # HookRegistry + types\n│ └── index.ts # Public API exports\n├── apps/server/src/\n│ ├── main.ts # Server entry\n│ └── gateway/ # Hono HTTP + WebSocket routes\n└── apps/desktop/ # Tauri 2 desktop app (React 19)\n```\n\n</details>\n\n---\n\n## Development\n\n| Command | Description |\n|:--------|:------------|\n| `pnpm install` | Install dependencies |\n| `pnpm -r build` | Build all packages |\n| `pnpm test` | Run tests (1,337 cases) |\n| `pnpm test:e2e` | E2E tests (requires API key) |\n| `pnpm --filter @bundy-lmw/hive-server start` | Start HTTP server |\n\n---\n\n## Vertical Pack System\n\nHive 支持通过 **Vertical Pack** 扩展任意垂直业务场景。一个 Vertical Pack 把场景所需的工具、子 Agent、技能、后台服务、生命周期钩子打包为一个声明式 npm 包,多个 pack 可共存且互不干扰。\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\nimport { LegalPack } from '@hive-pack/legal';\nimport { MedicalPack } from '@hive-pack/medical';\n\nconst agent = new Agent();\nagent.use(new LegalPack({ namespaced: true }));\nagent.use(new MedicalPack({ namespaced: true }));\nawait agent.initialize();\n```\n\n📖 完整文档:[docs/vertical-pack.md](docs/vertical-pack.md)\n\n特性:\n- **6 种扩展点**:工具 / 子 Agent / 技能 / 能力模块 / 钩子 / 生命周期\n- **运行时隔离**:冲突检测、命名空间前缀、单独卸载,多 pack 互不污染\n- **CLI 脚手架**:`npx hive-pack init <name>` 生成骨架\n- **npm 分发**:一个 pack 就是一个标准 npm 包\n\n---\n\n## FAQ\n\n<details>\n<summary><b>How does the Coordinator-Worker pattern work?</b></summary>\n\n`Agent.dispatch()` enters a Coordinator LLM loop. The Coordinator has 3 coordinator tools — `agent` (spawn worker), `task-stop` (cancel workers), and `send-message` (push to channels). For complex tasks, it autonomously spawns explore → plan → general workers. For simple queries, it responds directly without spawning any workers.\n\n</details>\n\n<details>\n<summary><b>How do I integrate into an existing project?</b></summary>\n\nInstall `@bundy-lmw/hive-core`, set env vars or pass `AgentInitOptions`, call `agent.dispatch()`. For an HTTP wrapper, use `@bundy-lmw/hive-server`.\n\n</details>\n\n<details>\n<summary><b>How do I add a custom channel?</b></summary>\n\nImplement the Plugin interface, publish as an npm package, and register via webhook route. See `@bundy-lmw/hive-plugin-feishu` as a reference.\n\n</details>\n\n<details>\n<summary><b>Can I use multiple providers simultaneously?</b></summary>\n\nYes. Configure multiple providers and switch at runtime with `agent.useProvider('name')`. Override per-task with `dispatch(task, { modelId: 'deepseek-chat' })`.\n\n</details>\n\n---\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n <a href=\"https://github.com/1695365384/hive/issues\">Issues</a> &middot;\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> &middot;\n <a href=\"https://github.com/1695365384/hive/blob/main/CONTRIBUTING.md\">Contributing</a>\n</p>\n"}, "cefece7bbc4945887d9cb0160acbcdb77c3a8261": {"t": 1785764579.7218134, "n": 12907, "h": "8e6d9fbf4030a135", "c": "<div align=\"center\">\n <p>\n <img src=\"logo-with-text.svg\" alt=\"Hive\" width=\"160\">\n </p>\n\n <p><strong>The Multi-Agent SDK for TypeScript</strong></p>\n <p>Coordinator-Worker architecture with built-in cost control, permission layers, and Chinese LLM support.</p>\n\n <p>\n <a href=\"#quick-start\">Quick Start</a> &middot;\n <a href=\"#architecture\">Architecture</a> &middot;\n <a href=\"#api-reference\">API</a> &middot;\n <a href=\"#providers\">Providers</a> &middot;\n <a href=\"#faq\">FAQ</a>\n </p>\n\n <p>\n <code>npm i @bundy-lmw/hive-core</code>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.3+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/1337%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n\n <p><a href=\"./README.zh-CN.md\">中文文档</a></p>\n</div>\n\n---\n\n## Why Hive\n\n| Problem | Hive Approach |\n|:--------|:-------------|\n| Agent loops burn tokens on simple queries | Coordinator-Worker pattern — only spawn workers when needed |\n| Expensive models used for everything | Provider presets with per-task model selection via `DispatchOptions.modelId` |\n| Read-only operations can mutate files | Worker agents have enforced tool permissions (explore/plan = read-only, general = full access) |\n| Chinese LLMs need manual parameter hacking | 13 built-in provider adapters (GLM, DeepSeek, Qwen, Kimi, ERNIE, Claude, GPT, Gemini, etc.) |\n| Long-running agents go silent | Built-in heartbeat, stall detection, and abort signals |\n\n---\n\n## Quick Start\n\n### Install\n\n```bash\nnpm i @bundy-lmw/hive-core\n```\n\n### Configure\n\n```bash\nexport GLM_API_KEY=your-key\n# or: DEEPSEEK_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY\n```\n\n### Dispatch\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent();\nconst result = await agent.dispatch('Refactor the login module');\n// Coordinator spawns explore → plan → general workers automatically\n\nconsole.log(result.text); // Final output\nconsole.log(result.usage); // { input: 1234, output: 567 }\nconsole.log(result.tools); // ['glob', 'file', 'bash']\nconsole.log(result.duration); // ms\n```\n\n### Event Stream\n\n```typescript\nconst result = await agent.dispatch('Analyze the auth flow', {\n onPhase: (phase, msg) => console.log(`[${phase}] ${msg}`),\n onText: (text) => process.stdout.write(text),\n onTool: (tool, input) => console.log(`→ ${tool}`),\n onToolResult: (tool, result) => console.log(`← ${tool}`),\n onReasoning: (thought) => console.log(`[reasoning] ${thought}`),\n abortSignal: controller.signal,\n});\n```\n\n### HTTP Server\n\n```bash\npnpm --filter @bundy-lmw/hive-server start\n# POST http://localhost:4450/api/chat\n# WS ws://localhost:4450/ws/chat\n```\n\n---\n\n<div align=\"center\">\n <img src=\"docs/demo.gif\" alt=\"Hive Desktop Demo\" width=\"800\">\n</div>\n\n---\n\n## Architecture\n\nHive uses a **Coordinator-Worker** pattern. The `Agent` class is the single entry point. `dispatch()` delegates to `CoordinatorCapability`, which manages the LLM loop and spawns specialized **worker agents** as tools.\n\n<div align=\"center\">\n <img src=\"docs/architecture.svg\" alt=\"Hive System Architecture\" width=\"860\">\n</div>\n\n### Worker Agent Tool Permissions\n\n| Tool | explore | plan | general | schedule |\n|:-----|:--------|:-----|:--------|:---------|\n| `file` (read) | ✅ | ✅ | ✅ | — |\n| `glob` | ✅ | ✅ | ✅ | — |\n| `grep` | ✅ | ✅ | ✅ | — |\n| `web-search` | ✅ | ✅ | ✅ | — |\n| `web-fetch` | ✅ | ✅ | ✅ | — |\n| `env` | ✅ | ✅ | ✅ | — |\n| `bash` | — | — | ✅ | — |\n| `file` (write) | — | — | ✅ | — |\n| `ask-user` | — | — | ✅ | — |\n| `send-file` | — | — | ✅ | — |\n| `schedule` | — | — | — | ✅ |\n\n### Capabilities\n\n<div align=\"center\">\n\n<table style=\"border:none; margin: 0 auto;\">\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Coordinator</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">dispatch · worker orchestration · cost</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Provider</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">registry · switching · AI SDK</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Skill</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">loading · matching · instruction generation</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Session</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">SQLite persistence · multi-session</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Timeout</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">heartbeat · stall detection · abort</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Schedule</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">cron · task lifecycle</td>\n</tr>\n</table>\n\n</div>\n\n### Server (`@bundy-lmw/hive-server`)\n\nHono HTTP + WebSocket server wrapping the Agent SDK:\n\n| Route | Method | Description |\n|:------|:-------|:------------|\n| `/health` | GET | Health check |\n| `/api/chat` | POST | Chat endpoint |\n| `/api/sessions` | GET | List sessions |\n| `/api/sessions/:id` | GET/DELETE | Session CRUD |\n| `/ws/chat` | WS | Chat streaming |\n| `/ws/admin` | WS | Admin panel |\n| `/webhook/:plugin/:appId` | POST | Plugin webhooks |\n\n---\n\n## API Reference\n\n### Agent\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent(options?);\nawait agent.initialize();\n\n// Task execution\nconst result = await agent.dispatch(task: string, options?: DispatchOptions): Promise<DispatchResult>;\n\n// Provider management\nagent.useProvider(name: string, apiKey?: string): boolean;\nagent.listProviders(): ProviderConfig[];\nagent.listAllProviders(): Promise<ModelsDevProvider[]>;\nagent.listProviderModels(providerId: string): Promise<ModelSpec[]>;\n\n// Skill management\nagent.listSkills(): Skill[];\nagent.matchSkill(input: string): SkillMatchResult | null;\nagent.registerSkill(skill: Skill): void;\n\n// Session management\nawait agent.createSession(config?): Promise<Session>;\nawait agent.loadSession(sessionId: string): Promise<Session | null>;\nagent.getSessionMessages(): Message[];\n\n// Lifecycle\nawait agent.dispose();\n```\n\n### DispatchOptions\n\n```typescript\ninterface DispatchOptions {\n chatId?: string;\n cwd?: string;\n maxTurns?: number;\n modelId?: string; // Override model for this task\n systemPrompt?: string;\n abortSignal?: AbortSignal; // Cancel mid-execution\n onPhase?(phase: string, message: string): void;\n onText?(text: string): void;\n onTool?(tool: string, input?: unknown): void;\n onToolResult?(tool: string, result: unknown): void;\n onReasoning?(text: string): void;\n}\n```\n\n### DispatchResult\n\n```typescript\ninterface DispatchResult {\n text: string;\n success: boolean;\n duration: number; // ms\n tools: string[]; // tools used\n usage?: { input: number; output: number };\n cost?: { input: number; output: number; total: number };\n steps?: StepResult[];\n error?: string;\n}\n```\n\n---\n\n## Providers\n\n### Built-in Adapters\n\n| Adapter | Providers | Protocol |\n|:--------|:---------|:---------|\n| `AnthropicAdapter` | Claude (opus, sonnet, haiku) | Anthropic API |\n| `OpenAIAdapter` | GPT-4o, GPT-4-turbo | OpenAI API |\n| `GoogleAdapter` | Gemini | Google AI |\n| `OpenAICompatibleAdapter` | GLM, DeepSeek, Qwen, Kimi, ERNIE, OpenRouter, Groq, xAI, Mistral, LiteLLM | OpenAI-compatible |\n\n13 providers out of the box. Any OpenAI-compatible endpoint works with `baseUrl` + `apiKey` — no source changes needed.\n\n### Chinese LLM Presets\n\n| Provider | Model Examples | Notes |\n|:---------|:--------------|:------|\n| GLM (Zhipu) | glm-5, glm-4.7 | Long context, multimodal |\n| Qwen (Alibaba) | qwen3-max, qwen-plus | Alibaba Cloud |\n| DeepSeek | deepseek-chat, deepseek-reasoner | Cost-effective |\n| Kimi (Moonshot) | moonshot-v1-128k | Ultra-long context |\n| ERNIE (Baidu) | ernie-4.0-8k | Baidu |\n\n---\n\n## Hook System\n\nIntercept any lifecycle event with priority-based hooks:\n\n```typescript\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'bash') {\n return { proceed: false, error: 'bash is blocked in this environment' };\n }\n}, { priority: 'highest' });\n```\n\n### Available Hooks\n\n| Hook | Trigger |\n|:-----|:--------|\n| `session:start` / `end` / `error` | Session lifecycle |\n| `tool:before` / `after` | Tool execution (can block) |\n| `provider:beforeChange` / `afterChange` | Provider switching |\n| `timeout:stalled` / `health:heartbeat` | Health monitoring |\n| `agent:thinking` / `task:progress` | Agent introspection |\n| `notification:push` | Channel notifications |\n\n---\n\n<details>\n<summary><b>Project Structure</b></summary>\n\n```\nhive/\n├── packages/core/src/\n│ ├── agents/\n│ │ ├── core/\n│ │ │ ├── Agent.ts # Single entry point\n│ │ │ ├── AgentContext.ts # Shared context + hook registry\n│ │ │ ├── agents.ts # Worker definitions (explore/plan/general/schedule)\n│ │ │ └── runner.ts # AgentRunner — worker execution engine\n│ │ └── capabilities/\n│ │ ├── CoordinatorCapability.ts # LLM loop + worker orchestration\n│ │ ├── ProviderCapability.ts # Provider registry + AI SDK\n│ │ ├── SkillCapability.ts # Skill loading + matching\n│ │ ├── SessionCapability.ts # SQLite persistence\n│ │ ├── TimeoutCapability.ts # Heartbeat + stall detection\n│ │ └── ScheduleCapability.ts # Cron scheduling\n│ ├── providers/\n│ │ ├── ProviderManager.ts # Provider registry\n│ │ └── adapters/ # Anthropic, OpenAI, Google, OpenAI-compatible\n│ ├── tools/built-in/ # 14 tools (bash, file, glob, grep, web, etc.)\n│ ├── skills/ # SkillLoader, SkillMatcher, SkillRegistry\n│ ├── hooks/ # HookRegistry + types\n│ └── index.ts # Public API exports\n├── apps/server/src/\n│ ├── main.ts # Server entry\n│ └── gateway/ # Hono HTTP + WebSocket routes\n└── apps/desktop/ # Tauri 2 desktop app (React 19)\n```\n\n</details>\n\n---\n\n## Development\n\n| Command | Description |\n|:--------|:------------|\n| `pnpm install` | Install dependencies |\n| `pnpm -r build` | Build all packages |\n| `pnpm test` | Run tests (1,337 cases) |\n| `pnpm test:e2e` | E2E tests (requires API key) |\n| `pnpm --filter @bundy-lmw/hive-server start` | Start HTTP server |\n\n---\n\n## FAQ\n\n<details>\n<summary><b>How does the Coordinator-Worker pattern work?</b></summary>\n\n`Agent.dispatch()` enters a Coordinator LLM loop. The Coordinator has 3 coordinator tools — `agent` (spawn worker), `task-stop` (cancel workers), and `send-message` (push to channels). For complex tasks, it autonomously spawns explore → plan → general workers. For simple queries, it responds directly without spawning any workers.\n\n</details>\n\n<details>\n<summary><b>How do I integrate into an existing project?</b></summary>\n\nInstall `@bundy-lmw/hive-core`, set env vars or pass `AgentInitOptions`, call `agent.dispatch()`. For an HTTP wrapper, use `@bundy-lmw/hive-server`.\n\n</details>\n\n<details>\n<summary><b>How do I add a custom channel?</b></summary>\n\nImplement the Plugin interface, publish as an npm package, and register via webhook route. See `@bundy-lmw/hive-plugin-feishu` as a reference.\n\n</details>\n\n<details>\n<summary><b>Can I use multiple providers simultaneously?</b></summary>\n\nYes. Configure multiple providers and switch at runtime with `agent.useProvider('name')`. Override per-task with `dispatch(task, { modelId: 'deepseek-chat' })`.\n\n</details>\n\n---\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n <a href=\"https://github.com/1695365384/hive/issues\">Issues</a> &middot;\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> &middot;\n <a href=\"https://github.com/1695365384/hive/blob/main/CONTRIBUTING.md\">Contributing</a>\n</p>\n"}, "a9b40b3a75f622138473bd7c2b884f7729d9432e": {"t": 1785764581.4156013, "n": 12857, "h": "318d4b7270553fdb", "c": "<div align=\"center\">\n <p>\n <img src=\"logo-with-text.svg\" alt=\"Hive\" width=\"160\">\n </p>\n\n <p><strong>The Multi-Agent SDK for TypeScript</strong></p>\n <p>Coordinator-Worker architecture with built-in cost control, permission layers, and Chinese LLM support.</p>\n\n <p>\n <a href=\"#quick-start\">Quick Start</a> &middot;\n <a href=\"#architecture\">Architecture</a> &middot;\n <a href=\"#api-reference\">API</a> &middot;\n <a href=\"#providers\">Providers</a> &middot;\n <a href=\"#faq\">FAQ</a>\n </p>\n\n <p>\n <code>npm i @bundy-lmw/hive-core</code>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.3+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/1337%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n\n <p><a href=\"./README.zh-CN.md\">中文文档</a></p>\n</div>\n\n---\n\n## Why Hive\n\n| Problem | Hive Approach |\n|:--------|:-------------|\n| Agent loops burn tokens on simple queries | Coordinator-Worker pattern — only spawn workers when needed |\n| Expensive models used for everything | Provider presets with per-task model selection via `DispatchOptions.modelId` |\n| Read-only operations can mutate files | Worker agents have enforced tool permissions (explore/plan = read-only, general = full access) |\n| Chinese LLMs need manual parameter hacking | 13 built-in provider adapters (GLM, DeepSeek, Qwen, Kimi, ERNIE, Claude, GPT, Gemini, etc.) |\n| Long-running agents go silent | Built-in heartbeat, stall detection, and abort signals |\n\n---\n\n## Quick Start\n\n### Install\n\n```bash\nnpm i @bundy-lmw/hive-core\n```\n\n### Configure\n\n```bash\nexport GLM_API_KEY=your-key\n# or: DEEPSEEK_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY\n```\n\n### Dispatch\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent();\nconst result = await agent.dispatch('Refactor the login module');\n// Coordinator spawns explore → plan → general workers automatically\n\nconsole.log(result.text); // Final output\nconsole.log(result.usage); // { input: 1234, output: 567 }\nconsole.log(result.tools); // ['glob', 'file', 'bash']\nconsole.log(result.duration); // ms\n```\n\n### Event Stream\n\n```typescript\nconst result = await agent.dispatch('Analyze the auth flow', {\n onPhase: (phase, msg) => console.log(`[${phase}] ${msg}`),\n onText: (text) => process.stdout.write(text),\n onTool: (tool, input) => console.log(`→ ${tool}`),\n onToolResult: (tool, result) => console.log(`← ${tool}`),\n onReasoning: (thought) => console.log(`[reasoning] ${thought}`),\n abortSignal: controller.signal,\n});\n```\n\n### HTTP Server\n\n```bash\npnpm --filter @bundy-lmw/hive-server start\n# POST http://localhost:4450/api/chat\n# WS ws://localhost:4450/ws/chat\n```\n\n---\n\n<!-- TODO: Add workflow demo GIF here -->\n\n---\n\n## Architecture\n\nHive uses a **Coordinator-Worker** pattern. The `Agent` class is the single entry point. `dispatch()` delegates to `CoordinatorCapability`, which manages the LLM loop and spawns specialized **worker agents** as tools.\n\n<div align=\"center\">\n <img src=\"docs/architecture.svg\" alt=\"Hive System Architecture\" width=\"860\">\n</div>\n\n### Worker Agent Tool Permissions\n\n| Tool | explore | plan | general | schedule |\n|:-----|:--------|:-----|:--------|:---------|\n| `file` (read) | ✅ | ✅ | ✅ | — |\n| `glob` | ✅ | ✅ | ✅ | — |\n| `grep` | ✅ | ✅ | ✅ | — |\n| `web-search` | ✅ | ✅ | ✅ | — |\n| `web-fetch` | ✅ | ✅ | ✅ | — |\n| `env` | ✅ | ✅ | ✅ | — |\n| `bash` | — | — | ✅ | — |\n| `file` (write) | — | — | ✅ | — |\n| `ask-user` | — | — | ✅ | — |\n| `send-file` | — | — | ✅ | — |\n| `schedule` | — | — | — | ✅ |\n\n### Capabilities\n\n<div align=\"center\">\n\n<table style=\"border:none; margin: 0 auto;\">\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Coordinator</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">dispatch · worker orchestration · cost</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Provider</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">registry · switching · AI SDK</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Skill</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">loading · matching · instruction generation</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Session</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">SQLite persistence · multi-session</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Timeout</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">heartbeat · stall detection · abort</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Schedule</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">cron · task lifecycle</td>\n</tr>\n</table>\n\n</div>\n\n### Server (`@bundy-lmw/hive-server`)\n\nHono HTTP + WebSocket server wrapping the Agent SDK:\n\n| Route | Method | Description |\n|:------|:-------|:------------|\n| `/health` | GET | Health check |\n| `/api/chat` | POST | Chat endpoint |\n| `/api/sessions` | GET | List sessions |\n| `/api/sessions/:id` | GET/DELETE | Session CRUD |\n| `/ws/chat` | WS | Chat streaming |\n| `/ws/admin` | WS | Admin panel |\n| `/webhook/:plugin/:appId` | POST | Plugin webhooks |\n\n---\n\n## API Reference\n\n### Agent\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent(options?);\nawait agent.initialize();\n\n// Task execution\nconst result = await agent.dispatch(task: string, options?: DispatchOptions): Promise<DispatchResult>;\n\n// Provider management\nagent.useProvider(name: string, apiKey?: string): boolean;\nagent.listProviders(): ProviderConfig[];\nagent.listAllProviders(): Promise<ModelsDevProvider[]>;\nagent.listProviderModels(providerId: string): Promise<ModelSpec[]>;\n\n// Skill management\nagent.listSkills(): Skill[];\nagent.matchSkill(input: string): SkillMatchResult | null;\nagent.registerSkill(skill: Skill): void;\n\n// Session management\nawait agent.createSession(config?): Promise<Session>;\nawait agent.loadSession(sessionId: string): Promise<Session | null>;\nagent.getSessionMessages(): Message[];\n\n// Lifecycle\nawait agent.dispose();\n```\n\n### DispatchOptions\n\n```typescript\ninterface DispatchOptions {\n chatId?: string;\n cwd?: string;\n maxTurns?: number;\n modelId?: string; // Override model for this task\n systemPrompt?: string;\n abortSignal?: AbortSignal; // Cancel mid-execution\n onPhase?(phase: string, message: string): void;\n onText?(text: string): void;\n onTool?(tool: string, input?: unknown): void;\n onToolResult?(tool: string, result: unknown): void;\n onReasoning?(text: string): void;\n}\n```\n\n### DispatchResult\n\n```typescript\ninterface DispatchResult {\n text: string;\n success: boolean;\n duration: number; // ms\n tools: string[]; // tools used\n usage?: { input: number; output: number };\n cost?: { input: number; output: number; total: number };\n steps?: StepResult[];\n error?: string;\n}\n```\n\n---\n\n## Providers\n\n### Built-in Adapters\n\n| Adapter | Providers | Protocol |\n|:--------|:---------|:---------|\n| `AnthropicAdapter` | Claude (opus, sonnet, haiku) | Anthropic API |\n| `OpenAIAdapter` | GPT-4o, GPT-4-turbo | OpenAI API |\n| `GoogleAdapter` | Gemini | Google AI |\n| `OpenAICompatibleAdapter` | GLM, DeepSeek, Qwen, Kimi, ERNIE, OpenRouter, Groq, xAI, Mistral, LiteLLM | OpenAI-compatible |\n\n13 providers out of the box. Any OpenAI-compatible endpoint works with `baseUrl` + `apiKey` — no source changes needed.\n\n### Chinese LLM Presets\n\n| Provider | Model Examples | Notes |\n|:---------|:--------------|:------|\n| GLM (Zhipu) | glm-5, glm-4.7 | Long context, multimodal |\n| Qwen (Alibaba) | qwen3-max, qwen-plus | Alibaba Cloud |\n| DeepSeek | deepseek-chat, deepseek-reasoner | Cost-effective |\n| Kimi (Moonshot) | moonshot-v1-128k | Ultra-long context |\n| ERNIE (Baidu) | ernie-4.0-8k | Baidu |\n\n---\n\n## Hook System\n\nIntercept any lifecycle event with priority-based hooks:\n\n```typescript\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'bash') {\n return { proceed: false, error: 'bash is blocked in this environment' };\n }\n}, { priority: 'highest' });\n```\n\n### Available Hooks\n\n| Hook | Trigger |\n|:-----|:--------|\n| `session:start` / `end` / `error` | Session lifecycle |\n| `tool:before` / `after` | Tool execution (can block) |\n| `provider:beforeChange` / `afterChange` | Provider switching |\n| `timeout:stalled` / `health:heartbeat` | Health monitoring |\n| `agent:thinking` / `task:progress` | Agent introspection |\n| `notification:push` | Channel notifications |\n\n---\n\n<details>\n<summary><b>Project Structure</b></summary>\n\n```\nhive/\n├── packages/core/src/\n│ ├── agents/\n│ │ ├── core/\n│ │ │ ├── Agent.ts # Single entry point\n│ │ │ ├── AgentContext.ts # Shared context + hook registry\n│ │ │ ├── agents.ts # Worker definitions (explore/plan/general/schedule)\n│ │ │ └── runner.ts # AgentRunner — worker execution engine\n│ │ └── capabilities/\n│ │ ├── CoordinatorCapability.ts # LLM loop + worker orchestration\n│ │ ├── ProviderCapability.ts # Provider registry + AI SDK\n│ │ ├── SkillCapability.ts # Skill loading + matching\n│ │ ├── SessionCapability.ts # SQLite persistence\n│ │ ├── TimeoutCapability.ts # Heartbeat + stall detection\n│ │ └── ScheduleCapability.ts # Cron scheduling\n│ ├── providers/\n│ │ ├── ProviderManager.ts # Provider registry\n│ │ └── adapters/ # Anthropic, OpenAI, Google, OpenAI-compatible\n│ ├── tools/built-in/ # 14 tools (bash, file, glob, grep, web, etc.)\n│ ├── skills/ # SkillLoader, SkillMatcher, SkillRegistry\n│ ├── hooks/ # HookRegistry + types\n│ └── index.ts # Public API exports\n├── apps/server/src/\n│ ├── main.ts # Server entry\n│ └── gateway/ # Hono HTTP + WebSocket routes\n└── apps/desktop/ # Tauri 2 desktop app (React 19)\n```\n\n</details>\n\n---\n\n## Development\n\n| Command | Description |\n|:--------|:------------|\n| `pnpm install` | Install dependencies |\n| `pnpm -r build` | Build all packages |\n| `pnpm test` | Run tests (1,337 cases) |\n| `pnpm test:e2e` | E2E tests (requires API key) |\n| `pnpm --filter @bundy-lmw/hive-server start` | Start HTTP server |\n\n---\n\n## FAQ\n\n<details>\n<summary><b>How does the Coordinator-Worker pattern work?</b></summary>\n\n`Agent.dispatch()` enters a Coordinator LLM loop. The Coordinator has 3 coordinator tools — `agent` (spawn worker), `task-stop` (cancel workers), and `send-message` (push to channels). For complex tasks, it autonomously spawns explore → plan → general workers. For simple queries, it responds directly without spawning any workers.\n\n</details>\n\n<details>\n<summary><b>How do I integrate into an existing project?</b></summary>\n\nInstall `@bundy-lmw/hive-core`, set env vars or pass `AgentInitOptions`, call `agent.dispatch()`. For an HTTP wrapper, use `@bundy-lmw/hive-server`.\n\n</details>\n\n<details>\n<summary><b>How do I add a custom channel?</b></summary>\n\nImplement the Plugin interface, publish as an npm package, and register via webhook route. See `@bundy-lmw/hive-plugin-feishu` as a reference.\n\n</details>\n\n<details>\n<summary><b>Can I use multiple providers simultaneously?</b></summary>\n\nYes. Configure multiple providers and switch at runtime with `agent.useProvider('name')`. Override per-task with `dispatch(task, { modelId: 'deepseek-chat' })`.\n\n</details>\n\n---\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n <a href=\"https://github.com/1695365384/hive/issues\">Issues</a> &middot;\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> &middot;\n <a href=\"https://github.com/1695365384/hive/blob/main/CONTRIBUTING.md\">Contributing</a>\n</p>\n"}, "86e736d269f268f1cb19ca09501cf3cd958d5e3f": {"t": 1785764582.7453773, "n": 12980, "h": "2d4c6bb5ed47cd41", "c": "<div align=\"center\">\n <p>\n <img src=\"logo.svg\" alt=\"Hive Logo\" width=\"80\" height=\"80\" style=\"vertical-align: middle;\"> <span style=\"font-size: 2em; font-weight: bold; vertical-align: middle;\">Hive</span>\n </p>\n\n <p><strong>The Multi-Agent SDK for TypeScript</strong></p>\n <p>Coordinator-Worker architecture with built-in cost control, permission layers, and Chinese LLM support.</p>\n\n <p>\n <a href=\"#quick-start\">Quick Start</a> &middot;\n <a href=\"#architecture\">Architecture</a> &middot;\n <a href=\"#api-reference\">API</a> &middot;\n <a href=\"#providers\">Providers</a> &middot;\n <a href=\"#faq\">FAQ</a>\n </p>\n\n <p>\n <code>npm i @bundy-lmw/hive-core</code>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.3+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/1337%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n\n <p><a href=\"./README.zh-CN.md\">中文文档</a></p>\n</div>\n\n---\n\n## Why Hive\n\n| Problem | Hive Approach |\n|:--------|:-------------|\n| Agent loops burn tokens on simple queries | Coordinator-Worker pattern — only spawn workers when needed |\n| Expensive models used for everything | Provider presets with per-task model selection via `DispatchOptions.modelId` |\n| Read-only operations can mutate files | Worker agents have enforced tool permissions (explore/plan = read-only, general = full access) |\n| Chinese LLMs need manual parameter hacking | 13 built-in provider adapters (GLM, DeepSeek, Qwen, Kimi, ERNIE, Claude, GPT, Gemini, etc.) |\n| Long-running agents go silent | Built-in heartbeat, stall detection, and abort signals |\n\n---\n\n## Quick Start\n\n### Install\n\n```bash\nnpm i @bundy-lmw/hive-core\n```\n\n### Configure\n\n```bash\nexport GLM_API_KEY=your-key\n# or: DEEPSEEK_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY\n```\n\n### Dispatch\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent();\nconst result = await agent.dispatch('Refactor the login module');\n// Coordinator spawns explore → plan → general workers automatically\n\nconsole.log(result.text); // Final output\nconsole.log(result.usage); // { input: 1234, output: 567 }\nconsole.log(result.tools); // ['glob', 'file', 'bash']\nconsole.log(result.duration); // ms\n```\n\n### Event Stream\n\n```typescript\nconst result = await agent.dispatch('Analyze the auth flow', {\n onPhase: (phase, msg) => console.log(`[${phase}] ${msg}`),\n onText: (text) => process.stdout.write(text),\n onTool: (tool, input) => console.log(`→ ${tool}`),\n onToolResult: (tool, result) => console.log(`← ${tool}`),\n onReasoning: (thought) => console.log(`[reasoning] ${thought}`),\n abortSignal: controller.signal,\n});\n```\n\n### HTTP Server\n\n```bash\npnpm --filter @bundy-lmw/hive-server start\n# POST http://localhost:4450/api/chat\n# WS ws://localhost:4450/ws/chat\n```\n\n---\n\n<!-- TODO: Add workflow demo GIF here -->\n\n---\n\n## Architecture\n\nHive uses a **Coordinator-Worker** pattern. The `Agent` class is the single entry point. `dispatch()` delegates to `CoordinatorCapability`, which manages the LLM loop and spawns specialized **worker agents** as tools.\n\n<div align=\"center\">\n <img src=\"docs/architecture.svg\" alt=\"Hive System Architecture\" width=\"860\">\n</div>\n\n### Worker Agent Tool Permissions\n\n| Tool | explore | plan | general | schedule |\n|:-----|:--------|:-----|:--------|:---------|\n| `file` (read) | ✅ | ✅ | ✅ | — |\n| `glob` | ✅ | ✅ | ✅ | — |\n| `grep` | ✅ | ✅ | ✅ | — |\n| `web-search` | ✅ | ✅ | ✅ | — |\n| `web-fetch` | ✅ | ✅ | ✅ | — |\n| `env` | ✅ | ✅ | ✅ | — |\n| `bash` | — | — | ✅ | — |\n| `file` (write) | — | — | ✅ | — |\n| `ask-user` | — | — | ✅ | — |\n| `send-file` | — | — | ✅ | — |\n| `schedule` | — | — | — | ✅ |\n\n### Capabilities\n\n<div align=\"center\">\n\n<table style=\"border:none; margin: 0 auto;\">\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Coordinator</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">dispatch · worker orchestration · cost</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Provider</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">registry · switching · AI SDK</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Skill</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">loading · matching · instruction generation</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Session</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">SQLite persistence · multi-session</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Timeout</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">heartbeat · stall detection · abort</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Schedule</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">cron · task lifecycle</td>\n</tr>\n</table>\n\n</div>\n\n### Server (`@bundy-lmw/hive-server`)\n\nHono HTTP + WebSocket server wrapping the Agent SDK:\n\n| Route | Method | Description |\n|:------|:-------|:------------|\n| `/health` | GET | Health check |\n| `/api/chat` | POST | Chat endpoint |\n| `/api/sessions` | GET | List sessions |\n| `/api/sessions/:id` | GET/DELETE | Session CRUD |\n| `/ws/chat` | WS | Chat streaming |\n| `/ws/admin` | WS | Admin panel |\n| `/webhook/:plugin/:appId` | POST | Plugin webhooks |\n\n---\n\n## API Reference\n\n### Agent\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent(options?);\nawait agent.initialize();\n\n// Task execution\nconst result = await agent.dispatch(task: string, options?: DispatchOptions): Promise<DispatchResult>;\n\n// Provider management\nagent.useProvider(name: string, apiKey?: string): boolean;\nagent.listProviders(): ProviderConfig[];\nagent.listAllProviders(): Promise<ModelsDevProvider[]>;\nagent.listProviderModels(providerId: string): Promise<ModelSpec[]>;\n\n// Skill management\nagent.listSkills(): Skill[];\nagent.matchSkill(input: string): SkillMatchResult | null;\nagent.registerSkill(skill: Skill): void;\n\n// Session management\nawait agent.createSession(config?): Promise<Session>;\nawait agent.loadSession(sessionId: string): Promise<Session | null>;\nagent.getSessionMessages(): Message[];\n\n// Lifecycle\nawait agent.dispose();\n```\n\n### DispatchOptions\n\n```typescript\ninterface DispatchOptions {\n chatId?: string;\n cwd?: string;\n maxTurns?: number;\n modelId?: string; // Override model for this task\n systemPrompt?: string;\n abortSignal?: AbortSignal; // Cancel mid-execution\n onPhase?(phase: string, message: string): void;\n onText?(text: string): void;\n onTool?(tool: string, input?: unknown): void;\n onToolResult?(tool: string, result: unknown): void;\n onReasoning?(text: string): void;\n}\n```\n\n### DispatchResult\n\n```typescript\ninterface DispatchResult {\n text: string;\n success: boolean;\n duration: number; // ms\n tools: string[]; // tools used\n usage?: { input: number; output: number };\n cost?: { input: number; output: number; total: number };\n steps?: StepResult[];\n error?: string;\n}\n```\n\n---\n\n## Providers\n\n### Built-in Adapters\n\n| Adapter | Providers | Protocol |\n|:--------|:---------|:---------|\n| `AnthropicAdapter` | Claude (opus, sonnet, haiku) | Anthropic API |\n| `OpenAIAdapter` | GPT-4o, GPT-4-turbo | OpenAI API |\n| `GoogleAdapter` | Gemini | Google AI |\n| `OpenAICompatibleAdapter` | GLM, DeepSeek, Qwen, Kimi, ERNIE, OpenRouter, Groq, xAI, Mistral, LiteLLM | OpenAI-compatible |\n\n13 providers out of the box. Any OpenAI-compatible endpoint works with `baseUrl` + `apiKey` — no source changes needed.\n\n### Chinese LLM Presets\n\n| Provider | Model Examples | Notes |\n|:---------|:--------------|:------|\n| GLM (Zhipu) | glm-5, glm-4.7 | Long context, multimodal |\n| Qwen (Alibaba) | qwen3-max, qwen-plus | Alibaba Cloud |\n| DeepSeek | deepseek-chat, deepseek-reasoner | Cost-effective |\n| Kimi (Moonshot) | moonshot-v1-128k | Ultra-long context |\n| ERNIE (Baidu) | ernie-4.0-8k | Baidu |\n\n---\n\n## Hook System\n\nIntercept any lifecycle event with priority-based hooks:\n\n```typescript\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'bash') {\n return { proceed: false, error: 'bash is blocked in this environment' };\n }\n}, { priority: 'highest' });\n```\n\n### Available Hooks\n\n| Hook | Trigger |\n|:-----|:--------|\n| `session:start` / `end` / `error` | Session lifecycle |\n| `tool:before` / `after` | Tool execution (can block) |\n| `provider:beforeChange` / `afterChange` | Provider switching |\n| `timeout:stalled` / `health:heartbeat` | Health monitoring |\n| `agent:thinking` / `task:progress` | Agent introspection |\n| `notification:push` | Channel notifications |\n\n---\n\n<details>\n<summary><b>Project Structure</b></summary>\n\n```\nhive/\n├── packages/core/src/\n│ ├── agents/\n│ │ ├── core/\n│ │ │ ├── Agent.ts # Single entry point\n│ │ │ ├── AgentContext.ts # Shared context + hook registry\n│ │ │ ├── agents.ts # Worker definitions (explore/plan/general/schedule)\n│ │ │ └── runner.ts # AgentRunner — worker execution engine\n│ │ └── capabilities/\n│ │ ├── CoordinatorCapability.ts # LLM loop + worker orchestration\n│ │ ├── ProviderCapability.ts # Provider registry + AI SDK\n│ │ ├── SkillCapability.ts # Skill loading + matching\n│ │ ├── SessionCapability.ts # SQLite persistence\n│ │ ├── TimeoutCapability.ts # Heartbeat + stall detection\n│ │ └── ScheduleCapability.ts # Cron scheduling\n│ ├── providers/\n│ │ ├── ProviderManager.ts # Provider registry\n│ │ └── adapters/ # Anthropic, OpenAI, Google, OpenAI-compatible\n│ ├── tools/built-in/ # 14 tools (bash, file, glob, grep, web, etc.)\n│ ├── skills/ # SkillLoader, SkillMatcher, SkillRegistry\n│ ├── hooks/ # HookRegistry + types\n│ └── index.ts # Public API exports\n├── apps/server/src/\n│ ├── main.ts # Server entry\n│ └── gateway/ # Hono HTTP + WebSocket routes\n└── apps/desktop/ # Tauri 2 desktop app (React 19)\n```\n\n</details>\n\n---\n\n## Development\n\n| Command | Description |\n|:--------|:------------|\n| `pnpm install` | Install dependencies |\n| `pnpm -r build` | Build all packages |\n| `pnpm test` | Run tests (1,337 cases) |\n| `pnpm test:e2e` | E2E tests (requires API key) |\n| `pnpm --filter @bundy-lmw/hive-server start` | Start HTTP server |\n\n---\n\n## FAQ\n\n<details>\n<summary><b>How does the Coordinator-Worker pattern work?</b></summary>\n\n`Agent.dispatch()` enters a Coordinator LLM loop. The Coordinator has 3 coordinator tools — `agent` (spawn worker), `task-stop` (cancel workers), and `send-message` (push to channels). For complex tasks, it autonomously spawns explore → plan → general workers. For simple queries, it responds directly without spawning any workers.\n\n</details>\n\n<details>\n<summary><b>How do I integrate into an existing project?</b></summary>\n\nInstall `@bundy-lmw/hive-core`, set env vars or pass `AgentInitOptions`, call `agent.dispatch()`. For an HTTP wrapper, use `@bundy-lmw/hive-server`.\n\n</details>\n\n<details>\n<summary><b>How do I add a custom channel?</b></summary>\n\nImplement the Plugin interface, publish as an npm package, and register via webhook route. See `@bundy-lmw/hive-plugin-feishu` as a reference.\n\n</details>\n\n<details>\n<summary><b>Can I use multiple providers simultaneously?</b></summary>\n\nYes. Configure multiple providers and switch at runtime with `agent.useProvider('name')`. Override per-task with `dispatch(task, { modelId: 'deepseek-chat' })`.\n\n</details>\n\n---\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n <a href=\"https://github.com/1695365384/hive/issues\">Issues</a> &middot;\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> &middot;\n <a href=\"https://github.com/1695365384/hive/blob/main/CONTRIBUTING.md\">Contributing</a>\n</p>\n"}, "94474844fcc5c268b9187fafd22953d8af6c97e1": {"t": 1785764583.963089, "n": 12867, "h": "1c942e8699df522d", "c": "<div align=\"center\">\n <img src=\"logo.svg\" alt=\"Hive Logo\" width=\"120\" height=\"120\">\n\n <h1>Hive</h1>\n\n <p><strong>The Multi-Agent SDK for TypeScript</strong></p>\n <p>Coordinator-Worker architecture with built-in cost control, permission layers, and Chinese LLM support.</p>\n\n <p>\n <a href=\"#quick-start\">Quick Start</a> &middot;\n <a href=\"#architecture\">Architecture</a> &middot;\n <a href=\"#api-reference\">API</a> &middot;\n <a href=\"#providers\">Providers</a> &middot;\n <a href=\"#faq\">FAQ</a>\n </p>\n\n <p>\n <code>npm i @bundy-lmw/hive-core</code>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.3+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/1337%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n\n <p><a href=\"./README.zh-CN.md\">中文文档</a></p>\n</div>\n\n---\n\n## Why Hive\n\n| Problem | Hive Approach |\n|:--------|:-------------|\n| Agent loops burn tokens on simple queries | Coordinator-Worker pattern — only spawn workers when needed |\n| Expensive models used for everything | Provider presets with per-task model selection via `DispatchOptions.modelId` |\n| Read-only operations can mutate files | Worker agents have enforced tool permissions (explore/plan = read-only, general = full access) |\n| Chinese LLMs need manual parameter hacking | 13 built-in provider adapters (GLM, DeepSeek, Qwen, Kimi, ERNIE, Claude, GPT, Gemini, etc.) |\n| Long-running agents go silent | Built-in heartbeat, stall detection, and abort signals |\n\n---\n\n## Quick Start\n\n### Install\n\n```bash\nnpm i @bundy-lmw/hive-core\n```\n\n### Configure\n\n```bash\nexport GLM_API_KEY=your-key\n# or: DEEPSEEK_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY\n```\n\n### Dispatch\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent();\nconst result = await agent.dispatch('Refactor the login module');\n// Coordinator spawns explore → plan → general workers automatically\n\nconsole.log(result.text); // Final output\nconsole.log(result.usage); // { input: 1234, output: 567 }\nconsole.log(result.tools); // ['glob', 'file', 'bash']\nconsole.log(result.duration); // ms\n```\n\n### Event Stream\n\n```typescript\nconst result = await agent.dispatch('Analyze the auth flow', {\n onPhase: (phase, msg) => console.log(`[${phase}] ${msg}`),\n onText: (text) => process.stdout.write(text),\n onTool: (tool, input) => console.log(`→ ${tool}`),\n onToolResult: (tool, result) => console.log(`← ${tool}`),\n onReasoning: (thought) => console.log(`[reasoning] ${thought}`),\n abortSignal: controller.signal,\n});\n```\n\n### HTTP Server\n\n```bash\npnpm --filter @bundy-lmw/hive-server start\n# POST http://localhost:4450/api/chat\n# WS ws://localhost:4450/ws/chat\n```\n\n---\n\n<!-- TODO: Add workflow demo GIF here -->\n\n---\n\n## Architecture\n\nHive uses a **Coordinator-Worker** pattern. The `Agent` class is the single entry point. `dispatch()` delegates to `CoordinatorCapability`, which manages the LLM loop and spawns specialized **worker agents** as tools.\n\n<div align=\"center\">\n <img src=\"docs/architecture.svg\" alt=\"Hive System Architecture\" width=\"860\">\n</div>\n\n### Worker Agent Tool Permissions\n\n| Tool | explore | plan | general | schedule |\n|:-----|:--------|:-----|:--------|:---------|\n| `file` (read) | ✅ | ✅ | ✅ | — |\n| `glob` | ✅ | ✅ | ✅ | — |\n| `grep` | ✅ | ✅ | ✅ | — |\n| `web-search` | ✅ | ✅ | ✅ | — |\n| `web-fetch` | ✅ | ✅ | ✅ | — |\n| `env` | ✅ | ✅ | ✅ | — |\n| `bash` | — | — | ✅ | — |\n| `file` (write) | — | — | ✅ | — |\n| `ask-user` | — | — | ✅ | — |\n| `send-file` | — | — | ✅ | — |\n| `schedule` | — | — | — | ✅ |\n\n### Capabilities\n\n<div align=\"center\">\n\n<table style=\"border:none; margin: 0 auto;\">\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Coordinator</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">dispatch · worker orchestration · cost</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Provider</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">registry · switching · AI SDK</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Skill</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">loading · matching · instruction generation</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Session</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">SQLite persistence · multi-session</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Timeout</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">heartbeat · stall detection · abort</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:0; font-size:12px; border:1px solid #e5e7eb;\">Schedule</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">cron · task lifecycle</td>\n</tr>\n</table>\n\n</div>\n\n### Server (`@bundy-lmw/hive-server`)\n\nHono HTTP + WebSocket server wrapping the Agent SDK:\n\n| Route | Method | Description |\n|:------|:-------|:------------|\n| `/health` | GET | Health check |\n| `/api/chat` | POST | Chat endpoint |\n| `/api/sessions` | GET | List sessions |\n| `/api/sessions/:id` | GET/DELETE | Session CRUD |\n| `/ws/chat` | WS | Chat streaming |\n| `/ws/admin` | WS | Admin panel |\n| `/webhook/:plugin/:appId` | POST | Plugin webhooks |\n\n---\n\n## API Reference\n\n### Agent\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent(options?);\nawait agent.initialize();\n\n// Task execution\nconst result = await agent.dispatch(task: string, options?: DispatchOptions): Promise<DispatchResult>;\n\n// Provider management\nagent.useProvider(name: string, apiKey?: string): boolean;\nagent.listProviders(): ProviderConfig[];\nagent.listAllProviders(): Promise<ModelsDevProvider[]>;\nagent.listProviderModels(providerId: string): Promise<ModelSpec[]>;\n\n// Skill management\nagent.listSkills(): Skill[];\nagent.matchSkill(input: string): SkillMatchResult | null;\nagent.registerSkill(skill: Skill): void;\n\n// Session management\nawait agent.createSession(config?): Promise<Session>;\nawait agent.loadSession(sessionId: string): Promise<Session | null>;\nagent.getSessionMessages(): Message[];\n\n// Lifecycle\nawait agent.dispose();\n```\n\n### DispatchOptions\n\n```typescript\ninterface DispatchOptions {\n chatId?: string;\n cwd?: string;\n maxTurns?: number;\n modelId?: string; // Override model for this task\n systemPrompt?: string;\n abortSignal?: AbortSignal; // Cancel mid-execution\n onPhase?(phase: string, message: string): void;\n onText?(text: string): void;\n onTool?(tool: string, input?: unknown): void;\n onToolResult?(tool: string, result: unknown): void;\n onReasoning?(text: string): void;\n}\n```\n\n### DispatchResult\n\n```typescript\ninterface DispatchResult {\n text: string;\n success: boolean;\n duration: number; // ms\n tools: string[]; // tools used\n usage?: { input: number; output: number };\n cost?: { input: number; output: number; total: number };\n steps?: StepResult[];\n error?: string;\n}\n```\n\n---\n\n## Providers\n\n### Built-in Adapters\n\n| Adapter | Providers | Protocol |\n|:--------|:---------|:---------|\n| `AnthropicAdapter` | Claude (opus, sonnet, haiku) | Anthropic API |\n| `OpenAIAdapter` | GPT-4o, GPT-4-turbo | OpenAI API |\n| `GoogleAdapter` | Gemini | Google AI |\n| `OpenAICompatibleAdapter` | GLM, DeepSeek, Qwen, Kimi, ERNIE, OpenRouter, Groq, xAI, Mistral, LiteLLM | OpenAI-compatible |\n\n13 providers out of the box. Any OpenAI-compatible endpoint works with `baseUrl` + `apiKey` — no source changes needed.\n\n### Chinese LLM Presets\n\n| Provider | Model Examples | Notes |\n|:---------|:--------------|:------|\n| GLM (Zhipu) | glm-5, glm-4.7 | Long context, multimodal |\n| Qwen (Alibaba) | qwen3-max, qwen-plus | Alibaba Cloud |\n| DeepSeek | deepseek-chat, deepseek-reasoner | Cost-effective |\n| Kimi (Moonshot) | moonshot-v1-128k | Ultra-long context |\n| ERNIE (Baidu) | ernie-4.0-8k | Baidu |\n\n---\n\n## Hook System\n\nIntercept any lifecycle event with priority-based hooks:\n\n```typescript\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'bash') {\n return { proceed: false, error: 'bash is blocked in this environment' };\n }\n}, { priority: 'highest' });\n```\n\n### Available Hooks\n\n| Hook | Trigger |\n|:-----|:--------|\n| `session:start` / `end` / `error` | Session lifecycle |\n| `tool:before` / `after` | Tool execution (can block) |\n| `provider:beforeChange` / `afterChange` | Provider switching |\n| `timeout:stalled` / `health:heartbeat` | Health monitoring |\n| `agent:thinking` / `task:progress` | Agent introspection |\n| `notification:push` | Channel notifications |\n\n---\n\n<details>\n<summary><b>Project Structure</b></summary>\n\n```\nhive/\n├── packages/core/src/\n│ ├── agents/\n│ │ ├── core/\n│ │ │ ├── Agent.ts # Single entry point\n│ │ │ ├── AgentContext.ts # Shared context + hook registry\n│ │ │ ├── agents.ts # Worker definitions (explore/plan/general/schedule)\n│ │ │ └── runner.ts # AgentRunner — worker execution engine\n│ │ └── capabilities/\n│ │ ├── CoordinatorCapability.ts # LLM loop + worker orchestration\n│ │ ├── ProviderCapability.ts # Provider registry + AI SDK\n│ │ ├── SkillCapability.ts # Skill loading + matching\n│ │ ├── SessionCapability.ts # SQLite persistence\n│ │ ├── TimeoutCapability.ts # Heartbeat + stall detection\n│ │ └── ScheduleCapability.ts # Cron scheduling\n│ ├── providers/\n│ │ ├── ProviderManager.ts # Provider registry\n│ │ └── adapters/ # Anthropic, OpenAI, Google, OpenAI-compatible\n│ ├── tools/built-in/ # 14 tools (bash, file, glob, grep, web, etc.)\n│ ├── skills/ # SkillLoader, SkillMatcher, SkillRegistry\n│ ├── hooks/ # HookRegistry + types\n│ └── index.ts # Public API exports\n├── apps/server/src/\n│ ├── main.ts # Server entry\n│ └── gateway/ # Hono HTTP + WebSocket routes\n└── apps/desktop/ # Tauri 2 desktop app (React 19)\n```\n\n</details>\n\n---\n\n## Development\n\n| Command | Description |\n|:--------|:------------|\n| `pnpm install` | Install dependencies |\n| `pnpm -r build` | Build all packages |\n| `pnpm test` | Run tests (1,337 cases) |\n| `pnpm test:e2e` | E2E tests (requires API key) |\n| `pnpm --filter @bundy-lmw/hive-server start` | Start HTTP server |\n\n---\n\n## FAQ\n\n<details>\n<summary><b>How does the Coordinator-Worker pattern work?</b></summary>\n\n`Agent.dispatch()` enters a Coordinator LLM loop. The Coordinator has 3 coordinator tools — `agent` (spawn worker), `task-stop` (cancel workers), and `send-message` (push to channels). For complex tasks, it autonomously spawns explore → plan → general workers. For simple queries, it responds directly without spawning any workers.\n\n</details>\n\n<details>\n<summary><b>How do I integrate into an existing project?</b></summary>\n\nInstall `@bundy-lmw/hive-core`, set env vars or pass `AgentInitOptions`, call `agent.dispatch()`. For an HTTP wrapper, use `@bundy-lmw/hive-server`.\n\n</details>\n\n<details>\n<summary><b>How do I add a custom channel?</b></summary>\n\nImplement the Plugin interface, publish as an npm package, and register via webhook route. See `@bundy-lmw/hive-plugin-feishu` as a reference.\n\n</details>\n\n<details>\n<summary><b>Can I use multiple providers simultaneously?</b></summary>\n\nYes. Configure multiple providers and switch at runtime with `agent.useProvider('name')`. Override per-task with `dispatch(task, { modelId: 'deepseek-chat' })`.\n\n</details>\n\n---\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n <a href=\"https://github.com/1695365384/hive/issues\">Issues</a> &middot;\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> &middot;\n <a href=\"https://github.com/1695365384/hive/blob/main/CONTRIBUTING.md\">Contributing</a>\n</p>\n"}, "99ae148e4c4ae33d9776255e5bf40c7426417f39": {"t": 1785764585.4814456, "n": 12869, "h": "fe04a8c79fad594c", "c": "<div align=\"center\">\n <img src=\"logo.svg\" alt=\"Hive Logo\" width=\"120\" height=\"120\">\n\n <h1>Hive</h1>\n\n <p><strong>The Multi-Agent SDK for TypeScript</strong></p>\n <p>Coordinator-Worker architecture with built-in cost control, permission layers, and Chinese LLM support.</p>\n\n <p>\n <a href=\"#quick-start\">Quick Start</a> &middot;\n <a href=\"#architecture\">Architecture</a> &middot;\n <a href=\"#api-reference\">API</a> &middot;\n <a href=\"#providers\">Providers</a> &middot;\n <a href=\"#faq\">FAQ</a>\n </p>\n\n <p>\n <code>npm i @bundy-lmw/hive-core</code>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.3+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/1337%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n\n <p><a href=\"./README.zh-CN.md\">中文文档</a></p>\n</div>\n\n---\n\n## Why Hive\n\n| Problem | Hive Approach |\n|:--------|:-------------|\n| Agent loops burn tokens on simple queries | Coordinator-Worker pattern — only spawn workers when needed |\n| Expensive models used for everything | Provider presets with per-task model selection via `DispatchOptions.modelId` |\n| Read-only operations can mutate files | Worker agents have enforced tool permissions (explore/plan = read-only, general = full access) |\n| Chinese LLMs need manual parameter hacking | 13 built-in provider adapters (GLM, DeepSeek, Qwen, Kimi, ERNIE, Claude, GPT, Gemini, etc.) |\n| Long-running agents go silent | Built-in heartbeat, stall detection, and abort signals |\n\n---\n\n## Quick Start\n\n### Install\n\n```bash\nnpm i @bundy-lmw/hive-core\n```\n\n### Configure\n\n```bash\nexport GLM_API_KEY=your-key\n# or: DEEPSEEK_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY\n```\n\n### Dispatch\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent();\nconst result = await agent.dispatch('Refactor the login module');\n// Coordinator spawns explore → plan → general workers automatically\n\nconsole.log(result.text); // Final output\nconsole.log(result.usage); // { input: 1234, output: 567 }\nconsole.log(result.tools); // ['glob', 'file', 'bash']\nconsole.log(result.duration); // ms\n```\n\n### Event Stream\n\n```typescript\nconst result = await agent.dispatch('Analyze the auth flow', {\n onPhase: (phase, msg) => console.log(`[${phase}] ${msg}`),\n onText: (text) => process.stdout.write(text),\n onTool: (tool, input) => console.log(`→ ${tool}`),\n onToolResult: (tool, result) => console.log(`← ${tool}`),\n onReasoning: (thought) => console.log(`💭 ${thought}`),\n abortSignal: controller.signal,\n});\n```\n\n### HTTP Server\n\n```bash\npnpm --filter @bundy-lmw/hive-server start\n# POST http://localhost:4450/api/chat\n# WS ws://localhost:4450/ws/chat\n```\n\n---\n\n<!-- TODO: Add workflow demo GIF here -->\n\n---\n\n## Architecture\n\nHive uses a **Coordinator-Worker** pattern. The `Agent` class is the single entry point. `dispatch()` delegates to `CoordinatorCapability`, which manages the LLM loop and spawns specialized **worker agents** as tools.\n\n<div align=\"center\">\n <img src=\"docs/architecture.svg\" alt=\"Hive System Architecture\" width=\"860\">\n</div>\n\n### Worker Agent Tool Permissions\n\n| Tool | explore | plan | general | schedule |\n|:-----|:--------|:-----|:--------|:---------|\n| `file` (read) | ✅ | ✅ | ✅ | — |\n| `glob` | ✅ | ✅ | ✅ | — |\n| `grep` | ✅ | ✅ | ✅ | — |\n| `web-search` | ✅ | ✅ | ✅ | — |\n| `web-fetch` | ✅ | ✅ | ✅ | — |\n| `env` | ✅ | ✅ | ✅ | — |\n| `bash` | — | — | ✅ | — |\n| `file` (write) | — | — | ✅ | — |\n| `ask-user` | — | — | ✅ | — |\n| `send-file` | — | — | ✅ | — |\n| `schedule` | — | — | — | ✅ |\n\n### Capabilities\n\n<div align=\"center\">\n\n<table style=\"border:none; margin: 0 auto;\">\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:6px; font-size:12px; border:1px solid #e5e7eb;\">Coordinator</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">dispatch · worker orchestration · cost</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:6px; font-size:12px; border:1px solid #e5e7eb;\">Provider</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">registry · switching · AI SDK</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:6px; font-size:12px; border:1px solid #e5e7eb;\">Skill</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">loading · matching · instruction generation</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:6px; font-size:12px; border:1px solid #e5e7eb;\">Session</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">SQLite persistence · multi-session</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:6px; font-size:12px; border:1px solid #e5e7eb;\">Timeout</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">heartbeat · stall detection · abort</td>\n</tr>\n<tr style=\"border:none;\">\n <td style=\"border:none; padding:4px 6px;\"><code style=\"background:#f3f4f6; padding:4px 10px; border-radius:6px; font-size:12px; border:1px solid #e5e7eb;\">Schedule</code></td>\n <td style=\"border:none; padding:4px 0; color:#9ca3af; font-size:12px;\">cron · task lifecycle</td>\n</tr>\n</table>\n\n</div>\n\n### Server (`@bundy-lmw/hive-server`)\n\nHono HTTP + WebSocket server wrapping the Agent SDK:\n\n| Route | Method | Description |\n|:------|:-------|:------------|\n| `/health` | GET | Health check |\n| `/api/chat` | POST | Chat endpoint |\n| `/api/sessions` | GET | List sessions |\n| `/api/sessions/:id` | GET/DELETE | Session CRUD |\n| `/ws/chat` | WS | Chat streaming |\n| `/ws/admin` | WS | Admin panel |\n| `/webhook/:plugin/:appId` | POST | Plugin webhooks |\n\n---\n\n## API Reference\n\n### Agent\n\n```typescript\nimport { Agent } from '@bundy-lmw/hive-core';\n\nconst agent = new Agent(options?);\nawait agent.initialize();\n\n// Task execution\nconst result = await agent.dispatch(task: string, options?: DispatchOptions): Promise<DispatchResult>;\n\n// Provider management\nagent.useProvider(name: string, apiKey?: string): boolean;\nagent.listProviders(): ProviderConfig[];\nagent.listAllProviders(): Promise<ModelsDevProvider[]>;\nagent.listProviderModels(providerId: string): Promise<ModelSpec[]>;\n\n// Skill management\nagent.listSkills(): Skill[];\nagent.matchSkill(input: string): SkillMatchResult | null;\nagent.registerSkill(skill: Skill): void;\n\n// Session management\nawait agent.createSession(config?): Promise<Session>;\nawait agent.loadSession(sessionId: string): Promise<Session | null>;\nagent.getSessionMessages(): Message[];\n\n// Lifecycle\nawait agent.dispose();\n```\n\n### DispatchOptions\n\n```typescript\ninterface DispatchOptions {\n chatId?: string;\n cwd?: string;\n maxTurns?: number;\n modelId?: string; // Override model for this task\n systemPrompt?: string;\n abortSignal?: AbortSignal; // Cancel mid-execution\n onPhase?(phase: string, message: string): void;\n onText?(text: string): void;\n onTool?(tool: string, input?: unknown): void;\n onToolResult?(tool: string, result: unknown): void;\n onReasoning?(text: string): void;\n}\n```\n\n### DispatchResult\n\n```typescript\ninterface DispatchResult {\n text: string;\n success: boolean;\n duration: number; // ms\n tools: string[]; // tools used\n usage?: { input: number; output: number };\n cost?: { input: number; output: number; total: number };\n steps?: StepResult[];\n error?: string;\n}\n```\n\n---\n\n## Providers\n\n### Built-in Adapters\n\n| Adapter | Providers | Protocol |\n|:--------|:---------|:---------|\n| `AnthropicAdapter` | Claude (opus, sonnet, haiku) | Anthropic API |\n| `OpenAIAdapter` | GPT-4o, GPT-4-turbo | OpenAI API |\n| `GoogleAdapter` | Gemini | Google AI |\n| `OpenAICompatibleAdapter` | GLM, DeepSeek, Qwen, Kimi, ERNIE, OpenRouter, Groq, xAI, Mistral, LiteLLM | OpenAI-compatible |\n\n13 providers out of the box. Any OpenAI-compatible endpoint works with `baseUrl` + `apiKey` — no source changes needed.\n\n### Chinese LLM Presets\n\n| Provider | Model Examples | Notes |\n|:---------|:--------------|:------|\n| GLM (Zhipu) | glm-5, glm-4.7 | Long context, multimodal |\n| Qwen (Alibaba) | qwen3-max, qwen-plus | Alibaba Cloud |\n| DeepSeek | deepseek-chat, deepseek-reasoner | Cost-effective |\n| Kimi (Moonshot) | moonshot-v1-128k | Ultra-long context |\n| ERNIE (Baidu) | ernie-4.0-8k | Baidu |\n\n---\n\n## Hook System\n\nIntercept any lifecycle event with priority-based hooks:\n\n```typescript\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'bash') {\n return { proceed: false, error: 'bash is blocked in this environment' };\n }\n}, { priority: 'highest' });\n```\n\n### Available Hooks\n\n| Hook | Trigger |\n|:-----|:--------|\n| `session:start` / `end` / `error` | Session lifecycle |\n| `tool:before` / `after` | Tool execution (can block) |\n| `provider:beforeChange` / `afterChange` | Provider switching |\n| `timeout:stalled` / `health:heartbeat` | Health monitoring |\n| `agent:thinking` / `task:progress` | Agent introspection |\n| `notification:push` | Channel notifications |\n\n---\n\n<details>\n<summary><b>Project Structure</b></summary>\n\n```\nhive/\n├── packages/core/src/\n│ ├── agents/\n│ │ ├── core/\n│ │ │ ├── Agent.ts # Single entry point\n│ │ │ ├── AgentContext.ts # Shared context + hook registry\n│ │ │ ├── agents.ts # Worker definitions (explore/plan/general/schedule)\n│ │ │ └── runner.ts # AgentRunner — worker execution engine\n│ │ └── capabilities/\n│ │ ├── CoordinatorCapability.ts # LLM loop + worker orchestration\n│ │ ├── ProviderCapability.ts # Provider registry + AI SDK\n│ │ ├── SkillCapability.ts # Skill loading + matching\n│ │ ├── SessionCapability.ts # SQLite persistence\n│ │ ├── TimeoutCapability.ts # Heartbeat + stall detection\n│ │ └── ScheduleCapability.ts # Cron scheduling\n│ ├── providers/\n│ │ ├── ProviderManager.ts # Provider registry\n│ │ └── adapters/ # Anthropic, OpenAI, Google, OpenAI-compatible\n│ ├── tools/built-in/ # 14 tools (bash, file, glob, grep, web, etc.)\n│ ├── skills/ # SkillLoader, SkillMatcher, SkillRegistry\n│ ├── hooks/ # HookRegistry + types\n│ └── index.ts # Public API exports\n├── apps/server/src/\n│ ├── main.ts # Server entry\n│ └── gateway/ # Hono HTTP + WebSocket routes\n└── apps/desktop/ # Tauri 2 desktop app (React 19)\n```\n\n</details>\n\n---\n\n## Development\n\n| Command | Description |\n|:--------|:------------|\n| `pnpm install` | Install dependencies |\n| `pnpm -r build` | Build all packages |\n| `pnpm test` | Run tests (1,337 cases) |\n| `pnpm test:e2e` | E2E tests (requires API key) |\n| `pnpm --filter @bundy-lmw/hive-server start` | Start HTTP server |\n\n---\n\n## FAQ\n\n<details>\n<summary><b>How does the Coordinator-Worker pattern work?</b></summary>\n\n`Agent.dispatch()` enters a Coordinator LLM loop. The Coordinator has 3 coordinator tools — `agent` (spawn worker), `task-stop` (cancel workers), and `send-message` (push to channels). For complex tasks, it autonomously spawns explore → plan → general workers. For simple queries, it responds directly without spawning any workers.\n\n</details>\n\n<details>\n<summary><b>How do I integrate into an existing project?</b></summary>\n\nInstall `@bundy-lmw/hive-core`, set env vars or pass `AgentInitOptions`, call `agent.dispatch()`. For an HTTP wrapper, use `@bundy-lmw/hive-server`.\n\n</details>\n\n<details>\n<summary><b>How do I add a custom channel?</b></summary>\n\nImplement the Plugin interface, publish as an npm package, and register via webhook route. See `@bundy-lmw/hive-plugin-feishu` as a reference.\n\n</details>\n\n<details>\n<summary><b>Can I use multiple providers simultaneously?</b></summary>\n\nYes. Configure multiple providers and switch at runtime with `agent.useProvider('name')`. Override per-task with `dispatch(task, { modelId: 'deepseek-chat' })`.\n\n</details>\n\n---\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n <a href=\"https://github.com/1695365384/hive/issues\">Issues</a> &middot;\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> &middot;\n <a href=\"https://github.com/1695365384/hive/blob/main/CONTRIBUTING.md\">Contributing</a>\n</p>\n"}, "6e39efb9083cb5df6d1fd3f2aa535f0607fcb9cb": {"t": 1785764586.9869056, "n": 11873, "h": "91c2a6d6756eeb87", "c": "<div align=\"center\">\n <img src=\"logo.svg\" alt=\"Hive Logo\" width=\"140\" height=\"140\">\n\n <h1>Hive</h1>\n\n <p><strong>OpenClaw 替代品</strong></p>\n\n <p>\n <em>编排优先 · 天然省 80% 成本 · 零运维</em>\n </p>\n\n <p>\n <a href=\"#为什么离开-openclaw\">为什么离开 OpenClaw</a> &middot;\n <a href=\"#hive-的核心优势\">核心优势</a> &middot;\n <a href=\"#快速开始\">快速开始</a> &middot;\n <a href=\"#常见问题\">FAQ</a>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.0+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/956%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n</div>\n\n---\n\n## 为什么离开 OpenClaw\n\nOpenClaw 是 2026 年最火的开源 AI Agent 框架(30 万+ Stars),社区从\"技术狂热\"到\"成本焦虑\"只用了两周。以下是 Reddit 150+ 用户投诉、GitHub Issues、安全报告交叉验证出的 **8 个系统性问题**。\n\n### 编排:官方明确拒绝\n\nOpenClaw 架构文档原文:\n\n> \"agent-hierarchy frameworks are **not a default architecture** and heavy orchestration layers **will not be merged** for now.\"\n\nsub-agent 只是开一个新会话,没有任务拆解、结果聚合、错误恢复。用户被迫手动编排一切。\n\n> \"You end up babysitting something you set up specifically to stop babysitting.\"\n> — Reddit, 150+ 投诉汇总\n\n### 成本:从 $347 到 $2,100\n\n上下文无限累积(10 轮对话 150K tokens),工具输出永久存储,所有任务用最贵的模型。\n\n| 场景 | 损失 |\n|:-----|:-----|\n| Agent 陷入死循环,一夜之间 | **$2,100** |\n| 简单定时任务,token 消耗失控 | **570 万 tokens** |\n| 正常使用一个月(未经优化) | **$347** |\n| 即便升级 $200 Max Plan | **仍然 429 限流** |\n\n一位用户优化了两周才把月成本从 $347 降到 $68。**但这个优化本不该由用户来做。**\n\n### 安全:多个公开 CVE\n\n- CVE-2026-25253:数百个实例泄露 API 密钥(Bitdefender 披露)\n- 100ms 远程接管:研究人员通过网页演示实时攻击\n- 5 分钟提取 SSH 私钥:邮件 prompt injection 实现\n- ClawHub 发现 300+ 恶意技能,1/4 存在漏洞\n\n### 可靠性:每天崩溃 15 次\n\n- Agent 发截图\"证明\"完成 —— 截图里问题还在\n- Agent 承诺执行后沉默 —— 无错误、无崩溃、无输出\n- 用户停止 OpenClaw 后,它两周后自动重启了\n- Agent 删除自己的配置文件、损坏上下文\n- Telegram 长轮询导致 Gateway **每天崩溃 15 次**\n\n### 部署:14 种故障场景\n\nSegmentFault 排查指南覆盖 6 大类故障:安装失败(SIGBUS 无输出崩溃)、部署异常(launchd/systemd)、运行崩溃(OOM)、API 错误(429 冷却逻辑 bug)、日志问题(跨日不续接)、权限不足(硬编码 /root 路径)。\n\n### 上下文:没有记忆,每次从零开始\n\n每次问\"认证怎么实现的\"都要重新扫描 50+ 文件。超出模型窗口时静默截断,Agent 基于残缺上下文做决策 → 幻觉。用户被迫手动维护 ARCHITECTURE.md 来缓解。\n\n### 更新:每次升级都是赌博\n\n\"This morning I updated to latest version and now response time is very slow.\"\n\n技能跨版本消失、工具行为变更、配置格式不兼容、TDZ 初始化崩溃(Issue #45319)、ClawHub DNS 基础设施故障(Issue #44839)。\n\n### 国产 LLM:参数冲突频发\n\nKimi 调用 web_search 时 401(Issue #44851)、GLM 的 reasoning_effort 参数冲突返回 HTTP 400(Issue #44896)。每个国产模型都需要手动适配参数。\n\n---\n\n## Hive 的核心优势\n\n这些问题不是 bug,是**架构决定的**。Hive 从零设计,**先有编排引擎,再有其他一切**,从根源上避免了这些问题。\n\n### 1. 天然省钱:自动按阶段选模型\n\n这是成本优化的正确做法 —— **不是让用户手动切模型,而是架构本身就按任务复杂度分配模型**。\n\nOpenClaw 用户花两周优化才把 $347 降到 $68。Hive **开箱即用就是这个效果**:\n\n| 阶段 | 模型选择 | 为什么 |\n|:-----|:---------|:-------|\n| **探索** | Provider 默认模型 | 扫描代码只需理解,不需要推理能力 |\n| **规划** | Provider 默认模型 | 需要深度分析,但不应直接改代码 |\n| **执行** | Provider 默认模型 | 按计划行动,需要全部工具权限 |\n\n一个\"帮我重构登录模块\"的任务,80% 的 token 消耗发生在探索阶段 —— 用 Haiku 处理,成本直接降 **80%**。这不是优化技巧,是默认行为。\n\n### 2. 天然可靠:结构化阶段 + 全链路 trace\n\nOpenClaw 的可靠性问题来自一个根因:任务是一个无边界的对话循环,不知道\"做到哪了\"。\n\nHive 的三阶段工作流天然解决这个问题:\n\n- **阶段边界清晰**:探索结束才进入规划,规划完成才进入执行,不会跳步\n- **权限自动降级**:探索和规划阶段强制只读,Agent 不可能误改代码\n- **全链路 trace**:每个阶段的输入、输出、耗时、token 消耗全部记录,出错直接定位到具体阶段\n\nAgent 不会\"假装完成\"然后沉默,因为每个阶段都有明确的输入输出。\n\n### 3. 天然安全:无守护进程 + 权限分层\n\nOpenClaw 的安全风险来自两个根因:高权限持久运行(守护进程 24/7 运行)+ 全局权限(一个 prompt injection 就能访问 ~/.ssh)。\n\nHive 的设计天然规避了这些:\n\n- **无守护进程**:随应用生命周期启动和退出,不存在\"24/7 暴露面\"\n- **权限分层**:探索/规划只读,只有执行阶段有写入权限,即使被注入也只能影响当前任务\n- **Hook 拦截**:`tool:before` / `tool:after` 可以拦截任何工具调用,做安全审计\n\n### 4. 天然简单:npm install 即用\n\nOpenClaw 需要 Node 22+、全局安装、守护进程注册、Gateway 配置、Channel 配置、auth-profiles.json 配置。出任何一个问题,就要翻 14 种故障场景排查指南。\n\nHive 的部署:\n\n```\nnpm install @bundy-lmw/hive-core → new Agent() → agent.dispatch()\n```\n\n没有守护进程,没有端口配置,没有权限问题。集成到现有项目就是加一个 npm 依赖。\n\n### 5. 天然智能:一个 dispatch() 搞定一切\n\nOpenClaw 的\"多 Agent\"只是手动发 `/subagent` 命令。Hive 的 Dispatcher 用 LLM 语义分析 + regex 关键词双保险,自动判断任务类型并路由:\n\n- \"今天天气怎么样\" → chat 层,直接返回\n- \"帮我重构登录模块\" → workflow 层,自动执行 explore → plan → execute\n\n不需要定义路由规则,不需要画流程图,不需要手动切换模式。**你只管提需求,Hive 负责执行。**\n\n### 6. 天然国产:GLM、DeepSeek、Qwen、Kimi、ERNIE 一等公民\n\nOpenClaw 的国产模型适配是一个个坑:Kimi 401、GLM 400、百炼 400,每个都要手动查 issue 找解决方案。\n\nHive 原生内置 5 家国产模型的预设配置,设置环境变量即可使用。不需要查 issue,不需要手动适配参数,不需要等官方修复。\n\n---\n\n## OpenClaw vs Hive 速查\n\n| | OpenClaw | Hive |\n|:--|:---------|:-----|\n| **设计起点** | 单 Agent 对话循环 | 多 Agent 编排引擎 |\n| **任务路由** | 用户手动 `/subagent` | LLM + regex 自动分类 |\n| **工作流** | Lobster DSL(手动编排) | 三阶段自动执行 |\n| **模型选择** | 用户手动切换 | 按阶段自动分配 |\n| **月成本(同类任务)** | $200-400 | $40-80 |\n| **部署方式** | 守护进程 + Gateway | npm install 即用 |\n| **多实例** | 单 Gateway per host | 每个 Agent 独立 |\n| **安全模型** | 高权限持久运行 | 权限分层 + Hook 拦截 |\n| **上下文管理** | 无限累积,静默截断 | 阶段隔离,不累积 |\n| **国产 LLM** | 参数冲突,需手动适配 | 原生预设,环境变量即用 |\n| **更新风险** | breaking change 频繁 | 精简核心,依赖单一 |\n| **最低内存** | 4GB(2GB 频繁崩溃) | 无额外进程开销 |\n| **故障排查** | 14 种故障场景 | 不需要 |\n\n---\n\n## 快速开始\n\n### 环境准备\n\n- Node.js 18+\n- 一个 LLM API Key(任意支持的平台)\n\n### 三步启动\n\n**第一步** — 设置 API Key(任选一个)\n\n| 环境变量 | 提供商 |\n|:---------|:-------|\n| `GLM_API_KEY` | 智谱 GLM |\n| `DEEPSEEK_API_KEY` | DeepSeek |\n| `ANTHROPIC_API_KEY` | Anthropic Claude |\n| `OPENAI_API_KEY` | OpenAI |\n\n**第二步** — 安装并启动\n\n```bash\npnpm install\npnpm --filter @bundy-lmw/hive-server build\npnpm --filter @bundy-lmw/hive-server start\n```\n\n**第三步** — 发送请求\n\n```\nPOST http://localhost:4450/chat\nContent-Type: application/json\n\n{\"prompt\": \"帮我重构登录模块\"}\n```\n\nHive 会自动检测 API Key,判断这是复杂任务,自动执行 explore → plan → execute 三阶段工作流,返回最终结果。\n\n### 作为 SDK 集成\n\n```\nnpm install @bundy-lmw/hive-core\n```\n\n| 调用方式 | 效果 |\n|:---------|:-----|\n| `agent.dispatch('帮我重构登录模块')` | 自动判断 → 走工作流 |\n| `agent.chat('今天天气怎么样')` | 强制对话模式 |\n| `agent.runWorkflow('实现用户注册')` | 强制工作流模式 |\n| `agent.explore('查找所有 API 路由')` | 快速探索(轻量模型) |\n| `agent.plan('研究认证方案')` | 深度规划(只读) |\n| `agent.general('重构代码')` | 通用执行(全部工具) |\n\n### CLI 调试\n\n```bash\npnpm --filter @bundy-lmw/hive-server cli\n```\n\n| 命令 | 说明 |\n|:-----|:-----|\n| `/mode chat` | 对话模式 |\n| `/mode workflow` | 工作流模式 |\n| `/provider glm` | 切换提供商 |\n| `/skills` | 查看技能列表 |\n| `/state` | 当前状态 |\n\n---\n\n## 核心能力\n\n### 智能路由\n\n所有输入统一经过 Dispatcher,LLM 分析语义 + regex 关键词双保险,自动分类后路由:\n\n- **chat 层** — 闲聊、问答、简单咨询,直接返回\n- **workflow 层** — 代码编写、重构、研究分析,自动执行三阶段工作流\n\n分类置信度低于阈值时自动降级到关键词匹配,确保不会误分类。\n\n### 三阶段工作流\n\n| 阶段 | 模型选择 | 工具权限 | 设计理由 |\n|:-----|:---------|:---------|:---------|\n| **探索** | Provider 默认模型 | 只读 | 快速扫描,低成本,防止误改 |\n| **规划** | Provider 默认模型 | 只读 | 深度分析,强制只读输出计划 |\n| **执行** | Provider 默认模型 | 全部工具 | 按计划精准行动 |\n\n每个阶段独立 trace,出错可定位。80% 的复杂任务都适合这个模式。可通过 Hook 在 `workflow:phase` 阶段插入自定义逻辑。\n\n### 7 个能力模块按需加载\n\n| 模块 | 何时加载 |\n|:-----|:---------|\n| Provider | 始终需要 |\n| Chat | 只做对话时 |\n| Workflow | 需要多步任务时 |\n| SubAgent | 需要子 Agent 协作时 |\n| Skill | 需要技能匹配时 |\n| Session | 需要会话持久化时 |\n| Schedule | 需要定时任务或推送通知时 |\n| Timeout | 需要超时监控时 |\n\n只加载你需要的,不用的零开销。\n\n### Hook 系统\n\n| Hook | 时机 | 典型场景 |\n|:-----|:-----|:---------|\n| `session:start` / `end` | 会话生命周期 | 初始化资源、清理状态 |\n| `tool:before` / `after` | 工具调用前后 | 安全拦截、审计日志 |\n| `workflow:phase` | 阶段切换 | 进度推送、状态展示 |\n| `dispatch.classify` | 分类完成 | 记录决策依据 |\n\n### 会话管理\n\n内置 SQLite 持久化,支持多会话切换和历史回溯。\n\n### 技能系统\n\nMarkdown 文件定义技能,YAML frontmatter 声明元数据,系统自动加载并根据用户输入匹配触发。\n\n---\n\n## 支持的提供商\n\n### 国产 LLM\n\n| 提供商 | 模型示例 | 特点 |\n|:------|:---------|:-----|\n| GLM(智谱) | glm-5, glm-4.7 | 长文本、多模态 |\n| Qwen(通义千问) | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| DeepSeek | deepseek-chat, deepseek-reasoner | 高性价比 |\n| Kimi(月之暗面) | moonshot-v1-128k | 超长上下文 |\n| ERNIE(文心一言) | ernie-4.0-8k | 百度 |\n\n### 全球 LLM\n\n| 提供商 | 模型示例 |\n|:------|:---------|\n| Anthropic | claude-opus-4-6, claude-sonnet-4-6 |\n| OpenAI | gpt-4o, gpt-4-turbo |\n| Azure OpenAI | gpt-4o, gpt-35-turbo |\n| OpenRouter | 100+ 模型聚合 |\n| Together AI | 开源模型推理 |\n\n添加自定义提供商只需传入 `baseUrl` + `apiKey`,兼容 OpenAI API 格式即可,无需改源码。\n\n---\n\n## 架构概览\n\n```\n Client\n ┌─────┴─────┐\n HTTP/WS CLI\n │ │\n ┌────┴─────────────┴────┐\n │ apps/server │\n │ Gateway + Bootstrap │\n └────────────┬───────────┘\n │\n ┌────────────┴───────────┐\n │ Agent │\n │ (唯一入口) │\n └────────────┬───────────┘\n │ dispatch()\n ┌────────────┴───────────┐\n │ Dispatcher │\n │ LLM 分类 + regex │\n └──┬─────────────────┬───┘\n │ │\n ┌──────┴──┐ ┌──────┴──────────────────┐\n │ chat │ │ workflow │\n │ 直接对话 │ │ explore → plan → execute │\n └──────┬──┘ │ Provider Provider Provider│\n │ │ 默认模型 默认模型 全权限 │\n │ └──────┬──────────────────┘\n │ │\n ┌──┴────────────────┴───────────────────┐\n │ Capabilities │\n │ Chat · Workflow · SubAgent · Schedule │\n │ Provider · Session · Skill · Timeout │\n └──────────────┬────────────────────────┘\n │\n ┌────────┬───────────┼───────────┬────────────┐\n ▼ ▼ ▼ ▼ ▼\n Providers Storage Scheduler Hooks/Skills Plugins\n GLM/DS SQLite cron/every 生命周期 飞书...\n Claude 会话+任务 at/一次性 事件拦截 ...\n```\n\n---\n\n## 项目结构\n\n```\nhive/\n├── packages/core/ @bundy-lmw/hive-core — Agent SDK 核心\n│ ├── agents/core/ 入口、上下文、运行器\n│ ├── agents/capabilities/ 能力模块\n│ ├── agents/dispatch/ 智能路由\n│ ├── agents/runtime/ LLM 运行时(AI SDK)\n│ ├── providers/ LLM 提供商管理\n│ ├── tools/built-in/ 内置工具(bash/file/grep/glob/web)\n│ ├── skills/ 技能系统\n│ └── hooks/ 生命周期钩子\n├── packages/plugins/feishu/ @bundy-lmw/hive-plugin-feishu — 飞书渠道插件\n├── apps/server/ @bundy-lmw/hive-server — HTTP/WS 服务(Hono)\n├── apps/desktop/ @bundy-lmw/hive-desktop — Tauri 2 桌面应用\n└── skills/ 技能定义(Markdown + YAML frontmatter)\n```\n\n---\n\n## 常见问题\n\n<details>\n<summary><b>Hive 就是 OpenClaw 的替代品吗?</b></summary>\n\n是的。Hive 基于 AI SDK(@ai-sdk/openai)自研轻量运行时,架构设计理念完全不同:Hive 从多 Agent 编排出发,OpenClaw 从单 Agent 对话循环出发。如果你被 OpenClaw 的成本、可靠性、部署复杂度劝退过,Hive 就是为你设计的。\n\n</details>\n\n<details>\n<summary><b>可以从 OpenClaw 迁移吗?</b></summary>\n\n可以。Hive 使用 OpenAI 兼容的 Chat Completions API,模型配置格式兼容。主要迁移工作:将 OpenClaw 的 Channel 配置改为 Hive 的 Plugin,Skill 文件直接复用。\n\n</details>\n\n<details>\n<summary><b>可以同时用国产和海外模型吗?</b></summary>\n\n可以。配置多个提供商后,运行时用 `agent.useProvider('name')` 随时切换。\n\n</details>\n\n<details>\n<summary><b>如何集成到现有项目?</b></summary>\n\n安装 `@bundy-lmw/hive-core`,设置环境变量或传入配置,调用 `agent.dispatch()` 即可。也提供了开箱即用的 HTTP 服务 `@bundy-lmw/hive-server`。\n\n</details>\n\n<details>\n<summary><b>如何添加自定义渠道?</b></summary>\n\n实现 Plugin 接口,打包为独立 npm 包。参考 `@bundy-lmw/hive-plugin-feishu` 的实现。\n\n</details>\n\n<details>\n<summary><b>如何创建自定义技能?</b></summary>\n\n在 `skills/` 目录创建 Markdown 文件,用 YAML frontmatter 定义名称、描述和标签。系统启动时自动加载。\n\n</details>\n\n<details>\n<summary><b>Hive 做了什么 OpenClaw 做不到的事?</b></summary>\n\n- 自动智能路由(LLM + regex 双保险分类)\n- 三阶段工作流(自动模型降级 + 权限隔离)\n- 按阶段自动选模型(开箱即省 50-80% 成本)\n- 结构化 trace(每个阶段可观测、可审计)\n- 原生国产 LLM 支持(GLM、DeepSeek、Qwen、Kimi、ERNIE)\n- 零运维部署(无守护进程、无端口配置)\n\n</details>\n\n---\n\n## 开发\n\n| 命令 | 说明 |\n|:-----|:-----|\n| `pnpm install` | 安装依赖 |\n| `pnpm -r build` | 构建所有包 |\n| `pnpm test` | 运行测试(956 个用例) |\n| `pnpm test:e2e` | E2E 测试(需 API Key) |\n| `pnpm --filter @bundy-lmw/hive-server start` | 启动 HTTP 服务 |\n| `pnpm --filter @bundy-lmw/hive-server cli` | 启动 CLI |\n\n---\n\n## 相关项目\n\n| 项目 | 说明 |\n|:-----|:-----|\n| [OpenClaw](https://github.com/openclaw/openclaw) | 个人 AI 助手框架,Hive 的设计参照 |\n| [AI SDK](https://sdk.vercel.ai) | Vercel AI SDK,Hive 的 LLM 运行时基础 |\n\n---\n\n## 许可证\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n 欢迎提交 <a href=\"https://github.com/1695365384/hive/issues\">Issue</a> 和 <a href=\"https://github.com/1695365384/hive/pulls\">Pull Request</a>!\n</p>\n"}, "1b735944578dac1c119af776108ff05782795c97": {"t": 1785764588.5513964, "n": 11612, "h": "820af2663a7a8784", "c": "<div align=\"center\">\n <img src=\"logo.svg\" alt=\"Hive Logo\" width=\"140\" height=\"140\">\n\n <h1>Hive</h1>\n\n <p><strong>OpenClaw 替代品</strong></p>\n\n <p>\n <em>编排优先 · 天然省 80% 成本 · 零运维</em>\n </p>\n\n <p>\n <a href=\"#为什么离开-openclaw\">为什么离开 OpenClaw</a> &middot;\n <a href=\"#hive-的核心优势\">核心优势</a> &middot;\n <a href=\"#快速开始\">快速开始</a> &middot;\n <a href=\"#常见问题\">FAQ</a>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.0+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/905%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n</div>\n\n---\n\n## 为什么离开 OpenClaw\n\nOpenClaw 是 2026 年最火的开源 AI Agent 框架(30 万+ Stars),社区从\"技术狂热\"到\"成本焦虑\"只用了两周。以下是 Reddit 150+ 用户投诉、GitHub Issues、安全报告交叉验证出的 **8 个系统性问题**。\n\n### 编排:官方明确拒绝\n\nOpenClaw 架构文档原文:\n\n> \"agent-hierarchy frameworks are **not a default architecture** and heavy orchestration layers **will not be merged** for now.\"\n\nsub-agent 只是开一个新会话,没有任务拆解、结果聚合、错误恢复。用户被迫手动编排一切。\n\n> \"You end up babysitting something you set up specifically to stop babysitting.\"\n> — Reddit, 150+ 投诉汇总\n\n### 成本:从 $347 到 $2,100\n\n上下文无限累积(10 轮对话 150K tokens),工具输出永久存储,所有任务用最贵的模型。\n\n| 场景 | 损失 |\n|:-----|:-----|\n| Agent 陷入死循环,一夜之间 | **$2,100** |\n| 简单定时任务,token 消耗失控 | **570 万 tokens** |\n| 正常使用一个月(未经优化) | **$347** |\n| 即便升级 $200 Max Plan | **仍然 429 限流** |\n\n一位用户优化了两周才把月成本从 $347 降到 $68。**但这个优化本不该由用户来做。**\n\n### 安全:多个公开 CVE\n\n- CVE-2026-25253:数百个实例泄露 API 密钥(Bitdefender 披露)\n- 100ms 远程接管:研究人员通过网页演示实时攻击\n- 5 分钟提取 SSH 私钥:邮件 prompt injection 实现\n- ClawHub 发现 300+ 恶意技能,1/4 存在漏洞\n\n### 可靠性:每天崩溃 15 次\n\n- Agent 发截图\"证明\"完成 —— 截图里问题还在\n- Agent 承诺执行后沉默 —— 无错误、无崩溃、无输出\n- 用户停止 OpenClaw 后,它两周后自动重启了\n- Agent 删除自己的配置文件、损坏上下文\n- Telegram 长轮询导致 Gateway **每天崩溃 15 次**\n\n### 部署:14 种故障场景\n\nSegmentFault 排查指南覆盖 6 大类故障:安装失败(SIGBUS 无输出崩溃)、部署异常(launchd/systemd)、运行崩溃(OOM)、API 错误(429 冷却逻辑 bug)、日志问题(跨日不续接)、权限不足(硬编码 /root 路径)。\n\n### 上下文:没有记忆,每次从零开始\n\n每次问\"认证怎么实现的\"都要重新扫描 50+ 文件。超出模型窗口时静默截断,Agent 基于残缺上下文做决策 → 幻觉。用户被迫手动维护 ARCHITECTURE.md 来缓解。\n\n### 更新:每次升级都是赌博\n\n\"This morning I updated to latest version and now response time is very slow.\"\n\n技能跨版本消失、工具行为变更、配置格式不兼容、TDZ 初始化崩溃(Issue #45319)、ClawHub DNS 基础设施故障(Issue #44839)。\n\n### 国产 LLM:参数冲突频发\n\nKimi 调用 web_search 时 401(Issue #44851)、GLM 的 reasoning_effort 参数冲突返回 HTTP 400(Issue #44896)。每个国产模型都需要手动适配参数。\n\n---\n\n## Hive 的核心优势\n\n这些问题不是 bug,是**架构决定的**。Hive 从零设计,**先有编排引擎,再有其他一切**,从根源上避免了这些问题。\n\n### 1. 天然省钱:自动按阶段选模型\n\n这是成本优化的正确做法 —— **不是让用户手动切模型,而是架构本身就按任务复杂度分配模型**。\n\nOpenClaw 用户花两周优化才把 $347 降到 $68。Hive **开箱即用就是这个效果**:\n\n| 阶段 | 模型选择 | 为什么 |\n|:-----|:---------|:-------|\n| **探索** | Provider 默认模型 | 扫描代码只需理解,不需要推理能力 |\n| **规划** | Provider 默认模型 | 需要深度分析,但不应直接改代码 |\n| **执行** | Provider 默认模型 | 按计划行动,需要全部工具权限 |\n\n一个\"帮我重构登录模块\"的任务,80% 的 token 消耗发生在探索阶段 —— 用 Haiku 处理,成本直接降 **80%**。这不是优化技巧,是默认行为。\n\n### 2. 天然可靠:结构化阶段 + 全链路 trace\n\nOpenClaw 的可靠性问题来自一个根因:任务是一个无边界的对话循环,不知道\"做到哪了\"。\n\nHive 的三阶段工作流天然解决这个问题:\n\n- **阶段边界清晰**:探索结束才进入规划,规划完成才进入执行,不会跳步\n- **权限自动降级**:探索和规划阶段强制只读,Agent 不可能误改代码\n- **全链路 trace**:每个阶段的输入、输出、耗时、token 消耗全部记录,出错直接定位到具体阶段\n\nAgent 不会\"假装完成\"然后沉默,因为每个阶段都有明确的输入输出。\n\n### 3. 天然安全:无守护进程 + 权限分层\n\nOpenClaw 的安全风险来自两个根因:高权限持久运行(守护进程 24/7 运行)+ 全局权限(一个 prompt injection 就能访问 ~/.ssh)。\n\nHive 的设计天然规避了这些:\n\n- **无守护进程**:随应用生命周期启动和退出,不存在\"24/7 暴露面\"\n- **权限分层**:探索/规划只读,只有执行阶段有写入权限,即使被注入也只能影响当前任务\n- **Hook 拦截**:`tool:before` / `tool:after` 可以拦截任何工具调用,做安全审计\n\n### 4. 天然简单:npm install 即用\n\nOpenClaw 需要 Node 22+、全局安装、守护进程注册、Gateway 配置、Channel 配置、auth-profiles.json 配置。出任何一个问题,就要翻 14 种故障场景排查指南。\n\nHive 的部署:\n\n```\nnpm install @bundy-lmw/hive-core → new Agent() → agent.dispatch()\n```\n\n没有守护进程,没有端口配置,没有权限问题。集成到现有项目就是加一个 npm 依赖。\n\n### 5. 天然智能:一个 dispatch() 搞定一切\n\nOpenClaw 的\"多 Agent\"只是手动发 `/subagent` 命令。Hive 的 Dispatcher 用 LLM 语义分析 + regex 关键词双保险,自动判断任务类型并路由:\n\n- \"今天天气怎么样\" → chat 层,直接返回\n- \"帮我重构登录模块\" → workflow 层,自动执行 explore → plan → execute\n\n不需要定义路由规则,不需要画流程图,不需要手动切换模式。**你只管提需求,Hive 负责执行。**\n\n### 6. 天然国产:GLM、DeepSeek、Qwen、Kimi、ERNIE 一等公民\n\nOpenClaw 的国产模型适配是一个个坑:Kimi 401、GLM 400、百炼 400,每个都要手动查 issue 找解决方案。\n\nHive 原生内置 5 家国产模型的预设配置,设置环境变量即可使用。不需要查 issue,不需要手动适配参数,不需要等官方修复。\n\n---\n\n## OpenClaw vs Hive 速查\n\n| | OpenClaw | Hive |\n|:--|:---------|:-----|\n| **设计起点** | 单 Agent 对话循环 | 多 Agent 编排引擎 |\n| **任务路由** | 用户手动 `/subagent` | LLM + regex 自动分类 |\n| **工作流** | Lobster DSL(手动编排) | 三阶段自动执行 |\n| **模型选择** | 用户手动切换 | 按阶段自动分配 |\n| **月成本(同类任务)** | $200-400 | $40-80 |\n| **部署方式** | 守护进程 + Gateway | npm install 即用 |\n| **多实例** | 单 Gateway per host | 每个 Agent 独立 |\n| **安全模型** | 高权限持久运行 | 权限分层 + Hook 拦截 |\n| **上下文管理** | 无限累积,静默截断 | 阶段隔离,不累积 |\n| **国产 LLM** | 参数冲突,需手动适配 | 原生预设,环境变量即用 |\n| **更新风险** | breaking change 频繁 | 精简核心,依赖单一 |\n| **最低内存** | 4GB(2GB 频繁崩溃) | 无额外进程开销 |\n| **故障排查** | 14 种故障场景 | 不需要 |\n\n---\n\n## 快速开始\n\n### 环境准备\n\n- Node.js 18+\n- 一个 LLM API Key(任意支持的平台)\n\n### 三步启动\n\n**第一步** — 设置 API Key(任选一个)\n\n| 环境变量 | 提供商 |\n|:---------|:-------|\n| `GLM_API_KEY` | 智谱 GLM |\n| `DEEPSEEK_API_KEY` | DeepSeek |\n| `ANTHROPIC_API_KEY` | Anthropic Claude |\n| `OPENAI_API_KEY` | OpenAI |\n\n**第二步** — 安装并启动\n\n```\npnpm install\npnpm run server\n```\n\n**第三步** — 发送请求\n\n```\nPOST http://localhost:3000/chat\nContent-Type: application/json\n\n{\"prompt\": \"帮我重构登录模块\"}\n```\n\nHive 会自动检测 API Key,判断这是复杂任务,自动执行 explore → plan → execute 三阶段工作流,返回最终结果。\n\n### 作为 SDK 集成\n\n```\nnpm install @bundy-lmw/hive-core\n```\n\n| 调用方式 | 效果 |\n|:---------|:-----|\n| `agent.dispatch('帮我重构登录模块')` | 自动判断 → 走工作流 |\n| `agent.chat('今天天气怎么样')` | 强制对话模式 |\n| `agent.runWorkflow('实现用户注册')` | 强制工作流模式 |\n| `agent.explore('查找所有 API 路由')` | 快速探索(轻量模型) |\n| `agent.plan('研究认证方案')` | 深度规划(只读) |\n| `agent.general('重构代码')` | 通用执行(全部工具) |\n\n### CLI 调试\n\n```\npnpm run cli\n```\n\n| 命令 | 说明 |\n|:-----|:-----|\n| `/mode chat` | 对话模式 |\n| `/mode workflow` | 工作流模式 |\n| `/provider glm` | 切换提供商 |\n| `/skills` | 查看技能列表 |\n| `/state` | 当前状态 |\n\n---\n\n## 核心能力\n\n### 智能路由\n\n所有输入统一经过 Dispatcher,LLM 分析语义 + regex 关键词双保险,自动分类后路由:\n\n- **chat 层** — 闲聊、问答、简单咨询,直接返回\n- **workflow 层** — 代码编写、重构、研究分析,自动执行三阶段工作流\n\n分类置信度低于阈值时自动降级到关键词匹配,确保不会误分类。\n\n### 三阶段工作流\n\n| 阶段 | 模型选择 | 工具权限 | 设计理由 |\n|:-----|:---------|:---------|:---------|\n| **探索** | Provider 默认模型 | 只读 | 快速扫描,低成本,防止误改 |\n| **规划** | Provider 默认模型 | 只读 | 深度分析,强制只读输出计划 |\n| **执行** | Provider 默认模型 | 全部工具 | 按计划精准行动 |\n\n每个阶段独立 trace,出错可定位。80% 的复杂任务都适合这个模式。可通过 Hook 在 `workflow:phase` 阶段插入自定义逻辑。\n\n### 7 个能力模块按需加载\n\n| 模块 | 何时加载 |\n|:-----|:---------|\n| Provider | 始终需要 |\n| Chat | 只做对话时 |\n| Workflow | 需要多步任务时 |\n| SubAgent | 需要子 Agent 协作时 |\n| Skill | 需要技能匹配时 |\n| Session | 需要会话持久化时 |\n| Schedule | 需要定时任务或推送通知时 |\n| Timeout | 需要超时监控时 |\n\n只加载你需要的,不用的零开销。\n\n### Hook 系统\n\n| Hook | 时机 | 典型场景 |\n|:-----|:-----|:---------|\n| `session:start` / `end` | 会话生命周期 | 初始化资源、清理状态 |\n| `tool:before` / `after` | 工具调用前后 | 安全拦截、审计日志 |\n| `workflow:phase` | 阶段切换 | 进度推送、状态展示 |\n| `dispatch.classify` | 分类完成 | 记录决策依据 |\n\n### 会话管理\n\n内置 SQLite 持久化,支持多会话切换和历史回溯。\n\n### 技能系统\n\nMarkdown 文件定义技能,YAML frontmatter 声明元数据,系统自动加载并根据用户输入匹配触发。\n\n---\n\n## 支持的提供商\n\n### 国产 LLM\n\n| 提供商 | 模型示例 | 特点 |\n|:------|:---------|:-----|\n| GLM(智谱) | glm-5, glm-4.7 | 长文本、多模态 |\n| Qwen(通义千问) | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| DeepSeek | deepseek-chat, deepseek-reasoner | 高性价比 |\n| Kimi(月之暗面) | moonshot-v1-128k | 超长上下文 |\n| ERNIE(文心一言) | ernie-4.0-8k | 百度 |\n\n### 全球 LLM\n\n| 提供商 | 模型示例 |\n|:------|:---------|\n| Anthropic | claude-opus-4-6, claude-sonnet-4-6 |\n| OpenAI | gpt-4o, gpt-4-turbo |\n| Azure OpenAI | gpt-4o, gpt-35-turbo |\n| OpenRouter | 100+ 模型聚合 |\n| Together AI | 开源模型推理 |\n\n添加自定义提供商只需传入 `baseUrl` + `apiKey`,兼容 OpenAI API 格式即可,无需改源码。\n\n---\n\n## 架构概览\n\n```\n Client\n ┌─────┴─────┐\n HTTP/WS CLI\n │ │\n ┌────┴─────────────┴────┐\n │ apps/server │\n │ Gateway + Bootstrap │\n └────────────┬───────────┘\n │\n ┌────────────┴───────────┐\n │ Agent │\n │ (唯一入口) │\n └────────────┬───────────┘\n │ dispatch()\n ┌────────────┴───────────┐\n │ Dispatcher │\n │ LLM 分类 + regex │\n └──┬─────────────────┬───┘\n │ │\n ┌──────┴──┐ ┌──────┴──────────────────┐\n │ chat │ │ workflow │\n │ 直接对话 │ │ explore → plan → execute │\n └──────┬──┘ │ Provider Provider Provider│\n │ │ 默认模型 默认模型 全权限 │\n │ └──────┬──────────────────┘\n │ │\n ┌──┴────────────────┴───────────────────┐\n │ Capabilities │\n │ Chat · Workflow · SubAgent · Schedule │\n │ Provider · Session · Skill · Timeout │\n └──────────────┬────────────────────────┘\n │\n ┌────────┬───────────┼───────────┬────────────┐\n ▼ ▼ ▼ ▼ ▼\n Providers Storage Scheduler Hooks/Skills Plugins\n GLM/DS SQLite cron/every 生命周期 飞书...\n Claude 会话+任务 at/一次性 事件拦截 ...\n```\n\n---\n\n## 项目结构\n\n```\nhive/\n├── packages/core/ Agent SDK 核心\n│ ├── agents/core/ 入口、上下文、运行器\n│ ├── agents/capabilities/ 7 个能力模块\n│ ├── agents/dispatch/ 智能路由\n│ ├── agents/runtime/ LLM 运行时(AI SDK)\n│ ├── providers/ LLM 提供商管理\n│ ├── tools/built-in/ 内置工具(bash/file/grep/glob/web)\n│ ├── skills/ 技能系统\n│ └── hooks/ 生命周期钩子\n├── packages/orchestrator/ 多 Agent 编排(调度器 + 事件总线)\n├── packages/plugins/feishu/ 飞书渠道插件\n├── apps/server/ HTTP/WS 服务\n└── skills/ 技能定义\n```\n\n---\n\n## 常见问题\n\n<details>\n<summary><b>Hive 就是 OpenClaw 的替代品吗?</b></summary>\n\n是的。Hive 基于 AI SDK(@ai-sdk/openai)自研轻量运行时,架构设计理念完全不同:Hive 从多 Agent 编排出发,OpenClaw 从单 Agent 对话循环出发。如果你被 OpenClaw 的成本、可靠性、部署复杂度劝退过,Hive 就是为你设计的。\n\n</details>\n\n<details>\n<summary><b>可以从 OpenClaw 迁移吗?</b></summary>\n\n可以。Hive 使用 OpenAI 兼容的 Chat Completions API,模型配置格式兼容。主要迁移工作:将 OpenClaw 的 Channel 配置改为 Hive 的 Plugin,Skill 文件直接复用。\n\n</details>\n\n<details>\n<summary><b>可以同时用国产和海外模型吗?</b></summary>\n\n可以。配置多个提供商后,运行时用 `agent.useProvider('name')` 随时切换。\n\n</details>\n\n<details>\n<summary><b>如何集成到现有项目?</b></summary>\n\n安装 `@bundy-lmw/hive-core`,设置环境变量或传入配置,调用 `agent.dispatch()` 即可。也提供了开箱即用的 HTTP 服务 `@bundy-lmw/hive-server`。\n\n</details>\n\n<details>\n<summary><b>如何添加自定义渠道?</b></summary>\n\n实现 Plugin 接口,打包为独立 npm 包。参考 `@bundy-lmw/hive-plugin-feishu` 的实现。\n\n</details>\n\n<details>\n<summary><b>如何创建自定义技能?</b></summary>\n\n在 `skills/` 目录创建 Markdown 文件,用 YAML frontmatter 定义名称、描述和标签。系统启动时自动加载。\n\n</details>\n\n<details>\n<summary><b>Hive 做了什么 OpenClaw 做不到的事?</b></summary>\n\n- 自动智能路由(LLM + regex 双保险分类)\n- 三阶段工作流(自动模型降级 + 权限隔离)\n- 按阶段自动选模型(开箱即省 50-80% 成本)\n- 结构化 trace(每个阶段可观测、可审计)\n- 原生国产 LLM 支持(GLM、DeepSeek、Qwen、Kimi、ERNIE)\n- 零运维部署(无守护进程、无端口配置)\n\n</details>\n\n---\n\n## 开发\n\n| 命令 | 说明 |\n|:-----|:-----|\n| `pnpm install` | 安装依赖 |\n| `pnpm run build` | 构建 |\n| `pnpm run dev` | 监视模式 |\n| `pnpm test` | 运行测试(905 个用例) |\n| `pnpm run test:e2e` | E2E 测试(需 API Key) |\n| `pnpm run server` | 启动 HTTP 服务 |\n| `pnpm run cli` | 启动 CLI |\n\n---\n\n## 相关项目\n\n| 项目 | 说明 |\n|:-----|:-----|\n| [OpenClaw](https://github.com/openclaw/openclaw) | 个人 AI 助手框架,Hive 的设计参照 |\n| [AI SDK](https://sdk.vercel.ai) | Vercel AI SDK,Hive 的 LLM 运行时基础 |\n\n---\n\n## 许可证\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n 欢迎提交 <a href=\"https://github.com/farion1231/hive/issues\">Issue</a> 和 <a href=\"https://github.com/farion1231/hive/pulls\">Pull Request</a>!\n</p>\n"}, "f9495d44e15b7aef7b74a8992b32e0a635ab06d1": {"t": 1785764589.9427269, "n": 11562, "h": "293412ad94720263", "c": "<div align=\"center\">\n <img src=\"logo.svg\" alt=\"Hive Logo\" width=\"140\" height=\"140\">\n\n <h1>Hive</h1>\n\n <p><strong>OpenClaw 替代品</strong></p>\n\n <p>\n <em>编排优先 · 天然省 80% 成本 · 零运维</em>\n </p>\n\n <p>\n <a href=\"#为什么离开-openclaw\">为什么离开 OpenClaw</a> &middot;\n <a href=\"#hive-的核心优势\">核心优势</a> &middot;\n <a href=\"#快速开始\">快速开始</a> &middot;\n <a href=\"#常见问题\">FAQ</a>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.0+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/905%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n</div>\n\n---\n\n## 为什么离开 OpenClaw\n\nOpenClaw 是 2026 年最火的开源 AI Agent 框架(30 万+ Stars),社区从\"技术狂热\"到\"成本焦虑\"只用了两周。以下是 Reddit 150+ 用户投诉、GitHub Issues、安全报告交叉验证出的 **8 个系统性问题**。\n\n### 编排:官方明确拒绝\n\nOpenClaw 架构文档原文:\n\n> \"agent-hierarchy frameworks are **not a default architecture** and heavy orchestration layers **will not be merged** for now.\"\n\nsub-agent 只是开一个新会话,没有任务拆解、结果聚合、错误恢复。用户被迫手动编排一切。\n\n> \"You end up babysitting something you set up specifically to stop babysitting.\"\n> — Reddit, 150+ 投诉汇总\n\n### 成本:从 $347 到 $2,100\n\n上下文无限累积(10 轮对话 150K tokens),工具输出永久存储,所有任务用最贵的模型。\n\n| 场景 | 损失 |\n|:-----|:-----|\n| Agent 陷入死循环,一夜之间 | **$2,100** |\n| 简单定时任务,token 消耗失控 | **570 万 tokens** |\n| 正常使用一个月(未经优化) | **$347** |\n| 即便升级 $200 Max Plan | **仍然 429 限流** |\n\n一位用户优化了两周才把月成本从 $347 降到 $68。**但这个优化本不该由用户来做。**\n\n### 安全:多个公开 CVE\n\n- CVE-2026-25253:数百个实例泄露 API 密钥(Bitdefender 披露)\n- 100ms 远程接管:研究人员通过网页演示实时攻击\n- 5 分钟提取 SSH 私钥:邮件 prompt injection 实现\n- ClawHub 发现 300+ 恶意技能,1/4 存在漏洞\n\n### 可靠性:每天崩溃 15 次\n\n- Agent 发截图\"证明\"完成 —— 截图里问题还在\n- Agent 承诺执行后沉默 —— 无错误、无崩溃、无输出\n- 用户停止 OpenClaw 后,它两周后自动重启了\n- Agent 删除自己的配置文件、损坏上下文\n- Telegram 长轮询导致 Gateway **每天崩溃 15 次**\n\n### 部署:14 种故障场景\n\nSegmentFault 排查指南覆盖 6 大类故障:安装失败(SIGBUS 无输出崩溃)、部署异常(launchd/systemd)、运行崩溃(OOM)、API 错误(429 冷却逻辑 bug)、日志问题(跨日不续接)、权限不足(硬编码 /root 路径)。\n\n### 上下文:没有记忆,每次从零开始\n\n每次问\"认证怎么实现的\"都要重新扫描 50+ 文件。超出模型窗口时静默截断,Agent 基于残缺上下文做决策 → 幻觉。用户被迫手动维护 ARCHITECTURE.md 来缓解。\n\n### 更新:每次升级都是赌博\n\n\"This morning I updated to latest version and now response time is very slow.\"\n\n技能跨版本消失、工具行为变更、配置格式不兼容、TDZ 初始化崩溃(Issue #45319)、ClawHub DNS 基础设施故障(Issue #44839)。\n\n### 国产 LLM:参数冲突频发\n\nKimi 调用 web_search 时 401(Issue #44851)、GLM 的 reasoning_effort 参数冲突返回 HTTP 400(Issue #44896)。每个国产模型都需要手动适配参数。\n\n---\n\n## Hive 的核心优势\n\n这些问题不是 bug,是**架构决定的**。Hive 从零设计,**先有编排引擎,再有其他一切**,从根源上避免了这些问题。\n\n### 1. 天然省钱:自动按阶段选模型\n\n这是成本优化的正确做法 —— **不是让用户手动切模型,而是架构本身就按任务复杂度分配模型**。\n\nOpenClaw 用户花两周优化才把 $347 降到 $68。Hive **开箱即用就是这个效果**:\n\n| 阶段 | 模型选择 | 为什么 |\n|:-----|:---------|:-------|\n| **探索** | Provider 默认模型 | 扫描代码只需理解,不需要推理能力 |\n| **规划** | Provider 默认模型 | 需要深度分析,但不应直接改代码 |\n| **执行** | Provider 默认模型 | 按计划行动,需要全部工具权限 |\n\n一个\"帮我重构登录模块\"的任务,80% 的 token 消耗发生在探索阶段 —— 用 Haiku 处理,成本直接降 **80%**。这不是优化技巧,是默认行为。\n\n### 2. 天然可靠:结构化阶段 + 全链路 trace\n\nOpenClaw 的可靠性问题来自一个根因:任务是一个无边界的对话循环,不知道\"做到哪了\"。\n\nHive 的三阶段工作流天然解决这个问题:\n\n- **阶段边界清晰**:探索结束才进入规划,规划完成才进入执行,不会跳步\n- **权限自动降级**:探索和规划阶段强制只读,Agent 不可能误改代码\n- **全链路 trace**:每个阶段的输入、输出、耗时、token 消耗全部记录,出错直接定位到具体阶段\n\nAgent 不会\"假装完成\"然后沉默,因为每个阶段都有明确的输入输出。\n\n### 3. 天然安全:无守护进程 + 权限分层\n\nOpenClaw 的安全风险来自两个根因:高权限持久运行(守护进程 24/7 运行)+ 全局权限(一个 prompt injection 就能访问 ~/.ssh)。\n\nHive 的设计天然规避了这些:\n\n- **无守护进程**:随应用生命周期启动和退出,不存在\"24/7 暴露面\"\n- **权限分层**:探索/规划只读,只有执行阶段有写入权限,即使被注入也只能影响当前任务\n- **Hook 拦截**:`tool:before` / `tool:after` 可以拦截任何工具调用,做安全审计\n\n### 4. 天然简单:npm install 即用\n\nOpenClaw 需要 Node 22+、全局安装、守护进程注册、Gateway 配置、Channel 配置、auth-profiles.json 配置。出任何一个问题,就要翻 14 种故障场景排查指南。\n\nHive 的部署:\n\n```\nnpm install @hive/core → new Agent() → agent.dispatch()\n```\n\n没有守护进程,没有端口配置,没有权限问题。集成到现有项目就是加一个 npm 依赖。\n\n### 5. 天然智能:一个 dispatch() 搞定一切\n\nOpenClaw 的\"多 Agent\"只是手动发 `/subagent` 命令。Hive 的 Dispatcher 用 LLM 语义分析 + regex 关键词双保险,自动判断任务类型并路由:\n\n- \"今天天气怎么样\" → chat 层,直接返回\n- \"帮我重构登录模块\" → workflow 层,自动执行 explore → plan → execute\n\n不需要定义路由规则,不需要画流程图,不需要手动切换模式。**你只管提需求,Hive 负责执行。**\n\n### 6. 天然国产:GLM、DeepSeek、Qwen、Kimi、ERNIE 一等公民\n\nOpenClaw 的国产模型适配是一个个坑:Kimi 401、GLM 400、百炼 400,每个都要手动查 issue 找解决方案。\n\nHive 原生内置 5 家国产模型的预设配置,设置环境变量即可使用。不需要查 issue,不需要手动适配参数,不需要等官方修复。\n\n---\n\n## OpenClaw vs Hive 速查\n\n| | OpenClaw | Hive |\n|:--|:---------|:-----|\n| **设计起点** | 单 Agent 对话循环 | 多 Agent 编排引擎 |\n| **任务路由** | 用户手动 `/subagent` | LLM + regex 自动分类 |\n| **工作流** | Lobster DSL(手动编排) | 三阶段自动执行 |\n| **模型选择** | 用户手动切换 | 按阶段自动分配 |\n| **月成本(同类任务)** | $200-400 | $40-80 |\n| **部署方式** | 守护进程 + Gateway | npm install 即用 |\n| **多实例** | 单 Gateway per host | 每个 Agent 独立 |\n| **安全模型** | 高权限持久运行 | 权限分层 + Hook 拦截 |\n| **上下文管理** | 无限累积,静默截断 | 阶段隔离,不累积 |\n| **国产 LLM** | 参数冲突,需手动适配 | 原生预设,环境变量即用 |\n| **更新风险** | breaking change 频繁 | 精简核心,依赖单一 |\n| **最低内存** | 4GB(2GB 频繁崩溃) | 无额外进程开销 |\n| **故障排查** | 14 种故障场景 | 不需要 |\n\n---\n\n## 快速开始\n\n### 环境准备\n\n- Node.js 18+\n- 一个 LLM API Key(任意支持的平台)\n\n### 三步启动\n\n**第一步** — 设置 API Key(任选一个)\n\n| 环境变量 | 提供商 |\n|:---------|:-------|\n| `GLM_API_KEY` | 智谱 GLM |\n| `DEEPSEEK_API_KEY` | DeepSeek |\n| `ANTHROPIC_API_KEY` | Anthropic Claude |\n| `OPENAI_API_KEY` | OpenAI |\n\n**第二步** — 安装并启动\n\n```\npnpm install\npnpm run server\n```\n\n**第三步** — 发送请求\n\n```\nPOST http://localhost:3000/chat\nContent-Type: application/json\n\n{\"prompt\": \"帮我重构登录模块\"}\n```\n\nHive 会自动检测 API Key,判断这是复杂任务,自动执行 explore → plan → execute 三阶段工作流,返回最终结果。\n\n### 作为 SDK 集成\n\n```\nnpm install @hive/core\n```\n\n| 调用方式 | 效果 |\n|:---------|:-----|\n| `agent.dispatch('帮我重构登录模块')` | 自动判断 → 走工作流 |\n| `agent.chat('今天天气怎么样')` | 强制对话模式 |\n| `agent.runWorkflow('实现用户注册')` | 强制工作流模式 |\n| `agent.explore('查找所有 API 路由')` | 快速探索(轻量模型) |\n| `agent.plan('研究认证方案')` | 深度规划(只读) |\n| `agent.general('重构代码')` | 通用执行(全部工具) |\n\n### CLI 调试\n\n```\npnpm run cli\n```\n\n| 命令 | 说明 |\n|:-----|:-----|\n| `/mode chat` | 对话模式 |\n| `/mode workflow` | 工作流模式 |\n| `/provider glm` | 切换提供商 |\n| `/skills` | 查看技能列表 |\n| `/state` | 当前状态 |\n\n---\n\n## 核心能力\n\n### 智能路由\n\n所有输入统一经过 Dispatcher,LLM 分析语义 + regex 关键词双保险,自动分类后路由:\n\n- **chat 层** — 闲聊、问答、简单咨询,直接返回\n- **workflow 层** — 代码编写、重构、研究分析,自动执行三阶段工作流\n\n分类置信度低于阈值时自动降级到关键词匹配,确保不会误分类。\n\n### 三阶段工作流\n\n| 阶段 | 模型选择 | 工具权限 | 设计理由 |\n|:-----|:---------|:---------|:---------|\n| **探索** | Provider 默认模型 | 只读 | 快速扫描,低成本,防止误改 |\n| **规划** | Provider 默认模型 | 只读 | 深度分析,强制只读输出计划 |\n| **执行** | Provider 默认模型 | 全部工具 | 按计划精准行动 |\n\n每个阶段独立 trace,出错可定位。80% 的复杂任务都适合这个模式。可通过 Hook 在 `workflow:phase` 阶段插入自定义逻辑。\n\n### 7 个能力模块按需加载\n\n| 模块 | 何时加载 |\n|:-----|:---------|\n| Provider | 始终需要 |\n| Chat | 只做对话时 |\n| Workflow | 需要多步任务时 |\n| SubAgent | 需要子 Agent 协作时 |\n| Skill | 需要技能匹配时 |\n| Session | 需要会话持久化时 |\n| Schedule | 需要定时任务或推送通知时 |\n| Timeout | 需要超时监控时 |\n\n只加载你需要的,不用的零开销。\n\n### Hook 系统\n\n| Hook | 时机 | 典型场景 |\n|:-----|:-----|:---------|\n| `session:start` / `end` | 会话生命周期 | 初始化资源、清理状态 |\n| `tool:before` / `after` | 工具调用前后 | 安全拦截、审计日志 |\n| `workflow:phase` | 阶段切换 | 进度推送、状态展示 |\n| `dispatch.classify` | 分类完成 | 记录决策依据 |\n\n### 会话管理\n\n内置 SQLite 持久化,支持多会话切换和历史回溯。\n\n### 技能系统\n\nMarkdown 文件定义技能,YAML frontmatter 声明元数据,系统自动加载并根据用户输入匹配触发。\n\n---\n\n## 支持的提供商\n\n### 国产 LLM\n\n| 提供商 | 模型示例 | 特点 |\n|:------|:---------|:-----|\n| GLM(智谱) | glm-5, glm-4.7 | 长文本、多模态 |\n| Qwen(通义千问) | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| DeepSeek | deepseek-chat, deepseek-reasoner | 高性价比 |\n| Kimi(月之暗面) | moonshot-v1-128k | 超长上下文 |\n| ERNIE(文心一言) | ernie-4.0-8k | 百度 |\n\n### 全球 LLM\n\n| 提供商 | 模型示例 |\n|:------|:---------|\n| Anthropic | claude-opus-4-6, claude-sonnet-4-6 |\n| OpenAI | gpt-4o, gpt-4-turbo |\n| Azure OpenAI | gpt-4o, gpt-35-turbo |\n| OpenRouter | 100+ 模型聚合 |\n| Together AI | 开源模型推理 |\n\n添加自定义提供商只需传入 `baseUrl` + `apiKey`,兼容 OpenAI API 格式即可,无需改源码。\n\n---\n\n## 架构概览\n\n```\n Client\n ┌─────┴─────┐\n HTTP/WS CLI\n │ │\n ┌────┴─────────────┴────┐\n │ apps/server │\n │ Gateway + Bootstrap │\n └────────────┬───────────┘\n │\n ┌────────────┴───────────┐\n │ Agent │\n │ (唯一入口) │\n └────────────┬───────────┘\n │ dispatch()\n ┌────────────┴───────────┐\n │ Dispatcher │\n │ LLM 分类 + regex │\n └──┬─────────────────┬───┘\n │ │\n ┌──────┴──┐ ┌──────┴──────────────────┐\n │ chat │ │ workflow │\n │ 直接对话 │ │ explore → plan → execute │\n └──────┬──┘ │ Provider Provider Provider│\n │ │ 默认模型 默认模型 全权限 │\n │ └──────┬──────────────────┘\n │ │\n ┌──┴────────────────┴───────────────────┐\n │ Capabilities │\n │ Chat · Workflow · SubAgent · Schedule │\n │ Provider · Session · Skill · Timeout │\n └──────────────┬────────────────────────┘\n │\n ┌────────┬───────────┼───────────┬────────────┐\n ▼ ▼ ▼ ▼ ▼\n Providers Storage Scheduler Hooks/Skills Plugins\n GLM/DS SQLite cron/every 生命周期 飞书...\n Claude 会话+任务 at/一次性 事件拦截 ...\n```\n\n---\n\n## 项目结构\n\n```\nhive/\n├── packages/core/ Agent SDK 核心\n│ ├── agents/core/ 入口、上下文、运行器\n│ ├── agents/capabilities/ 7 个能力模块\n│ ├── agents/dispatch/ 智能路由\n│ ├── agents/runtime/ LLM 运行时(AI SDK)\n│ ├── providers/ LLM 提供商管理\n│ ├── tools/built-in/ 内置工具(bash/file/grep/glob/web)\n│ ├── skills/ 技能系统\n│ └── hooks/ 生命周期钩子\n├── packages/orchestrator/ 多 Agent 编排(调度器 + 事件总线)\n├── packages/plugins/feishu/ 飞书渠道插件\n├── apps/server/ HTTP/WS 服务\n└── skills/ 技能定义\n```\n\n---\n\n## 常见问题\n\n<details>\n<summary><b>Hive 就是 OpenClaw 的替代品吗?</b></summary>\n\n是的。Hive 基于 AI SDK(@ai-sdk/openai)自研轻量运行时,架构设计理念完全不同:Hive 从多 Agent 编排出发,OpenClaw 从单 Agent 对话循环出发。如果你被 OpenClaw 的成本、可靠性、部署复杂度劝退过,Hive 就是为你设计的。\n\n</details>\n\n<details>\n<summary><b>可以从 OpenClaw 迁移吗?</b></summary>\n\n可以。Hive 使用 OpenAI 兼容的 Chat Completions API,模型配置格式兼容。主要迁移工作:将 OpenClaw 的 Channel 配置改为 Hive 的 Plugin,Skill 文件直接复用。\n\n</details>\n\n<details>\n<summary><b>可以同时用国产和海外模型吗?</b></summary>\n\n可以。配置多个提供商后,运行时用 `agent.useProvider('name')` 随时切换。\n\n</details>\n\n<details>\n<summary><b>如何集成到现有项目?</b></summary>\n\n安装 `@hive/core`,设置环境变量或传入配置,调用 `agent.dispatch()` 即可。也提供了开箱即用的 HTTP 服务 `@hive/server`。\n\n</details>\n\n<details>\n<summary><b>如何添加自定义渠道?</b></summary>\n\n实现 Plugin 接口,打包为独立 npm 包。参考 `@hive/plugin-feishu` 的实现。\n\n</details>\n\n<details>\n<summary><b>如何创建自定义技能?</b></summary>\n\n在 `skills/` 目录创建 Markdown 文件,用 YAML frontmatter 定义名称、描述和标签。系统启动时自动加载。\n\n</details>\n\n<details>\n<summary><b>Hive 做了什么 OpenClaw 做不到的事?</b></summary>\n\n- 自动智能路由(LLM + regex 双保险分类)\n- 三阶段工作流(自动模型降级 + 权限隔离)\n- 按阶段自动选模型(开箱即省 50-80% 成本)\n- 结构化 trace(每个阶段可观测、可审计)\n- 原生国产 LLM 支持(GLM、DeepSeek、Qwen、Kimi、ERNIE)\n- 零运维部署(无守护进程、无端口配置)\n\n</details>\n\n---\n\n## 开发\n\n| 命令 | 说明 |\n|:-----|:-----|\n| `pnpm install` | 安装依赖 |\n| `pnpm run build` | 构建 |\n| `pnpm run dev` | 监视模式 |\n| `pnpm test` | 运行测试(905 个用例) |\n| `pnpm run test:e2e` | E2E 测试(需 API Key) |\n| `pnpm run server` | 启动 HTTP 服务 |\n| `pnpm run cli` | 启动 CLI |\n\n---\n\n## 相关项目\n\n| 项目 | 说明 |\n|:-----|:-----|\n| [OpenClaw](https://github.com/openclaw/openclaw) | 个人 AI 助手框架,Hive 的设计参照 |\n| [AI SDK](https://sdk.vercel.ai) | Vercel AI SDK,Hive 的 LLM 运行时基础 |\n\n---\n\n## 许可证\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n 欢迎提交 <a href=\"https://github.com/farion1231/hive/issues\">Issue</a> 和 <a href=\"https://github.com/farion1231/hive/pulls\">Pull Request</a>!\n</p>\n"}, "6ea950ef85eca617b9da5f9e1e64894f9a29a26c": {"t": 1785764591.2317805, "n": 11484, "h": "350020e29e792f8e", "c": "<div align=\"center\">\n <img src=\"logo.svg\" alt=\"Hive Logo\" width=\"140\" height=\"140\">\n\n <h1>Hive</h1>\n\n <p><strong>OpenClaw 替代品</strong></p>\n\n <p>\n <em>编排优先 · 天然省 80% 成本 · 零运维</em>\n </p>\n\n <p>\n <a href=\"#为什么离开-openclaw\">为什么离开 OpenClaw</a> &middot;\n <a href=\"#hive-的核心优势\">核心优势</a> &middot;\n <a href=\"#快速开始\">快速开始</a> &middot;\n <a href=\"#常见问题\">FAQ</a>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.0+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/668%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n</div>\n\n---\n\n## 为什么离开 OpenClaw\n\nOpenClaw 是 2026 年最火的开源 AI Agent 框架(30 万+ Stars),社区从\"技术狂热\"到\"成本焦虑\"只用了两周。以下是 Reddit 150+ 用户投诉、GitHub Issues、安全报告交叉验证出的 **8 个系统性问题**。\n\n### 编排:官方明确拒绝\n\nOpenClaw 架构文档原文:\n\n> \"agent-hierarchy frameworks are **not a default architecture** and heavy orchestration layers **will not be merged** for now.\"\n\nsub-agent 只是开一个新会话,没有任务拆解、结果聚合、错误恢复。用户被迫手动编排一切。\n\n> \"You end up babysitting something you set up specifically to stop babysitting.\"\n> — Reddit, 150+ 投诉汇总\n\n### 成本:从 $347 到 $2,100\n\n上下文无限累积(10 轮对话 150K tokens),工具输出永久存储,所有任务用最贵的模型。\n\n| 场景 | 损失 |\n|:-----|:-----|\n| Agent 陷入死循环,一夜之间 | **$2,100** |\n| 简单定时任务,token 消耗失控 | **570 万 tokens** |\n| 正常使用一个月(未经优化) | **$347** |\n| 即便升级 $200 Max Plan | **仍然 429 限流** |\n\n一位用户优化了两周才把月成本从 $347 降到 $68。**但这个优化本不该由用户来做。**\n\n### 安全:多个公开 CVE\n\n- CVE-2026-25253:数百个实例泄露 API 密钥(Bitdefender 披露)\n- 100ms 远程接管:研究人员通过网页演示实时攻击\n- 5 分钟提取 SSH 私钥:邮件 prompt injection 实现\n- ClawHub 发现 300+ 恶意技能,1/4 存在漏洞\n\n### 可靠性:每天崩溃 15 次\n\n- Agent 发截图\"证明\"完成 —— 截图里问题还在\n- Agent 承诺执行后沉默 —— 无错误、无崩溃、无输出\n- 用户停止 OpenClaw 后,它两周后自动重启了\n- Agent 删除自己的配置文件、损坏上下文\n- Telegram 长轮询导致 Gateway **每天崩溃 15 次**\n\n### 部署:14 种故障场景\n\nSegmentFault 排查指南覆盖 6 大类故障:安装失败(SIGBUS 无输出崩溃)、部署异常(launchd/systemd)、运行崩溃(OOM)、API 错误(429 冷却逻辑 bug)、日志问题(跨日不续接)、权限不足(硬编码 /root 路径)。\n\n### 上下文:没有记忆,每次从零开始\n\n每次问\"认证怎么实现的\"都要重新扫描 50+ 文件。超出模型窗口时静默截断,Agent 基于残缺上下文做决策 → 幻觉。用户被迫手动维护 ARCHITECTURE.md 来缓解。\n\n### 更新:每次升级都是赌博\n\n\"This morning I updated to latest version and now response time is very slow.\"\n\n技能跨版本消失、工具行为变更、配置格式不兼容、TDZ 初始化崩溃(Issue #45319)、ClawHub DNS 基础设施故障(Issue #44839)。\n\n### 国产 LLM:参数冲突频发\n\nKimi 调用 web_search 时 401(Issue #44851)、GLM 的 reasoning_effort 参数冲突返回 HTTP 400(Issue #44896)。每个国产模型都需要手动适配参数。\n\n---\n\n## Hive 的核心优势\n\n这些问题不是 bug,是**架构决定的**。Hive 从零设计,**先有编排引擎,再有其他一切**,从根源上避免了这些问题。\n\n### 1. 天然省钱:自动按阶段选模型\n\n这是成本优化的正确做法 —— **不是让用户手动切模型,而是架构本身就按任务复杂度分配模型**。\n\nOpenClaw 用户花两周优化才把 $347 降到 $68。Hive **开箱即用就是这个效果**:\n\n| 阶段 | 模型选择 | 为什么 |\n|:-----|:---------|:-------|\n| **探索** | 轻量模型(Haiku) | 扫描代码只需理解,不需要推理能力 |\n| **规划** | 主模型 | 需要深度分析,但不应直接改代码 |\n| **执行** | 主模型 | 按计划行动,需要全部工具权限 |\n\n一个\"帮我重构登录模块\"的任务,80% 的 token 消耗发生在探索阶段 —— 用 Haiku 处理,成本直接降 **80%**。这不是优化技巧,是默认行为。\n\n### 2. 天然可靠:结构化阶段 + 全链路 trace\n\nOpenClaw 的可靠性问题来自一个根因:任务是一个无边界的对话循环,不知道\"做到哪了\"。\n\nHive 的三阶段工作流天然解决这个问题:\n\n- **阶段边界清晰**:探索结束才进入规划,规划完成才进入执行,不会跳步\n- **权限自动降级**:探索和规划阶段强制只读,Agent 不可能误改代码\n- **全链路 trace**:每个阶段的输入、输出、耗时、token 消耗全部记录,出错直接定位到具体阶段\n\nAgent 不会\"假装完成\"然后沉默,因为每个阶段都有明确的输入输出。\n\n### 3. 天然安全:无守护进程 + 权限分层\n\nOpenClaw 的安全风险来自两个根因:高权限持久运行(守护进程 24/7 运行)+ 全局权限(一个 prompt injection 就能访问 ~/.ssh)。\n\nHive 的设计天然规避了这些:\n\n- **无守护进程**:随应用生命周期启动和退出,不存在\"24/7 暴露面\"\n- **权限分层**:探索/规划只读,只有执行阶段有写入权限,即使被注入也只能影响当前任务\n- **Hook 拦截**:`tool:before` / `tool:after` 可以拦截任何工具调用,做安全审计\n\n### 4. 天然简单:npm install 即用\n\nOpenClaw 需要 Node 22+、全局安装、守护进程注册、Gateway 配置、Channel 配置、auth-profiles.json 配置。出任何一个问题,就要翻 14 种故障场景排查指南。\n\nHive 的部署:\n\n```\nnpm install @hive/core → new Agent() → agent.dispatch()\n```\n\n没有守护进程,没有端口配置,没有权限问题。集成到现有项目就是加一个 npm 依赖。\n\n### 5. 天然智能:一个 dispatch() 搞定一切\n\nOpenClaw 的\"多 Agent\"只是手动发 `/subagent` 命令。Hive 的 Dispatcher 用 LLM 语义分析 + regex 关键词双保险,自动判断任务类型并路由:\n\n- \"今天天气怎么样\" → chat 层,直接返回\n- \"帮我重构登录模块\" → workflow 层,自动执行 explore → plan → execute\n\n不需要定义路由规则,不需要画流程图,不需要手动切换模式。**你只管提需求,Hive 负责执行。**\n\n### 6. 天然国产:GLM、DeepSeek、Qwen、Kimi、ERNIE 一等公民\n\nOpenClaw 的国产模型适配是一个个坑:Kimi 401、GLM 400、百炼 400,每个都要手动查 issue 找解决方案。\n\nHive 原生内置 5 家国产模型的预设配置,设置环境变量即可使用。不需要查 issue,不需要手动适配参数,不需要等官方修复。\n\n---\n\n## OpenClaw vs Hive 速查\n\n| | OpenClaw | Hive |\n|:--|:---------|:-----|\n| **设计起点** | 单 Agent 对话循环 | 多 Agent 编排引擎 |\n| **任务路由** | 用户手动 `/subagent` | LLM + regex 自动分类 |\n| **工作流** | Lobster DSL(手动编排) | 三阶段自动执行 |\n| **模型选择** | 用户手动切换 | 按阶段自动分配 |\n| **月成本(同类任务)** | $200-400 | $40-80 |\n| **部署方式** | 守护进程 + Gateway | npm install 即用 |\n| **多实例** | 单 Gateway per host | 每个 Agent 独立 |\n| **安全模型** | 高权限持久运行 | 权限分层 + Hook 拦截 |\n| **上下文管理** | 无限累积,静默截断 | 阶段隔离,不累积 |\n| **国产 LLM** | 参数冲突,需手动适配 | 原生预设,环境变量即用 |\n| **更新风险** | breaking change 频繁 | 精简核心,依赖单一 |\n| **最低内存** | 4GB(2GB 频繁崩溃) | 无额外进程开销 |\n| **故障排查** | 14 种故障场景 | 不需要 |\n\n---\n\n## 快速开始\n\n### 环境准备\n\n- Node.js 18+\n- 一个 LLM API Key(任意支持的平台)\n\n### 三步启动\n\n**第一步** — 设置 API Key(任选一个)\n\n| 环境变量 | 提供商 |\n|:---------|:-------|\n| `GLM_API_KEY` | 智谱 GLM |\n| `DEEPSEEK_API_KEY` | DeepSeek |\n| `ANTHROPIC_API_KEY` | Anthropic Claude |\n| `OPENAI_API_KEY` | OpenAI |\n\n**第二步** — 安装并启动\n\n```\npnpm install\npnpm run server\n```\n\n**第三步** — 发送请求\n\n```\nPOST http://localhost:3000/chat\nContent-Type: application/json\n\n{\"prompt\": \"帮我重构登录模块\"}\n```\n\nHive 会自动检测 API Key,判断这是复杂任务,自动执行 explore → plan → execute 三阶段工作流,返回最终结果。\n\n### 作为 SDK 集成\n\n```\nnpm install @hive/core\n```\n\n| 调用方式 | 效果 |\n|:---------|:-----|\n| `agent.dispatch('帮我重构登录模块')` | 自动判断 → 走工作流 |\n| `agent.chat('今天天气怎么样')` | 强制对话模式 |\n| `agent.runWorkflow('实现用户注册')` | 强制工作流模式 |\n| `agent.explore('查找所有 API 路由')` | 快速探索(轻量模型) |\n| `agent.plan('研究认证方案')` | 深度规划(只读) |\n| `agent.general('重构代码')` | 通用执行(全部工具) |\n\n### CLI 调试\n\n```\npnpm run cli\n```\n\n| 命令 | 说明 |\n|:-----|:-----|\n| `/mode chat` | 对话模式 |\n| `/mode workflow` | 工作流模式 |\n| `/provider glm` | 切换提供商 |\n| `/skills` | 查看技能列表 |\n| `/state` | 当前状态 |\n\n---\n\n## 核心能力\n\n### 智能路由\n\n所有输入统一经过 Dispatcher,LLM 分析语义 + regex 关键词双保险,自动分类后路由:\n\n- **chat 层** — 闲聊、问答、简单咨询,直接返回\n- **workflow 层** — 代码编写、重构、研究分析,自动执行三阶段工作流\n\n分类置信度低于阈值时自动降级到关键词匹配,确保不会误分类。\n\n### 三阶段工作流\n\n| 阶段 | 模型选择 | 工具权限 | 设计理由 |\n|:-----|:---------|:---------|:---------|\n| **探索** | 轻量模型(Haiku) | 只读 | 快速扫描,低成本,防止误改 |\n| **规划** | 主模型 | 只读 | 深度分析,强制只读输出计划 |\n| **执行** | 主模型 | 全部工具 | 按计划精准行动 |\n\n每个阶段独立 trace,出错可定位。80% 的复杂任务都适合这个模式。可通过 Hook 在 `workflow:phase` 阶段插入自定义逻辑。\n\n### 7 个能力模块按需加载\n\n| 模块 | 何时加载 |\n|:-----|:---------|\n| Provider | 始终需要 |\n| Chat | 只做对话时 |\n| Workflow | 需要多步任务时 |\n| SubAgent | 需要子 Agent 协作时 |\n| Skill | 需要技能匹配时 |\n| Session | 需要会话持久化时 |\n| Timeout | 需要超时监控时 |\n\n只加载你需要的,不用的零开销。\n\n### Hook 系统\n\n| Hook | 时机 | 典型场景 |\n|:-----|:-----|:---------|\n| `session:start` / `end` | 会话生命周期 | 初始化资源、清理状态 |\n| `tool:before` / `after` | 工具调用前后 | 安全拦截、审计日志 |\n| `workflow:phase` | 阶段切换 | 进度推送、状态展示 |\n| `dispatch.classify` | 分类完成 | 记录决策依据 |\n\n### 会话管理\n\n内置 SQLite 持久化,支持多会话切换和历史回溯。\n\n### 技能系统\n\nMarkdown 文件定义技能,YAML frontmatter 声明元数据,系统自动加载并根据用户输入匹配触发。\n\n---\n\n## 支持的提供商\n\n### 国产 LLM\n\n| 提供商 | 模型示例 | 特点 |\n|:------|:---------|:-----|\n| GLM(智谱) | glm-5, glm-4.7 | 长文本、多模态 |\n| Qwen(通义千问) | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| DeepSeek | deepseek-chat, deepseek-reasoner | 高性价比 |\n| Kimi(月之暗面) | moonshot-v1-128k | 超长上下文 |\n| ERNIE(文心一言) | ernie-4.0-8k | 百度 |\n\n### 全球 LLM\n\n| 提供商 | 模型示例 |\n|:------|:---------|\n| Anthropic | claude-opus-4-6, claude-sonnet-4-6 |\n| OpenAI | gpt-4o, gpt-4-turbo |\n| Azure OpenAI | gpt-4o, gpt-35-turbo |\n| OpenRouter | 100+ 模型聚合 |\n| Together AI | 开源模型推理 |\n\n添加自定义提供商只需传入 `baseUrl` + `apiKey`,兼容 OpenAI API 格式即可,无需改源码。\n\n---\n\n## 架构概览\n\n```\n Client\n ┌─────┴─────┐\n HTTP/WS CLI\n │ │\n ┌────┴─────────────┴────┐\n │ apps/server │\n │ Gateway + Bootstrap │\n └────────────┬───────────┘\n │\n ┌────────────┴───────────┐\n │ Agent │\n │ (唯一入口) │\n └────────────┬───────────┘\n │ dispatch()\n ┌────────────┴───────────┐\n │ Dispatcher │\n │ LLM 分类 + regex │\n └──┬─────────────────┬───┘\n │ │\n ┌──────┴──┐ ┌──────┴──────────────────┐\n │ chat │ │ workflow │\n │ 直接对话 │ │ explore → plan → execute │\n └──────┬──┘ │ Haiku 主模型 主模型 │\n │ │ 只读 只读 全权限 │\n │ └──────┬──────────────────┘\n │ │\n ┌──┴────────────────┴───────────────────┐\n │ Capabilities │\n │ Chat · Workflow · SubAgent · Schedule │\n │ Provider · Session · Skill · Timeout │\n └──────────────┬────────────────────────┘\n │\n ┌────────┬───────────┼───────────┬────────────┐\n ▼ ▼ ▼ ▼ ▼\n Providers Storage Scheduler Hooks/Skills Plugins\n GLM/DS SQLite cron/every 生命周期 飞书...\n Claude 会话+任务 at/一次性 事件拦截 ...\n```\n\n---\n\n## 项目结构\n\n```\nhive/\n├── packages/core/ Agent SDK 核心\n│ ├── agents/core/ 入口、上下文、运行器\n│ ├── agents/capabilities/ 7 个能力模块\n│ ├── agents/dispatch/ 智能路由\n│ ├── agents/prompts/ Prompt 模板\n│ ├── providers/ LLM 提供商管理\n│ ├── skills/ 技能系统\n│ ├── hooks/ 生命周期钩子\n│ └── session/ 会话持久化\n├── packages/orchestrator/ 多 Agent 编排(调度器 + 事件总线)\n├── packages/plugins/feishu/ 飞书渠道插件\n├── apps/server/ HTTP/WS 服务\n└── skills/ 技能定义\n```\n\n---\n\n## 常见问题\n\n<details>\n<summary><b>Hive 就是 OpenClaw 的替代品吗?</b></summary>\n\n是的。Hive 使用相同的底层 SDK(@anthropic-ai/claude-agent-sdk),但架构设计理念完全不同:Hive 从多 Agent 编排出发,OpenClaw 从单 Agent 对话循环出发。如果你被 OpenClaw 的成本、可靠性、部署复杂度劝退过,Hive 就是为你设计的。\n\n</details>\n\n<details>\n<summary><b>可以从 OpenClaw 迁移吗?</b></summary>\n\n可以。Hive 使用相同的底层 SDK,模型配置格式兼容。主要迁移工作:将 OpenClaw 的 Channel 配置改为 Hive 的 Plugin,Skill 文件直接复用。\n\n</details>\n\n<details>\n<summary><b>可以同时用国产和海外模型吗?</b></summary>\n\n可以。配置多个提供商后,运行时用 `agent.useProvider('name')` 随时切换。\n\n</details>\n\n<details>\n<summary><b>如何集成到现有项目?</b></summary>\n\n安装 `@hive/core`,设置环境变量或传入配置,调用 `agent.dispatch()` 即可。也提供了开箱即用的 HTTP 服务 `@hive/server`。\n\n</details>\n\n<details>\n<summary><b>如何添加自定义渠道?</b></summary>\n\n实现 Plugin 接口,打包为独立 npm 包。参考 `@hive/plugin-feishu` 的实现。\n\n</details>\n\n<details>\n<summary><b>如何创建自定义技能?</b></summary>\n\n在 `skills/` 目录创建 Markdown 文件,用 YAML frontmatter 定义名称、描述和标签。系统启动时自动加载。\n\n</details>\n\n<details>\n<summary><b>Hive 做了什么 OpenClaw 做不到的事?</b></summary>\n\n- 自动智能路由(LLM + regex 双保险分类)\n- 三阶段工作流(自动模型降级 + 权限隔离)\n- 按阶段自动选模型(开箱即省 50-80% 成本)\n- 结构化 trace(每个阶段可观测、可审计)\n- 原生国产 LLM 支持(GLM、DeepSeek、Qwen、Kimi、ERNIE)\n- 零运维部署(无守护进程、无端口配置)\n\n</details>\n\n---\n\n## 开发\n\n| 命令 | 说明 |\n|:-----|:-----|\n| `pnpm install` | 安装依赖 |\n| `pnpm run build` | 构建 |\n| `pnpm run dev` | 监视模式 |\n| `pnpm test` | 运行测试(668 个用例) |\n| `pnpm run test:e2e` | E2E 测试(需 API Key) |\n| `pnpm run server` | 启动 HTTP 服务 |\n| `pnpm run cli` | 启动 CLI |\n\n---\n\n## 相关项目\n\n| 项目 | 说明 |\n|:-----|:-----|\n| [OpenClaw](https://github.com/openclaw/openclaw) | 个人 AI 助手框架,Hive 的设计参照 |\n| [Claude Agent SDK](https://github.com/anthropic/claude-agent-sdk) | Anthropic 官方 Agent SDK,Hive 的底层执行引擎 |\n\n---\n\n## 许可证\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n 欢迎提交 <a href=\"https://github.com/farion1231/hive/issues\">Issue</a> 和 <a href=\"https://github.com/farion1231/hive/pulls\">Pull Request</a>!\n</p>\n"}, "c6527713a7a17cad621702b715b79522e080c8b2": {"t": 1785764592.8270547, "n": 10451, "h": "892b634c0c287282", "c": "<div align=\"center\">\n <img src=\"logo.svg\" alt=\"Hive Logo\" width=\"140\" height=\"140\">\n\n <h1>Hive</h1>\n\n <p><strong>OpenClaw 替代品</strong></p>\n\n <p>\n <em>编排优先 · 天然省 80% 成本 · 零运维</em>\n </p>\n\n <p>\n <a href=\"#为什么离开-openclaw\">为什么离开 OpenClaw</a> &middot;\n <a href=\"#hive-的核心优势\">核心优势</a> &middot;\n <a href=\"#快速开始\">快速开始</a> &middot;\n <a href=\"#常见问题\">FAQ</a>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.0+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/668%20tests-passing-brightgreen\" alt=\"Tests\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n</div>\n\n---\n\n## 为什么离开 OpenClaw\n\nOpenClaw 是 2026 年最火的开源 AI Agent 框架(30 万+ Stars),社区从\"技术狂热\"到\"成本焦虑\"只用了两周。以下是 Reddit 150+ 用户投诉、GitHub Issues、安全报告交叉验证出的 **8 个系统性问题**。\n\n### 编排:官方明确拒绝\n\nOpenClaw 架构文档原文:\n\n> \"agent-hierarchy frameworks are **not a default architecture** and heavy orchestration layers **will not be merged** for now.\"\n\nsub-agent 只是开一个新会话,没有任务拆解、结果聚合、错误恢复。用户被迫手动编排一切。\n\n> \"You end up babysitting something you set up specifically to stop babysitting.\"\n> — Reddit, 150+ 投诉汇总\n\n### 成本:从 $347 到 $2,100\n\n上下文无限累积(10 轮对话 150K tokens),工具输出永久存储,所有任务用最贵的模型。\n\n| 场景 | 损失 |\n|:-----|:-----|\n| Agent 陷入死循环,一夜之间 | **$2,100** |\n| 简单定时任务,token 消耗失控 | **570 万 tokens** |\n| 正常使用一个月(未经优化) | **$347** |\n| 即便升级 $200 Max Plan | **仍然 429 限流** |\n\n一位用户优化了两周才把月成本从 $347 降到 $68。**但这个优化本不该由用户来做。**\n\n### 安全:多个公开 CVE\n\n- CVE-2026-25253:数百个实例泄露 API 密钥(Bitdefender 披露)\n- 100ms 远程接管:研究人员通过网页演示实时攻击\n- 5 分钟提取 SSH 私钥:邮件 prompt injection 实现\n- ClawHub 发现 300+ 恶意技能,1/4 存在漏洞\n\n### 可靠性:每天崩溃 15 次\n\n- Agent 发截图\"证明\"完成 —— 截图里问题还在\n- Agent 承诺执行后沉默 —— 无错误、无崩溃、无输出\n- 用户停止 OpenClaw 后,它两周后自动重启了\n- Agent 删除自己的配置文件、损坏上下文\n- Telegram 长轮询导致 Gateway **每天崩溃 15 次**\n\n### 部署:14 种故障场景\n\nSegmentFault 排查指南覆盖 6 大类故障:安装失败(SIGBUS 无输出崩溃)、部署异常(launchd/systemd)、运行崩溃(OOM)、API 错误(429 冷却逻辑 bug)、日志问题(跨日不续接)、权限不足(硬编码 /root 路径)。\n\n### 上下文:没有记忆,每次从零开始\n\n每次问\"认证怎么实现的\"都要重新扫描 50+ 文件。超出模型窗口时静默截断,Agent 基于残缺上下文做决策 → 幻觉。用户被迫手动维护 ARCHITECTURE.md 来缓解。\n\n### 更新:每次升级都是赌博\n\n\"This morning I updated to latest version and now response time is very slow.\"\n\n技能跨版本消失、工具行为变更、配置格式不兼容、TDZ 初始化崩溃(Issue #45319)、ClawHub DNS 基础设施故障(Issue #44839)。\n\n### 国产 LLM:参数冲突频发\n\nKimi 调用 web_search 时 401(Issue #44851)、GLM 的 reasoning_effort 参数冲突返回 HTTP 400(Issue #44896)。每个国产模型都需要手动适配参数。\n\n---\n\n## Hive 的核心优势\n\n这些问题不是 bug,是**架构决定的**。Hive 从零设计,**先有编排引擎,再有其他一切**,从根源上避免了这些问题。\n\n### 1. 天然省钱:自动按阶段选模型\n\n这是成本优化的正确做法 —— **不是让用户手动切模型,而是架构本身就按任务复杂度分配模型**。\n\nOpenClaw 用户花两周优化才把 $347 降到 $68。Hive **开箱即用就是这个效果**:\n\n| 阶段 | 模型选择 | 为什么 |\n|:-----|:---------|:-------|\n| **探索** | 轻量模型(Haiku) | 扫描代码只需理解,不需要推理能力 |\n| **规划** | 主模型 | 需要深度分析,但不应直接改代码 |\n| **执行** | 主模型 | 按计划行动,需要全部工具权限 |\n\n一个\"帮我重构登录模块\"的任务,80% 的 token 消耗发生在探索阶段 —— 用 Haiku 处理,成本直接降 **80%**。这不是优化技巧,是默认行为。\n\n### 2. 天然可靠:结构化阶段 + 全链路 trace\n\nOpenClaw 的可靠性问题来自一个根因:任务是一个无边界的对话循环,不知道\"做到哪了\"。\n\nHive 的三阶段工作流天然解决这个问题:\n\n- **阶段边界清晰**:探索结束才进入规划,规划完成才进入执行,不会跳步\n- **权限自动降级**:探索和规划阶段强制只读,Agent 不可能误改代码\n- **全链路 trace**:每个阶段的输入、输出、耗时、token 消耗全部记录,出错直接定位到具体阶段\n\nAgent 不会\"假装完成\"然后沉默,因为每个阶段都有明确的输入输出。\n\n### 3. 天然安全:无守护进程 + 权限分层\n\nOpenClaw 的安全风险来自两个根因:高权限持久运行(守护进程 24/7 运行)+ 全局权限(一个 prompt injection 就能访问 ~/.ssh)。\n\nHive 的设计天然规避了这些:\n\n- **无守护进程**:随应用生命周期启动和退出,不存在\"24/7 暴露面\"\n- **权限分层**:探索/规划只读,只有执行阶段有写入权限,即使被注入也只能影响当前任务\n- **Hook 拦截**:`tool:before` / `tool:after` 可以拦截任何工具调用,做安全审计\n\n### 4. 天然简单:npm install 即用\n\nOpenClaw 需要 Node 22+、全局安装、守护进程注册、Gateway 配置、Channel 配置、auth-profiles.json 配置。出任何一个问题,就要翻 14 种故障场景排查指南。\n\nHive 的部署:\n\n```\nnpm install @hive/core → new Agent() → agent.dispatch()\n```\n\n没有守护进程,没有端口配置,没有权限问题。集成到现有项目就是加一个 npm 依赖。\n\n### 5. 天然智能:一个 dispatch() 搞定一切\n\nOpenClaw 的\"多 Agent\"只是手动发 `/subagent` 命令。Hive 的 Dispatcher 用 LLM 语义分析 + regex 关键词双保险,自动判断任务类型并路由:\n\n- \"今天天气怎么样\" → chat 层,直接返回\n- \"帮我重构登录模块\" → workflow 层,自动执行 explore → plan → execute\n\n不需要定义路由规则,不需要画流程图,不需要手动切换模式。**你只管提需求,Hive 负责执行。**\n\n### 6. 天然国产:GLM、DeepSeek、Qwen、Kimi、ERNIE 一等公民\n\nOpenClaw 的国产模型适配是一个个坑:Kimi 401、GLM 400、百炼 400,每个都要手动查 issue 找解决方案。\n\nHive 原生内置 5 家国产模型的预设配置,设置环境变量即可使用。不需要查 issue,不需要手动适配参数,不需要等官方修复。\n\n---\n\n## OpenClaw vs Hive 速查\n\n| | OpenClaw | Hive |\n|:--|:---------|:-----|\n| **设计起点** | 单 Agent 对话循环 | 多 Agent 编排引擎 |\n| **任务路由** | 用户手动 `/subagent` | LLM + regex 自动分类 |\n| **工作流** | Lobster DSL(手动编排) | 三阶段自动执行 |\n| **模型选择** | 用户手动切换 | 按阶段自动分配 |\n| **月成本(同类任务)** | $200-400 | $40-80 |\n| **部署方式** | 守护进程 + Gateway | npm install 即用 |\n| **多实例** | 单 Gateway per host | 每个 Agent 独立 |\n| **安全模型** | 高权限持久运行 | 权限分层 + Hook 拦截 |\n| **上下文管理** | 无限累积,静默截断 | 阶段隔离,不累积 |\n| **国产 LLM** | 参数冲突,需手动适配 | 原生预设,环境变量即用 |\n| **更新风险** | breaking change 频繁 | 精简核心,依赖单一 |\n| **最低内存** | 4GB(2GB 频繁崩溃) | 无额外进程开销 |\n| **故障排查** | 14 种故障场景 | 不需要 |\n\n---\n\n## 快速开始\n\n### 环境准备\n\n- Node.js 18+\n- 一个 LLM API Key(任意支持的平台)\n\n### 三步启动\n\n**第一步** — 设置 API Key(任选一个)\n\n| 环境变量 | 提供商 |\n|:---------|:-------|\n| `GLM_API_KEY` | 智谱 GLM |\n| `DEEPSEEK_API_KEY` | DeepSeek |\n| `ANTHROPIC_API_KEY` | Anthropic Claude |\n| `OPENAI_API_KEY` | OpenAI |\n\n**第二步** — 安装并启动\n\n```\npnpm install\npnpm run server\n```\n\n**第三步** — 发送请求\n\n```\nPOST http://localhost:3000/chat\nContent-Type: application/json\n\n{\"prompt\": \"帮我重构登录模块\"}\n```\n\nHive 会自动检测 API Key,判断这是复杂任务,自动执行 explore → plan → execute 三阶段工作流,返回最终结果。\n\n### 作为 SDK 集成\n\n```\nnpm install @hive/core\n```\n\n| 调用方式 | 效果 |\n|:---------|:-----|\n| `agent.dispatch('帮我重构登录模块')` | 自动判断 → 走工作流 |\n| `agent.chat('今天天气怎么样')` | 强制对话模式 |\n| `agent.runWorkflow('实现用户注册')` | 强制工作流模式 |\n| `agent.explore('查找所有 API 路由')` | 快速探索(轻量模型) |\n| `agent.plan('研究认证方案')` | 深度规划(只读) |\n| `agent.general('重构代码')` | 通用执行(全部工具) |\n\n### CLI 调试\n\n```\npnpm run cli\n```\n\n| 命令 | 说明 |\n|:-----|:-----|\n| `/mode chat` | 对话模式 |\n| `/mode workflow` | 工作流模式 |\n| `/provider glm` | 切换提供商 |\n| `/skills` | 查看技能列表 |\n| `/state` | 当前状态 |\n\n---\n\n## 核心能力\n\n### 智能路由\n\n所有输入统一经过 Dispatcher,LLM 分析语义 + regex 关键词双保险,自动分类后路由:\n\n- **chat 层** — 闲聊、问答、简单咨询,直接返回\n- **workflow 层** — 代码编写、重构、研究分析,自动执行三阶段工作流\n\n分类置信度低于阈值时自动降级到关键词匹配,确保不会误分类。\n\n### 三阶段工作流\n\n| 阶段 | 模型选择 | 工具权限 | 设计理由 |\n|:-----|:---------|:---------|:---------|\n| **探索** | 轻量模型(Haiku) | 只读 | 快速扫描,低成本,防止误改 |\n| **规划** | 主模型 | 只读 | 深度分析,强制只读输出计划 |\n| **执行** | 主模型 | 全部工具 | 按计划精准行动 |\n\n每个阶段独立 trace,出错可定位。80% 的复杂任务都适合这个模式。可通过 Hook 在 `workflow:phase` 阶段插入自定义逻辑。\n\n### 7 个能力模块按需加载\n\n| 模块 | 何时加载 |\n|:-----|:---------|\n| Provider | 始终需要 |\n| Chat | 只做对话时 |\n| Workflow | 需要多步任务时 |\n| SubAgent | 需要子 Agent 协作时 |\n| Skill | 需要技能匹配时 |\n| Session | 需要会话持久化时 |\n| Timeout | 需要超时监控时 |\n\n只加载你需要的,不用的零开销。\n\n### Hook 系统\n\n| Hook | 时机 | 典型场景 |\n|:-----|:-----|:---------|\n| `session:start` / `end` | 会话生命周期 | 初始化资源、清理状态 |\n| `tool:before` / `after` | 工具调用前后 | 安全拦截、审计日志 |\n| `workflow:phase` | 阶段切换 | 进度推送、状态展示 |\n| `dispatch.classify` | 分类完成 | 记录决策依据 |\n\n### 会话管理\n\n内置 SQLite 持久化,支持多会话切换和历史回溯。\n\n### 技能系统\n\nMarkdown 文件定义技能,YAML frontmatter 声明元数据,系统自动加载并根据用户输入匹配触发。\n\n---\n\n## 支持的提供商\n\n### 国产 LLM\n\n| 提供商 | 模型示例 | 特点 |\n|:------|:---------|:-----|\n| GLM(智谱) | glm-5, glm-4.7 | 长文本、多模态 |\n| Qwen(通义千问) | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| DeepSeek | deepseek-chat, deepseek-reasoner | 高性价比 |\n| Kimi(月之暗面) | moonshot-v1-128k | 超长上下文 |\n| ERNIE(文心一言) | ernie-4.0-8k | 百度 |\n\n### 全球 LLM\n\n| 提供商 | 模型示例 |\n|:------|:---------|\n| Anthropic | claude-opus-4-6, claude-sonnet-4-6 |\n| OpenAI | gpt-4o, gpt-4-turbo |\n| Azure OpenAI | gpt-4o, gpt-35-turbo |\n| OpenRouter | 100+ 模型聚合 |\n| Together AI | 开源模型推理 |\n\n添加自定义提供商只需传入 `baseUrl` + `apiKey`,兼容 OpenAI API 格式即可,无需改源码。\n\n---\n\n## 架构概览\n\n```\n Client\n │\n Gateway (HTTP / WS)\n │\n agent.dispatch(task)\n │\n Dispatcher\n ┌────────┴────────┐\n chat 层 workflow 层\n │ ┌────┼────┐\n ChatCap explore plan execute\n │ │ │ │\n └─────────┴─────┴─────┘\n │\n AgentRunner\n │\n @anthropic-ai/claude-agent-sdk\n │\n LLM Provider\n```\n\n完整架构图见 [docs/architecture.md](docs/architecture.md)。\n\n---\n\n## 项目结构\n\n```\nhive/\n├── packages/core/ Agent SDK 核心\n│ ├── agents/core/ 入口、上下文、运行器\n│ ├── agents/capabilities/ 7 个能力模块\n│ ├── agents/dispatch/ 智能路由\n│ ├── agents/prompts/ Prompt 模板\n│ ├── providers/ LLM 提供商管理\n│ ├── skills/ 技能系统\n│ ├── hooks/ 生命周期钩子\n│ └── session/ 会话持久化\n├── packages/orchestrator/ 多 Agent 编排(调度器 + 事件总线)\n├── packages/plugins/feishu/ 飞书渠道插件\n├── apps/server/ HTTP/WS 服务\n└── skills/ 技能定义\n```\n\n---\n\n## 常见问题\n\n<details>\n<summary><b>Hive 就是 OpenClaw 的替代品吗?</b></summary>\n\n是的。Hive 使用相同的底层 SDK(@anthropic-ai/claude-agent-sdk),但架构设计理念完全不同:Hive 从多 Agent 编排出发,OpenClaw 从单 Agent 对话循环出发。如果你被 OpenClaw 的成本、可靠性、部署复杂度劝退过,Hive 就是为你设计的。\n\n</details>\n\n<details>\n<summary><b>可以从 OpenClaw 迁移吗?</b></summary>\n\n可以。Hive 使用相同的底层 SDK,模型配置格式兼容。主要迁移工作:将 OpenClaw 的 Channel 配置改为 Hive 的 Plugin,Skill 文件直接复用。\n\n</details>\n\n<details>\n<summary><b>可以同时用国产和海外模型吗?</b></summary>\n\n可以。配置多个提供商后,运行时用 `agent.useProvider('name')` 随时切换。\n\n</details>\n\n<details>\n<summary><b>如何集成到现有项目?</b></summary>\n\n安装 `@hive/core`,设置环境变量或传入配置,调用 `agent.dispatch()` 即可。也提供了开箱即用的 HTTP 服务 `@hive/server`。\n\n</details>\n\n<details>\n<summary><b>如何添加自定义渠道?</b></summary>\n\n实现 Plugin 接口,打包为独立 npm 包。参考 `@hive/plugin-feishu` 的实现。\n\n</details>\n\n<details>\n<summary><b>如何创建自定义技能?</b></summary>\n\n在 `skills/` 目录创建 Markdown 文件,用 YAML frontmatter 定义名称、描述和标签。系统启动时自动加载。\n\n</details>\n\n<details>\n<summary><b>Hive 做了什么 OpenClaw 做不到的事?</b></summary>\n\n- 自动智能路由(LLM + regex 双保险分类)\n- 三阶段工作流(自动模型降级 + 权限隔离)\n- 按阶段自动选模型(开箱即省 50-80% 成本)\n- 结构化 trace(每个阶段可观测、可审计)\n- 原生国产 LLM 支持(GLM、DeepSeek、Qwen、Kimi、ERNIE)\n- 零运维部署(无守护进程、无端口配置)\n\n</details>\n\n---\n\n## 开发\n\n| 命令 | 说明 |\n|:-----|:-----|\n| `pnpm install` | 安装依赖 |\n| `pnpm run build` | 构建 |\n| `pnpm run dev` | 监视模式 |\n| `pnpm test` | 运行测试(668 个用例) |\n| `pnpm run test:e2e` | E2E 测试(需 API Key) |\n| `pnpm run server` | 启动 HTTP 服务 |\n| `pnpm run cli` | 启动 CLI |\n\n---\n\n## 相关项目\n\n| 项目 | 说明 |\n|:-----|:-----|\n| [OpenClaw](https://github.com/openclaw/openclaw) | 个人 AI 助手框架,Hive 的设计参照 |\n| [Claude Agent SDK](https://github.com/anthropic/claude-agent-sdk) | Anthropic 官方 Agent SDK,Hive 的底层执行引擎 |\n\n---\n\n## 许可证\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n 欢迎提交 <a href=\"https://github.com/farion1231/hive/issues\">Issue</a> 和 <a href=\"https://github.com/farion1231/hive/pulls\">Pull Request</a>!\n</p>\n"}, "4fbda5c956d00e72e5e8de2f079bd610ead1a75d": {"t": 1785764594.1597643, "n": 10030, "h": "fc22ba5d8a7c73d5", "c": "<div align=\"center\">\n <img src=\"logo.svg\" alt=\"Hive Logo\" width=\"140\" height=\"140\">\n\n <h1>Hive</h1>\n\n <p><strong>多 Agent 协作框架 - 像🐝蜂巢一样高效协作</strong></p>\n\n <p>\n <em>借助生态力量,不重复造轮子</em>\n </p>\n\n <p>\n <a href=\"#快速开始\">快速开始</a> •\n <a href=\"#特性\">特性</a> •\n <a href=\"#api-参考\">API</a> •\n <a href=\"#常见问题\">FAQ</a>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.0+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n</div>\n\n---\n\n## 特性\n\n| | |\n|:-:|:-|\n| 🚀 **开箱即用** | 内置主流 LLM 提供商预设,无需额外配置 |\n| 🔄 **外部配置** | 支持外部传入配置,由应用层管理 |\n| 🇨🇳 **国产友好** | 原生支持 GLM、DeepSeek、Qwen、Kimi 等 |\n| 🌍 **全球覆盖** | 支持 OpenAI、OpenRouter、Together AI 等 |\n| 🤖 **主 Agent 系统** | 统一入口,管理所有子 Agent 和功能 |\n| 🔧 **子 Agent 系统** | Claude Code 风格的 Explore / Plan / General |\n| 🔄 **工作流引擎** | 三阶段循环:收集上下文 → 采取行动 → 验证结果 |\n| 🎯 **技能系统** | 模块化技能管理,支持自定义扩展 |\n| 🪝 **Hooks 系统** | 会话生命周期、工具调用等事件钩子 |\n\n---\n\n## 快速开始\n\n### 安装\n\n```bash\nnpm install @hive/core\n```\n\n### 5 分钟上手\n\n```typescript\nimport { ask, createAgent } from '@hive/core';\n\n// 方式 1: 快速对话(使用环境变量)\nconst answer = await ask('你好');\n\n// 方式 2: 创建 Agent 实例(传入配置)\nconst agent = createAgent({\n externalConfig: {\n providers: [\n { id: 'glm', baseUrl: '...', apiKey: 'your-api-key', model: 'glm-5' },\n { id: 'deepseek', baseUrl: '...', apiKey: 'your-api-key' },\n ],\n activeProvider: 'glm',\n },\n});\n\n// 流式输出\nawait agent.chatStream('写一个故事', {\n onText: (text) => process.stdout.write(text),\n});\n```\n\n### 零配置模式(环境变量)\n\n只需设置环境变量,SDK 会自动检测:\n\n```bash\n# 设置任意一个 API Key\nexport GLM_API_KEY=xxx\nexport DEEPSEEK_API_KEY=xxx\nexport ANTHROPIC_API_KEY=xxx\nexport OPENAI_API_KEY=xxx\n```\n\n```typescript\n// 无需任何配置\nconst agent = createAgent();\n// 自动使用检测到的 Provider\n```\n\n### 本地调试 CLI\n\n```bash\nnpm run cli\n```\n\n**命令列表**:\n\n| 命令 | 说明 |\n|------|------|\n| `/mode chat\\|workflow\\|explore\\|plan\\|general` | 切换模式 |\n| `/loop <task>` | 执行工作流任务 |\n| `/provider <name> [apiKey]` | 切换提供商 |\n| `/state` | 查看当前状态 |\n| `/skills` | 列出所有技能 |\n\n### 启动 HTTP 服务\n\n```bash\nnpm run server\n```\n\n```bash\n# 对话接口\ncurl -X POST http://localhost:3000/chat \\\n -H \"Content-Type: application/json\" \\\n -d '{\"prompt\": \"你好\"}'\n\n# 流式对话\ncurl -X POST http://localhost:3000/chat/stream \\\n -H \"Content-Type: application/json\" \\\n -d '{\"prompt\": \"写一个故事\"}'\n```\n\n---\n\n## 支持的提供商\n\n### 🇨🇳 国产 LLM\n\n| 提供商 | 预设名称 | 模型示例 | 特点 |\n|:------|:---------|:---------|:-----|\n| GLM (智谱) | `glm` | glm-5, glm-4.7 | 长文本、多模态 |\n| Qwen (通义千问) | `qwen` | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| DeepSeek | `deepseek` | deepseek-chat, deepseek-reasoner | 高性价比 |\n| Kimi (月之暗面) | `kimi` | moonshot-v1-128k | 超长上下文 |\n| ERNIE (文心一言) | `ernie` | ernie-4.0-8k | 百度 |\n\n### 🌍 全球 LLM\n\n| 提供商 | 预设名称 | 模型示例 |\n|:------|:---------|:---------|\n| Anthropic | `anthropic` | claude-opus-4-6, claude-sonnet-4-6 |\n| OpenAI | `openai` | gpt-4o, gpt-4-turbo |\n| Azure OpenAI | `azure_openai` | gpt-4o, gpt-35-turbo |\n| OpenRouter | `openrouter` | 100+ 模型聚合 |\n| Together AI | `together` | 开源模型推理 |\n\n---\n\n## 三代理系统\n\nClaude Code 风格的子代理架构,自动根据任务类型选择合适的代理:\n\n```\n ┌─────────────────┐\n │ 主 Agent │\n │ (统一入口) │\n └────────┬────────┘\n │\n ┌─────────────────┼─────────────────┐\n ▼ ▼ ▼\n ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n │ Explore │ │ Plan │ │ General │\n │ 快速 │ │ 研究 │ │ 通用 │\n ├──────────────┤ ├──────────────┤ ├──────────────┤\n │ Haiku 模型 │ │ 继承模型 │ │ 继承模型 │\n │ 只读工具 │ │ 只读工具 │ │ 所有工具 │\n └──────────────┘ └──────────────┘ └──────────────┘\n```\n\n### 使用示例\n\n```typescript\nconst agent = createAgent();\n\n// Explore - 快速搜索(Haiku 模型,速度快)\nawait agent.explore('查找所有 API 路由', 'quick');\nawait agent.explore('分析项目结构', 'medium');\nawait agent.explore('全面分析认证模块', 'very-thorough');\n\n// Plan - 研究规划(只读工具)\nawait agent.plan('研究认证模块的实现方案');\n\n// General - 通用任务(所有工具)\nawait agent.general('重构代码并添加测试');\n```\n\n| Agent | 模型 | 工具 | 典型用途 |\n|:------|:-----|:-----|:---------|\n| **Explore** | Haiku(快速) | 只读 | 文件发现、代码搜索 |\n| **Plan** | 继承 | 只读 | 计划研究、收集上下文 |\n| **General** | 继承 | 全部 | 复杂任务、代码修改 |\n\n---\n\n## 三阶段工作流\n\n```\n 收集上下文 ──→ 采取行动 ──→ 验证结果\n ▲ │\n └──────────────────────────┘\n```\n\n```typescript\nimport { runWorkflow, codeTask, researchTask } from '@hive/core';\n\n// 代码任务\nawait codeTask('实现一个工具函数库');\n\n// 研究任务\nawait researchTask('分析这个项目的架构');\n\n// 完整工作流控制\nawait runWorkflow('创建测试文件', {\n cwd: process.cwd(),\n onPhaseChange: (phase, desc) => console.log(`[${phase}] ${desc}`),\n});\n```\n\n### 任务类型\n\n| 类型 | 描述 | 可用工具 |\n|:-----|:-----|:---------|\n| `code` | 代码任务 | Read, Write, Edit, Bash, Glob, Grep |\n| `research` | 研究任务 | Read, Glob, Grep, WebSearch, WebFetch |\n| `analysis` | 分析任务 | Read, Bash, Glob, Grep |\n| `writing` | 写作任务 | Read, Write, Edit, WebSearch |\n| `data` | 数据处理 | Read, Write, Edit, Bash, Glob |\n| `custom` | 自定义任务 | 所有工具 |\n\n---\n\n## Hooks 系统\n\n在关键生命周期节点插入自定义逻辑:\n\n```typescript\nconst agent = createAgent();\n\n// 会话生命周期\nagent.context.hookRegistry.on('session:start', async (ctx) => {\n console.log(`Session started: ${ctx.sessionId}`);\n});\n\n// 工具调用拦截\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'Bash') {\n // 安全检查\n return { proceed: true };\n }\n});\n\n// 工作流阶段追踪\nagent.context.hookRegistry.on('workflow:phase', async (ctx) => {\n console.log(`Phase: ${ctx.phase}`);\n});\n```\n\n| Hook 类型 | 触发时机 |\n|:----------|:---------|\n| `session:start` / `session:end` / `session:error` | 会话生命周期 |\n| `tool:before` / `tool:after` | 工具调用前后 |\n| `capability:init` / `capability:dispose` | 能力生命周期 |\n| `workflow:phase` | 工作流阶段变化 |\n\n---\n\n## API 参考\n\n### UnifiedAgentService\n\n```typescript\nclass UnifiedAgentService {\n // 提供商管理\n get currentProvider(): CCProvider | null;\n listProviders(): CCProvider[];\n useProvider(name: string, apiKey?: string): boolean;\n\n // 对话\n chat(prompt: string, options?: AgentChatOptions): Promise<string>;\n chatStream(prompt: string, options?: AgentChatOptions): Promise<void>;\n}\n```\n\n### 便捷函数\n\n```typescript\n// 快速对话\nawait ask('你好', { provider: 'deepseek', apiKey: '...' });\n\n// 创建 Agent\nconst agent = createAgent();\n\n// 使用预设\nawait usePreset('glm', 'your-api-key');\n\n// 子代理便捷函数\nawait explore('搜索代码', 'quick');\nawait plan('研究实现');\nawait general('执行任务');\n```\n\n---\n\n## 配置\n\n### 环境变量\n\n```bash\n# .env\nGLM_API_KEY=your_glm_key\nDEEPSEEK_API_KEY=your_deepseek_key\nQWEN_API_KEY=your_qwen_key\nOPENAI_API_KEY=your_openai_key\n```\n\n```typescript\n// 自动从环境变量读取\nagent.useProvider('glm'); // → GLM_API_KEY\nagent.useProvider('deepseek'); // → DEEPSEEK_API_KEY\n```\n\n### 外部配置\n\n配置由外部应用传入,SDK 只是消费者:\n\n```typescript\nimport { createAgent, type ExternalConfig } from '@hive/core';\n\nconst config: ExternalConfig = {\n providers: [\n {\n id: 'glm',\n name: 'GLM (智谱)',\n baseUrl: 'https://open.bigmodel.cn/api/paas/v4',\n apiKey: 'your-api-key',\n model: 'glm-5',\n },\n {\n id: 'deepseek',\n name: 'DeepSeek',\n baseUrl: 'https://api.deepseek.com',\n apiKeyEnv: 'DEEPSEEK_API_KEY', // 或从环境变量读取\n },\n ],\n activeProvider: 'glm',\n mcpServers: {\n context7: {\n command: 'npx',\n args: ['-y', '@anthropic/mcp-server-context7'],\n },\n },\n};\n\nconst agent = createAgent({ externalConfig: config });\n```\n\n### 配置优先级\n\n| 来源 | 优先级 | 说明 |\n|:-----|:-------|:-----|\n| 外部配置 | 最高 | 应用传入的 ExternalConfig |\n| 环境变量 | 次高 | ${PROVIDER}_API_KEY 约定 |\n\n---\n\n## 技能系统\n\n模块化的功能扩展,通过 YAML frontmatter 定义:\n\n```\nskills/\n├── code-review/\n│ └── SKILL.md\n└── api-testing/\n └── SKILL.md\n```\n\n```markdown\n---\nname: Code Review\ndescription: Used when user asks to review code...\ntags:\n - code-quality\n---\n\n# Code Review Skill\n...\n```\n\n```typescript\nimport { initializeSkills } from '@hive/core';\n\nconst registry = await initializeSkills();\nconst match = registry.match('帮我 review 代码');\n```\n\n---\n\n## 目录结构\n\n```\nsrc/\n├── agents/\n│ ├── core/ # Agent 核心实现\n│ ├── capabilities/ # 能力模块(委托模式)\n│ ├── prompts/ # Prompt 模板系统\n│ └── registry/ # Agent 注册表\n├── providers/\n│ ├── sources/ # 配置来源(环境变量)\n│ ├── presets/ # 内置预设\n│ └── models/ # 模型规格\n├── skills/ # 技能系统\n├── hooks/ # Hooks 系统\n├── services/ # 服务层\n└── tools/ # MCP 工具\n\nskills/ # 技能定义文件\ntests/ # 测试(unit, integration, e2e)\n```\n\n---\n\n## 测试\n\n```bash\n# 运行所有测试\nnpm test\n\n# 监视模式\nnpm run test:watch\n\n# 覆盖率报告\nnpm run test:coverage\n\n# E2E 测试(真实 API)\nnpm run test:e2e\n```\n\n---\n\n## 常见问题\n\n<details>\n<summary><b>如何配置多个提供商?</b></summary>\n<br>\n\n通过外部配置传入:\n\n```typescript\nconst agent = createAgent({\n externalConfig: {\n providers: [\n { id: 'glm', baseUrl: '...', apiKey: '...' },\n { id: 'deepseek', baseUrl: '...', apiKey: '...' },\n ],\n activeProvider: 'glm',\n },\n});\n```\n\n</details>\n\n<details>\n<summary><b>如何添加新的提供商?</b></summary>\n<br>\n\n1. 在外部配置中添加自定义提供商\n2. 或在 `presets/` 中添加预设并提交 PR\n\n</details>\n\n<details>\n<summary><b>如何创建自定义技能?</b></summary>\n<br>\n\n在 `skills/` 目录创建文件夹和 `SKILL.md` 文件,使用 YAML frontmatter 定义元数据。系统会自动加载和匹配技能。\n\n</details>\n\n<details>\n<summary><b>如何处理 API Key?</b></summary>\n<br>\n\n推荐使用环境变量存储 API Key,不要硬编码在代码中。\n\n</details>\n\n<details>\n<summary><b>如何在生产环境部署?</b></summary>\n<br>\n\n```typescript\nimport { Agent } from '@hive/core';\n\nconst agent = new Agent();\n\n// Express 示例\napp.post('/api/chat', async (req, res) => {\n const response = await agent.chat(req.body.prompt);\n res.json({ response });\n});\n```\n\n</details>\n\n---\n\n## 开发\n\n```bash\n# 构建\nnpm run build\n\n# 监视模式\nnpm run dev\n\n# 运行测试\nnpm test\n```\n\n---\n\n## 相关项目\n\n| 项目 | 描述 |\n|:-----|:-----|\n| [Claude Agent SDK](https://github.com/anthropics/claude-agent-sdk) | Anthropic 官方 Agent SDK |\n\n---\n\n## 许可证\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n 欢迎提交 <a href=\"https://github.com/farion1231/hive/issues\">Issue</a> 和 <a href=\"https://github.com/farion1231/hive/pulls\">Pull Request</a>!\n</p>\n"}, "cbabd96d586ef3b19bbe48adc322e393022c7303": {"t": 1785764595.425773, "n": 10117, "h": "9c842fd12d1daa13", "c": "<div align=\"center\">\n <img src=\"logo.svg\" alt=\"Hive Logo\" width=\"140\" height=\"140\">\n\n <h1>Hive - Claude Agent Service</h1>\n\n <p><strong>面向 C 端应用的 Claude Agent 服务 SDK</strong></p>\n\n <p>\n <em>借助生态力量,不重复造轮子</em>\n </p>\n\n <p>\n <a href=\"#快速开始\">快速开始</a> •\n <a href=\"#特性\">特性</a> •\n <a href=\"#api-参考\">API</a> •\n <a href=\"#常见问题\">FAQ</a>\n </p>\n\n <p>\n <img src=\"https://img.shields.io/badge/Node.js-18+-green\" alt=\"Node.js\">\n <img src=\"https://img.shields.io/badge/TypeScript-5.0+-blue\" alt=\"TypeScript\">\n <img src=\"https://img.shields.io/badge/License-MIT-yellow\" alt=\"License\">\n </p>\n</div>\n\n---\n\n## 特性\n\n| | |\n|:-:|:-|\n| 🚀 **开箱即用** | 内置主流 LLM 提供商预设,无需额外配置 |\n| 🔄 **外部配置** | 支持外部传入配置,由应用层管理 |\n| 🇨🇳 **国产友好** | 原生支持 GLM、DeepSeek、Qwen、Kimi 等 |\n| 🌍 **全球覆盖** | 支持 OpenAI、OpenRouter、Together AI 等 |\n| 🤖 **主 Agent 系统** | 统一入口,管理所有子 Agent 和功能 |\n| 🔧 **子 Agent 系统** | Claude Code 风格的 Explore / Plan / General |\n| 🔄 **工作流引擎** | 三阶段循环:收集上下文 → 采取行动 → 验证结果 |\n| 🎯 **技能系统** | 模块化技能管理,支持自定义扩展 |\n| 🪝 **Hooks 系统** | 会话生命周期、工具调用等事件钩子 |\n\n---\n\n## 快速开始\n\n### 安装\n\n```bash\nnpm install claude-agent-service\n```\n\n### 5 分钟上手\n\n```typescript\nimport { ask, createAgent } from 'claude-agent-service';\n\n// 方式 1: 快速对话(使用环境变量)\nconst answer = await ask('你好');\n\n// 方式 2: 创建 Agent 实例(传入配置)\nconst agent = createAgent({\n externalConfig: {\n providers: [\n { id: 'glm', baseUrl: '...', apiKey: 'your-api-key', model: 'glm-5' },\n { id: 'deepseek', baseUrl: '...', apiKey: 'your-api-key' },\n ],\n activeProvider: 'glm',\n },\n});\n\n// 流式输出\nawait agent.chatStream('写一个故事', {\n onText: (text) => process.stdout.write(text),\n});\n```\n\n### 零配置模式(环境变量)\n\n只需设置环境变量,SDK 会自动检测:\n\n```bash\n# 设置任意一个 API Key\nexport GLM_API_KEY=xxx\nexport DEEPSEEK_API_KEY=xxx\nexport ANTHROPIC_API_KEY=xxx\nexport OPENAI_API_KEY=xxx\n```\n\n```typescript\n// 无需任何配置\nconst agent = createAgent();\n// 自动使用检测到的 Provider\n```\n\n### 本地调试 CLI\n\n```bash\nnpm run cli\n```\n\n**命令列表**:\n\n| 命令 | 说明 |\n|------|------|\n| `/mode chat\\|workflow\\|explore\\|plan\\|general` | 切换模式 |\n| `/loop <task>` | 执行工作流任务 |\n| `/provider <name> [apiKey]` | 切换提供商 |\n| `/state` | 查看当前状态 |\n| `/skills` | 列出所有技能 |\n\n### 启动 HTTP 服务\n\n```bash\nnpm run server\n```\n\n```bash\n# 对话接口\ncurl -X POST http://localhost:3000/chat \\\n -H \"Content-Type: application/json\" \\\n -d '{\"prompt\": \"你好\"}'\n\n# 流式对话\ncurl -X POST http://localhost:3000/chat/stream \\\n -H \"Content-Type: application/json\" \\\n -d '{\"prompt\": \"写一个故事\"}'\n```\n\n---\n\n## 支持的提供商\n\n### 🇨🇳 国产 LLM\n\n| 提供商 | 预设名称 | 模型示例 | 特点 |\n|:------|:---------|:---------|:-----|\n| GLM (智谱) | `glm` | glm-5, glm-4.7 | 长文本、多模态 |\n| Qwen (通义千问) | `qwen` | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| DeepSeek | `deepseek` | deepseek-chat, deepseek-reasoner | 高性价比 |\n| Kimi (月之暗面) | `kimi` | moonshot-v1-128k | 超长上下文 |\n| ERNIE (文心一言) | `ernie` | ernie-4.0-8k | 百度 |\n\n### 🌍 全球 LLM\n\n| 提供商 | 预设名称 | 模型示例 |\n|:------|:---------|:---------|\n| Anthropic | `anthropic` | claude-opus-4-6, claude-sonnet-4-6 |\n| OpenAI | `openai` | gpt-4o, gpt-4-turbo |\n| Azure OpenAI | `azure_openai` | gpt-4o, gpt-35-turbo |\n| OpenRouter | `openrouter` | 100+ 模型聚合 |\n| Together AI | `together` | 开源模型推理 |\n\n---\n\n## 三代理系统\n\nClaude Code 风格的子代理架构,自动根据任务类型选择合适的代理:\n\n```\n ┌─────────────────┐\n │ 主 Agent │\n │ (统一入口) │\n └────────┬────────┘\n │\n ┌─────────────────┼─────────────────┐\n ▼ ▼ ▼\n ┌──────────────┐ ┌──────────────┐ ┌──────────────┐\n │ Explore │ │ Plan │ │ General │\n │ 快速 │ │ 研究 │ │ 通用 │\n ├──────────────┤ ├──────────────┤ ├──────────────┤\n │ Haiku 模型 │ │ 继承模型 │ │ 继承模型 │\n │ 只读工具 │ │ 只读工具 │ │ 所有工具 │\n └──────────────┘ └──────────────┘ └──────────────┘\n```\n\n### 使用示例\n\n```typescript\nconst agent = createAgent();\n\n// Explore - 快速搜索(Haiku 模型,速度快)\nawait agent.explore('查找所有 API 路由', 'quick');\nawait agent.explore('分析项目结构', 'medium');\nawait agent.explore('全面分析认证模块', 'very-thorough');\n\n// Plan - 研究规划(只读工具)\nawait agent.plan('研究认证模块的实现方案');\n\n// General - 通用任务(所有工具)\nawait agent.general('重构代码并添加测试');\n```\n\n| Agent | 模型 | 工具 | 典型用途 |\n|:------|:-----|:-----|:---------|\n| **Explore** | Haiku(快速) | 只读 | 文件发现、代码搜索 |\n| **Plan** | 继承 | 只读 | 计划研究、收集上下文 |\n| **General** | 继承 | 全部 | 复杂任务、代码修改 |\n\n---\n\n## 三阶段工作流\n\n```\n 收集上下文 ──→ 采取行动 ──→ 验证结果\n ▲ │\n └──────────────────────────┘\n```\n\n```typescript\nimport { runWorkflow, codeTask, researchTask } from 'claude-agent-service';\n\n// 代码任务\nawait codeTask('实现一个工具函数库');\n\n// 研究任务\nawait researchTask('分析这个项目的架构');\n\n// 完整工作流控制\nawait runWorkflow('创建测试文件', {\n cwd: process.cwd(),\n onPhaseChange: (phase, desc) => console.log(`[${phase}] ${desc}`),\n});\n```\n\n### 任务类型\n\n| 类型 | 描述 | 可用工具 |\n|:-----|:-----|:---------|\n| `code` | 代码任务 | Read, Write, Edit, Bash, Glob, Grep |\n| `research` | 研究任务 | Read, Glob, Grep, WebSearch, WebFetch |\n| `analysis` | 分析任务 | Read, Bash, Glob, Grep |\n| `writing` | 写作任务 | Read, Write, Edit, WebSearch |\n| `data` | 数据处理 | Read, Write, Edit, Bash, Glob |\n| `custom` | 自定义任务 | 所有工具 |\n\n---\n\n## Hooks 系统\n\n在关键生命周期节点插入自定义逻辑:\n\n```typescript\nconst agent = createAgent();\n\n// 会话生命周期\nagent.context.hookRegistry.on('session:start', async (ctx) => {\n console.log(`Session started: ${ctx.sessionId}`);\n});\n\n// 工具调用拦截\nagent.context.hookRegistry.on('tool:before', async (ctx) => {\n if (ctx.toolName === 'Bash') {\n // 安全检查\n return { proceed: true };\n }\n});\n\n// 工作流阶段追踪\nagent.context.hookRegistry.on('workflow:phase', async (ctx) => {\n console.log(`Phase: ${ctx.phase}`);\n});\n```\n\n| Hook 类型 | 触发时机 |\n|:----------|:---------|\n| `session:start` / `session:end` / `session:error` | 会话生命周期 |\n| `tool:before` / `tool:after` | 工具调用前后 |\n| `capability:init` / `capability:dispose` | 能力生命周期 |\n| `workflow:phase` | 工作流阶段变化 |\n\n---\n\n## API 参考\n\n### UnifiedAgentService\n\n```typescript\nclass UnifiedAgentService {\n // 提供商管理\n get currentProvider(): CCProvider | null;\n listProviders(): CCProvider[];\n useProvider(name: string, apiKey?: string): boolean;\n\n // 对话\n chat(prompt: string, options?: AgentChatOptions): Promise<string>;\n chatStream(prompt: string, options?: AgentChatOptions): Promise<void>;\n}\n```\n\n### 便捷函数\n\n```typescript\n// 快速对话\nawait ask('你好', { provider: 'deepseek', apiKey: '...' });\n\n// 创建 Agent\nconst agent = createAgent();\n\n// 使用预设\nawait usePreset('glm', 'your-api-key');\n\n// 子代理便捷函数\nawait explore('搜索代码', 'quick');\nawait plan('研究实现');\nawait general('执行任务');\n```\n\n---\n\n## 配置\n\n### 环境变量\n\n```bash\n# .env\nGLM_API_KEY=your_glm_key\nDEEPSEEK_API_KEY=your_deepseek_key\nQWEN_API_KEY=your_qwen_key\nOPENAI_API_KEY=your_openai_key\n```\n\n```typescript\n// 自动从环境变量读取\nagent.useProvider('glm'); // → GLM_API_KEY\nagent.useProvider('deepseek'); // → DEEPSEEK_API_KEY\n```\n\n### 外部配置\n\n配置由外部应用传入,SDK 只是消费者:\n\n```typescript\nimport { createAgent, type ExternalConfig } from 'claude-agent-service';\n\nconst config: ExternalConfig = {\n providers: [\n {\n id: 'glm',\n name: 'GLM (智谱)',\n baseUrl: 'https://open.bigmodel.cn/api/paas/v4',\n apiKey: 'your-api-key',\n model: 'glm-5',\n },\n {\n id: 'deepseek',\n name: 'DeepSeek',\n baseUrl: 'https://api.deepseek.com',\n apiKeyEnv: 'DEEPSEEK_API_KEY', // 或从环境变量读取\n },\n ],\n activeProvider: 'glm',\n mcpServers: {\n context7: {\n command: 'npx',\n args: ['-y', '@anthropic/mcp-server-context7'],\n },\n },\n};\n\nconst agent = createAgent({ externalConfig: config });\n```\n\n### 配置优先级\n\n| 来源 | 优先级 | 说明 |\n|:-----|:-------|:-----|\n| 外部配置 | 最高 | 应用传入的 ExternalConfig |\n| 环境变量 | 次高 | ${PROVIDER}_API_KEY 约定 |\n\n---\n\n## 技能系统\n\n模块化的功能扩展,通过 YAML frontmatter 定义:\n\n```\nskills/\n├── code-review/\n│ └── SKILL.md\n└── api-testing/\n └── SKILL.md\n```\n\n```markdown\n---\nname: Code Review\ndescription: Used when user asks to review code...\ntags:\n - code-quality\n---\n\n# Code Review Skill\n...\n```\n\n```typescript\nimport { initializeSkills } from 'claude-agent-service';\n\nconst registry = await initializeSkills();\nconst match = registry.match('帮我 review 代码');\n```\n\n---\n\n## 目录结构\n\n```\nsrc/\n├── agents/\n│ ├── core/ # Agent 核心实现\n│ ├── capabilities/ # 能力模块(委托模式)\n│ ├── prompts/ # Prompt 模板系统\n│ └── registry/ # Agent 注册表\n├── providers/\n│ ├── sources/ # 配置来源(环境变量)\n│ ├── presets/ # 内置预设\n│ └── models/ # 模型规格\n├── skills/ # 技能系统\n├── hooks/ # Hooks 系统\n├── services/ # 服务层\n└── tools/ # MCP 工具\n\nskills/ # 技能定义文件\ntests/ # 测试(unit, integration, e2e)\n```\n\n---\n\n## 测试\n\n```bash\n# 运行所有测试\nnpm test\n\n# 监视模式\nnpm run test:watch\n\n# 覆盖率报告\nnpm run test:coverage\n\n# E2E 测试(真实 API)\nnpm run test:e2e\n```\n\n---\n\n## 常见问题\n\n<details>\n<summary><b>如何配置多个提供商?</b></summary>\n<br>\n\n通过外部配置传入:\n\n```typescript\nconst agent = createAgent({\n externalConfig: {\n providers: [\n { id: 'glm', baseUrl: '...', apiKey: '...' },\n { id: 'deepseek', baseUrl: '...', apiKey: '...' },\n ],\n activeProvider: 'glm',\n },\n});\n```\n\n</details>\n\n<details>\n<summary><b>如何添加新的提供商?</b></summary>\n<br>\n\n1. 在外部配置中添加自定义提供商\n2. 或在 `presets/` 中添加预设并提交 PR\n\n</details>\n\n<details>\n<summary><b>如何创建自定义技能?</b></summary>\n<br>\n\n在 `skills/` 目录创建文件夹和 `SKILL.md` 文件,使用 YAML frontmatter 定义元数据。系统会自动加载和匹配技能。\n\n</details>\n\n<details>\n<summary><b>如何处理 API Key?</b></summary>\n<br>\n\n推荐使用环境变量存储 API Key,不要硬编码在代码中。\n\n</details>\n\n<details>\n<summary><b>如何在生产环境部署?</b></summary>\n<br>\n\n```typescript\nimport { Agent } from 'claude-agent-service';\n\nconst agent = new Agent();\n\n// Express 示例\napp.post('/api/chat', async (req, res) => {\n const response = await agent.chat(req.body.prompt);\n res.json({ response });\n});\n```\n\n</details>\n\n---\n\n## 开发\n\n```bash\n# 构建\nnpm run build\n\n# 监视模式\nnpm run dev\n\n# 运行测试\nnpm test\n```\n\n---\n\n## 相关项目\n\n| 项目 | 描述 |\n|:-----|:-----|\n| [Claude Agent SDK](https://github.com/anthropics/claude-agent-sdk) | Anthropic 官方 Agent SDK |\n\n---\n\n## 许可证\n\n[MIT](LICENSE)\n\n---\n\n<p align=\"center\">\n 欢迎提交 <a href=\"https://github.com/farion1231/hive/issues\">Issue</a> 和 <a href=\"https://github.com/farion1231/hive/pulls\">Pull Request</a>!\n</p>\n"}, "b715e7a64942ec98e5db27dc418e206d8e75e6e6": {"t": 1785764597.047977, "n": 19687, "h": "9d47c3a6bb1dae8d", "c": "# Claude Agent Service\n\n面向 **C 端应用** 的 Claude Agent 服务 SDK。\n\n**核心设计:借助生态力量,不重复造轮子**\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│ 你的 C 端应用 │\n├─────────────────────────────────────────────────────────────────┤\n│ 本 SDK (claude-agent-service) │\n├─────────────────────────────────────────────────────────────────┤\n│ Agent 核心系统 │\n│ ┌─────────────────────────────────────────────────────────┐ │\n│ │ Agent (主入口) │ │\n│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │\n│ │ │ Provider │ │ Skill │ │ Chat │ │Workflow │ │ │\n│ │ │Capability│ │Capability│ │Capability│ │Capability│ │ │\n│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │\n│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │\n│ │ │SubAgent │ │ Hooks │ │ Prompt │ │ │\n│ │ │Capability│ │ Registry │ │ System │ │ │\n│ │ └──────────┘ └──────────┘ └──────────┘ │ │\n│ └─────────────────────────────────────────────────────────┘ │\n├─────────────────────────────────────────────────────────────────┤\n│ 提供商管理 + CC-Switch │\n├─────────────────────────────────────────────────────────────────┤\n│ Claude │ GLM │ DeepSeek │ Qwen │ OpenAI │ 50+ 更多... │\n└─────────────────────────────────────────────────────────────────┘\n```\n\n## 特性\n\n- 🚀 **开箱即用** - 内置主流 LLM 提供商预设,无需额外配置\n- 🔄 **双模式切换** - 支持 CC-Switch 集成或直接使用预设\n- 🇨🇳 **国产友好** - 原生支持 GLM、DeepSeek、Qwen、Kimi 等\n- 🌍 **全球覆盖** - 支持 OpenAI、OpenRouter、Together AI 等\n- 🤖 **主 Agent 系统** - 统一入口,管理所有子 Agent 和功能\n- 🔧 **子 Agent 系统** - Claude Code 风格的 Explore / Plan / General\n- 🔄 **工作流引擎** - 三阶段循环:收集上下文 → 采取行动 → 验证结果\n- 🎯 **技能系统** - 模块化技能管理,支持自定义扩展\n- 🌐 **HTTP 服务** - 内置 REST API,支持流式响应\n- 📝 **通用任务** - 不只是写代码,支持研究、分析、写作、数据处理等\n- 💾 **持久化存储** - 用户偏好、跨会话记忆\n- 🛠️ **MCP 扩展** - 支持 Model Context Protocol\n- 🪝 **Hooks 系统** - 会话生命周期、工具调用、能力初始化等事件钩子\n- ✅ **完整测试** - 核心模块高覆盖率\n\n## 快速开始\n\n### 本地调试 CLI(快速测试 Agent)\n\n```bash\nnpm run cli\n```\n\n启动后可直接输入问题进行对话,支持以下模式:\n\n- **workflow 模式**(默认):直接输入任务,观察 phase/tool 输出,验证 agent loop 与子 agent\n- **chat 模式**:简单对话交互\n- **explore/plan/general 模式**:测试特定子 Agent\n\nCLI 命令:\n- `/mode chat|explore|plan|general|workflow` - 切换模式\n- `/loop <task>` - 执行工作流任务\n- `/provider <name> [apiKey]` - 切换提供商\n- `/cwd <path>` - 设置工作目录\n- `/thoroughness quick|medium|very-thorough` - 设置彻底程度\n- `/stream on|off` - 开关流式输出\n- `/state` - 查看当前状态\n- `/skills` - 列出所有技能\n- `/help` - 显示帮助\n- `/exit` - 退出\n\n### 启动 HTTP 服务\n\n```bash\nnpm run server\n```\n\n服务运行在 `http://localhost:3000`,提供以下 API:\n\n- `POST /chat` - 简单对话\n- `POST /chat/stream` - 流式对话(Server-Sent Events)\n- `GET /health` - 健康检查\n- `GET /providers` - 列出所有提供商\n- `GET /skills` - 列出所有技能\n\n示例:\n```bash\n# 简单对话\ncurl -X POST http://localhost:3000/chat \\\n -H \"Content-Type: application/json\" \\\n -d '{\"prompt\": \"你好,请介绍一下你自己\"}'\n\n# 流式对话\ncurl -X POST http://localhost:3000/chat/stream \\\n -H \"Content-Type: application/json\" \\\n -d '{\"prompt\": \"写一个故事\"}'\n```\n\n### 1. 安装\n\n```bash\n# 安装本 SDK\nnpm install claude-agent-service\n\n# 可选:安装 CC-Switch(用于管理多个提供商)\nbrew tap farion1231/ccswitch\nbrew install --cask cc-switch\n```\n\n### 2. 使用内置预设(推荐新手)\n\n```typescript\nimport { UnifiedAgentService, ask } from 'claude-agent-service';\n\n// 方式 1: 快速对话\nconst answer = await ask('你好', {\n provider: 'deepseek',\n apiKey: 'your-deepseek-api-key',\n});\n\n// 方式 2: 创建 Agent 实例\nconst agent = new UnifiedAgentService();\n\n// 切换到 DeepSeek\nagent.useProvider('deepseek', 'your-api-key');\nconst response = await agent.chat('分析这个代码');\n\n// 切换到 GLM\nagent.useProvider('glm', 'your-glm-api-key');\nconst response2 = await agent.chat('你好,请介绍一下你自己');\n```\n\n### 3. 使用 CC-Switch(推荐进阶用户)\n\n```typescript\nimport { UnifiedAgentService } from 'claude-agent-service';\n\nconst agent = new UnifiedAgentService();\n\n// 检查 CC-Switch 是否已安装\nif (agent.isCCSwitchInstalled()) {\n // 使用 CC-Switch 当前激活的提供商\n const response = await agent.chat('你好');\n\n // 切换提供商(配置在 CC-Switch 中)\n agent.useProvider('openrouter');\n const response2 = await agent.chat('Hello');\n}\n```\n\n### 4. 流式对话\n\n```typescript\nconst agent = new UnifiedAgentService();\n\nawait agent.chatStream('写一个故事', {\n provider: 'qwen',\n apiKey: 'your-qwen-api-key',\n onText: (text) => console.log(text),\n onTool: (name) => console.log(`使用工具: ${name}`),\n});\n```\n\n## 支持的提供商\n\n### 国产 LLM\n\n| 提供商 | 预设名称 | 模型示例 | 特点 |\n|--------|----------|----------|------|\n| **GLM (智谱)** | `glm` | glm-5, glm-4.7 | 长文本、多模态 |\n| **Qwen (通义千问)** | `qwen` | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| **DeepSeek** | `deepseek` | deepseek-chat, deepseek-reasoner | 高性价比 |\n| **Kimi (月之暗面)** | `kimi` | moonshot-v1-128k | 超长上下文 |\n| **ERNIE (文心一言)** | `ernie` | ernie-4.0-8k | 百度 |\n| **Spark (讯飞星火)** | `spark` | spark-v4.0 | 讯飞 |\n\n### OpenAI 系列\n\n| 提供商 | 预设名称 | 模型示例 |\n|--------|----------|----------|\n| **OpenAI** | `openai` | gpt-4o, gpt-4-turbo |\n| **Azure OpenAI** | `azure_openai` | gpt-4o, gpt-35-turbo |\n\n### 聚合网关\n\n| 提供商 | 预设名称 | 特点 |\n|--------|----------|------|\n| **OpenRouter** | `openrouter` | 100+ 模型聚合 |\n| **LiteLLM** | `litellm` | 开源自部署网关 |\n| **Together AI** | `together` | 开源模型推理 |\n\n### 官方\n\n| 提供商 | 预设名称 | 模型示例 |\n|--------|----------|----------|\n| **Anthropic** | `anthropic` | claude-opus-4-6, claude-sonnet-4-6 |\n\n## API 参考\n\n### UnifiedAgentService\n\n```typescript\nclass UnifiedAgentService {\n // 获取当前提供商\n get currentProvider(): CCProvider | null;\n\n // 列出所有提供商(合并 CC-Switch + 内置预设)\n listProviders(): CCProvider[];\n\n // 列出所有内置预设\n listPresets(): Array<{ id: string; name: string; description?: string }>;\n\n // 按类别列出预设\n listPresetsByCategory(): Record<string, Array<{ id: string; name: string }>>;\n\n // 切换提供商\n useProvider(name: string, apiKey?: string): boolean;\n\n // 检查 CC-Switch 是否安装\n isCCSwitchInstalled(): boolean;\n\n // 简单对话\n chat(prompt: string, options?: AgentChatOptions): Promise<string>;\n\n // 流式对话\n chatStream(prompt: string, options?: AgentChatOptions): Promise<void>;\n}\n```\n\n### AgentChatOptions\n\n```typescript\ninterface AgentChatOptions {\n provider?: string; // 提供商名称(预设或 CC-Switch 配置)\n apiKey?: string; // API Key(使用预设时需要)\n model?: string; // 指定模型\n cwd?: string; // 工作目录\n tools?: string[]; // 允许的工具\n maxTurns?: number; // 最大轮次\n systemPrompt?: string; // 系统提示\n onText?: (text: string) => void; // 文本回调\n onTool?: (name: string) => void; // 工具回调\n onError?: (error: Error) => void; // 错误回调\n}\n```\n\n### ServiceRegistry\n\n```typescript\nclass ServiceRegistry implements ServiceContext {\n // 服务管理\n register<T extends IService>(service: T): void;\n getService<T extends IService>(name: string): T | undefined;\n\n // 生命周期\n initializeAll(): Promise<void>;\n startAll(): Promise<void>;\n stopAll(): Promise<void>;\n disposeAll(): Promise<void>;\n\n // 事件\n emit(event: string, data: unknown): void;\n on(event: string, handler: EventHandler): void;\n off(event: string, handler: EventHandler): void;\n\n // 健康检查\n healthCheckAll(): Promise<Record<string, boolean>>;\n getAllStatus(): Record<string, { status: ServiceStatus; config: IServiceConfig }>;\n}\n```\n\n### HookRegistry (新增)\n\n```typescript\nclass HookRegistry {\n // Hook 注册\n on<K extends HookType>(type: K, hook: HookHandler<HookTypeMap[K]>): void;\n off<K extends HookType>(type: K, hook: HookHandler<HookTypeMap[K]>): void;\n\n // Hook 触发\n emit<K extends HookType>(type: K, context: HookTypeMap[K]): Promise<void>;\n\n // 会话管理\n getSessionId(): string;\n setSessionId(id: string): void;\n\n // 执行追踪\n getExecutionLog(): HookExecutionLog[];\n enableExecutionTracking(options?: ExecutionTrackingOptions): void;\n}\n```\n\n## 便捷函数\n\n```typescript\n// 快速对话\nimport { ask } from 'claude-agent-service';\nconst answer = await ask('你好', { provider: 'deepseek', apiKey: '...' });\n\n// 创建 Agent\nimport { createAgent } from 'claude-agent-service';\nconst agent = createAgent();\n\n// 快速使用预设\nimport { usePreset } from 'claude-agent-service';\nawait usePreset('glm', 'your-api-key');\n```\n\n## 三代理系统(Claude Code 风格)\n\nClaude Code 内置三个核心代理,可以处理任何任务:\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ 主 Agent │\n├─────────────────────────────────────────────────────────┤\n│ 根据任务类型,自动委托给合适的子代理 │\n└───────────────┬─────────────────────────────────────────┘\n │\n ┌───────────┼───────────┐\n ▼ ▼ ▼\n┌────────┐ ┌────────┐ ┌────────┐\n│Explore │ │ Plan │ │General │\n│ 快速 │ │ 研究 │ │ 通用 │\n└────────┘ └────────┘ └────────┘\n│Haiku │ │继承 │ │继承 │\n│只读 │ │只读 │ │所有工具│\n└────────┘ └────────┘ └────────┘\n```\n\n### 使用示例\n\n```typescript\nimport { createAgent, explore, plan, general } from 'claude-agent-service';\n\nconst agent = createAgent();\n\n// Explore - 快速搜索代码库(Haiku 模型)\nawait agent.explore('查找所有 API 路由', 'quick'); // 快速\nawait agent.explore('分析项目结构', 'medium'); // 平衡\nawait agent.explore('全面分析认证模块', 'very-thorough'); // 彻底\n\n// Plan - 研究代码库用于规划\nawait agent.plan('研究认证模块的实现');\n\n// General - 通用任务(所有工具)\nawait agent.general('重构代码并添加测试');\n\n// 便捷函数\nawait explore('搜索代码', 'quick');\nawait plan('研究实现');\nawait general('执行任务');\n```\n\n### 三代理对比\n\n| Agent | 模型 | 工具 | 用途 |\n|-------|------|------|------|\n| **Explore** | Haiku(快速) | 只读 | 文件发现、代码搜索、探索 |\n| **Plan** | 继承 | 只读 | 计划研究、收集上下文 |\n| **General** | 继承 | 全部 | 复杂任务、代码修改 |\n\n## Hooks 系统\n\nHooks 系统提供生命周期事件钩子,支持在关键节点插入自定义逻辑。\n\n### 支持的 Hook 类型\n\n| Hook 类型 | 触发时机 | 用途 |\n|-----------|----------|------|\n| `session:start` | 会话开始 | 初始化、日志记录 |\n| `session:end` | 会话结束 | 清理、统计 |\n| `session:error` | 会话错误 | 错误处理、告警 |\n| `tool:before` | 工具调用前 | 参数校验、审计 |\n| `tool:after` | 工具调用后 | 结果处理、日志 |\n| `capability:init` | 能力初始化 | 依赖注入 |\n| `capability:dispose` | 能力销毁 | 资源清理 |\n| `workflow:phase` | 工作流阶段 | 进度追踪 |\n\n### 使用示例\n\n```typescript\nimport { Agent, HookRegistry } from 'claude-agent-service';\n\nconst agent = new Agent();\n\n// 注册 Hook\nagent.context.hookRegistry.on('session:start', {\n priority: 100, // 优先级,数值越小越先执行\n handler: async (ctx) => {\n console.log(`Session started: ${ctx.sessionId}`);\n },\n});\n\nagent.context.hookRegistry.on('tool:before', {\n priority: 50,\n handler: async (ctx) => {\n console.log(`Tool ${ctx.toolName} called with:`, ctx.params);\n // 可以修改参数\n ctx.params = { ...ctx.params, _timestamp: Date.now() };\n return { modifiedContext: ctx };\n },\n});\n\nagent.context.hookRegistry.on('workflow:phase', {\n handler: async (ctx) => {\n console.log(`Phase: ${ctx.phase} - ${ctx.description}`);\n },\n});\n```\n\n## 服务注册表\n\n服务注册表提供统一的服务生命周期管理。\n\n### 基础服务类\n\n```typescript\nimport { BaseService, ServiceRegistry } from 'claude-agent-service';\n\n// 创建自定义服务\nclass MyService extends BaseService {\n async doStart() {\n // 启动逻辑\n }\n\n async doStop() {\n // 停止逻辑\n }\n\n async healthCheck() {\n return true;\n }\n}\n\n// 注册服务\nconst registry = new ServiceRegistry();\nregistry.register(new MyService({\n name: 'my-service',\n priority: 10, // 优先级,越小越先启动\n dependencies: ['logger'], // 依赖其他服务\n autoStart: true,\n}));\n\n// 初始化和启动\nawait registry.initializeAll();\nawait registry.startAll();\n\n// 获取服务\nconst myService = registry.getService<MyService>('my-service');\n\n// 优雅关闭\nawait registry.stopAll();\nawait registry.disposeAll();\n```\n\n## 三阶段工作流\n\nClaude Code 的工作流是三阶段循环:\n\n```\n收集上下文 → 采取行动 → 验证结果\n ↑ │\n └───────────────────────┘\n```\n\n这三个阶段相互融合,Claude 始终使用工具来完成工作。\n\n### 使用示例\n\n```typescript\nimport { runWorkflow, codeTask, researchTask, WorkflowEngine } from 'claude-agent-service';\n\n// 基础工作流\nawait runWorkflow('创建一个 README.md', {\n cwd: process.cwd(),\n onPhaseChange: (phase, desc) => {\n console.log(`[${phase}] ${desc}`);\n },\n});\n\n// 代码任务\nawait codeTask('实现一个工具函数库');\n\n// 研究任务\nawait researchTask('分析这个项目的架构');\n\n// 完整工作流控制\nconst engine = new WorkflowEngine();\nawait engine.execute({\n task: '创建测试文件',\n cwd: './src',\n verifyCondition: '确保测试可以运行',\n onPhaseChange: (phase) => console.log(`Phase: ${phase}`),\n onTool: (tool) => console.log(`Tool: ${tool}`),\n});\n```\n\n### 任务类型\n\nSDK 不只是写代码,支持多种任务类型:\n\n| 类型 | 描述 | 工具 |\n|------|------|------|\n| `code` | 代码任务 | Read, Write, Edit, Bash, Glob, Grep |\n| `research` | 研究任务 | Read, Glob, Grep, WebSearch, WebFetch |\n| `analysis` | 分析任务 | Read, Bash, Glob, Grep |\n| `writing` | 写作任务 | Read, Write, Edit, WebSearch |\n| `data` | 数据处理 | Read, Write, Edit, Bash, Glob |\n| `automation` | 自动化任务 | Read, Write, Edit, Bash, Glob, Grep |\n| `custom` | 自定义任务 | 所有工具 |\n\n## 环境变量配置\n\n可以通过环境变量预配置 API Key,然后直接使用提供商名称:\n\n```bash\n# .env 文件\nGLM_API_KEY=your_glm_key\nDEEPSEEK_API_KEY=your_deepseek_key\nQWEN_API_KEY=your_qwen_key\nOPENAI_API_KEY=your_openai_key\nOPENROUTER_API_KEY=your_openrouter_key\n```\n\n```typescript\n// 然后在代码中直接使用\nagent.useProvider('glm'); // 自动从 GLM_API_KEY 读取\nagent.useProvider('deepseek'); // 自动从 DEEPSEEK_API_KEY 读取\n```\n\n## CC-Switch 集成\n\nCC-Switch 是一个跨平台的桌面应用,用于管理多个 LLM 提供商配置。\n\n### 直接读取配置\n\n```typescript\nimport { CCSwitchReader } from 'claude-agent-service';\n\nconst reader = new CCSwitchReader();\n\n// 获取当前激活的提供商\nconst provider = reader.getActiveProvider();\n\n// 应用到环境变量\nreader.applyProvider(provider);\n\n// 获取 MCP 服务器配置\nconst mcpServers = reader.getMcpServersForAgent();\n```\n\n### CC-Switch vs 内置预设\n\n| 场景 | 推荐方案 |\n|------|----------|\n| 只用一个提供商 | 内置预设 |\n| 需要频繁切换 | CC-Switch |\n| 团队共享配置 | CC-Switch |\n| 不想安装额外软件 | 内置预设 |\n| 需要自定义配置 | CC-Switch |\n\n## 技能系统\n\n技能系统提供模块化的功能扩展,支持通过 YAML frontmatter 配置技能元数据。\n\n### 技能结构\n\n```\nskills/\n├── code-review/\n│ └── SKILL.md # 代码审查技能\n└── api-testing/\n └── SKILL.md # API 测试技能\n```\n\n### 创建技能\n\n1. 在 `skills/` 目录创建技能文件夹\n2. 创建 `SKILL.md` 文件,包含 frontmatter 和说明:\n\n```markdown\n---\nname: My Skill\ndescription: This skill should be used when...\nversion: 1.0.0\nauthor: Your Name\ntags:\n - category\n - another-category\n---\n\n# My Skill\n\n## Purpose\n\nDescribe what this skill does...\n\n## Process\n\n1. Step 1\n2. Step 2\n...\n\n## Output Format\n\nDescribe expected output format...\n```\n\n### 使用技能\n\n```typescript\nimport { initializeSkills } from 'claude-agent-service';\n\n// 初始化技能系统\nconst registry = await initializeSkills();\n\n// 匹配技能\nconst match = registry.match('帮我 review 代码');\nif (match) {\n console.log(`Matched skill: ${match.skill.metadata.name}`);\n}\n\n// 列出所有技能\nconst skills = registry.getAllMetadata();\n```\n\n### 内置技能\n\n- **Code Review** - 代码审查和质量分析\n- **API Testing** - API 接口测试和验证\n\n## 测试\n\n项目包含完整的测试套件:\n\n```bash\n# 运行测试\nnpm test\n\n# 监视模式\nnpm run test:watch\n\n# 覆盖率报告\nnpm run test:coverage\n```\n\n## 目录结构\n\n```\nsrc/\n├── index.ts # SDK 入口\n├── server.ts # HTTP 服务\n├── cli.ts # CLI 工具\n│\n├── agents/ # Agent 系统\n│ ├── core/ # 核心 Agent 实现\n│ │ ├── Agent.ts # 主 Agent 类\n│ │ ├── AgentContext.ts # Agent 上下文\n│ │ ├── agents.ts # 内置 Agent 配置\n│ │ ├── runner.ts # Agent 运行器\n│ │ ├── task.ts # Task 系统\n│ │ ├── types.ts # 类型定义\n│ │ └── index.ts # 模块导出\n│ ├── capabilities/ # Agent 能力模块\n│ │ ├── index.ts # 能力模块导出\n│ │ ├── ChatCapability.ts # 对话能力\n│ │ ├── SkillCapability.ts # 技能能力\n│ │ ├── ProviderCapability.ts # 提供商能力\n│ │ ├── SubAgentCapability.ts # 子 Agent 能力\n│ │ └── WorkflowCapability.ts # 工作流能力\n│ ├── prompts/ # Prompt 模板系统\n│ │ ├── prompts.ts # Prompt 定义\n│ │ ├── PromptTemplate.ts # 模板类\n│ │ └── index.ts # 模块导出\n│ ├── registry/ # Agent 注册表\n│ │ ├── AgentRegistry.ts # 注册表实现\n│ │ └── index.ts # 模块导出\n│ ├── types.ts # Agent 类型定义\n│ └── index.ts # Agent 模块导出\n│\n├── hooks/ # Hooks 系统\n│ ├── index.ts # Hooks 模块导出\n│ ├── types.ts # Hook 类型定义\n│ └── registry.ts # Hook 注册表\n│\n├── services/ # 服务层\n│ ├── index.ts # 服务模块导出\n│ ├── types.ts # 服务类型定义\n│ ├── ServiceRegistry.ts # 服务注册表\n│ ├── preferences.ts # 偏好存储\n│ └── base/ # 基础服务\n│ ├── BaseService.ts # 服务基类\n│ └── index.ts # 模块导出\n│\n├── providers/ # 提供商管理\n│ ├── index.ts # 模块导出\n│ ├── Provider.ts # Provider 类\n│ ├── ProviderManager.ts # 提供商管理器\n│ ├── types.ts # 类型定义\n│ ├── sources/ # 配置来源\n│ │ ├── index.ts # 来源导出\n│ │ ├── cc-switch.ts # CC-Switch 来源\n│ │ ├── env.ts # 环境变量来源\n│ │ └── local-config.ts # 本地配置来源\n│ ├── presets/ # 提供商预设\n│ │ ├── index.ts # 预设导出\n│ │ ├── anthropic.ts # Anthropic 预设\n│ │ ├── openai.ts # OpenAI 预设\n│ │ ├── chinese.ts # 国产 LLM 预设\n│ │ └── gateway.ts # 网关预设\n│ └── models/ # 模型管理\n│ ├── index.ts # 模块导出\n│ ├── spec.ts # 模型规格\n│ ├── fetcher.ts # 模型获取\n│ └── registry.ts # 模型注册表\n│\n├── skills/ # 技能系统\n│ ├── index.ts # 技能模块导出\n│ ├── types.ts # 类型定义\n│ ├── loader.ts # 技能加载器\n│ ├── matcher.ts # 技能匹配器\n│ └── registry.ts # 技能注册表\n│\n└── tools/ # MCP 工具\n ├── preference-tools.ts # 偏好 MCP 工具\n └── memory-tools.ts # 记忆 MCP 工具\n\nskills/ # 技能定义\n├── code-review/\n│ └── SKILL.md\n└── api-testing/\n └── SKILL.md\n\ntests/ # 测试文件\n├── unit/ # 单元测试\n├── integration/ # 集成测试\n├── hooks/ # Hooks 测试\n└── skills.test.ts # 技能系统测试\n```\n\n## 高级功能\n\n### 自定义 Agent\n\n```typescript\nimport { AgentRegistry, getAgentConfig } from 'claude-agent-service';\n\n// 创建自定义 Agent\nconst registry = new AgentRegistry();\nregistry.register({\n name: 'my-agent',\n description: 'My custom agent',\n systemPrompt: 'You are a specialized agent...',\n model: 'claude-sonnet-4-6',\n tools: ['read', 'write'],\n});\n\n// 使用自定义 Agent\nconst config = getAgentConfig('my-agent');\n```\n\n### 工作流控制\n\n```typescript\nimport { WorkflowEngine } from 'claude-agent-service';\n\nconst engine = new WorkflowEngine();\nawait engine.execute({\n task: '创建测试文件',\n cwd: './src',\n verifyCondition: '确保测试可以运行',\n onPhaseChange: (phase) => console.log(`Phase: ${phase}`),\n onTool: (tool) => console.log(`Tool: ${tool}`),\n});\n```\n\n### Task 并行执行\n\n```typescript\nimport { runParallel } from 'claude-agent-service';\n\n// 并行执行多个任务\nconst results = await runParallel([\n { type: 'explore', prompt: '分析模块 A' },\n { type: 'explore', prompt: '分析模块 B' },\n { type: 'explore', prompt: '分析模块 C' },\n]);\n```\n\n## 常见问题\n\n### Q: 内置预设和 CC-Switch 有什么区别?\n\nA: 内置预设是硬编码在 SDK 中的配置,开箱即用。CC-Switch 是一个独立的桌面应用,提供更多自定义选项和 50+ 提供商预设。\n\n### Q: 如何添加新的提供商?\n\nA: 有两种方式:\n1. 在 CC-Switch 中添加自定义提供商\n2. 在 `presets.ts` 中添加预设并提交 PR\n\n### Q: 如何创建自定义技能?\n\nA: 在 `skills/` 目录创建文件夹和 `SKILL.md` 文件,使用 YAML frontmatter 定义元数据。系统会自动加载和匹配技能。\n\n### Q: 支持哪些模型?\n\nA: SDK 通过提供商支持几乎所有主流模型。具体支持的模型取决于各提供商。\n\n### Q: 如何处理 API Key?\n\nA: 推荐使用环境变量存储 API Key,不要硬编码在代码中。\n\n### Q: 如何在生产环境部署?\n\nA: 可以使用内置的 HTTP 服务器,或直接在应用中嵌入 SDK:\n\n```typescript\nimport { Agent } from 'claude-agent-service';\n\nconst agent = new Agent();\napp.post('/api/chat', async (req, res) => {\n const response = await agent.chat(req.body.prompt);\n res.json({ response });\n});\n```\n\n## 开发\n\n### 构建\n\n```bash\nnpm run build\n```\n\n### 监视模式\n\n```bash\nnpm run dev\n```\n\n### 运行测试\n\n```bash\nnpm test\nnpm run test:watch\nnpm run test:coverage\n```\n\n## 许可证\n\nMIT\n\n## 贡献\n\n欢迎提交 Issue 和 Pull Request!\n\n## 相关项目\n\n- [CC-Switch](https://github.com/farion1231/ccswitch) - 跨平台 LLM 提供商管理工具\n- [Anthropic Claude Agent SDK](https://github.com/anthropics/claude-agent-sdk) - 官方 Agent SDK\n\n## 许可证\n\nMIT\n"}, "be44d4e533d66ccc5c5cb92cb18b2f7c96d850f4": {"t": 1785764598.5972693, "n": 25978, "h": "d885c9df9bb59a26", "c": "# Claude Agent Service\n\n面向 **C 端应用** 的 Claude Agent 服务 SDK,支持 **Gateway 网关模式** 部署。\n\n**核心设计:借助生态力量,不重复造轮子**\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│ 你的 C 端应用 │\n├─────────────────────────────────────────────────────────────────┤\n│ 本 SDK (claude-agent-service) │\n├─────────────────────────────────────────────────────────────────┤\n│ Agent 网关层 (可选) │\n│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │\n│ │ 进程管理 │ │ 配置监听 │ │ 健康监控 │ │\n│ │ProcessMgr │ │ConfigWatch │ │HealthMon │ │\n│ └─────────────┘ └─────────────┘ └─────────────┘ │\n├─────────────────────────────────────────────────────────────────┤\n│ Agent 核心系统 │\n│ ┌─────────────────────────────────────────────────────────┐ │\n│ │ Agent (主入口) │ │\n│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │\n│ │ │ Provider │ │ Skill │ │ Chat │ │Workflow │ │ │\n│ │ │Capability│ │Capability│ │Capability│ │Capability│ │ │\n│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │\n│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │\n│ │ │SubAgent │ │SelfManage│ │ Hooks │ │ │\n│ │ │Capability│ │Capability│ │Registry │ │ │\n│ │ └──────────┘ └──────────┘ └──────────┘ │ │\n│ └─────────────────────────────────────────────────────────┘ │\n├─────────────────────────────────────────────────────────────────┤\n│ 提供商管理 + CC-Switch │\n├─────────────────────────────────────────────────────────────────┤\n│ Claude │ GLM │ DeepSeek │ Qwen │ OpenAI │ 50+ 更多... │\n└─────────────────────────────────────────────────────────────────┘\n```\n\n## 特性\n\n- 🚀 **开箱即用** - 内置主流 LLM 提供商预设,无需额外配置\n- 🔄 **双模式切换** - 支持 CC-Switch 集成或直接使用预设\n- 🇨🇳 **国产友好** - 原生支持 GLM、DeepSeek、Qwen、Kimi 等\n- 🌍 **全球覆盖** - 支持 OpenAI、OpenRouter、Together AI 等\n- 🤖 **主 Agent 系统** - 统一入口,管理所有子 Agent 和功能\n- 🔧 **子 Agent 系统** - Claude Code 风格的 Explore / Plan / General\n- 🔄 **工作流引擎** - 三阶段循环:收集上下文 → 采取行动 → 验证结果\n- 🎯 **技能系统** - 模块化技能管理,支持自定义扩展\n- 🌐 **HTTP 服务** - 内置 REST API,支持流式响应\n- 📝 **通用任务** - 不只是写代码,支持研究、分析、写作、数据处理等\n- 💾 **持久化存储** - 用户偏好、跨会话记忆\n- 🛠️ **MCP 扩展** - 支持 Model Context Protocol\n- ✅ **完整测试** - 153 个测试用例,核心模块高覆盖率\n\n### 🆕 新增特性\n\n- 🏠 **Gateway 网关** - 进程管理、配置热更新、健康监控、API 代理\n- 🪝 **Hooks 系统** - 会话生命周期、工具调用、能力初始化等事件钩子\n- 📦 **服务注册表** - 统一的服务生命周期管理和依赖注入\n- 🔗 **网关协议** - Agent 与 Gateway 间的标准化通信协议\n- 🔄 **自管理能力** - Agent 运行时动态更新配置和状态\n\n## 快速开始\n\n### 启动网关服务(生产部署推荐)\n\n```bash\nnpm run gateway\n```\n\n网关服务运行在 `http://localhost:8080`,提供:\n\n**管理接口:**\n- `GET /health` - 网关健康检查\n- `GET /agent/status` - Agent 状态\n- `POST /agent/start` - 启动 Agent\n- `POST /agent/stop` - 停止 Agent\n- `POST /agent/restart` - 重启 Agent\n- `POST /agent/heartbeat` - 心跳上报\n\n**代理接口:**\n- `/api/*` -> Agent 服务\n\n### 本地调试 CLI(快速测试 Agent)\n\n```bash\nnpm run cli\n```\n\n启动后可直接输入问题进行对话,支持以下模式:\n\n- **workflow 模式**(默认):直接输入任务,观察 phase/tool 输出,验证 agent loop 与子 agent\n- **chat 模式**:简单对话交互\n- **explore/plan/general 模式**:测试特定子 Agent\n\nCLI 命令:\n- `/mode chat|explore|plan|general|workflow` - 切换模式\n- `/loop <task>` - 执行工作流任务\n- `/provider <name> [apiKey]` - 切换提供商\n- `/cwd <path>` - 设置工作目录\n- `/thoroughness quick|medium|very-thorough` - 设置彻底程度\n- `/stream on|off` - 开关流式输出\n- `/state` - 查看当前状态\n- `/skills` - 列出所有技能\n- `/help` - 显示帮助\n- `/exit` - 退出\n\n### 启动 HTTP 服务\n\n```bash\nnpm run server\n```\n\n服务运行在 `http://localhost:3000`,提供以下 API:\n\n- `POST /chat` - 简单对话\n- `POST /chat/stream` - 流式对话(Server-Sent Events)\n- `GET /health` - 健康检查\n- `GET /providers` - 列出所有提供商\n- `GET /skills` - 列出所有技能\n\n示例:\n```bash\n# 简单对话\ncurl -X POST http://localhost:3000/chat \\\n -H \"Content-Type: application/json\" \\\n -d '{\"prompt\": \"你好,请介绍一下你自己\"}'\n\n# 流式对话\ncurl -X POST http://localhost:3000/chat/stream \\\n -H \"Content-Type: application/json\" \\\n -d '{\"prompt\": \"写一个故事\"}'\n```\n\n### 1. 安装\n\n```bash\n# 安装本 SDK\nnpm install claude-agent-service\n\n# 可选:安装 CC-Switch(用于管理多个提供商)\nbrew tap farion1231/ccswitch\nbrew install --cask cc-switch\n```\n\n### 2. 使用内置预设(推荐新手)\n\n```typescript\nimport { UnifiedAgentService, ask } from 'claude-agent-service';\n\n// 方式 1: 快速对话\nconst answer = await ask('你好', {\n provider: 'deepseek',\n apiKey: 'your-deepseek-api-key',\n});\n\n// 方式 2: 创建 Agent 实例\nconst agent = new UnifiedAgentService();\n\n// 切换到 DeepSeek\nagent.useProvider('deepseek', 'your-api-key');\nconst response = await agent.chat('分析这个代码');\n\n// 切换到 GLM\nagent.useProvider('glm', 'your-glm-api-key');\nconst response2 = await agent.chat('你好,请介绍一下你自己');\n```\n\n### 3. 使用 CC-Switch(推荐进阶用户)\n\n```typescript\nimport { UnifiedAgentService } from 'claude-agent-service';\n\nconst agent = new UnifiedAgentService();\n\n// 检查 CC-Switch 是否已安装\nif (agent.isCCSwitchInstalled()) {\n // 使用 CC-Switch 当前激活的提供商\n const response = await agent.chat('你好');\n\n // 切换提供商(配置在 CC-Switch 中)\n agent.useProvider('openrouter');\n const response2 = await agent.chat('Hello');\n}\n```\n\n### 4. 流式对话\n\n```typescript\nconst agent = new UnifiedAgentService();\n\nawait agent.chatStream('写一个故事', {\n provider: 'qwen',\n apiKey: 'your-qwen-api-key',\n onText: (text) => console.log(text),\n onTool: (name) => console.log(`使用工具: ${name}`),\n});\n```\n\n## 支持的提供商\n\n### 国产 LLM\n\n| 提供商 | 预设名称 | 模型示例 | 特点 |\n|--------|----------|----------|------|\n| **GLM (智谱)** | `glm` | glm-5, glm-4.7 | 长文本、多模态 |\n| **Qwen (通义千问)** | `qwen` | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| **DeepSeek** | `deepseek` | deepseek-chat, deepseek-reasoner | 高性价比 |\n| **Kimi (月之暗面)** | `kimi` | moonshot-v1-128k | 超长上下文 |\n| **ERNIE (文心一言)** | `ernie` | ernie-4.0-8k | 百度 |\n| **Spark (讯飞星火)** | `spark` | spark-v4.0 | 讯飞 |\n\n### OpenAI 系列\n\n| 提供商 | 预设名称 | 模型示例 |\n|--------|----------|----------|\n| **OpenAI** | `openai` | gpt-4o, gpt-4-turbo |\n| **Azure OpenAI** | `azure_openai` | gpt-4o, gpt-35-turbo |\n\n### 聚合网关\n\n| 提供商 | 预设名称 | 特点 |\n|--------|----------|------|\n| **OpenRouter** | `openrouter` | 100+ 模型聚合 |\n| **LiteLLM** | `litellm` | 开源自部署网关 |\n| **Together AI** | `together` | 开源模型推理 |\n\n### 官方\n\n| 提供商 | 预设名称 | 模型示例 |\n|--------|----------|----------|\n| **Anthropic** | `anthropic` | claude-opus-4-6, claude-sonnet-4-6 |\n\n## API 参考\n\n### UnifiedAgentService\n\n```typescript\nclass UnifiedAgentService {\n // 获取当前提供商\n get currentProvider(): CCProvider | null;\n\n // 列出所有提供商(合并 CC-Switch + 内置预设)\n listProviders(): CCProvider[];\n\n // 列出所有内置预设\n listPresets(): Array<{ id: string; name: string; description?: string }>;\n\n // 按类别列出预设\n listPresetsByCategory(): Record<string, Array<{ id: string; name: string }>>;\n\n // 切换提供商\n useProvider(name: string, apiKey?: string): boolean;\n\n // 检查 CC-Switch 是否安装\n isCCSwitchInstalled(): boolean;\n\n // 简单对话\n chat(prompt: string, options?: AgentChatOptions): Promise<string>;\n\n // 流式对话\n chatStream(prompt: string, options?: AgentChatOptions): Promise<void>;\n}\n```\n\n### AgentChatOptions\n\n```typescript\ninterface AgentChatOptions {\n provider?: string; // 提供商名称(预设或 CC-Switch 配置)\n apiKey?: string; // API Key(使用预设时需要)\n model?: string; // 指定模型\n cwd?: string; // 工作目录\n tools?: string[]; // 允许的工具\n maxTurns?: number; // 最大轮次\n systemPrompt?: string; // 系统提示\n onText?: (text: string) => void; // 文本回调\n onTool?: (name: string) => void; // 工具回调\n onError?: (error: Error) => void; // 错误回调\n}\n```\n\n### GatewayClientService (新增)\n\n```typescript\nclass GatewayClientService implements IGatewayClient {\n constructor(config: GatewayClientServiceConfig);\n\n // 连接管理\n connect(): Promise<void>;\n disconnect(): Promise<void>;\n isConnected(): boolean;\n\n // Agent 管理\n getAgentStatus(): Promise<AgentState>;\n startAgent(): Promise<void>;\n stopAgent(): Promise<void>;\n restartAgent(request?: RestartRequest): Promise<void>;\n\n // 配置管理\n getConfig(): Promise<Record<string, unknown>>;\n updateConfig(request: ConfigUpdateRequest): Promise<ConfigUpdateResponse>;\n\n // 健康检查\n healthCheck(): Promise<HealthCheckResult>;\n\n // 心跳\n sendHeartbeat(data: HeartbeatRequest): Promise<HeartbeatResponse>;\n}\n```\n\n### ServiceRegistry (新增)\n\n```typescript\nclass ServiceRegistry implements ServiceContext {\n // 服务管理\n register<T extends IService>(service: T): void;\n getService<T extends IService>(name: string): T | undefined;\n getGatewayClient(): IGatewayClient | undefined;\n\n // 生命周期\n initializeAll(): Promise<void>;\n startAll(): Promise<void>;\n stopAll(): Promise<void>;\n disposeAll(): Promise<void>;\n\n // 事件\n emit(event: string, data: unknown): void;\n on(event: string, handler: EventHandler): void;\n off(event: string, handler: EventHandler): void;\n\n // 健康检查\n healthCheckAll(): Promise<Record<string, boolean>>;\n getAllStatus(): Record<string, { status: ServiceStatus; config: IServiceConfig }>;\n}\n```\n\n### HookRegistry (新增)\n\n```typescript\nclass HookRegistry {\n // Hook 注册\n on<K extends HookType>(type: K, hook: HookHandler<HookTypeMap[K]>): void;\n off<K extends HookType>(type: K, hook: HookHandler<HookTypeMap[K]>): void;\n\n // Hook 触发\n emit<K extends HookType>(type: K, context: HookTypeMap[K]): Promise<void>;\n\n // 会话管理\n getSessionId(): string;\n setSessionId(id: string): void;\n\n // 执行追踪\n getExecutionLog(): HookExecutionLog[];\n enableExecutionTracking(options?: ExecutionTrackingOptions): void;\n}\n```\n\n## 便捷函数\n\n```typescript\n// 快速对话\nimport { ask } from 'claude-agent-service';\nconst answer = await ask('你好', { provider: 'deepseek', apiKey: '...' });\n\n// 创建 Agent\nimport { createAgent } from 'claude-agent-service';\nconst agent = createAgent();\n\n// 快速使用预设\nimport { usePreset } from 'claude-agent-service';\nawait usePreset('glm', 'your-api-key');\n```\n\n## 三代理系统(Claude Code 风格)\n\nClaude Code 内置三个核心代理,可以处理任何任务:\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ 主 Agent │\n├─────────────────────────────────────────────────────────┤\n│ 根据任务类型,自动委托给合适的子代理 │\n└───────────────┬─────────────────────────────────────────┘\n │\n ┌───────────┼───────────┐\n ▼ ▼ ▼\n┌────────┐ ┌────────┐ ┌────────┐\n│Explore │ │ Plan │ │General │\n│ 快速 │ │ 研究 │ │ 通用 │\n└────────┘ └────────┘ └────────┘\n│Haiku │ │继承 │ │继承 │\n│只读 │ │只读 │ │所有工具│\n└────────┘ └────────┘ └────────┘\n```\n\n### 使用示例\n\n```typescript\nimport { createAgent, explore, plan, general } from 'claude-agent-service';\n\nconst agent = createAgent();\n\n// Explore - 快速搜索代码库(Haiku 模型)\nawait agent.explore('查找所有 API 路由', 'quick'); // 快速\nawait agent.explore('分析项目结构', 'medium'); // 平衡\nawait agent.explore('全面分析认证模块', 'very-thorough'); // 彻底\n\n// Plan - 研究代码库用于规划\nawait agent.plan('研究认证模块的实现');\n\n// General - 通用任务(所有工具)\nawait agent.general('重构代码并添加测试');\n\n// 便捷函数\nawait explore('搜索代码', 'quick');\nawait plan('研究实现');\nawait general('执行任务');\n```\n\n### 三代理对比\n\n| Agent | 模型 | 工具 | 用途 |\n|-------|------|------|------|\n| **Explore** | Haiku(快速) | 只读 | 文件发现、代码搜索、探索 |\n| **Plan** | 继承 | 只读 | 计划研究、收集上下文 |\n| **General** | 继承 | 全部 | 复杂任务、代码修改 |\n\n## 网关系统 (Gateway)\n\n网关系统提供生产级 Agent 部署能力,包括进程管理、配置热更新、健康监控和 API 代理。\n\n### 架构\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ Agent Gateway │\n│ (端口: 8080) │\n├─────────────────────────────────────────────────────────┤\n│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │\n│ │ProcessMgr │ │ConfigWatch │ │HealthMon │ │\n│ │ 进程管理 │ │ 配置监听 │ │ 健康监控 │ │\n│ └─────────────┘ └─────────────┘ └─────────────┘ │\n├─────────────────────────────────────────────────────────┤\n│ HTTP API │\n│ ┌──────────────────────────────────────────────────┐ │\n│ │ 管理接口: │ │\n│ │ GET /health - 网关健康检查 │ │\n│ │ GET /agent/status - Agent 状态 │ │\n│ │ POST /agent/start - 启动 Agent │ │\n│ │ POST /agent/stop - 停止 Agent │ │\n│ │ POST /agent/restart - 重启 Agent │ │\n│ │ GET /agent/config - 获取配置 │ │\n│ │ POST /agent/config - 更新配置 │ │\n│ │ POST /agent/heartbeat - 心跳上报 │ │\n│ ├──────────────────────────────────────────────────┤ │\n│ │ 代理接口: │ │\n│ │ /api/* -> Agent 服务 (端口: 3000) │ │\n│ └──────────────────────────────────────────────────┘ │\n└─────────────────────────────────────────────────────────┘\n │\n ▼\n┌─────────────────────────────────────────────────────────┐\n│ Agent Service │\n│ (端口: 3000) │\n└─────────────────────────────────────────────────────────┘\n```\n\n### 启动网关\n\n```bash\n# 启动网关 (自动启动 Agent 服务)\nnpm run gateway\n\n# 环境变量配置\nGATEWAY_PORT=8080 # 网关端口\nAGENT_PORT=3000 # Agent 服务端口\nAUTH_TOKEN=your-token # API 认证 token\nPROVIDERS_CONFIG=./providers.json # 提供商配置\nHEALTH_CHECK_INTERVAL=10000 # 健康检查间隔 (ms)\n```\n\n### 网关配置\n\n```json\n// gateway.example.json\n{\n \"port\": 8080,\n \"agentPort\": 3000,\n \"agentHost\": \"localhost\",\n \"configPath\": \"./providers.json\",\n \"healthCheckInterval\": 10000,\n \"authToken\": \"your-auth-token\"\n}\n```\n\n### 网关客户端\n\n```typescript\nimport { GatewayClientService, ServiceRegistry } from 'claude-agent-service';\n\n// 创建服务注册表\nconst registry = new ServiceRegistry();\n\n// 创建网关客户端服务\nconst gatewayClient = new GatewayClientService({\n gatewayUrl: 'http://localhost:8080',\n authToken: 'your-token',\n autoReconnect: true,\n heartbeatInterval: 30000,\n});\n\n// 注册并初始化\nregistry.register(gatewayClient);\nawait registry.initializeAll();\nawait registry.startAll();\n\n// 使用客户端\nconst status = await gatewayClient.getAgentStatus();\nconst health = await gatewayClient.healthCheck();\n\n// 优雅关闭\nawait registry.stopAll();\nawait registry.disposeAll();\n```\n\n### 网关协议\n\nAgent 和 Gateway 之间通过标准化协议通信:\n\n```typescript\n// 心跳上报\ninterface HeartbeatRequest {\n agentId: string;\n timestamp: Date;\n status: AgentStatus;\n memoryUsage?: number;\n cpuUsage?: number;\n activeSessions?: number;\n}\n\n// 配置更新\ninterface ConfigUpdateRequest {\n config: Record<string, unknown>;\n restart?: boolean;\n version?: string;\n}\n\n// 健康检查\ninterface HealthCheckResult {\n healthy: boolean;\n timestamp: Date;\n responseTime: number;\n error?: string;\n}\n```\n\n## Hooks 系统\n\nHooks 系统提供生命周期事件钩子,支持在关键节点插入自定义逻辑。\n\n### 支持的 Hook 类型\n\n| Hook 类型 | 触发时机 | 用途 |\n|-----------|----------|------|\n| `session:start` | 会话开始 | 初始化、日志记录 |\n| `session:end` | 会话结束 | 清理、统计 |\n| `session:error` | 会话错误 | 错误处理、告警 |\n| `tool:before` | 工具调用前 | 参数校验、审计 |\n| `tool:after` | 工具调用后 | 结果处理、日志 |\n| `capability:init` | 能力初始化 | 依赖注入 |\n| `capability:dispose` | 能力销毁 | 资源清理 |\n| `workflow:phase` | 工作流阶段 | 进度追踪 |\n\n### 使用示例\n\n```typescript\nimport { Agent, HookRegistry } from 'claude-agent-service';\n\nconst agent = new Agent();\n\n// 注册 Hook\nagent.context.hookRegistry.on('session:start', {\n priority: 100, // 优先级,数值越小越先执行\n handler: async (ctx) => {\n console.log(`Session started: ${ctx.sessionId}`);\n },\n});\n\nagent.context.hookRegistry.on('tool:before', {\n priority: 50,\n handler: async (ctx) => {\n console.log(`Tool ${ctx.toolName} called with:`, ctx.params);\n // 可以修改参数\n ctx.params = { ...ctx.params, _timestamp: Date.now() };\n return { modifiedContext: ctx };\n },\n});\n\nagent.context.hookRegistry.on('workflow:phase', {\n handler: async (ctx) => {\n console.log(`Phase: ${ctx.phase} - ${ctx.description}`);\n },\n});\n```\n\n## 服务注册表\n\n服务注册表提供统一的服务生命周期管理。\n\n### 基础服务类\n\n```typescript\nimport { BaseService, ServiceRegistry } from 'claude-agent-service';\n\n// 创建自定义服务\nclass MyService extends BaseService {\n async doStart() {\n // 启动逻辑\n }\n\n async doStop() {\n // 停止逻辑\n }\n\n async healthCheck() {\n return true;\n }\n}\n\n// 注册服务\nconst registry = new ServiceRegistry();\nregistry.register(new MyService({\n name: 'my-service',\n priority: 10, // 优先级,越小越先启动\n dependencies: ['gateway-client'], // 依赖其他服务\n autoStart: true,\n}));\n\n// 初始化和启动\nawait registry.initializeAll();\nawait registry.startAll();\n\n// 获取服务\nconst myService = registry.getService<MyService>('my-service');\n\n// 优雅关闭\nawait registry.stopAll();\nawait registry.disposeAll();\n```\n\n## 三阶段工作流\n\nClaude Code 的工作流是三阶段循环:\n\n```\n收集上下文 → 采取行动 → 验证结果\n ↑ │\n └───────────────────────┘\n```\n\n这三个阶段相互融合,Claude 始终使用工具来完成工作。\n\n### 使用示例\n\n```typescript\nimport { runWorkflow, codeTask, researchTask, WorkflowEngine } from 'claude-agent-service';\n\n// 基础工作流\nawait runWorkflow('创建一个 README.md', {\n cwd: process.cwd(),\n onPhaseChange: (phase, desc) => {\n console.log(`[${phase}] ${desc}`);\n },\n});\n\n// 代码任务\nawait codeTask('实现一个工具函数库');\n\n// 研究任务\nawait researchTask('分析这个项目的架构');\n\n// 完整工作流控制\nconst engine = new WorkflowEngine();\nawait engine.execute({\n task: '创建测试文件',\n cwd: './src',\n verifyCondition: '确保测试可以运行',\n onPhaseChange: (phase) => console.log(`Phase: ${phase}`),\n onTool: (tool) => console.log(`Tool: ${tool}`),\n});\n```\n\n### 任务类型\n\nSDK 不只是写代码,支持多种任务类型:\n\n| 类型 | 描述 | 工具 |\n|------|------|------|\n| `code` | 代码任务 | Read, Write, Edit, Bash, Glob, Grep |\n| `research` | 研究任务 | Read, Glob, Grep, WebSearch, WebFetch |\n| `analysis` | 分析任务 | Read, Bash, Glob, Grep |\n| `writing` | 写作任务 | Read, Write, Edit, WebSearch |\n| `data` | 数据处理 | Read, Write, Edit, Bash, Glob |\n| `automation` | 自动化任务 | Read, Write, Edit, Bash, Glob, Grep |\n| `custom` | 自定义任务 | 所有工具 |\n\n## 环境变量配置\n\n可以通过环境变量预配置 API Key,然后直接使用提供商名称:\n\n```bash\n# .env 文件\nGLM_API_KEY=your_glm_key\nDEEPSEEK_API_KEY=your_deepseek_key\nQWEN_API_KEY=your_qwen_key\nOPENAI_API_KEY=your_openai_key\nOPENROUTER_API_KEY=your_openrouter_key\n```\n\n```typescript\n// 然后在代码中直接使用\nagent.useProvider('glm'); // 自动从 GLM_API_KEY 读取\nagent.useProvider('deepseek'); // 自动从 DEEPSEEK_API_KEY 读取\n```\n\n## CC-Switch 集成\n\nCC-Switch 是一个跨平台的桌面应用,用于管理多个 LLM 提供商配置。\n\n### 直接读取配置\n\n```typescript\nimport { CCSwitchReader } from 'claude-agent-service';\n\nconst reader = new CCSwitchReader();\n\n// 获取当前激活的提供商\nconst provider = reader.getActiveProvider();\n\n// 应用到环境变量\nreader.applyProvider(provider);\n\n// 获取 MCP 服务器配置\nconst mcpServers = reader.getMcpServersForAgent();\n```\n\n### CC-Switch vs 内置预设\n\n| 场景 | 推荐方案 |\n|------|----------|\n| 只用一个提供商 | 内置预设 |\n| 需要频繁切换 | CC-Switch |\n| 团队共享配置 | CC-Switch |\n| 不想安装额外软件 | 内置预设 |\n| 需要自定义配置 | CC-Switch |\n\n## 技能系统\n\n技能系统提供模块化的功能扩展,支持通过 YAML frontmatter 配置技能元数据。\n\n### 技能结构\n\n```\nskills/\n├── code-review/\n│ └── SKILL.md # 代码审查技能\n└── api-testing/\n └── SKILL.md # API 测试技能\n```\n\n### 创建技能\n\n1. 在 `skills/` 目录创建技能文件夹\n2. 创建 `SKILL.md` 文件,包含 frontmatter 和说明:\n\n```markdown\n---\nname: My Skill\ndescription: This skill should be used when...\nversion: 1.0.0\nauthor: Your Name\ntags:\n - category\n - another-category\n---\n\n# My Skill\n\n## Purpose\n\nDescribe what this skill does...\n\n## Process\n\n1. Step 1\n2. Step 2\n...\n\n## Output Format\n\nDescribe expected output format...\n```\n\n### 使用技能\n\n```typescript\nimport { initializeSkills } from 'claude-agent-service';\n\n// 初始化技能系统\nconst registry = await initializeSkills();\n\n// 匹配技能\nconst match = registry.match('帮我 review 代码');\nif (match) {\n console.log(`Matched skill: ${match.skill.metadata.name}`);\n}\n\n// 列出所有技能\nconst skills = registry.getAllMetadata();\n```\n\n### 内置技能\n\n- **Code Review** - 代码审查和质量分析\n- **API Testing** - API 接口测试和验证\n\n## 测试\n\n项目包含完整的测试套件:\n\n```bash\n# 运行测试\nnpm test\n\n# 监视模式\nnpm run test:watch\n\n# 覆盖率报告\nnpm run test:coverage\n```\n\n**测试状态**:\n- ✅ 153 个测试全部通过\n- 📊 核心模块高覆盖率\n - skills: 82.28%\n - agents/core: 55.39%\n - agents/prompts: 73.91%\n\n## 目录结构\n\n```\nsrc/\n├── index.ts # SDK 入口\n├── server.ts # HTTP 服务\n├── gateway-server.ts # 网关服务启动入口\n├── cli.ts # CLI 工具\n│\n├── agents/ # Agent 系统\n│ ├── core/ # 核心 Agent 实现\n│ │ ├── Agent.ts # 主 Agent 类\n│ │ ├── AgentContext.ts # Agent 上下文\n│ │ ├── agents.ts # 内置 Agent 配置\n│ │ ├── runner.ts # Agent 运行器\n│ │ ├── task.ts # Task 系统\n│ │ ├── types.ts # 类型定义\n│ │ └── index.ts # 模块导出\n│ ├── capabilities/ # Agent 能力模块\n│ │ ├── index.ts # 能力模块导出\n│ │ ├── ChatCapability.ts # 对话能力\n│ │ ├── SkillCapability.ts # 技能能力\n│ │ ├── ProviderCapability.ts # 提供商能力\n│ │ ├── SubAgentCapability.ts # 子 Agent 能力\n│ │ ├── WorkflowCapability.ts # 工作流能力\n│ │ └── SelfManageCapability.ts # 自管理能力 (新增)\n│ ├── prompts/ # Prompt 模板系统\n│ │ ├── prompts.ts # Prompt 定义\n│ │ ├── PromptTemplate.ts # 模板类\n│ │ └── index.ts # 模块导出\n│ ├── registry/ # Agent 注册表\n│ │ ├── AgentRegistry.ts # 注册表实现\n│ │ └── index.ts # 模块导出\n│ ├── types.ts # Agent 类型定义\n│ └── index.ts # Agent 模块导出\n│\n├── gateway/ # 网关系统 (新增)\n│ ├── index.ts # 网关模块导出\n│ ├── types.ts # 网关类型定义\n│ ├── ProcessManager.ts # Agent 进程管理\n│ ├── ConfigWatcher.ts # 配置文件监听\n│ └── HealthMonitor.ts # 健康状态监控\n│\n├── hooks/ # Hooks 系统 (新增)\n│ ├── index.ts # Hooks 模块导出\n│ ├── types.ts # Hook 类型定义\n│ └── registry.ts # Hook 注册表\n│\n├── services/ # 服务层\n│ ├── index.ts # 服务模块导出\n│ ├── types.ts # 服务类型定义\n│ ├── ServiceRegistry.ts # 服务注册表 (新增)\n│ ├── preferences.ts # 偏好存储\n│ ├── gateway-client.ts # 网关客户端 (兼容层)\n│ ├── base/ # 基础服务 (新增)\n│ │ ├── BaseService.ts # 服务基类\n│ │ └── index.ts # 模块导出\n│ └── gateway/ # 网关服务 (新增)\n│ ├── GatewayClientService.ts # 网关客户端服务\n│ └── index.ts # 模块导出\n│\n├── shared/ # 共享模块 (新增)\n│ └── gateway-protocol/ # 网关协议\n│ ├── types.ts # 协议类型定义\n│ ├── client.ts # 协议客户端\n│ └── index.ts # 模块导出\n│\n├── providers/ # 提供商管理\n│ ├── index.ts # 模块导出\n│ ├── Provider.ts # Provider 类\n│ ├── ProviderManager.ts # 提供商管理器\n│ ├── types.ts # 类型定义\n│ ├── sources/ # 配置来源\n│ │ ├── index.ts # 来源导出\n│ │ ├── cc-switch.ts # CC-Switch 来源\n│ │ ├── env.ts # 环境变量来源\n│ │ └── local-config.ts # 本地配置来源\n│ ├── presets/ # 提供商预设\n│ │ ├── index.ts # 预设导出\n│ │ ├── anthropic.ts # Anthropic 预设\n│ │ ├── openai.ts # OpenAI 预设\n│ │ ├── chinese.ts # 国产 LLM 预设\n│ │ └── gateway.ts # 网关预设\n│ └── models/ # 模型管理\n│ ├── index.ts # 模块导出\n│ ├── spec.ts # 模型规格\n│ ├── fetcher.ts # 模型获取\n│ └── registry.ts # 模型注册表\n│\n├── skills/ # 技能系统\n│ ├── index.ts # 技能模块导出\n│ ├── types.ts # 类型定义\n│ ├── loader.ts # 技能加载器\n│ ├── matcher.ts # 技能匹配器\n│ └── registry.ts # 技能注册表\n│\n└── tools/ # MCP 工具\n ├── preference-tools.ts # 偏好 MCP 工具\n └── memory-tools.ts # 记忆 MCP 工具\n\nskills/ # 技能定义\n├── code-review/\n│ └── SKILL.md\n└── api-testing/\n └── SKILL.md\n\ntests/ # 测试文件\n├── unit/ # 单元测试\n├── integration/ # 集成测试\n├── gateway.test.ts # 网关测试 (新增)\n├── hooks/ # Hooks 测试 (新增)\n└── skills.test.ts # 技能系统测试\n```\n\n## 高级功能\n\n### 自管理能力\n\nAgent 支持运行时动态更新配置和状态:\n\n```typescript\nimport { Agent } from 'claude-agent-service';\n\nconst agent = new Agent();\n\n// 获取当前状态\nconst status = await agent.getStatus();\n\n// 更新配置\nconst result = await agent.updateConfig({\n provider: 'deepseek',\n model: 'deepseek-chat',\n});\n\n// 请求重启\nawait agent.requestRestart({ reason: 'Config updated' });\n```\n\n### 自定义 Agent\n\n```typescript\nimport { AgentRegistry, getAgentConfig } from 'claude-agent-service';\n\n// 创建自定义 Agent\nconst registry = new AgentRegistry();\nregistry.register({\n name: 'my-agent',\n description: 'My custom agent',\n systemPrompt: 'You are a specialized agent...',\n model: 'claude-sonnet-4-6',\n tools: ['read', 'write'],\n});\n\n// 使用自定义 Agent\nconst config = getAgentConfig('my-agent');\n```\n\n### 工作流控制\n\n```typescript\nimport { WorkflowEngine } from 'claude-agent-service';\n\nconst engine = new WorkflowEngine();\nawait engine.execute({\n task: '创建测试文件',\n cwd: './src',\n verifyCondition: '确保测试可以运行',\n onPhaseChange: (phase) => console.log(`Phase: ${phase}`),\n onTool: (tool) => console.log(`Tool: ${tool}`),\n});\n```\n\n### Task 并行执行\n\n```typescript\nimport { runParallel } from 'claude-agent-service';\n\n// 并行执行多个任务\nconst results = await runParallel([\n { type: 'explore', prompt: '分析模块 A' },\n { type: 'explore', prompt: '分析模块 B' },\n { type: 'explore', prompt: '分析模块 C' },\n]);\n```\n\n## 常见问题\n\n### Q: 内置预设和 CC-Switch 有什么区别?\n\nA: 内置预设是硬编码在 SDK 中的配置,开箱即用。CC-Switch 是一个独立的桌面应用,提供更多自定义选项和 50+ 提供商预设。\n\n### Q: 如何添加新的提供商?\n\nA: 有两种方式:\n1. 在 CC-Switch 中添加自定义提供商\n2. 在 `presets.ts` 中添加预设并提交 PR\n\n### Q: 如何创建自定义技能?\n\nA: 在 `skills/` 目录创建文件夹和 `SKILL.md` 文件,使用 YAML frontmatter 定义元数据。系统会自动加载和匹配技能。\n\n### Q: 支持哪些模型?\n\nA: SDK 通过提供商支持几乎所有主流模型。具体支持的模型取决于各提供商。\n\n### Q: 如何处理 API Key?\n\nA: 推荐使用环境变量存储 API Key,不要硬编码在代码中。\n\n### Q: 如何在生产环境部署?\n\nA: 可以使用内置的 HTTP 服务器,或直接在应用中嵌入 SDK:\n\n```typescript\nimport { Agent } from 'claude-agent-service';\n\nconst agent = new Agent();\napp.post('/api/chat', async (req, res) => {\n const response = await agent.chat(req.body.prompt);\n res.json({ response });\n});\n```\n\n## 开发\n\n### 构建\n\n```bash\nnpm run build\n```\n\n### 监视模式\n\n```bash\nnpm run dev\n```\n\n### 运行测试\n\n```bash\nnpm test\nnpm run test:watch\nnpm run test:coverage\n```\n\n## 许可证\n\nMIT\n\n## 贡献\n\n欢迎提交 Issue 和 Pull Request!\n\n## 相关项目\n\n- [CC-Switch](https://github.com/farion1231/ccswitch) - 跨平台 LLM 提供商管理工具\n- [Anthropic Claude Agent SDK](https://github.com/anthropics/claude-agent-sdk) - 官方 Agent SDK\n\n## 许可证\n\nMIT\n"}, "f02e550c3adff753476c51f2b73e9e6d7c596a7c": {"t": 1785764600.4698427, "n": 14429, "h": "9aae300bf18f83de", "c": "# Claude Agent Service\n\n面向 **C 端应用** 的 Claude Agent 服务 SDK。\n\n**核心设计:借助生态力量,不重复造轮子**\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ 你的 C 端应用 │\n├─────────────────────────────────────────────────────────┤\n│ 本 SDK (claude-agent-service) │\n├───────────────────────┬─────────────────────────────────┤\n│ Claude Agent SDK │ 统一提供商管理器 │\n│ (Agent 能力) │ (内置预设 + CC-Switch) │\n│ Anthropic 官方 │ │\n├───────────────────────┴─────────────────────────────────┤\n│ Claude │ GLM │ DeepSeek │ Qwen │ OpenAI │ 50+ 更多... │\n└─────────────────────────────────────────────────────────┘\n```\n\n## 特性\n\n- 🚀 **开箱即用** - 内置主流 LLM 提供商预设,无需额外配置\n- 🔄 **双模式切换** - 支持 CC-Switch 集成或直接使用预设\n- 🇨🇳 **国产友好** - 原生支持 GLM、DeepSeek、Qwen、Kimi 等\n- 🌍 **全球覆盖** - 支持 OpenAI、OpenRouter、Together AI 等\n- 🤖 **主 Agent 系统** - 统一入口,管理所有子 Agent 和功能\n- 🔧 **子 Agent 系统** - Claude Code 风格的 Explore / Plan / General\n- 🔄 **工作流引擎** - 三阶段循环:收集上下文 → 采取行动 → 验证结果\n- 🎯 **技能系统** - 模块化技能管理,支持自定义扩展\n- 🌐 **HTTP 服务** - 内置 REST API,支持流式响应\n- 📝 **通用任务** - 不只是写代码,支持研究、分析、写作、数据处理等\n- 💾 **持久化存储** - 用户偏好、跨会话记忆\n- 🛠️ **MCP 扩展** - 支持 Model Context Protocol\n- ✅ **完整测试** - 153 个测试用例,核心模块高覆盖率\n\n## 快速开始\n\n### 本地调试 CLI(快速测试 Agent)\n\n```bash\nnpm run cli\n```\n\n启动后可直接输入问题进行对话,支持以下模式:\n\n- **workflow 模式**(默认):直接输入任务,观察 phase/tool 输出,验证 agent loop 与子 agent\n- **chat 模式**:简单对话交互\n- **explore/plan/general 模式**:测试特定子 Agent\n\nCLI 命令:\n- `/mode chat|explore|plan|general|workflow` - 切换模式\n- `/loop <task>` - 执行工作流任务\n- `/provider <name> [apiKey]` - 切换提供商\n- `/cwd <path>` - 设置工作目录\n- `/thoroughness quick|medium|very-thorough` - 设置彻底程度\n- `/stream on|off` - 开关流式输出\n- `/state` - 查看当前状态\n- `/skills` - 列出所有技能\n- `/help` - 显示帮助\n- `/exit` - 退出\n\n### 启动 HTTP 服务\n\n```bash\nnpm run server\n```\n\n服务运行在 `http://localhost:3000`,提供以下 API:\n\n- `POST /chat` - 简单对话\n- `POST /chat/stream` - 流式对话(Server-Sent Events)\n- `GET /health` - 健康检查\n- `GET /providers` - 列出所有提供商\n- `GET /skills` - 列出所有技能\n\n示例:\n```bash\n# 简单对话\ncurl -X POST http://localhost:3000/chat \\\n -H \"Content-Type: application/json\" \\\n -d '{\"prompt\": \"你好,请介绍一下你自己\"}'\n\n# 流式对话\ncurl -X POST http://localhost:3000/chat/stream \\\n -H \"Content-Type: application/json\" \\\n -d '{\"prompt\": \"写一个故事\"}'\n```\n\n### 1. 安装\n\n```bash\n# 安装本 SDK\nnpm install claude-agent-service\n\n# 可选:安装 CC-Switch(用于管理多个提供商)\nbrew tap farion1231/ccswitch\nbrew install --cask cc-switch\n```\n\n### 2. 使用内置预设(推荐新手)\n\n```typescript\nimport { UnifiedAgentService, ask } from 'claude-agent-service';\n\n// 方式 1: 快速对话\nconst answer = await ask('你好', {\n provider: 'deepseek',\n apiKey: 'your-deepseek-api-key',\n});\n\n// 方式 2: 创建 Agent 实例\nconst agent = new UnifiedAgentService();\n\n// 切换到 DeepSeek\nagent.useProvider('deepseek', 'your-api-key');\nconst response = await agent.chat('分析这个代码');\n\n// 切换到 GLM\nagent.useProvider('glm', 'your-glm-api-key');\nconst response2 = await agent.chat('你好,请介绍一下你自己');\n```\n\n### 3. 使用 CC-Switch(推荐进阶用户)\n\n```typescript\nimport { UnifiedAgentService } from 'claude-agent-service';\n\nconst agent = new UnifiedAgentService();\n\n// 检查 CC-Switch 是否已安装\nif (agent.isCCSwitchInstalled()) {\n // 使用 CC-Switch 当前激活的提供商\n const response = await agent.chat('你好');\n\n // 切换提供商(配置在 CC-Switch 中)\n agent.useProvider('openrouter');\n const response2 = await agent.chat('Hello');\n}\n```\n\n### 4. 流式对话\n\n```typescript\nconst agent = new UnifiedAgentService();\n\nawait agent.chatStream('写一个故事', {\n provider: 'qwen',\n apiKey: 'your-qwen-api-key',\n onText: (text) => console.log(text),\n onTool: (name) => console.log(`使用工具: ${name}`),\n});\n```\n\n## 支持的提供商\n\n### 国产 LLM\n\n| 提供商 | 预设名称 | 模型示例 | 特点 |\n|--------|----------|----------|------|\n| **GLM (智谱)** | `glm` | glm-5, glm-4.7 | 长文本、多模态 |\n| **Qwen (通义千问)** | `qwen` | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| **DeepSeek** | `deepseek` | deepseek-chat, deepseek-reasoner | 高性价比 |\n| **Kimi (月之暗面)** | `kimi` | moonshot-v1-128k | 超长上下文 |\n| **ERNIE (文心一言)** | `ernie` | ernie-4.0-8k | 百度 |\n| **Spark (讯飞星火)** | `spark` | spark-v4.0 | 讯飞 |\n\n### OpenAI 系列\n\n| 提供商 | 预设名称 | 模型示例 |\n|--------|----------|----------|\n| **OpenAI** | `openai` | gpt-4o, gpt-4-turbo |\n| **Azure OpenAI** | `azure_openai` | gpt-4o, gpt-35-turbo |\n\n### 聚合网关\n\n| 提供商 | 预设名称 | 特点 |\n|--------|----------|------|\n| **OpenRouter** | `openrouter` | 100+ 模型聚合 |\n| **LiteLLM** | `litellm` | 开源自部署网关 |\n| **Together AI** | `together` | 开源模型推理 |\n\n### 官方\n\n| 提供商 | 预设名称 | 模型示例 |\n|--------|----------|----------|\n| **Anthropic** | `anthropic` | claude-opus-4-6, claude-sonnet-4-6 |\n\n## API 参考\n\n### UnifiedAgentService\n\n```typescript\nclass UnifiedAgentService {\n // 获取当前提供商\n get currentProvider(): CCProvider | null;\n\n // 列出所有提供商(合并 CC-Switch + 内置预设)\n listProviders(): CCProvider[];\n\n // 列出所有内置预设\n listPresets(): Array<{ id: string; name: string; description?: string }>;\n\n // 按类别列出预设\n listPresetsByCategory(): Record<string, Array<{ id: string; name: string }>>;\n\n // 切换提供商\n useProvider(name: string, apiKey?: string): boolean;\n\n // 检查 CC-Switch 是否安装\n isCCSwitchInstalled(): boolean;\n\n // 简单对话\n chat(prompt: string, options?: AgentChatOptions): Promise<string>;\n\n // 流式对话\n chatStream(prompt: string, options?: AgentChatOptions): Promise<void>;\n}\n```\n\n### AgentChatOptions\n\n```typescript\ninterface AgentChatOptions {\n provider?: string; // 提供商名称(预设或 CC-Switch 配置)\n apiKey?: string; // API Key(使用预设时需要)\n model?: string; // 指定模型\n cwd?: string; // 工作目录\n tools?: string[]; // 允许的工具\n maxTurns?: number; // 最大轮次\n systemPrompt?: string; // 系统提示\n onText?: (text: string) => void; // 文本回调\n onTool?: (name: string) => void; // 工具回调\n onError?: (error: Error) => void; // 错误回调\n}\n```\n\n## 便捷函数\n\n```typescript\n// 快速对话\nimport { ask } from 'claude-agent-service';\nconst answer = await ask('你好', { provider: 'deepseek', apiKey: '...' });\n\n// 创建 Agent\nimport { createAgent } from 'claude-agent-service';\nconst agent = createAgent();\n\n// 快速使用预设\nimport { usePreset } from 'claude-agent-service';\nawait usePreset('glm', 'your-api-key');\n```\n\n## 三代理系统(Claude Code 风格)\n\nClaude Code 内置三个核心代理,可以处理任何任务:\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ 主 Agent │\n├─────────────────────────────────────────────────────────┤\n│ 根据任务类型,自动委托给合适的子代理 │\n└───────────────┬─────────────────────────────────────────┘\n │\n ┌───────────┼───────────┐\n ▼ ▼ ▼\n┌────────┐ ┌────────┐ ┌────────┐\n│Explore │ │ Plan │ │General │\n│ 快速 │ │ 研究 │ │ 通用 │\n└────────┘ └────────┘ └────────┘\n│Haiku │ │继承 │ │继承 │\n│只读 │ │只读 │ │所有工具│\n└────────┘ └────────┘ └────────┘\n```\n\n### 使用示例\n\n```typescript\nimport { createAgent, explore, plan, general } from 'claude-agent-service';\n\nconst agent = createAgent();\n\n// Explore - 快速搜索代码库(Haiku 模型)\nawait agent.explore('查找所有 API 路由', 'quick'); // 快速\nawait agent.explore('分析项目结构', 'medium'); // 平衡\nawait agent.explore('全面分析认证模块', 'very-thorough'); // 彻底\n\n// Plan - 研究代码库用于规划\nawait agent.plan('研究认证模块的实现');\n\n// General - 通用任务(所有工具)\nawait agent.general('重构代码并添加测试');\n\n// 便捷函数\nawait explore('搜索代码', 'quick');\nawait plan('研究实现');\nawait general('执行任务');\n```\n\n### 三代理对比\n\n| Agent | 模型 | 工具 | 用途 |\n|-------|------|------|------|\n| **Explore** | Haiku(快速) | 只读 | 文件发现、代码搜索、探索 |\n| **Plan** | 继承 | 只读 | 计划研究、收集上下文 |\n| **General** | 继承 | 全部 | 复杂任务、代码修改 |\n\n## 三阶段工作流\n\nClaude Code 的工作流是三阶段循环:\n\n```\n收集上下文 → 采取行动 → 验证结果\n ↑ │\n └───────────────────────┘\n```\n\n这三个阶段相互融合,Claude 始终使用工具来完成工作。\n\n### 使用示例\n\n```typescript\nimport { runWorkflow, codeTask, researchTask, WorkflowEngine } from 'claude-agent-service';\n\n// 基础工作流\nawait runWorkflow('创建一个 README.md', {\n cwd: process.cwd(),\n onPhaseChange: (phase, desc) => {\n console.log(`[${phase}] ${desc}`);\n },\n});\n\n// 代码任务\nawait codeTask('实现一个工具函数库');\n\n// 研究任务\nawait researchTask('分析这个项目的架构');\n\n// 完整工作流控制\nconst engine = new WorkflowEngine();\nawait engine.execute({\n task: '创建测试文件',\n cwd: './src',\n verifyCondition: '确保测试可以运行',\n onPhaseChange: (phase) => console.log(`Phase: ${phase}`),\n onTool: (tool) => console.log(`Tool: ${tool}`),\n});\n```\n\n### 任务类型\n\nSDK 不只是写代码,支持多种任务类型:\n\n| 类型 | 描述 | 工具 |\n|------|------|------|\n| `code` | 代码任务 | Read, Write, Edit, Bash, Glob, Grep |\n| `research` | 研究任务 | Read, Glob, Grep, WebSearch, WebFetch |\n| `analysis` | 分析任务 | Read, Bash, Glob, Grep |\n| `writing` | 写作任务 | Read, Write, Edit, WebSearch |\n| `data` | 数据处理 | Read, Write, Edit, Bash, Glob |\n| `automation` | 自动化任务 | Read, Write, Edit, Bash, Glob, Grep |\n| `custom` | 自定义任务 | 所有工具 |\n\n## 环境变量配置\n\n可以通过环境变量预配置 API Key,然后直接使用提供商名称:\n\n```bash\n# .env 文件\nGLM_API_KEY=your_glm_key\nDEEPSEEK_API_KEY=your_deepseek_key\nQWEN_API_KEY=your_qwen_key\nOPENAI_API_KEY=your_openai_key\nOPENROUTER_API_KEY=your_openrouter_key\n```\n\n```typescript\n// 然后在代码中直接使用\nagent.useProvider('glm'); // 自动从 GLM_API_KEY 读取\nagent.useProvider('deepseek'); // 自动从 DEEPSEEK_API_KEY 读取\n```\n\n## CC-Switch 集成\n\nCC-Switch 是一个跨平台的桌面应用,用于管理多个 LLM 提供商配置。\n\n### 直接读取配置\n\n```typescript\nimport { CCSwitchReader } from 'claude-agent-service';\n\nconst reader = new CCSwitchReader();\n\n// 获取当前激活的提供商\nconst provider = reader.getActiveProvider();\n\n// 应用到环境变量\nreader.applyProvider(provider);\n\n// 获取 MCP 服务器配置\nconst mcpServers = reader.getMcpServersForAgent();\n```\n\n### CC-Switch vs 内置预设\n\n| 场景 | 推荐方案 |\n|------|----------|\n| 只用一个提供商 | 内置预设 |\n| 需要频繁切换 | CC-Switch |\n| 团队共享配置 | CC-Switch |\n| 不想安装额外软件 | 内置预设 |\n| 需要自定义配置 | CC-Switch |\n\n## 技能系统\n\n技能系统提供模块化的功能扩展,支持通过 YAML frontmatter 配置技能元数据。\n\n### 技能结构\n\n```\nskills/\n├── code-review/\n│ └── SKILL.md # 代码审查技能\n└── api-testing/\n └── SKILL.md # API 测试技能\n```\n\n### 创建技能\n\n1. 在 `skills/` 目录创建技能文件夹\n2. 创建 `SKILL.md` 文件,包含 frontmatter 和说明:\n\n```markdown\n---\nname: My Skill\ndescription: This skill should be used when...\nversion: 1.0.0\nauthor: Your Name\ntags:\n - category\n - another-category\n---\n\n# My Skill\n\n## Purpose\n\nDescribe what this skill does...\n\n## Process\n\n1. Step 1\n2. Step 2\n...\n\n## Output Format\n\nDescribe expected output format...\n```\n\n### 使用技能\n\n```typescript\nimport { initializeSkills } from 'claude-agent-service';\n\n// 初始化技能系统\nconst registry = await initializeSkills();\n\n// 匹配技能\nconst match = registry.match('帮我 review 代码');\nif (match) {\n console.log(`Matched skill: ${match.skill.metadata.name}`);\n}\n\n// 列出所有技能\nconst skills = registry.getAllMetadata();\n```\n\n### 内置技能\n\n- **Code Review** - 代码审查和质量分析\n- **API Testing** - API 接口测试和验证\n\n## 测试\n\n项目包含完整的测试套件:\n\n```bash\n# 运行测试\nnpm test\n\n# 监视模式\nnpm run test:watch\n\n# 覆盖率报告\nnpm run test:coverage\n```\n\n**测试状态**:\n- ✅ 153 个测试全部通过\n- 📊 核心模块高覆盖率\n - skills: 82.28%\n - agents/core: 55.39%\n - agents/prompts: 73.91%\n\n## 目录结构\n\n```\nsrc/\n├── index.ts # SDK 入口\n├── server.ts # HTTP 服务\n├── cli.ts # CLI 工具\n│\n├── agents/ # Agent 系统\n│ ├── core/ # 核心 Agent 实现\n│ │ ├── Agent.ts # 主 Agent 类\n│ │ ├── AgentContext.ts # Agent 上下文\n│ │ ├── agents.ts # 内置 Agent 配置\n│ │ ├── runner.ts # Agent 运行器\n│ │ └── task.ts # Task 系统\n│ ├── capabilities/ # Agent 能力模块\n│ │ ├── ChatCapability.ts # 对话能力\n│ │ ├── SkillCapability.ts # 技能能力\n│ │ ├── ProviderCapability.ts # 提供商能力\n│ │ ├── SubAgentCapability.ts # 子 Agent 能力\n│ │ └── WorkflowCapability.ts # 工作流能力\n│ ├── prompts/ # Prompt 模板系统\n│ └── registry/ # Agent 注册表\n│\n├── providers/ # 提供商管理\n│ ├── cc-switch-provider.ts # CC-Switch + 统一管理器\n│ ├── config-loader.ts # 配置加载器\n│ ├── presets.ts # 内置提供商预设\n│ └── types.ts # 类型定义\n│\n├── skills/ # 技能系统\n│ ├── loader.ts # 技能加载器\n│ ├── matcher.ts # 技能匹配器\n│ ├── registry.ts # 技能注册表\n│ └── types.ts # 类型定义\n│\n├── services/ # 服务层\n│ └── preferences.ts # 偏好存储\n│\n└── tools/ # MCP 工具\n ├── preference-tools.ts # 偏好 MCP 工具\n └── memory-tools.ts # 记忆 MCP 工具\n\nskills/ # 技能定义\n├── code-review/\n│ └── SKILL.md\n└── api-testing/\n └── SKILL.md\n\ntests/ # 测试文件\n├── unit/ # 单元测试\n├── integration/ # 集成测试\n└── skills.test.ts # 技能系统测试\n```\n\n## 高级功能\n\n### 自定义 Agent\n\n```typescript\nimport { AgentRegistry, getAgentConfig } from 'claude-agent-service';\n\n// 创建自定义 Agent\nconst registry = new AgentRegistry();\nregistry.register({\n name: 'my-agent',\n description: 'My custom agent',\n systemPrompt: 'You are a specialized agent...',\n model: 'claude-sonnet-4-6',\n tools: ['read', 'write'],\n});\n\n// 使用自定义 Agent\nconst config = getAgentConfig('my-agent');\n```\n\n### 工作流控制\n\n```typescript\nimport { WorkflowEngine } from 'claude-agent-service';\n\nconst engine = new WorkflowEngine();\nawait engine.execute({\n task: '创建测试文件',\n cwd: './src',\n verifyCondition: '确保测试可以运行',\n onPhaseChange: (phase) => console.log(`Phase: ${phase}`),\n onTool: (tool) => console.log(`Tool: ${tool}`),\n});\n```\n\n### Task 并行执行\n\n```typescript\nimport { runParallel } from 'claude-agent-service';\n\n// 并行执行多个任务\nconst results = await runParallel([\n { type: 'explore', prompt: '分析模块 A' },\n { type: 'explore', prompt: '分析模块 B' },\n { type: 'explore', prompt: '分析模块 C' },\n]);\n```\n\n## 常见问题\n\n### Q: 内置预设和 CC-Switch 有什么区别?\n\nA: 内置预设是硬编码在 SDK 中的配置,开箱即用。CC-Switch 是一个独立的桌面应用,提供更多自定义选项和 50+ 提供商预设。\n\n### Q: 如何添加新的提供商?\n\nA: 有两种方式:\n1. 在 CC-Switch 中添加自定义提供商\n2. 在 `presets.ts` 中添加预设并提交 PR\n\n### Q: 如何创建自定义技能?\n\nA: 在 `skills/` 目录创建文件夹和 `SKILL.md` 文件,使用 YAML frontmatter 定义元数据。系统会自动加载和匹配技能。\n\n### Q: 支持哪些模型?\n\nA: SDK 通过提供商支持几乎所有主流模型。具体支持的模型取决于各提供商。\n\n### Q: 如何处理 API Key?\n\nA: 推荐使用环境变量存储 API Key,不要硬编码在代码中。\n\n### Q: 如何在生产环境部署?\n\nA: 可以使用内置的 HTTP 服务器,或直接在应用中嵌入 SDK:\n\n```typescript\nimport { Agent } from 'claude-agent-service';\n\nconst agent = new Agent();\napp.post('/api/chat', async (req, res) => {\n const response = await agent.chat(req.body.prompt);\n res.json({ response });\n});\n```\n\n## 开发\n\n### 构建\n\n```bash\nnpm run build\n```\n\n### 监视模式\n\n```bash\nnpm run dev\n```\n\n### 运行测试\n\n```bash\nnpm test\nnpm run test:watch\nnpm run test:coverage\n```\n\n## 许可证\n\nMIT\n\n## 贡献\n\n欢迎提交 Issue 和 Pull Request!\n\n## 相关项目\n\n- [CC-Switch](https://github.com/farion1231/ccswitch) - 跨平台 LLM 提供商管理工具\n- [Anthropic Claude Agent SDK](https://github.com/anthropics/claude-agent-sdk) - 官方 Agent SDK\n\n## 许可证\n\nMIT\n"}, "543a86fed1799694685ac8ff1b8d030a0dc0abaf": {"t": 1785764602.1572287, "n": 9566, "h": "550e4cf0649a3b0c", "c": "# Claude Agent Service\n\n面向 **C 端应用** 的 Claude Agent 服务 SDK。\n\n**核心设计:借助生态力量,不重复造轮子**\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ 你的 C 端应用 │\n├─────────────────────────────────────────────────────────┤\n│ 本 SDK (claude-agent-service) │\n├───────────────────────┬─────────────────────────────────┤\n│ Claude Agent SDK │ 统一提供商管理器 │\n│ (Agent 能力) │ (内置预设 + CC-Switch) │\n│ Anthropic 官方 │ │\n├───────────────────────┴─────────────────────────────────┤\n│ Claude │ GLM │ DeepSeek │ Qwen │ OpenAI │ 50+ 更多... │\n└─────────────────────────────────────────────────────────┘\n```\n\n## 特性\n\n- 🚀 **开箱即用** - 内置主流 LLM 提供商预设,无需额外配置\n- 🔄 **双模式切换** - 支持 CC-Switch 集成或直接使用预设\n- 🇨🇳 **国产友好** - 原生支持 GLM、DeepSeek、Qwen、Kimi 等\n- 🌍 **全球覆盖** - 支持 OpenAI、OpenRouter、Together AI 等\n- 🤖 **三代理系统** - Claude Code 风格的 Explore / Plan / General\n- 🔄 **三阶段工作流** - 收集上下文 → 采取行动 → 验证结果\n- 📝 **通用任务** - 不只是写代码,支持研究、分析、写作、数据处理等\n- 💾 **持久化存储** - 用户偏好、跨会话记忆\n- 🛠️ **MCP 扩展** - 支持 Model Context Protocol\n\n## 快速开始\n\n### 本地调试 CLI(快速测试 Agent)\n\n```bash\nnpm run cli\n```\n\n启动后可直接输入问题进行对话,也支持命令:\n\n默认模式是 `workflow`,直接输入任务即可观察 phase/tool 输出,便于验证 agent loop 与子 agent 是否正常。\n\n- `/mode chat|explore|plan|general|workflow`\n- `/loop <task>`\n- `/provider <name> [apiKey]`\n- `/cwd <path>`\n- `/thoroughness quick|medium|very-thorough`\n- `/stream on|off`\n- `/state`\n- `/help`\n- `/exit`\n\n### 1. 安装\n\n```bash\n# 安装本 SDK\nnpm install claude-agent-service\n\n# 可选:安装 CC-Switch(用于管理多个提供商)\nbrew tap farion1231/ccswitch\nbrew install --cask cc-switch\n```\n\n### 2. 使用内置预设(推荐新手)\n\n```typescript\nimport { UnifiedAgentService, ask } from 'claude-agent-service';\n\n// 方式 1: 快速对话\nconst answer = await ask('你好', {\n provider: 'deepseek',\n apiKey: 'your-deepseek-api-key',\n});\n\n// 方式 2: 创建 Agent 实例\nconst agent = new UnifiedAgentService();\n\n// 切换到 DeepSeek\nagent.useProvider('deepseek', 'your-api-key');\nconst response = await agent.chat('分析这个代码');\n\n// 切换到 GLM\nagent.useProvider('glm', 'your-glm-api-key');\nconst response2 = await agent.chat('你好,请介绍一下你自己');\n```\n\n### 3. 使用 CC-Switch(推荐进阶用户)\n\n```typescript\nimport { UnifiedAgentService } from 'claude-agent-service';\n\nconst agent = new UnifiedAgentService();\n\n// 检查 CC-Switch 是否已安装\nif (agent.isCCSwitchInstalled()) {\n // 使用 CC-Switch 当前激活的提供商\n const response = await agent.chat('你好');\n\n // 切换提供商(配置在 CC-Switch 中)\n agent.useProvider('openrouter');\n const response2 = await agent.chat('Hello');\n}\n```\n\n### 4. 流式对话\n\n```typescript\nconst agent = new UnifiedAgentService();\n\nawait agent.chatStream('写一个故事', {\n provider: 'qwen',\n apiKey: 'your-qwen-api-key',\n onText: (text) => console.log(text),\n onTool: (name) => console.log(`使用工具: ${name}`),\n});\n```\n\n## 支持的提供商\n\n### 国产 LLM\n\n| 提供商 | 预设名称 | 模型示例 | 特点 |\n|--------|----------|----------|------|\n| **GLM (智谱)** | `glm` | glm-5, glm-4.7 | 长文本、多模态 |\n| **Qwen (通义千问)** | `qwen` | qwen3-max, qwen-plus | 阿里云、长上下文 |\n| **DeepSeek** | `deepseek` | deepseek-chat, deepseek-reasoner | 高性价比 |\n| **Kimi (月之暗面)** | `kimi` | moonshot-v1-128k | 超长上下文 |\n| **ERNIE (文心一言)** | `ernie` | ernie-4.0-8k | 百度 |\n| **Spark (讯飞星火)** | `spark` | spark-v4.0 | 讯飞 |\n\n### OpenAI 系列\n\n| 提供商 | 预设名称 | 模型示例 |\n|--------|----------|----------|\n| **OpenAI** | `openai` | gpt-4o, gpt-4-turbo |\n| **Azure OpenAI** | `azure_openai` | gpt-4o, gpt-35-turbo |\n\n### 聚合网关\n\n| 提供商 | 预设名称 | 特点 |\n|--------|----------|------|\n| **OpenRouter** | `openrouter` | 100+ 模型聚合 |\n| **LiteLLM** | `litellm` | 开源自部署网关 |\n| **Together AI** | `together` | 开源模型推理 |\n\n### 官方\n\n| 提供商 | 预设名称 | 模型示例 |\n|--------|----------|----------|\n| **Anthropic** | `anthropic` | claude-opus-4-6, claude-sonnet-4-6 |\n\n## API 参考\n\n### UnifiedAgentService\n\n```typescript\nclass UnifiedAgentService {\n // 获取当前提供商\n get currentProvider(): CCProvider | null;\n\n // 列出所有提供商(合并 CC-Switch + 内置预设)\n listProviders(): CCProvider[];\n\n // 列出所有内置预设\n listPresets(): Array<{ id: string; name: string; description?: string }>;\n\n // 按类别列出预设\n listPresetsByCategory(): Record<string, Array<{ id: string; name: string }>>;\n\n // 切换提供商\n useProvider(name: string, apiKey?: string): boolean;\n\n // 检查 CC-Switch 是否安装\n isCCSwitchInstalled(): boolean;\n\n // 简单对话\n chat(prompt: string, options?: AgentChatOptions): Promise<string>;\n\n // 流式对话\n chatStream(prompt: string, options?: AgentChatOptions): Promise<void>;\n}\n```\n\n### AgentChatOptions\n\n```typescript\ninterface AgentChatOptions {\n provider?: string; // 提供商名称(预设或 CC-Switch 配置)\n apiKey?: string; // API Key(使用预设时需要)\n model?: string; // 指定模型\n cwd?: string; // 工作目录\n tools?: string[]; // 允许的工具\n maxTurns?: number; // 最大轮次\n systemPrompt?: string; // 系统提示\n onText?: (text: string) => void; // 文本回调\n onTool?: (name: string) => void; // 工具回调\n onError?: (error: Error) => void; // 错误回调\n}\n```\n\n## 便捷函数\n\n```typescript\n// 快速对话\nimport { ask } from 'claude-agent-service';\nconst answer = await ask('你好', { provider: 'deepseek', apiKey: '...' });\n\n// 创建 Agent\nimport { createAgent } from 'claude-agent-service';\nconst agent = createAgent();\n\n// 快速使用预设\nimport { usePreset } from 'claude-agent-service';\nawait usePreset('glm', 'your-api-key');\n```\n\n## 三代理系统(Claude Code 风格)\n\nClaude Code 内置三个核心代理,可以处理任何任务:\n\n```\n┌─────────────────────────────────────────────────────────┐\n│ 主 Agent │\n├─────────────────────────────────────────────────────────┤\n│ 根据任务类型,自动委托给合适的子代理 │\n└───────────────┬─────────────────────────────────────────┘\n │\n ┌───────────┼───────────┐\n ▼ ▼ ▼\n┌────────┐ ┌────────┐ ┌────────┐\n│Explore │ │ Plan │ │General │\n│ 快速 │ │ 研究 │ │ 通用 │\n└────────┘ └────────┘ └────────┘\n│Haiku │ │继承 │ │继承 │\n│只读 │ │只读 │ │所有工具│\n└────────┘ └────────┘ └────────┘\n```\n\n### 使用示例\n\n```typescript\nimport { createAgent, explore, plan, general } from 'claude-agent-service';\n\nconst agent = createAgent();\n\n// Explore - 快速搜索代码库(Haiku 模型)\nawait agent.explore('查找所有 API 路由', 'quick'); // 快速\nawait agent.explore('分析项目结构', 'medium'); // 平衡\nawait agent.explore('全面分析认证模块', 'very-thorough'); // 彻底\n\n// Plan - 研究代码库用于规划\nawait agent.plan('研究认证模块的实现');\n\n// General - 通用任务(所有工具)\nawait agent.general('重构代码并添加测试');\n\n// 便捷函数\nawait explore('搜索代码', 'quick');\nawait plan('研究实现');\nawait general('执行任务');\n```\n\n### 三代理对比\n\n| Agent | 模型 | 工具 | 用途 |\n|-------|------|------|------|\n| **Explore** | Haiku(快速) | 只读 | 文件发现、代码搜索、探索 |\n| **Plan** | 继承 | 只读 | 计划研究、收集上下文 |\n| **General** | 继承 | 全部 | 复杂任务、代码修改 |\n\n## 三阶段工作流\n\nClaude Code 的工作流是三阶段循环:\n\n```\n收集上下文 → 采取行动 → 验证结果\n ↑ │\n └───────────────────────┘\n```\n\n这三个阶段相互融合,Claude 始终使用工具来完成工作。\n\n### 使用示例\n\n```typescript\nimport { runWorkflow, codeTask, researchTask, WorkflowEngine } from 'claude-agent-service';\n\n// 基础工作流\nawait runWorkflow('创建一个 README.md', {\n cwd: process.cwd(),\n onPhaseChange: (phase, desc) => {\n console.log(`[${phase}] ${desc}`);\n },\n});\n\n// 代码任务\nawait codeTask('实现一个工具函数库');\n\n// 研究任务\nawait researchTask('分析这个项目的架构');\n\n// 完整工作流控制\nconst engine = new WorkflowEngine();\nawait engine.execute({\n task: '创建测试文件',\n cwd: './src',\n verifyCondition: '确保测试可以运行',\n onPhaseChange: (phase) => console.log(`Phase: ${phase}`),\n onTool: (tool) => console.log(`Tool: ${tool}`),\n});\n```\n\n### 任务类型\n\nSDK 不只是写代码,支持多种任务类型:\n\n| 类型 | 描述 | 工具 |\n|------|------|------|\n| `code` | 代码任务 | Read, Write, Edit, Bash, Glob, Grep |\n| `research` | 研究任务 | Read, Glob, Grep, WebSearch, WebFetch |\n| `analysis` | 分析任务 | Read, Bash, Glob, Grep |\n| `writing` | 写作任务 | Read, Write, Edit, WebSearch |\n| `data` | 数据处理 | Read, Write, Edit, Bash, Glob |\n| `automation` | 自动化任务 | Read, Write, Edit, Bash, Glob, Grep |\n| `custom` | 自定义任务 | 所有工具 |\n\n## 环境变量配置\n\n可以通过环境变量预配置 API Key,然后直接使用提供商名称:\n\n```bash\n# .env 文件\nGLM_API_KEY=your_glm_key\nDEEPSEEK_API_KEY=your_deepseek_key\nQWEN_API_KEY=your_qwen_key\nOPENAI_API_KEY=your_openai_key\nOPENROUTER_API_KEY=your_openrouter_key\n```\n\n```typescript\n// 然后在代码中直接使用\nagent.useProvider('glm'); // 自动从 GLM_API_KEY 读取\nagent.useProvider('deepseek'); // 自动从 DEEPSEEK_API_KEY 读取\n```\n\n## CC-Switch 集成\n\nCC-Switch 是一个跨平台的桌面应用,用于管理多个 LLM 提供商配置。\n\n### 直接读取配置\n\n```typescript\nimport { CCSwitchReader } from 'claude-agent-service';\n\nconst reader = new CCSwitchReader();\n\n// 获取当前激活的提供商\nconst provider = reader.getActiveProvider();\n\n// 应用到环境变量\nreader.applyProvider(provider);\n\n// 获取 MCP 服务器配置\nconst mcpServers = reader.getMcpServersForAgent();\n```\n\n### CC-Switch vs 内置预设\n\n| 场景 | 推荐方案 |\n|------|----------|\n| 只用一个提供商 | 内置预设 |\n| 需要频繁切换 | CC-Switch |\n| 团队共享配置 | CC-Switch |\n| 不想安装额外软件 | 内置预设 |\n| 需要自定义配置 | CC-Switch |\n\n## 目录结构\n\n```\nsrc/\n├── index.ts # SDK 入口\n├── core.ts # 简化 API\n├── server.ts # HTTP 服务\n│\n├── providers/ # 提供商管理\n│ ├── index.ts # Agent 服务\n│ ├── cc-switch-provider.ts # CC-Switch + 统一管理器\n│ └── presets.ts # 内置提供商预设\n│\n├── services/\n│ ├── agent.ts # Agent 服务\n│ └── preferences.ts # 偏好存储\n│\n├── tools/\n│ ├── preference-tools.ts # 偏好 MCP 工具\n│ └── memory-tools.ts # 记忆 MCP 工具\n│\n└── examples/\n └── provider-usage.ts # 使用示例\n```\n\n## 常见问题\n\n### Q: 内置预设和 CC-Switch 有什么区别?\n\nA: 内置预设是硬编码在 SDK 中的配置,开箱即用。CC-Switch 是一个独立的桌面应用,提供更多自定义选项和 50+ 提供商预设。\n\n### Q: 如何添加新的提供商?\n\nA: 有两种方式:\n1. 在 CC-Switch 中添加自定义提供商\n2. 在 `presets.ts` 中添加预设并提交 PR\n\n### Q: 支持哪些模型?\n\nA: SDK 通过提供商支持几乎所有主流模型。具体支持的模型取决于各提供商。\n\n### Q: 如何处理 API Key?\n\nA: 推荐使用环境变量存储 API Key,不要硬编码在代码中。\n\n## 许可证\n\nMIT\n"}}}}