# OpenClaw KnowHub 插件实现总结

## 已完成的文件

```
knowhub/skill/openclaw-plugin/
├── package.json              # 包配置
├── openclaw.plugin.json      # 插件元数据和配置 schema
├── tsconfig.json             # TypeScript 配置
├── index.ts                  # 主插件代码 (约 500 行)
├── index.test.ts             # 基础测试
├── README.md                 # 使用文档
└── config-examples.md        # 配置示例
```

## 核心功能

### 1. 工具实现 (3个)

- **kb_search**: 搜索 KnowHub 知识
  - 参数: query, top_k, min_score, types
  - 返回格式化的搜索结果
  - 支持类型过滤

- **kb_save**: 保存知识到 KnowHub
  - 参数: task, content, types, score, source_name, source_urls
  - 自动填充 agent_id, submitted_by
  - 参数验证（score 1-5）

- **kb_update**: 更新知识反馈
  - 参数: knowledge_id, is_helpful, feedback
  - 支持 helpful/harmful 两种反馈

### 2. 钩子实现 (3个)

- **before_agent_start**: 初始提醒
  - 注入工具说明和使用建议
  - 可通过 reminderMode=off 关闭

- **before_prompt_build**: 定期提醒
  - 每 N 次 LLM 调用注入提醒
  - 频率可配置 (minimal=5, normal=3, aggressive=2)

- **agent_end**: 状态清理 + 服务端提取
  - 清理会话计数器
  - 可选的消息历史上传（enableServerExtraction）

### 3. 安全防护

- **Prompt Injection 检测**: 4 种模式检测
- **内容转义**: HTML 实体转义
- **数据脱敏**: 路径、邮箱、API Key、IP 等
- **隐私模式**: strict/relaxed 两种模式

### 4. 配置管理

- 6 个配置选项，全部有默认值
- 配置验证（apiUrl 必需）
- UI 提示和帮助文本

## API 对齐

完全对齐 `knowledge-management.md` 的数据结构：

| 插件工具 | API 端点 | 字段 |
|---------|---------|------|
| kb_search | GET /api/knowledge/search | query, top_k, min_score, types |
| kb_save | POST /api/knowledge | task, content, types, score, source, scopes, owner |
| kb_update | PUT /api/knowledge/{id} | add_helpful_case / add_harmful_case |

## 提醒文本

对齐 SKILL.md 的触发条件：

- **查询时机**: 遇到复杂任务、不确定用什么工具、多次失败时
- **保存时机**: 使用资源后、获得用户反馈后、搜索过程有发现时
- **反馈时机**: 使用知识后

## 使用方式

### 安装

1. 将 `openclaw-plugin` 目录放到 OpenClaw 可访问的位置
2. 在 `~/.openclaw/config.json` 中配置插件

### 最小配置

```json
{
  "plugins": {
    "entries": {
      "knowhub": {
        "enabled": true,
        "config": {
          "apiUrl": "http://43.106.118.91:9999",
          "submittedBy": "user@example.com"
        }
      }
    }
  }
}
```

### Agent 使用

Agent 启动后会看到初始提醒，然后可以：

1. 搜索知识: `kb_search({ query: "..." })`
2. 保存知识: `kb_save({ task: "...", content: "...", types: [...] })`
3. 反馈知识: `kb_update({ knowledge_id: "...", is_helpful: true })`

每 3 次 LLM 调用会收到一次提醒。

## 测试

基础测试覆盖：
- Prompt injection 检测
- HTML 转义
- 数据脱敏
- 提醒间隔计算

运行测试（需要先安装依赖）：
```bash
cd knowhub/skill/openclaw-plugin
pnpm install
pnpm test
```

## 下一步

1. **测试**: 在实际 OpenClaw 环境中测试插件
2. **调试**: 根据实际使用情况调整提醒频率和文本
3. **优化**: 根据反馈优化工具参数和错误处理
4. **文档**: 补充更多使用示例和故障排查指南

## 注意事项

- 插件依赖 `@sinclair/typebox` 和 `openclaw/plugin-sdk/core`
- 需要 KnowHub Server 运行在配置的 apiUrl
- 服务端提取功能需要 Server 实现 `/api/extract` 端点
- 测试文件需要导出的函数已经标记为 export
