1 line
346 KiB
JSON
1 line
346 KiB
JSON
{"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> ·\n <a href=\"#architecture\">Architecture</a> ·\n <a href=\"#api-reference\">API</a> ·\n <a href=\"#vertical-pack-system\">Vertical Pack</a> ·\n <a href=\"#providers\">Providers</a> ·\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> ·\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> ·\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> ·\n <a href=\"#architecture\">Architecture</a> ·\n <a href=\"#api-reference\">API</a> ·\n <a href=\"#vertical-pack-system\">Vertical Pack</a> ·\n <a href=\"#providers\">Providers</a> ·\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> ·\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> ·\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> ·\n <a href=\"#architecture\">Architecture</a> ·\n <a href=\"#api-reference\">API</a> ·\n <a href=\"#vertical-pack-system\">Vertical Pack</a> ·\n <a href=\"#providers\">Providers</a> ·\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> ·\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> ·\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> ·\n <a href=\"#architecture\">Architecture</a> ·\n <a href=\"#api-reference\">API</a> ·\n <a href=\"#vertical-pack-system\">Vertical Pack</a> ·\n <a href=\"#providers\">Providers</a> ·\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> ·\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> ·\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> ·\n <a href=\"#architecture\">Architecture</a> ·\n <a href=\"#api-reference\">API</a> ·\n <a href=\"#providers\">Providers</a> ·\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> ·\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> ·\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> ·\n <a href=\"#architecture\">Architecture</a> ·\n <a href=\"#api-reference\">API</a> ·\n <a href=\"#providers\">Providers</a> ·\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> ·\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> ·\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> ·\n <a href=\"#architecture\">Architecture</a> ·\n <a href=\"#api-reference\">API</a> ·\n <a href=\"#providers\">Providers</a> ·\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> ·\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> ·\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> ·\n <a href=\"#architecture\">Architecture</a> ·\n <a href=\"#api-reference\">API</a> ·\n <a href=\"#providers\">Providers</a> ·\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> ·\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> ·\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> ·\n <a href=\"#architecture\">Architecture</a> ·\n <a href=\"#api-reference\">API</a> ·\n <a href=\"#providers\">Providers</a> ·\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> ·\n <a href=\"https://github.com/1695365384/hive/pulls\">Pull Requests</a> ·\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> ·\n <a href=\"#hive-的核心优势\">核心优势</a> ·\n <a href=\"#快速开始\">快速开始</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/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> ·\n <a href=\"#hive-的核心优势\">核心优势</a> ·\n <a href=\"#快速开始\">快速开始</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/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> ·\n <a href=\"#hive-的核心优势\">核心优势</a> ·\n <a href=\"#快速开始\">快速开始</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/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> ·\n <a href=\"#hive-的核心优势\">核心优势</a> ·\n <a href=\"#快速开始\">快速开始</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/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> ·\n <a href=\"#hive-的核心优势\">核心优势</a> ·\n <a href=\"#快速开始\">快速开始</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/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"}}}} |