feat(skill): add feature memory with changelog and decisions

添加 skill 功能的完整记忆文档:

Changelog:
- 2025-Q4: 初始实现 (GRPC 层 + 内置 skills)
- 2026-Q1: API 完善 (REST API + Hook 系统)

Design Decisions:
- 001: Skill 架构设计 (目录结构、Hook 系统)
- 002: 上传安全措施 (ZipSlip、路径遍历防护)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
朱潮 2026-02-11 12:30:56 +08:00
parent bbfe5d929f
commit 63d17d355b
4 changed files with 155 additions and 0 deletions

View File

@ -0,0 +1,38 @@
# 2025-Q4 Skill Changelog
## 版本 0.1.0 - 初始实现
### 2025-10-31
- **新增**: agent skills 支持,测试阶段代码
- **文件**: `chat_handler.py`, `knowledge_chat_cc_service.py`
- **作者**: Alex
### 2025-11-03
- **新增**: 内置 skills (pptx, docx, pdf, xlsx)
- **新增**: jina skill - 规范 jina 网络搜索
- **解决**: "prompt too long" 问题
### 2025-11-13
- **新增**: cc agent task 任务添加默认 skills
- **文件**: `task_handler.py`, `knowledge_task_cc_service.py`
### 2025-11-19
- **新增**: skill-creator 内置技能
### 2025-11-20
- **新增**: EFS 类型接口,新增上传 skill
- **功能**: 支持 skill 包上传
### 2025-11-21
- **新增**: EFS 删除 skill 接口
- **移除**: skill 查询接口(暂存)
### 2025-11-22
- **新增**: GRPC chat 接口skills 参数支持
### 2025-11-26
- **新增**: skill 上传支持 `.skill` 后缀(测试)
### 2025-11-28
- **优化**: 默认挂载的 skill 改为合并逻辑
- **优化**: 代码结构优化

View File

@ -0,0 +1,36 @@
# 2026-Q1 Skill Changelog
## 版本 0.2.0 - API 完善
### 2026-01-07
- **新增**: Skills 列表查询 API能力管理页面
- **新增**: 技能管理 API with authentication
- **文件**: `routes/skill_manager.py`
- **作者**: claude[bot], 朱潮
### 2026-01-09
- **重构**: 移除 catalog agent合并到 general agent
- **说明**: 简化架构,统一使用 general_agent
- **作者**: 朱潮
### 2026-01-10
- **修复**: SKILL.md 的 name 字段解析逻辑
- **新增**: 支持非标准 YAML 格式
- **新增**: 目录名称不匹配时自动重命名
- **作者**: Alex
### 2026-01-13
- **修复**: multipart form data format for catalog service
- **作者**: 朱潮
### 2026-01-28
- **新增**: enable_thinking, enable_memory, skills to agent_bot_config
- **作者**: 朱潮
### 2026-01-30
- **修复**: skill router 正确注册
- **作者**: 朱潮
### 2026-02-11
- **新增**: 初始化 skill feature memory
- **作者**: 朱潮

View File

@ -0,0 +1,46 @@
# 001: Skill 架构设计
## 状态
已采纳 (Accepted)
## 上下文
需要为 QWEN_AGENT 模式的机器人提供可扩展的技能(插件/工具)支持,允许动态加载自定义功能。
## 决策
### 目录结构设计
```
skill-name/
├── SKILL.md # 核心指令文档(必需)
├── skill.yaml # 元数据配置(可选)
├── .claude-plugin/
│ └── plugin.json # Hook 和 MCP 配置(可选)
└── scripts/ # 可执行脚本(可选)
```
### Hook 系统
| Hook 类型 | 执行时机 | 用途 |
|-----------|---------|------|
| `PrePrompt` | system_prompt 加载时 | 动态注入用户上下文 |
| `PostAgent` | agent 执行后 | 处理响应结果 |
| `PreSave` | 保存消息前 | 内容过滤/修改 |
### 技能来源
1. **官方 skills**: `./skills/` 目录
2. **用户 skills**: `projects/uploads/{bot_id}/skills/`
## 结果
### 正面影响
- 渐进式加载,按需读取
- 支持多种元数据格式(优先级: plugin.json > SKILL.md
- 完整的 Hook 扩展机制
- MCP 服<><E69C8D><EFBFBD>器配置支持
### 负面影响
- 需要管理文件系统权限
- 技能包格式验证复杂度增加
## 替代方案
1. 使用数据库存储(拒绝:文件更灵活)
2. 仅支持单一格式(拒绝:用户多样性需求)

View File

@ -0,0 +1,35 @@
# 002: Skill 上传安全措施
## 状态
已采纳 (Accepted)
## 上下文
用户可以上传 ZIP 格式的技能包,需要防范常见的安全攻击。
## 决策
### 安全防护措施
| 威胁 | 防护措施 |
|------|---------|
| ZipSlip 攻击 | 检查每个文件的解压路径 |
| 路径遍历 | 验证 `bot_id``skill_name` 格式 |
| Zip 炸弹 | 压缩比检查(最大 100:1 |
| 磁盘空间滥用 | 上传 50MB解压后最大 500MB |
| 符号链接攻击 | 禁止解压包含符号链接的文件 |
### 限制规则
```python
MAX_UPLOAD_SIZE = 50 * 1024 * 1024 # 50MB
MAX_EXTRACTED_SIZE = 500 * 1024 * 1024 # 500MB
MAX_COMPRESSION_RATIO = 100 # 100:1
```
## 结果
- 完整的上传验证链
- 防止恶意文件攻击
- 资源使用可控
## 替代方案
1. 使用沙箱容器解压(拒绝:复杂度高)
2. 仅允许预定义技能(拒绝:限制用户自定义能力)