qwen_agent/.features/skill/changelog/2026-Q2.md
github-actions[bot] 2205d830e1
chore(.features): sync feature memory (auto) (#43)
Generated by sparticle-toolkit feature-memory-sync

Co-authored-by: Denya0529 <217564326+Denya0529@users.noreply.github.com>
2026-05-29 17:13:19 +00:00

19 KiB
Raw Blame History

2026-Q2 Skill Changelog

按时间倒序记录本季度的重要变更。


2026-05-26: skill category 字段全面接入

类型:新功能

背景skill 数量越来越多common / developing / onprem / support / linggan / autoload 各路径下数十个),列表 API 需要前端能按类别分组展示,元数据层面缺少 category 字段。

改动

  • routes/skill_manager.py
    • SkillItem model 新增 category: str = "other"
    • SkillValidationResult dataclass 新增可选 category: Optional[str]
    • parse_plugin_json 解析 plugin_config.get('category')parse_skill_frontmatter 解析 frontmatter 的 metadata.get('category')
    • get_official_skills 中 fallback 为 "other"get_user_skills 中 fallback 为 "custom"
    • get_skill_metadata_legacycategory 非空时写入返回 dict保持向后兼容
  • 批量给 common / developing / onprem / support 多个 skill 的 .claude-plugin/plugin.jsonSKILL.md frontmatter 添加 category 字段。
  • data-dashboardmcp-uicategory"Data & Retrieval" 修正为 "Interactive UI"(更贴切 MCP App 的渲染语义)。

根因N/A新功能

影响

  • GET /api/v1/skill/list 返回项现在包含 category 字段;前端可按 category 维度做分组/筛选。
  • skill 元数据约定扩展——新 skill 应在 plugin.json 或 SKILL.md frontmatter 中写明 category,否则会落到 "other" / "custom" 兜底。
  • plugin.json.categorySKILL.md.category 同时存在时以前者为准(get_skill_metadata 优先 plugin.json

相关文件

  • routes/skill_manager.py
  • skills/common/data-dashboard/.claude-plugin/plugin.json
  • skills/common/mcp-ui/.claude-plugin/plugin.json
  • 以及一批 skills/{common,developing,onprem,support}/*/SKILL.md.claude-plugin/plugin.json

Commit/PR203dcf4, 3ada55a, 9658588


2026-05-26: developing 分支批量新增多类 skill

类型:新功能

背景[待补充]——经 developing→staging 合并集中落地一批新 skill 与 linggan 系列 skill 回归。

改动

  • 新增 skills/developing/ai-ppt-generator/:调用百度 AI 生成 PPT按 topic 自动选模板(商务/科技/教育/创意/中国风等);category: Document Processing
  • 新增 skills/developing/nfc-medicine-lookup/:通过 NFC 芯片 ID 或药品名称查询药品信息,面向老年用户的语音助手交互口径;category: Developer Tools
  • 新增 skills/developing/ppt-outline/PPT 大纲与独立 HTML 演示文稿生成dark/light/tech/minimal 四种风格);category: Document Processing
  • 新增 skills/developing/z-card-image/:生成配图、封面图、卡片图、社媒帖子分享图等;依赖 python3 + google-chrome
  • skills/developing/static-hosting/SKILL.md 由 1 行说明扩展为完整 80 行 skill同时一批已有 SKILL.md / plugin.json 补 category
  • skills/linggan/* 系列 skillbaidu-search / bot-self-modifier / caiyun-weather / competitor-news-intel / contract-document-generator / financial-report-generator / market-academic-insight / ragflow-loader / sales-decision-report / seedream / static-hosting / static-site-deploy / voice-notification / weather-china经合并回归 staging。

根因N/A

影响

  • developing skill 池扩张约 5 个新业务 skilllinggan 系列重新出现在 staging。
  • 新 skill 多为 SKILL.md 型业务 skill符合"workflow + 模板"的纯 markdown 模式;其中 ai-ppt-generatorz-card-image 依赖外部 BAIDU_API_KEYgoogle-chrome 二进制。

相关文件

  • skills/developing/ai-ppt-generator/SKILL.md
  • skills/developing/nfc-medicine-lookup/SKILL.md
  • skills/developing/ppt-outline/SKILL.md
  • skills/developing/z-card-image/SKILL.md
  • skills/developing/static-hosting/SKILL.md
  • skills/linggan/**(回归)

Commit/PR3ada55a


2026-05-23: 新增 ecommerce-storefront skillMCP App 型)+ MCP App 培训文档

类型:新功能

背景MCP App 模式host 加载静态 HTML + postMessage 传数据)已经在 mcp-uidata-dashboard 上跑通,需要一个面向电商场景的样例 skill演示产品浏览 / 选购 / 下单确认这类多步交互的 App 渲染;同时沉淀一份 MCP App 开发指南。

改动

  • 新增 skills/developing/ecommerce-storefront/
    • apps/product-list.html288 行)与 apps/order-confirm.html233 行)两个静态 App。
    • ecommerce_server.py213 行)作为自带 MCP serverecommerce_tools.json 定义工具 schema。
    • hooks/ecommerce_guide.md + hooks/pre_prompt.py 注入 skill 使用指引到 system prompt。
    • mcp_common.py252 行)复用 MCP 通用工具基类。
    • .claude-plugin/plugin.json 配置 PrePrompt hook 与 stdio MCP servercategory: Developer Tools
  • 新增 docs/mcp-app-training.md(约 1063 行MCP App 模式的开发培训材料。

根因N/A

影响

  • developing skill 池新增一个 MCP App 型 skill体例对齐 mcp-ui / data-dashboard
  • MCP App 开发者有完整培训材料可参考。

相关文件

  • skills/developing/ecommerce-storefront/**
  • docs/mcp-app-training.md

Commit/PR9d001c8


2026-05-21: Daytona 沙箱注入 shell_env 到 BASH_ENV

类型:新功能

背景Daytona 沙箱内的 skill 脚本需要能读取 ASSISTANT_ID / USER_IDENTIFIER / TRACE_ID 等运行时上下文,但宿主 process env 无法直接透传到沙箱里。

改动

  • agent/deep_assistant.py init_agent:当 sandbox is not None and sandbox_type == "daytona" 时,组装 _shell_env 字典(ASSISTANT_ID / USER_IDENTIFIER / TRACE_ID / ENABLE_SELF_KNOWLEDGE 加上 config.shell_env),构造 cd {REMOTE_WORKSPACE_ROOT}\n + export VAR="..." 行,通过 sandbox.execute("cat > $REMOTE_BASH_ENV_PATH << 'ENVEOF' ... ENVEOF") 写入沙箱内。
  • utils/daytona_sync.py 提供常量 REMOTE_BASH_ENV_PATH / REMOTE_WORKSPACE_ROOT
  • AgentConfig 增加 shell_env: Optional[Dict[str, str]](调用方可追加自定义 env

根因N/A

影响

  • 沙箱内通过 bash 启动的 skill 脚本可以 os.environ.get("ASSISTANT_ID") 等读到运行时上下文。
  • 仅 daytona 沙箱模式生效;本地或非 bash 启动的进程不会收到 BASH_ENV 注入的变量。
  • 扩展注入项(新增固定环境变量)需要直接改 init_agent 里的 _shell_env 字典。

相关文件

  • agent/deep_assistant.py
  • utils/daytona_sync.py

Commit/PR776acc2


2026-05-12: 批量精修 retrieval policy 文案

类型:内容调整

背景[待补充]

改动

  • be96f24: 跨 6 个 skill 变体调整 retrieval-policy-forbidden-self-knowledge.md 的措辞onprem / support / autoload-onprem / autoload-onprem-rag-only / autoload-support-rag-only 路径下的版本及一份 retrieval-policy.md)。
  • 7b4f03d: 在更广的 10 个文件范围内同步更新 retrieval-policy.mdretrieval-policy-forbidden-self-knowledge.md 两套 policy使各 skill 变体的策略口径保持一致。

根因N/A非 Bug

影响:所有使用 rag-retrieve / rag-retrieve-only 这两个 hook 的 skill 在策略行为上保持一致;同时影响 onprem 与 support 两个发布分支的部署。

相关文件

  • skills/onprem/rag-retrieve/hooks/retrieval-policy*.md
  • skills/support/rag-retrieve/hooks/retrieval-policy*.md
  • skills/autoload/onprem/rag-retrieve/hooks/retrieval-policy*.md
  • skills/autoload/onprem/rag-retrieve-only/hooks/retrieval-policy*.md
  • skills/autoload/support/rag-retrieve-only/hooks/retrieval-policy*.md

Commit/PRbe96f24, 7b4f03d


2026-05-11: 子 agent (SubAgent) 支持 + pmda-drug-info skill

类型:新功能

背景:需要让单个 skill 在主 agent 之外承载多个专用子 agent按用途隔离上下文与工具集如 pmda 药品信息场景下的 single-drug / interaction / adverse-event / patient-specific 四个专用 agent

改动

  • 新增 agent/subagent_loader.py:扫描 skill 目录下的 agents/*.md,按 YAML frontmatter 的 name / description / tools 字段解析为 SubAgent 字典;按 name 去重,后扫描的覆盖先扫描的last-wins
  • agent/deep_assistant.pyinit_agent 调用 load_subagents(),存在则将 SubAgentMiddleware(来自 deepagents.middleware.subagents)插在 CustomFilesystemMiddleware 之后、AnthropicPromptCachingMiddleware 之前,顺序匹配 create_deep_agent
  • 新增 skills/developing/pmda-drug-info/:完整 skill 包,包含 .claude-plugin/plugin.jsonhooks/pre_prompt.py + hooks/pmda-instructions.md、四个 agents/*.md、自带 pmda_server.py MCP server + pmda_tools.jsonmcp_common.py 工具基础类。

根因N/A

影响

  • skill 包结构新增约定:agents/*.md 目录下的 markdown 文件会被加载为子 agent。
  • skill 加载流程在 init_agent 内增加一次目录扫描;对没有 agents/ 的 skill 无影响。
  • skill 跨 bot 共享时存在 sub-agent 同名冲突的风险——同名 sub-agent 不会报错,而是被后扫描到的覆盖。

相关文件

  • agent/subagent_loader.py(新)
  • agent/deep_assistant.py(接线)
  • skills/developing/pmda-drug-info/(新 skill

Commit/PR5b634bc


2026-05-11: pmda-drug-info MCP server 重写为 mock 实现

类型:内部改造

背景[待补充]

改动skills/developing/pmda-drug-info/pmda_server.py 大幅替换(+322 / -385保留接口面向 agent 的契约,内部替换为 mock 数据实现。

根因N/A

影响pmda-drug-info skill 当前不再依赖外部真实 PMDA 数据源,便于开发期联调。

相关文件

  • skills/developing/pmda-drug-info/pmda_server.py

Commit/PRa92096a


2026-05-11: retrieval-policy.md 内容更新

类型:内容调整

背景[待补充]

改动:在 onprem / support / autoload-onprem-rag-only / autoload-support-rag-only 四个版本的 retrieval-policy.md 上做了同步内容更新。

根因N/A

影响:与同月 12 日的 policy 批量精修配套,使 rag-retrieve hook 策略保持一致。

相关文件

  • skills/onprem/rag-retrieve/hooks/retrieval-policy.md
  • skills/support/rag-retrieve/hooks/retrieval-policy.md
  • skills/autoload/onprem/rag-retrieve-only/hooks/retrieval-policy.md
  • skills/autoload/support/rag-retrieve-only/hooks/retrieval-policy.md

Commit/PRe6d1698


2026-05-08: 通过 MCP _meta 透传 trace_id 给 RAG 工具

类型:新功能

背景:需要把 catalog-agent 的 trace_id 透传给 MCP 端的 rag_retrieve / table_rag_retrieve 服务,便于跨进程追踪。

改动

  • 新增 agent/mcp_trace_meta.py:通过 patch_mcp_client_session_trace_meta()mcp.ClientSession.call_tool 做一次幂等 monkey-patch调用时若工具名在 {"rag_retrieve", "table_rag_retrieve"} 集合内且当前请求上下文有 trace_id,则注入到 kwargs["meta"]["trace_id"];并提供 _call_tool_with_meta_compat 以兼容旧版 MCP SDK不接受 meta= 关键字时退化为手动构造 CallToolRequestParams._meta)。
  • agent/deep_assistant.py:在 get_tools_from_mcp() 入口处调用一次补丁安装。
  • 同步调整 skills/onprem/rag-retrieve/rag_retrieve_server.pyskills/support/rag-retrieve/rag_retrieve_server.py,接收并使用 _meta.trace_id

根因N/A

影响

  • rag_retrieve / table_rag_retrieve 现在在 MCP _meta 上必带 trace_id(若上下文存在)。
  • 全局 monkey-patch 风格 - 只要 get_tools_from_mcp() 被调用过一次后,所有 ClientSession.call_tool 都会被包装。

相关文件

  • agent/mcp_trace_meta.py(新)
  • agent/deep_assistant.py
  • skills/onprem/rag-retrieve/rag_retrieve_server.py
  • skills/support/rag-retrieve/rag_retrieve_server.py

Commit/PR1f06450


2026-05-06: 新增 kfs-answer skill (support 分支)

类型:新功能

背景[待补充] - 为 support 分支补齐 kfs-answer 能力onprem 分支此前已有同名 skill

改动:新增 skills/support/kfs-answer/,包括 SKILL.mdscripts/ 下的 query.py / search.py / detail.py / query_db.py / format_answer.py / merge_citations.py / _session.py 共 7 个脚本(约 1809 行)。

根因N/A

影响support 部署版本获得 kfs-answer 能力。

相关文件

  • skills/support/kfs-answer/**

Commit/PRa9227b8


2026-05-06: Daytona 沙箱增量同步漏掉符号链接

类型Bug 修复

背景dataset 通过符号链接挂载,但增量同步用 find -type f 只匹配普通文件,导致 dataset 符号链接没被检测到也没被打包同步到 Daytona 沙箱;并且 tar.add() 默认不 dereference打进去的是指向宿主机路径的悬空软链。

改动

  • utils/daytona_sync._list_local_changed_files:同时匹配 file 和 symlink (-type f -o -type l)。
  • utils/daytona_sync._tar_workspace_entriestar.add(dereference=True),把软链解引用为实际内容打包。
  • skills/onprem/kfs-answer/SKILL.mdprompt/system_prompt_deep_agent.md:统一数据集路径用复数形式 datasets/

根因find -type ftar.add() 默认行为对符号链接不友好。

影响Daytona 模式下 kfs-answer 等依赖 dataset 软链的 skill 可以正常使用沙箱内的数据;提示词与 SKILL.md 内的路径口径统一。

相关文件

  • utils/daytona_sync.py
  • skills/onprem/kfs-answer/SKILL.md
  • prompt/system_prompt_deep_agent.md

Commit/PR3c0fa49


2026-04-24: PostAgent hooks 非阻塞执行 + 临时停用 ToolOutputLengthMiddleware

类型:性能优化 / 临时调整

背景:非流式响应路径上 _execute_post_agent_hooks 是同步等待,阻塞了响应返回。

改动

  • routes/chat.py:非流式分支将 await _execute_post_agent_hooks(...) 改为 asyncio.create_task(_execute_post_agent_hooks(...))hook 在后台执行,不阻塞响应。
  • agent/deep_assistant.py:将 ToolOutputLengthMiddleware 整段注释掉(未删除,可恢复)。
  • utils/settings.py:切换 DAYTONA_API_KEY / DAYTONA_SERVER_URL 注释行(启用自托管 Daytona注释掉 SaaS 行)。

根因N/A性能优化为主

影响

  • 非流式接口响应不再等待 PostAgent hooks 完成 → hook 中失败/异常只会被 task 内部的 logger 捕获,调用方收不到错误反馈。
  • 工具输出长度暂时不再被截断,存在超长输出冲爆上下文的风险(中间件已被注释,并未拆除)。

相关文件

  • routes/chat.py
  • agent/deep_assistant.py
  • utils/settings.py

Commit/PR45a9494


2026-04-23: PrePrompt hook 内容改为模板占位符注入

类型:重构

背景:原先 PrePrompt hook 的产出文本是在 system_prompt_default.format(...) 之后追加在 prompt 末尾hook 内容在 prompt 中的位置固定且偏后,模板对它的可见性差。

改动agent/prompt_loader.load_system_prompt_async:先执行 execute_hooks('PrePrompt', config) 拿到 hook_content,然后通过新增的 {hook_content} 占位符传入 system_prompt_default.format(...);模板侧 prompt/system_prompt.md 增加对应占位符。

根因N/A结构化注入更可控

影响:编写 PrePrompt hook 的 skill 必须依赖模板里 {hook_content} 占位符的位置若使用了未升级的旧模板hook 内容将不再出现在最终 system prompt 中。

相关文件

  • agent/prompt_loader.py
  • prompt/system_prompt.md

Commit/PR51fbf01


2026-04-23: Daytona 沙箱接入

类型:新功能

背景技能脚本需要在隔离沙箱中执行Daytona避免直接污染宿主机。

改动

  • agent/deep_assistant.py
    • init_agent 中读取 DAYTONA_ENABLED / DAYTONA_API_KEY / DAYTONA_SERVER_URL,启用时创建 DaytonaSandbox;并将 sandbox / sandbox_type 传到 create_custom_cli_agent / agent.invoke_config
    • 重构为并行加载:load_system_prompt_asyncload_mcp_settings_asyncasyncio.gather 并行;get_tools_from_mcpasyncio.to_thread(init_daytona_sandbox, ...) 并行;init_agent 现在返回 (agent, checkpointer, sandbox)(多了 sandbox
    • enable_skillsskills_sources"/skills" 改为 "/workspace/skills"(指向沙箱内的路径)。
  • agent/prompt_loader.pyagent_dir_pathDAYTONA_ENABLED=True 时改为 /workspace,否则保持本地路径。
  • utils/daytona_sync.py 新增204 行):沙箱与本地 workspace 双向同步。
  • pyproject.toml / poetry.lock / requirements.txt:新增 daytonalangchain_daytona 依赖。
  • utils/settings.py:新增 DAYTONA_API_KEY / DAYTONA_SERVER_URL / DAYTONA_ENABLED 配置。

根因N/A

影响

  • init_agent 返回元组从 2 元素变为 3 元素 (agent, checkpointer, sandbox)——调用方必须同步更新解构
  • skill 在沙箱模式下的根路径与本地模式不同,所有写死路径的 hook / 脚本需要兼容两种环境。

相关文件

  • agent/deep_assistant.py
  • agent/prompt_loader.py
  • utils/daytona_sync.py(新)
  • utils/settings.py
  • pyproject.toml, poetry.lock, requirements.txt

Commit/PRc9e0789, 8446dab


2026-04-22: 新增 rag-retrieve-no-citation 与 novare-context 两个开发中 skill

类型:新功能

背景[待补充]

改动

  • skills/developing/rag-retrieve-no-citation/:完整 skill 包,含 .claude-plugin/plugin.jsonREADME.mdhooks/pre_prompt.pyhooks/retrieval-policy.mdhooks/retrieval-policy-forbidden-self-knowledge.md、独立 rag_retrieve_server.py + rag_retrieve_tools.json + mcp_common.py
  • skills/developing/novare-context/:包含 .claude-plugin/plugin.jsonREADME.mdhooks/pre_prompt.py

根因N/A

影响:开发中 skill 集合扩张,可作为后续正式版本的母版。

相关文件

  • skills/developing/rag-retrieve-no-citation/**
  • skills/developing/novare-context/**

Commit/PR7a30e52


2026-05-20

  • 变更: mcp-uidata-dashboard 从自定义 uri + data 工具协议改为 MCP Apps 模式
  • 说明: 静态 HTML App 放在各 skill 的 apps/ 目录host 通过 resource URI 加载 iframe再用 postMessage 传递工具数据
  • 修复: 前端 MCP App resource 请求改为由 ChatViewChatMessage 传入当前 botId避免子组件重新创建 bot manager 导致 bot_id 为空
  • 作者: Claude

2026-04-20

  • 新增: skills/autoload/onprem/rag-retrieve/hooks/retrieval-policy-forbidden-self-knowledge.md
  • 说明: 基于现有 retrieval-policy.md 衍生出更严格的检索策略,明确禁止在知识问答场景中使用模型自身知识补全答案,要求回答只能来自检索证据
  • 作者: Claude