重构: 插件自注册 + .so 动态加载 + 中断打断机制

- 所有内置插件 init() 自注册 (plugin.RegisterFactory), 移除 main.go 硬编码
- 新增 .so 动态加载器 (internal/plugin/dynamic.go), 插件可编译为 plugin.so
- 新增 plugin.json 元数据 (internal/plugin/manifest.go)
- 新增 interceptLoop 独立 goroutine:
  (a) cancelLLM() 取消进行中的 HTTP 请求
  (b) interceptCh → drainInterrupt() 注入 [打断消息] 到 LLM 上下文
  (c) InjectInput 空闲时触发新处理循环
- 新增 internal/plugins/all.go 空白导入触发所有内置插件 init()
- internal/sdk/ 作为 PluginSDK 正式 Go API
- internal/api/ → internal/plugins/webui/ 迁移
- 删除旧 cmd/cli/, 使用 cmd/waiter/ 替代
- 更新 PLAN.md / ARCHITECTURE.md / README.md 文档
This commit is contained in:
root
2026-07-03 16:53:34 +08:00
parent 4442c9cea4
commit 2d314b3e9c
37 changed files with 3376 additions and 1576 deletions

View File

@ -1,83 +1,37 @@
# HomeAgent
单二进制 24/7 智能管家。**核心零 IO**,所有输入输出通过插件,插件通过三通道与核心交互:工具、阶段钩子、事件订阅。
24/7 智能管家。**核心零 IO**,一切外界交互来自插件。
## 架构
## 架构概览
```
外部(QQ / HTTP / 硬件...)
│ 通过插件注册
▼
IOManager.InjectInput()
│
▼
┌─────────────────────────────────────────────────┐
│ Agent Core │
│ │
│ on_input → Context → Memory Recall │
│ → pre_action → [LLM ↔ 工具循环] → before_output │
│ → output_send → after_output │
│ │
│ 内置:三层记忆 + 知识库 + Child Agent │
└─────────────────────────────────────────────────┘
│
├── Stage Pipeline(7 阶段,插件可拦截/改写)
├── Tool System(插件注册工具给 LLM)
└── Event Bus(插件订阅系统事件)
homed (内核) — 零 IO,纯管理
├── LLM 源管理 (Lua 适配器协议转换)
├── Agent 编排 (主 agent + interceptLoop + 子 agent)
├── 三层记忆 (Context → Document → Graph)
├── 知识库 (独立 TF-IDF)
├── IO 通道管理 (Queue / Interrupt / Output)
├── 阶段管道 (StageHost: 7 阶段并行)
└── 事件总线 (EventBus)
│
▼ PluginSDK (Go API: 工具/阶段/事件/记忆/知识/LLM/配置)
│
plugins (init() 自注册 + .so 动态加载)
├── WebUI (HTTP 服务)
├── CLI (Unix socket)
├── OpenClaw 兼容 (SKILL.md → SDK 工具)
├── Timer (timer_set 工具 + 中断反馈)
└── 第三方 .so 插件 (plugins/<name>/plugin.so)
```
## 快速开始
核心文档: [PLAN.md](PLAN.md) · [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)
## 构建
```bash
make build
./build/homed -data /tmp/homeagent
./build/waiter -say "你好"
```
依赖:Go 1.19+、CGo(go-sqlite3)。
## 阶段管道
```
on_input → pre_action → post_action ↔ before_toolcall/after_toolcall → before_output → after_output
↑_______________|
循环
```
| 阶段 | 插件可做 |
|---|---|
| `on_input` | 鉴权、拉黑、改写、短路 |
| `pre_action` | 注入 context 消息 |
| `post_action` | 审查/改写 LLM 输出、增删工具 |
| `before_toolcall` | 拒绝、改参、审计 |
| `after_toolcall` | 脱敏、改写结果 |
| `before_output` | 改写最终文本、加格式 |
| `after_output` | 记录/统计 |
## 三层记忆
| 层 | 存储 | 容量 | 裁剪 |
|---|---|---|---|
| Context | 内存 TF-IDF | 30 条 | 余弦相似度排序→文档 |
| Document | JSON + 向量索引 | ∞ | 72h 冷→图 |
| Graph | SQLite 三元组 | ∞ | 定期重整+同义合并 |
## 插件三通道
| 通道 | 方向 | 用途 |
|---|---|---|
| `RegisterTool` | 插件→LLM | Agent 调用插件功能 |
| `RegisterStage` | 核心→插件 | 干预消息处理流 |
| `Subscribe/Publish` | 双向 | 审计/日志/通知 |
## 核心命令
```bash
make build # 编译
make run # 编译+启动
make test # 测试
make install # 系统安装
```
## 完整文档
详见 [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)。
依赖: Go 1.19+, CGo (go-sqlite3), Linux (Unix socket + overlayfs)