Commit Graph
215 Commits
Author SHA1 Message Date
QihuAI Design 1ea7ea352f chore: remove accidental .bak file 2026-07-18 13:54:19 +08:00
QihuAI Design d593d8dc42 fix: 显式选中技能/MCP 时优先按工具资料回答 + 媒体任务超时/日志
- _build_system_prompt 末尾增加【最高优先级覆盖规则】:用户明确选择技能/MCP 并询问其介绍/功能/用法时,
  必须只基于该工具资料作答,禁止引用平台知识库中技能市场/MCP/平台能力的通用描述。
- _generate_media_task 增加启动/结束日志,对图像生成加 90s 超时、视频 300s 超时,避免异步任务挂死导致前端一直显示“生成中”。
2026-07-18 13:52:26 +08:00
QihuAI Design 1578d68f95 fix: 修复前台4项问题(MCP列举/微信技能上限/Word资产栏/技能MCP反馈) + 同步容器live状态
- #549 平台MCP列举: 注入全量已启用MCP清单, AI不再凭空编造
- #550 微信Bot技能自动发现上限 15->300
- #551 知识库Word文档同步资产后Word栏可见 + 双向删除同步(assets/knowledge级联软删)
- #552 对话反馈实际使用的技能/MCP(used_mcp字段), 含历史消息序列化
- 同步容器内其他未提交live改动(im_bot_platform/TokenDashboard/WechatBot/ChatPage)
2026-07-18 08:06:37 +08:00
QihuAI Design 7fb7c07f57 fix(admin/skills): 支持删除从市场导入的 MarketApp 技能 2026-07-17 22:25:47 +08:00
QihuAI Design cc35c61fbd fix: 技能市场分类映射缺失+筛选chip激活态配色;聊天显式选中技能时正确介绍技能并精简回复排版 2026-07-17 21:45:30 +08:00
QihuAI Design f8d1c18927 fix(admin): 后台未登录访问 Skills/MCP/Agent 报 Not authenticated\n\n- AdminLayout 增加登录+管理员守卫,无 token 或非 admin 跳 /login\n- api request() 处理 403 Not authenticated/需要管理员权限,清 token 跳登录\n- 根因:FastAPI HTTPBearer 无 token 返回 403 而非 401,前端未处理 403 跳转 2026-07-17 20:46:05 +08:00
QihuAI Design e2369b4915 fix(market): 强化场景分类器解析兜底,避免合法 id 误判为 None 2026-07-17 15:44:58 +08:00
QihuAI Design dc3077b5ae fix(market): 强化场景分类器解析兜底,避免合法 id 误判为 None 2026-07-17 15:37:35 +08:00
QihuAI Design fe051bd9f3 feat(market): 采用元宝岗位/职能分类(14类)替代人群场景 + AI验证期自动归类 2026-07-17 15:22:57 +08:00
QihuAI Design 9bcf15099f feat(market): 技能/MCP 分类改为面向用户的业务场景(人群->场景),AI验证期按场景归类 2026-07-17 14:55:21 +08:00
QihuAI Design 6f3fb400a4 feat(market): skills/mcp 能力分类 + AI验证期自动识别 + 导入自动入座 2026-07-17 12:09:42 +08:00
QihuAI Design 2ae5d9f9b5 fix(skills): 修复导入技能时 SKILL 内容丢失导致无法正常工作
- 前端 handleSubmit/handleCreateApp 发送 skillsContent;handleHubImport 对 skill 把目录 URL 作为 download_url
- 后端 upload_app 对 skill 类型写入 skill_content(手动粘贴或 Hub 抓取)
- 新增 _fetch_skill_content 按目录 URL 抓取真实 SKILL.md 回填(best-effort,仅接受有效 markdown)
- 清理 50 条空壳 skill 记录(skill_content 为空,不可恢复)
- 经 E2E 验证:手动粘贴/Hub 抓取/MCP 重导三条路径均能正确落库
2026-07-17 10:46:47 +08:00
QihuAI Design 47d38ca173 fix(MCP): 修复导入MCP时传输代码丢失导致无法连接的问题
- 前端 MarketPage 提交时随 download_url 发送粘贴的 MCP 代码(handleSubmit+handleCreateApp)
- 后端新增 parse_mcp_config 解析标准 JSON 配置, 提取 url/headers/transport
- upload_app 与 _sync 使用解析器落库 mcp_servers 并自动连通性测试
- _test_mcp_server 连接测试携带 headers 鉴权头
- 优化 MCP 代码输入框占位符为真实配置格式
2026-07-17 09:43:43 +08:00
QihuAI Design 24ed907ba5 feat: 实现MCP工具调用链路(streamable_http) - chat中MCP作为function calling真实调用tools/call 2026-07-16 20:59:42 +08:00
QihuAI Design ab90ac9473 fix: MCP后台删除/禁用同步清理market_apps源头,避免被_sync复活 2026-07-16 20:09:16 +08:00
QihuAI Design 6331e84185 feat: MCP streamable_http connection test + auto-test on import 2026-07-16 18:38:10 +08:00
QihuAI Design feb9865b00 fix: sync MarketApp MCP records to admin MCP Client management 2026-07-16 18:12:07 +08:00
QihuAI Design c9b5f964be feat(frontend): per-platform Streamable HTTP input for MCP Hub import 2026-07-16 17:36:58 +08:00
QihuAI Design e856f186be ui(mcp-hub): MCP导入弹窗复用 skills 优化方案
两个问题:
1. 标题"导入Hub - MCP"偏左未居中 — .market-modal-header h2
   加 flex:1 + text-align:center
2. 说明textarea 与 MCP传输代码 框紧挨着无分隔 —
   .hub-code-section 加 margin-top: var(--space-xl)
2026-07-16 16:39:12 +08:00
QihuAI Design e95fec0c1b ui(admin): 修复后台侧边栏 logo 区域未垂直居中
.admin-sidebar-header 原 align-items: baseline + height: var(--header-height) + padding: 0
导致 logo 紧贴顶部边线。

修复:
- align-items: baseline → center
- padding: 0 var(--space-lg) → var(--space-md) var(--space-lg)
- height → min-height
- justify-content: center (水平居中)
- logo/subtitle 加 line-height: 1 + display: flex align-items: center
2026-07-16 16:30:57 +08:00
QihuAI Design dc577eb0f0 feat(chat): 增强AI回复渲染 — 代码高亮/KaTeX数学/删除线/URL自动链接
新增渲染能力:
1. highlight.js 代码语法高亮 + 复制按钮 (hover显示)
2. KaTeX 数学公式渲染 ($$...$$块级 + $...$行内)
3. 删除线 ~~text~~ → <del>
4. 裸URL自动转可点击链接

依赖: npm install highlight.js katex mermaid
2026-07-16 16:25:41 +08:00
QihuAI Design 8486a2a0e5 ui(chat): MarkdownContent 支持表格渲染
AI 聊天回复中常出现 Markdown 表格语法 (| h1 | h2 | + |---|---| ),
但 MarkdownContent 仅支持 headers/lists/code,未渲染表格,
显示为原始 | 分隔文本。

修复:
1. ChatPage.tsx MarkdownContent 新增表格解析步骤(步骤 2.7)
   - 匹配 | header |
|---|---| 的多行表格块
   - 解析对齐方式 (:---, :---:, ---:)
   - 生成 <table><thead><tbody> HTML
2. 步骤 10 恢复占位符,步骤 11 解包 <table> 不被 <p> 包裹
3. ChatPage.css 新增 .md-table 样式
   - 蓝色渐变表头 + 斑马纹 + hover 高亮
   - 用户消息气泡内深色适配
2026-07-16 16:15:29 +08:00
QihuAI Design 845355e4e7 fix(timezone): 容器时区统一为 Asia/Shanghai,DB 历史 UTC 时间批量 +8h 修正
根因:容器 TZ 为空(默认 UTC),Python datetime.now() 返回 UTC 写入
MySQL datetime 列时无时区转换,导致存储值被当成北京时间显示(偏 8h)。

修复:
1. run.sh 加 export TZ=Asia/Shanghai,新写入的时间即为北京时
2. 批量 UPDATE 所有 datetime 列 + INTERVAL 8 HOUR(105 表 216 列)
3. market_apps 等 59 表的 updated_at 因 ON UPDATE 触发器被重置,
   改为 = created_at(用户未实际编辑过)

后续:新写入的数据天然为北京时;旧数据已对齐。
2026-07-16 16:07:59 +08:00
QihuAI Design 4d27dd3429 ui(import-hub): 优化 skills.sh 卡片布局
- skills.sh 卡片改为列布局:
  顶部:图标+名称+URL(左侧)+ 访问按钮(右上)
  中部:URL 输入框(全宽)
  底部:检测名称预览 + 导入按钮(右下)
- 加大"说明"与平台卡片的间距(margin-top: space-xl)
- 导入按钮与名称预览在右侧同一行,间距更协调
2026-07-16 16:00:35 +08:00
QihuAI Design 0e6f1931e1 fix(skills-admin): market 项加 publish_records 字段,列表"已发布"标识正确显示
修复顶部卡片(已发布=50)与列表行(市场=未发布)不一致问题:
列表行 isPublished 仅看 skill.publish_records[],
market_apps 项无该字段故一直显示"未发布"。
改为 market_app_to_skill_dict 中按 status 注入 publish_records。
2026-07-16 15:46:43 +08:00
QihuAI Design 8942339744 fix(skills-admin): get_skills_stats 合并 market_apps(type=skill) 统计
修复顶部卡片仍显示 0 的问题:list_skills 已支持合并查询,
但 stats/overview 端点仍只读 evolution_skills。
新增对 market_apps 的统计: published→main, 其它→baby。
验证: total_skills=50, by_state.main=50, total_published=50
2026-07-16 15:39:21 +08:00
QihuAI Design ce81297159 fix: 修复技能市场分页、后台Skills管理、微信Bot图片生成超时
1. MarketPage.tsx: getApps 加 page_size=100,修复只显示20条
2. skills_admin.py: list_skills 同时查询 market_apps(type=skill)
   解决前台导入50个技能后台看不到(前后台用不同表)
3. im_llm.py: _run_async 加 timeout 参数,_call_real_llm 媒体生成
   5分钟超时保护,解决微信Bot图片生成无限期挂住的问题
2026-07-16 15:10:50 +08:00
QihuAI Design b3866f770c fix: 全站时间统一为北京时间(Asia/Shanghai)
新增 src/utils/datetime.ts 共享 formatBjTime 工具,
13 个页面(11后台+2前台) 的 toLocaleString/formatDate
改为显式北京时间。Dashboard.tsx 保留图表标签的
formatDate(split) 不受影响。
2026-07-16 12:39:35 +08:00
QihuAI Design 82afe14a23 fix(wechat/token/market): 修复微信对话时间、Token数据重置、技能市场复活、媒体内联
1. 微信Bot对话记录时间按北京时间渲染(ImBotHub/WechatHistory 的 formatTime 显式 +08:00 + Asia/Shanghai);
2. 新增 /app/api/chat/media/relay 媒体中转端点(白名单 agnES 域名, 经香港代理代取),
   改写 _wechat_send_media 用平台中转地址,微信/iLink 可内联播放图片/视频;
3. 删除 014_clean_test_data.sql:该迁移每次重启重跑并 DELETE token_usage_logs/
   messages/conversations/knowledge 等,导致 Token 驾驶舱数据每次重启被清空;
4. 002_init_data.sql 移除 market_apps 自动播种(原 WHERE COUNT=0 在用户删空后重启复活),
   技能市场交由用户后台维护,重启不再复活。
2026-07-16 09:19:23 +08:00
QihuAI Design da89a27bca fix(wechat-bot): ①对话时间统一北京时间 ②媒体内联发送(微信直看图片/视频) ③媒体生成计入Token驾驶舱 ④清空技能市场 2026-07-15 23:37:30 +08:00
QihuAI Design 7739f17594 fix(wechat-bot): 修复 AGNES 媒体生成失败——优化步骤相对导入路径错误(从未生效)+ 国内模型直连 + 内容策略重试 2026-07-15 22:04:22 +08:00
QihuAI Design fd2011b93e fix: AGNES 三个模型改走香港代理(实测延迟更低、更稳定) 2026-07-15 20:17:44 +08:00
deploy ccc5f799e1 fix(media): AGNES 图像/视频生成加韧性层——指数退避重试+友好错误翻译+Bot解析加固
根因(实测复现): AGNES 外部服务不稳定, 非平台代码问题:
- 视频创建常返 500 publish_video_queue_failed / context deadline exceeded
- 连接偶发重置 Server disconnected
- 视频硬限频 每分钟 1 次 (429 rate limit)

改动:
1. chat.py 新增 _agnes_post_json(): 对 5xx/连接中断做 3 次指数退避重试(2/4s);
   4xx(参数错误)不重试直接返回
2. 新增 _friendly_media_err(): 把 AGNES 原始 HTTP/JSON 错误
   转译为对用户友好的中文(限频/连接失败/队列繁忙), 不再透传原始报错
3. _generate_media 图像/视频分支改用上述重试+友好错误
4. im_llm.py Bot 媒体结果解析加固: strip 后判 <img>/<video>,
   成功返回干净链接; 失败透传友好中文, 绝不把原始提示词/标签甩给用户

验证(容器内实测):
- WEB_IMG OK / WEB_VID OK / BOT_IMG OK (均返回真实 png/mp4)
- 429/断开/队列三类错误均正确转译为友好中文
2026-07-15 19:58:06 +08:00
deploy b88f883d44 feat(market): admin用户前台导入的Agent/Skill/MCP自动标记为官方(official)
- POST /market/apps: 当 current_user.role == "admin" 时,source 强制设为 official
- 前端发送 source:/user/ 也会被后端覆盖为 official
- 前台卡片已有 official-badge 徽章展示,无需额外前端改动
2026-07-15 18:58:15 +08:00
deploy 6416fb4651 fix(admin): 修复注册设置PUT接口——由独立query参数改为接收JSON body
根因:PUT /admin/users/register-settings 参数定义为 phone_required: bool = None 等独立query参数,
但前端发送的是 JSON body {"phone_required":true,"email_required":true}。
FastAPI无法把JSON body映射到独立参数 → 全部收到None → 循环跳过 → DB无更新(提示成功但无效)。
修复:参数改为 body: dict 统一接收JSON,用 body.get() 取值更新 RegisterSetting 表。
2026-07-15 18:50:36 +08:00
deploy 148e4a21c2 fix: 全面修复6项问题——Auto模型路由/媒体提示词优化/微信Bot/Token驾驶舱/技能市场清空
1. resolve_auto_model: image/video/audio无显式默认时自动发现启用模型(原返回None→文本模型回退→AI说无法生成)
2. 新增_optimize_media_prompt: 调用文本LLM精炼用户原始输入为AGNES高质量提示词(去除对话噪音+英文优化)
3. detect_media_intent: 扩展关键词覆盖多轮对话模式(做图片/生成个图/画一下/制作视频等)
4. chat.py+im_llm.py: 所有httpx调用补trust_env=False+_proxy_for_url, 规避容器坏代理
5. token_usage.py: 模型名回退链(model表→日志自带的model_name→auto标签), 不再显示unknown
6. skills_admin.py: 新增POST /batch-delete批量删除API(ids空则删全部)
7. 技能市场数据已清空, 用户可重新导入技能
2026-07-15 17:05:00 +08:00
deploy 4d57987aa5 fix(agent): 外部Dify Agent 手动跟随http->https 301重定向并保持POST(测试连接+运行期);qihuyun.com直连 2026-07-15 14:30:24 +08:00
qihu-bot d274733fb3 feat(chat): 外部Agent(Dify/n8n/Coze)运行期真实远程调用
- _resolve_market_agents 补齐 platform/agent_endpoint/agent_api_key 字段
- 新增 _call_external_agent 及 dify/n8n/coze 分支; Dify 走SSE流式,兼容
  chat/agent(message)与chatflow/workflow(text_chunk/workflow_finished)事件,
  失败时surface真实错误; n8n走webhook POST; coze走v3 chat+轮询
- send_message 选中带endpoint的外部Agent时直接远程调用,跳过本地LLM扮演
- Conversation新增ext_agent_conversation_id维持Dify/Coze多轮(迁移016)
- 出网统一trust_env=False+_proxy_for_url直连,规避坏代理502
2026-07-15 13:55:04 +08:00
QihuAI Design d374d464e8 feat: 智能Agent接入前连通性/鉴权校验
- 前端技能市场「接入单个Agent」新增「测试连接」按钮,接入前必须校验通过

- 后端 POST /market/apps/verify-agent:dify 走 chat-messages 鉴权探测(trust_env=False 直连),n8n/coze 走 HEAD 可达性探测

- upload_app 对 agent 类型做服务端守卫,密钥无效/不可达直接 400 拒绝

- MarketApp 新增 platform 列(dify/n8n/coze),009 迁移幂等加列
2026-07-15 13:01:19 +08:00
QihuAI Design b0bfba5c16 fix: 技能/应用市场官方种子改为仅空表时写入,修复删掉的技能重启后被迁移脚本复活
- run.sh 每次重启无条件重跑 migrations/002_init_data.sql

- 原 INSERT IGNORE 在用户删行(PK消失)后会重新插入,导致已删技能复活

- 改为 INSERT...SELECT...WHERE (SELECT COUNT(*) FROM market_apps)=0,仅全新库播种,用户删除任一后表非空即不再复活
2026-07-15 12:38:36 +08:00
QihuAI Design 996d5413da fix: 修复AI聊天/IM多项问题(媒体直连+技能自动发现+agent/mcp上下文)
- Issue4/7: 图像/视频生成对AGNES国内域名强制直连(trust_env=False),修复Server disconnected(代理172.18.0.1:7890返回502)

- Issue8: 修复_parse_skill_content缺失def导致的NameError;新增_discover_installed_skills默认技能自动发现

- Issue2/3: system prompt注入agent资料与mcp描述/endpoint

- Issue7: IM Bot制作图片走Auto路由媒体模型
2026-07-15 12:23:56 +08:00
QihuAI Design bc2899ed09 前台8项体验修复: 知识库上传自动刷新; 资产PDF归类; Token驾驶舱媒体统计; AI模糊意图澄清选择; ChatPage增加MCP/附件上传/语音; 技能市场安装态修复+清理演示数据; MCP协议应用改名MCP应用; Agent单应用接入(名称/介绍/API Key) 2026-07-15 10:33:43 +08:00
QihuAI Design 463824480b fix: 知识库文档上传(尾斜杠+FormData+真文件接收); AI回复强制Markdown; 平台全功能知识库注入系统提示 2026-07-14 23:04:30 +08:00
QihuAI Design 62631a3b95 feat: 技能市场Hub导入MCP/Skills添加名称说明输入;MCP传输代码验证后独立导入按钮 2026-07-14 22:33:43 +08:00
QihuAI Design c0ec9e0e88 fix: ChatPage loadMessages 中 mapped.forEach 闭包错误导致页面白屏;移至 async 内部 2026-07-14 22:21:16 +08:00
QihuAI Design 5d1370156e fix: 停止迁移复活默认模型供应商/模型;AI聊天媒体生成改为异步(修复视频请求失败)
- migrations/002_init_data.sql: 移除 model_providers/models 的 INSERT IGNORE 种子,重启容器不再复活 deepseek/openai/通义千问等默认供应商与模型,改由用户在后台大模型库自行维护
- chat.py: 图像/视频生成分支改为立即返回占位(generating=true),后台 asyncio 任务轮询 AGNES 并回写消息内容,避免最长 5 分钟同步轮询阻塞 HTTP 请求导致前端「发送失败:请求失败」
- ChatPage.tsx: 发送后若 assistant_message.generating,每 3s 轮询 getMessages 直至内容更新;页面刷新时若仍有「⏳」占位继续轮询;卸载清理定时器
2026-07-14 21:48:39 +08:00
QihuAI Design b7f76c3e92 refactor(admin): 将「数据分析」从数据驾驶舱移至待处理板块 2026-07-14 21:21:35 +08:00
QihuAI Design a1669374e6 feat(kb): 接入 Dify 知识库,移除 FastGPT;AI 聊天产出+用户文档自动入库量化
- 新增 app/dify_kb.py Dify v1 客户端(连通测试/检索/文本入库)
- kb_router 仅保留 Dify 外部检索分支
- knowledge_admin 去掉 FastGPT/RAGFlow,新增 dify 批量入库端点
- chat.py 注入 Dify RAG 上下文 + 助手回答 fire-and-forget 入库
- 前端 Knowledge.tsx 改为 Dify 单服务 UI(可通讯/可用验证+入库按钮)
- DB: external_kb_services 删除 fastgpt,qihuai 设为 https+connected
2026-07-14 20:56:53 +08:00
QihuAI Design d3a890eb18 Round6 fix: 自动化任务提交按钮文案/去掉创建分支; 补建 sms_verification_codes 表 2026-07-14 19:38:50 +08:00
QihuAI Design d179cc2f02 Round6: 前台图片缩略图+下载/视频修复; 后台连接测试单次+自动消失; 导航重组; 存储中文化; 自动化去掉创建按钮; 短信验证码(注册/重置/充值通知) 2026-07-14 18:49:27 +08:00