Commit Graph

108 Commits

Author SHA1 Message Date
朱潮
dc52ddb8cc Merge branch 'feature/pre-memory-prompt' into dev 2026-03-30 21:00:45 +08:00
朱潮
6b9ae7f86a fix: skill 删除时同步清理 robot 目录,解压时跳过已存在的 skill
1. remove_skill 删除 uploads 下的 skill 后,同步删除 projects/robot/{bot_id}/skills/ 下的副本
2. _extract_skills_to_robot 不再每次全量清空重建,已存在的 skill 直接跳过

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 15:47:28 +08:00
朱潮
1b4fcb3d71 refactor: 改用基于元数据文件位置的 skill 结构检测
将 skill 上传检测逻辑从基于 zip 文件结构(是否有顶级目录)改为基于
SKILL.md 和 .claude-plugin/plugin.json 的实际位置:先检查解压根目录,
再检查第二级子目录。统一解压到临时目录后再按结构移动到 skills 目录。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 15:30:17 +08:00
autobee-sparticle
a161e43421
feat: add POST /api/v1/memory endpoint for realtime conversation memory (#17)
* feat: add POST /api/v1/memory endpoint for realtime conversation memory

Add memory extraction API that accepts conversation messages and
stores them via Mem0. This enables realtime voice sessions to save
memories through the same pipeline as chat conversations.

Fixes: sparticleinc/mygpt-frontend#2126

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address code review findings for memory API

- Use Literal["user","assistant"] for role field validation
- Add Field constraints (min_length, max_length=200)
- Track and report pairs_failed in response
- Hide internal exception details from HTTP response
- Remove unused authorization parameter (internal API)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: zhuchao <zhuchaowe@163.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 11:14:02 +09:00
朱潮
c27270588f 增加取消推理 2026-03-16 22:22:39 +08:00
朱潮
32fd8c8656 shell_env支持 2026-03-16 13:31:59 +08:00
朱潮
b8368068ae 心跳发送增加 15 秒间隔判断,发送后也更新 last_yield_time 2026-03-15 16:53:18 +08:00
朱潮
7a058065c1 在 routes/skill_manager.py:669-672,解压完成后立即检测并删除 __MACOSX 目录,这样后续的 skill
验证流程就不会受到干扰。
2026-03-13 10:08:38 +08:00
朱潮
0469ea2ecd 心跳输出格式改成json 2026-03-12 19:32:37 +08:00
朱潮
94471c90d8 添加心跳机制 2026-03-12 16:57:44 +08:00
朱潮
38c5d1e622 修复方案:在 routes/webdav.py 中添加了一个 WSGI 中间件包装函数,在请求到达 WsgiDAV 前:
1. 读取 X-Forwarded-Proto 设置正确的 wsgi.url_scheme
  2. 将 Destination 头中的外部 scheme/host 重写为内部实际值
2026-03-09 18:51:08 +08:00
朱潮
5d97be9557 routes/webdav.py — 完全重写,从手写 WebDAV 协议改为使用 WsgiDAV 开源库 2026-03-09 18:33:05 +08:00
朱潮
4ad1c96bf3 ALLOWED_RESOURCE_TYPES 从 {robot, dataset} 改为 {robot, docs}。现在 WebDAV 路径为: 2026-03-09 16:00:07 +08:00
朱潮
9fd4a099da remove resource_id 2026-03-09 15:48:35 +08:00
朱潮
7039bec61a add webdav support 2026-03-09 12:54:38 +08:00
朱潮
49034bc571 add webdav support 2026-03-09 12:31:07 +08:00
朱潮
b277c9bbff add webdav support 2026-03-09 11:56:17 +08:00
朱潮
85cc57ce1a aupdate from_v2_request 新增 model_name、model_server、api_key 三个可选参数 2026-03-06 12:53:16 +08:00
朱潮
8264257ab6 现在 from_v2_request 的 model_name 和 model_server 优先级逻辑为:
1. 最高优先级:generate_cfg 中的 model / model_server(需不为空且不等于 whatever)
  2. 回退:bot_config 中的值(原有逻辑)
2026-03-06 12:47:33 +08:00
朱潮
4c74acaf18 chat.py:730 的 v2 接口 exclude_fields 现在与 v1 接口保持一致,补上了 'model', 'model_server', 'dataset_ids', 'system_prompt', 'mcp_settings',
'robot_type', 'enable_thinking', 'skills', 'enable_memory' 这些字段。
2026-03-05 15:08:09 +08:00
朱潮
f7773a93e1 Merge branch 'upgrade/deepagents-0.4.4' 2026-03-04 14:08:51 +08:00
朱潮
b3b6dd85d9 排查n参数 2026-03-04 09:57:36 +08:00
朱潮
5b29e866f2 现在 v1 和 v2 接口都支持传递额外参数了 2026-03-02 20:01:43 +08:00
朱潮
f72a53462a Merge branch 'master' of https://github.com/sparticleinc/catalog-agent 2026-03-02 16:07:10 +08:00
朱潮
186d2fe265 添加tmp脚本删除 2026-03-02 15:27:26 +08:00
朱潮
82ffe8b623 文件名上传修复 2026-03-02 14:27:32 +08:00
autobee-sparticle
108c675c3d
feat(memory): add memory management API endpoints (#10)
* chore: add .worktrees/ to .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(memory): add memory management API endpoints

Add new /api/v1/memory endpoints for viewing and managing user memories:
- GET /api/v1/memory - list all memories for a bot
- DELETE /api/v1/memory/{memory_id} - delete single memory
- DELETE /api/v1/memory - delete all memories for a bot

Also add delete_memory and delete_all_memories methods to Mem0Manager.

Issue: #1844

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: zhuchao <zhuchaowe@163.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 18:01:12 +09:00
朱潮
a6e7892536 modify routes/skill_manager.py 2026-02-12 22:19:09 +08:00
朱潮
c7e9f305b7 feat: 实现 Claude Plugins 模式的 Hook 机制
- 新增 agent/plugin_hook_loader.py:支持通过 .claude-plugin/plugin.json 配置 hooks 和 mcpServers
- 修改 agent/prompt_loader.py:集成 PrePrompt hooks,优先读取 skill MCP 配置
- 修改 routes/chat.py:添加 PostAgent 和 PreSave hooks
- 修改 routes/skill_manager.py:优先从 plugin.json 读取 name/description,fallback 到 SKILL.md
- 删除旧的 agent/skill_hook_loader.py
- 新增示例 skill user-context-loader,演示完整的 hooks 用法

Hook 类型:
- PrePrompt: 在 system_prompt 加载时注入内容
- PostAgent: 在 agent 执行后处理
- PreSave: 在消息保存前处理

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 20:15:54 +08:00
朱潮
e67d50b4fc rename general agent 2026-02-06 17:05:17 +08:00
朱潮
2e429e82f7 remove summary output 2026-02-04 17:39:51 +08:00
朱潮
f1107ea35a 增加enable_thinking和enable_memory 2026-01-28 17:13:41 +08:00
朱潮
4e8e94861f execute sql result 2026-01-23 18:33:29 +08:00
朱潮
f8a44e8d6d execute sql 2026-01-23 17:44:34 +08:00
朱潮
44b4295a87 update parse_skill_frontmatter 2026-01-23 08:52:27 +08:00
朱潮
3dc119bca8 refactor(mem0): optimize connection pool and async memory handling
- Fix mem0 connection pool exhausted error with proper pooling
- Convert memory operations to async tasks
- Optimize docker-compose configuration
- Add skill upload functionality
- Reduce cache size for better performance
- Update dependencies

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 19:39:12 +08:00
朱潮
f694101747 refactor: migrate from Memori to Mem0 for long-term memory
Replace Memori with Mem0 for memory management:
- Delete memori_config.py, memori_manager.py, memori_middleware.py
- Add mem0_config.py, mem0_manager.py, mem0_middleware.py
- Update environment variables (MEMORI_* -> MEM0_*)
- Integrate Mem0 with LangGraph middleware
- Add sync connection pool for Mem0 in DBPoolManager
- Move checkpoint message prep to config creation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-20 21:15:30 +08:00
朱潮
05744cb9f4 批量保存聊天记录 2026-01-19 09:44:57 +08:00
朱潮
3b438d8ab7 优化输出 2026-01-18 22:04:36 +08:00
朱潮
f9ba3c8e51 添加聊天记录查询 2026-01-18 12:29:20 +08:00
朱潮
723b249e42 增加2个系统级别的skill 2026-01-16 23:05:30 +08:00
朱潮
90117b41fe 修复符号链接的问题,和deep_agent提示词 2026-01-13 14:22:44 +08:00
朱潮
174a5e2059 deep_agent支持 checkpoint 2026-01-11 00:08:19 +08:00
朱潮
68a4578554 feat(skills): add skill deletion endpoint
- Add DELETE /api/v1/skill/remove endpoint
- Add validate_skill_name() for path traversal protection
- Include path normalization and security checks
- Prevent deletion of official skills (user skills only)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-07 21:34:16 +08:00
朱潮
b8e57b2f51 feat(skills): add security hardening to skill upload endpoint
- Add ZipSlip path traversal protection (validate all file paths)
- Add file size limits (50MB upload, 500MB extracted)
- Add zip bomb protection (max 100:1 compression ratio, 1000 entries)
- Add async I/O using aiofiles to avoid blocking event loop
- Add bot_id validation to prevent path traversal attacks
- Add proper error cleanup on upload failures

Security improvements:
- P1-001: ZipSlip path traversal防护
- P1-004: File size limits (50MB)
- P1-005: Zip bomb防护 (compression ratio check)
- P1-008: Async I/O improvements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-07 20:25:37 +08:00
朱潮
b3303ef8e6 refactor(sse): simplify error handling and remove __debug__ security issue
- Remove __debug__ conditional that exposed tracebacks in production
- Simplify error response structure to {"error": str(e)}
- Remove redundant exception handling in init_agent()
- Remove unnecessary traceback logging
- Reduce code from ~30 lines to ~10 lines

Fixes security vulnerability where __debug__ is always True
unless Python runs with -O flag, causing full tracebacks
to be sent to clients in production.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-07 20:24:30 +08:00
朱潮
342932030f feat(skills): add skill management API module
- Create new skill_manager.py with list and upload endpoints
- Add GET /api/v1/skill/list to retrieve official and user skills
- Add POST /api/v1/skill/upload for skill file upload
- Parse SKILL.md frontmatter to extract name and description
- Move skill upload endpoint from files.py to skill_manager.py
- Add SKILLS_DIR configuration to settings.py
- Register skill_manager router in fastapi_app.py

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-07 19:45:04 +08:00
朱潮
8a85e9025e fix(sse): properly handle MCP tool errors and send error responses to client
- Enhance exception handling in agent_task() to capture and send structured error messages via SSE stream
- Add [DONE] marker to outer exception handler to ensure proper stream termination
- Improve MCP tool loading error handling in init_agent() to prevent cascading failures
- Add detailed error logging with traceback for debugging

Fixes RemoteProtocolError that occurred when MCP tool calls failed,
which previously caused incomplete chunked read errors and connection drops.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-07 19:24:28 +08:00
朱潮
92c82c24a4 feat(skills): add skill file upload API endpoint
Add new POST endpoint /api/v1/skills/upload for uploading skill zip files.
The endpoint:
- Accepts zip files with bot_id parameter
- Validates file format (must be .zip)
- Saves zip to projects/uploads/{bot_id}/skill_zip/
- Automatically extracts to projects/uploads/{bot_id}/skills/{skill_name}/
- Returns success response with file and extract paths

This enables programmatic skill deployment for specific bots.
2026-01-07 14:47:25 +08:00
朱潮
fbbf0c0653 fix(file-manager): fix create-folder API to accept JSON request body
The create_folder endpoint was incorrectly defined to accept query
parameters instead of JSON request body, causing 400 errors when
called from the frontend.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-31 16:52:07 +08:00