--- title: NetaClaw 模块 created: 2026-04-13 updated: 2026-05-15 type: entity tags: [module, agent, architecture] sources: [packages/backend/src/modules/netaclaw/] --- # NetaClaw 模块 项目的 AI Agent 引擎核心,实现了完整的 ReAct 循环推理、多 LLM 提供商支持、工具系统、记忆系统、技能系统、Multi-Agent Crew 编排、普通会话内子 Agent 委派、Session Tree 会话运行时、上下文压缩和外部渠道接入。2026-05-14 后,微信渠道重点演进为 `weixin-db` 本地群聊代理,并通过 [[desktop-op-module]] 与 `weixin_send_text` 形成双 Agent 自动回复链路。2026-05-15 后,NetaClaw 增加 MySQL 只读问数后端能力,数据源配置、SQL guard、schema/sample/query 工具和审计均收敛在主进程服务侧。 ## 目录结构 ``` netaclaw/ ├── entity/ # 数据模型(含 legacy session/message 与 session-tree 新表) ├── controller/ # REST API ├── gateway/ # WebSocket 网关(/netaclaw + /crew 两个命名空间) ├── runtime/ # Agent 执行引擎核心(含 TodoStore、Thinking、Compaction) ├── memory/ # 长期记忆系统 ├── tools/ # 工具定义、内置工具和 Operations 执行后端 ├── browser-daemon/ # Netabrowser 后端 daemon(浏览器 session、拟人化交互、state/cookie) ├── plugins/ # LLM 提供商适配层(含 Thinking/Reasoning) ├── service/ # 业务逻辑(Skill、Crew、Channel、Executor、Tool Resolver、Chat Orchestrator) ├── platforms/ # 接入平台(预留) ├── session-tree/ # Session Tree provider、snapshot、projection、context builder ├── subagent/ # 子 Agent worker 进程、协议、runner └── config.ts # 模块配置 ``` ## 核心子系统(23个) | 子系统 | 关键文件 | 职责 | |--------|---------|------| | [[agent-runtime]] | `runtime/agent.ts` | ReAct 循环执行引擎 | | [[session-tree-runtime]] | `session-tree/provider.ts`, `session-tree/snapshot.ts` | 会话树、快照、active path、节点投影 | | [[crew-orchestration]] | `service/crew_orchestrator.ts` | Multi-Agent 编排(委派/并行/升级) | | [[websocket-gateway]] | `gateway/server.ts`, `gateway/crew_server.ts` | 实时通信(对话 + Crew 监控) | | [[tool-system]] | `tools/builtin/*.ts` | 内置工具与执行链路 | | [[image-generation-tools]] | `tools/builtin/text_to_image.ts`, `tools/builtin/image_to_image.ts` | 文生图、图生图和图片结果持久化 | | [[runtime-process-events]] | `runtime/process_events.ts` | 长耗时工具/Skill 过程事件、采样和 JSONL 日志 | | [[tool-operations]] | `tools/operations/*.ts` | 文件、进程和搜索底层执行后端抽象 | | [[tool-catalog]] | `tools/catalog.ts` | 工具 schema 注册与默认工具集 | | [[tool-governance]] | `service/tool_registry.ts`, `service/tool_resolver.ts` | Tool 全局治理、Agent 级过滤与 Prompt Hint | | [[subagent-session]] | `service/subagent.ts`, `service/chat_orchestrator.ts`, `session-tree/subagent_projection.ts` | 普通会话内子 Agent 委派、结果聚合与回放投影 | | [[context-compaction]] | `runtime/compaction.ts` | 长会话压缩与 compacted/full 视图 | | [[prompt-builder]] | `runtime/prompt_builder.ts` | 8层分层 Prompt 注入系统 | | [[memory-system]] | `memory/*.ts` | 长期记忆(MySQL/SQLite) | | [[mysql-data-source]] | `service/data_source.ts`, `service/mysql_schema.ts`, `service/mysql_query.ts`, `tools/builtin/mysql.ts` | MySQL 数据源、schema/sample/query、SQL guard 和问数审计 | | [[skill-system]] | `service/skill_loader.ts` | 技能加载、安装、注册和诊断 | | [[skill-runtime]] | `service/skill_config.ts`, `service/skill_executor.ts`, `service/skill_secret.ts` | Skill 分类、compute-entry 执行和 scoped secrets | | [[document-skills]] | `packages/backend/skills/minimax-*` | PDF / DOCX / XLSX 文档处理 skill 包 | | [[vehicle-damage-skill]] | `packages/backend/skills/vehicle-damage-inspection/` | 汽车环车视频旧伤检测 compute-entry skill | | [[netabrowser-runtime]] | `browser-daemon/*`, `packages/netabrowser-cli/` | 反风控浏览器 daemon、CLI、拟人化交互和持久 profile | | [[llm-providers]] | `plugins/llm_providers/*.ts` | 多模型适配(含 Thinking) | | [[agent-channel]] | `service/agent_channel.ts`, `service/weixin_db.ts` | 外部渠道接入;当前包含 ClawBot 私聊和 weixin-db 本地群聊代理 | | [[desktop-op-module]] | `packages/backend/src/modules/desktop_op/` | 桌面 GUI 操作运行时;当前支撑微信自动发送 | | [[todo-system]] | `runtime/todo_store.ts` | 会话级任务管理 | ## 数据模型(19个表) | 表名 | Entity 文件 | 用途 | |------|------------|------| | `netaclaw_agent` | `entity/agent.ts` | Agent 配置和发布 | | `netaclaw_session` | `entity/session.ts` | 对话会话 | | `netaclaw_message` | `entity/message.ts` | 消息历史 | | `netaclaw_skill` | `entity/skill.ts` | Skill 元数据、env schema 和加密 secrets | | `netaclaw_model_channel` | `entity/model_channel.ts` | 模型渠道 | | `netaclaw_memory` | `entity/memory.ts` | 长期记忆 | | `netaclaw_memory_type` | `entity/memory_type.ts` | 记忆类型和系统类型保护 | | `netaclaw_tool` | `entity/tool.ts` | Tool 全局治理配置 | | `netaclaw_subagent_session` | `entity/subagent_session.ts` | 普通会话子 Agent 记录 | | `netaclaw_crew` | `entity/crew.ts` | Crew 集群定义 | | `netaclaw_crew_agent` | `entity/crew_agent.ts` | 集群-Agent 关联 | | `netaclaw_crew_run` | `entity/crew_run.ts` | Crew 运行记录 | | `netaclaw_crew_task` | `entity/crew_task.ts` | Crew 子任务记录 | | `netaclaw_agent_channel` | `entity/agent_channel.ts` | 外部渠道配置 | | `netaclaw_agent_channel_group` | `entity/agent_channel_group.ts` | 渠道群白名单、触发策略和每群 Agent 覆盖 | | `netaclaw_agent_session` | `entity/agent_session.ts` | Session Tree 会话头与叶子状态 | | `netaclaw_agent_session_entry` | `entity/agent_session_entry.ts` | Session Tree 节点持久化 | | `netaclaw_data_source` | `entity/data_source.ts` | MySQL 数据源连接、授权和安全策略配置 | | `netaclaw_data_source_query_audit` | `entity/data_source_query_audit.ts` | MySQL 问数 SQL 执行、拒绝和失败审计 | 当前数据模型需要区分两条线: - legacy 线:`netaclaw_session` + `netaclaw_message`,仍服务旧历史消息、压缩和部分兼容逻辑。 - session-tree 线:`netaclaw_agent_session` + `netaclaw_agent_session_entry`,已经是 Agent Chat 主路径的会话状态载体。 ## 关键字段 ### netaclaw_agent - `name`(唯一)、`label`、`description`、`icon` - `systemPrompt`(系统提示词) - `skills`(JSON 数组,关联的 Skill 名称) - `modelConfig`(JSON:apiUrl/apiKey/modelId/contextWindow) - `config`(JSON:memory/defaultThinkLevel 等) - `status`(0=草稿 1=已发布) ### netaclaw_skill - `name`(唯一)、`label`、`description` - `skillType`(能力类型:compute/llm/multimodal) - `tags`、`version`、`source`、`sourceUrl` - `installSpec`、`metadata`、`fingerprint`、`installedAt` - `secrets`(AES-256-GCM 加密后的 skill scoped secrets) - `envSchema`(环境变量声明,供 [[skill-runtime]] 和前端配置页使用) ### netaclaw_message - `sessionId`、`role`(user/assistant/tool/system) - `content`、`thinking`(思考内容) - `toolCalls`(JSON)、`toolCallId`、`skillName`、`metadata` ### netaclaw_agent_session - `sessionId`、`agentId`、`userId` - `rootEntryId`、`leafEntryId` - `parentSessionId`、`title`、`status` - `metadata`(会话级扩展状态) ### netaclaw_agent_session_entry - `sessionId`、`entryId`、`parentEntryId` - `type`(message / compaction / branch_summary / subagent_batch / subagent_result 等) - `content`、`message`、`metadata` - `timestamp` ### netaclaw_agent_channel_group - `channelId`、`roomId`(channel 内唯一)、`roomName` - `status`(0 禁用、1 启用、-1 忽略) - `triggerMode`(at_mention / all,prefix 仅兼容) - `boundAgentId`(每群 Agent 覆盖) - `replyIdentityOverride`、`firstSeenAt`、`lastSeenAt`、`lastActiveAt` ### netaclaw_data_source - `name`(唯一)、`label`、`type`(当前为 mysql) - `host`、`port`、`database`、`username` - `passwordEncrypted`(AES-256-GCM 密文) - `readonly`、`status` - `allowedAgentIds`(JSON 数组) - `extra`(JSON:allowedTables、blockedTables、maskedColumns、schemaVisibility、maxRows、maxJoinTables、queryTimeoutMs、SSL 等) ### netaclaw_data_source_query_audit - `dataSourceId`、`agentId`、`userId`、`toolCallId` - `sqlHash`、`sqlPreview` - `status`(success / rejected / failed) - `rejectReason`、`elapsedMs`、`rowCount`、`errorCode` ### netaclaw_memory_type - `key`(唯一类型标识) - `name`、`description`、`icon` - `isSystem`(1=系统内置,不允许删除) ## 当前主运行路径 当前 NetaClaw 的普通对话主路径已经是: ```text gateway/server.ts -> chat_orchestrator.ts -> session-tree/* -> tool_resolver.ts / runtime/agent.ts -> memory/registry.ts + memory providers -> subagent.ts -> gateway/protocol.ts + frontend chat store ``` 这意味着理解 Neta 项目时,不能再只把 `netaclaw_message` 和线性历史当成核心事实;需要优先理解 [[session-tree-runtime]]、[[agent-runtime]] 和 [[subagent-session]] 三者的协作。 ## 相关页面 - [[project-overview]] — 项目总览 - [[agent-runtime]] — 执行引擎详解 - [[session-tree-runtime]] — 会话树运行时 - [[crew-orchestration]] — Multi-Agent 编排 - [[websocket-gateway]] — 通信协议 - [[tool-catalog]] — 工具目录系统 - [[tool-operations]] — 工具底层执行后端抽象 - [[prompt-builder]] — Prompt 分层注入 - [[patch-tool]] — Patch 模糊补丁工具 - [[clarify-tool]] — Clarify 澄清工具 - [[tool-system]] — 工具系统 - [[image-generation-tools]] — 文生图/图生图工具 - [[runtime-process-events]] — 工具和 Skill 过程事件 - [[memory-system]] — 长期记忆和记忆管理页 - [[mysql-data-source]] — MySQL 数据源、问数工具和 SQL guard - [[skill-runtime]] — Skill 运行时执行和配置 - [[document-skills]] — 文档处理 Skills - [[vehicle-damage-skill]] — 车辆旧伤检测 Skill - [[netabrowser-runtime]] — 反风控浏览器运行时 - [[desktop-op-module]] — 桌面 GUI 操作运行时