feat(skills): 技能环境变量配置——恒定入口、启用门禁与调用引导 - #586
Open
AlphaCatMeow wants to merge 7 commits into
Open
Conversation
unplugin-icons 的 jsx 编译器经 local-pkg 从 .pnpm 真实路径懒加载 @svgr/core;二者是工作区直接 devDep,不进 pnpm 内部提升目录,根 node_modules 也没有,TS7 升级重算 peer 后首次 dev 即报 Cannot find package '@svgr/core'。提升到根 devDependencies 使 local-pkg 的向上遍历可命中,桌面端与 WebUI dev 同时修复。
扫描技能脚本与 SKILL.md 代码块提取环境变量引用(显式读取 API/凭据形状分级,系统与运行时名单否决,技能内自赋值排除);解析 metadata.env 声明;按目录签名缓存;list 结果附带现场系统探测。新增 SkillsManager env_status 动作供 UI 按名探测(模型侧参数白名单未开放)。探测结果在前端仅作建议,门禁语义由前端判定。含 12 项规则单测。
SkillsSettings.env 存 {value, configured, override};resolveSkillEnvStatus 归并探测/声明/用户配置——门禁只认 metadata.env 必填与用户标记必需,探测(strong/weak)收进「检测到的可能依赖」建议组,可一键采纳。每个技能详情抽屉恒显「运行要求」区块:masked 填写、系统环境检测、误报豁免、手动添加(支持 NAME=值与多行 .env 粘贴批量导入);卡片 hover 提供配置入口,必需项未满足时显示待配置徽标并拦截启用(点开关引导至抽屉),批量启用同步跳过;详情文字放开选中复制。
系统提示词对已选但未满足的技能标注 status: unavailable 并附行为规则;SkillsManager(action=read) 前置拦截返回 skill_env_missing 结构化结果;聊天渲染引导卡——「去技能详情页填写」(跳转 Skills Hub 并打开对应抽屉)与「读取系统环境变量」(现场探测),模型文案禁止引导用户在聊天中粘贴密钥。Bash 执行按会话注入已满足技能的用户填写值(shell_run extra_envs,注入值优先于继承环境),cron 走同一通道,桌面与 WebUI 共享同一实现。
skills 域同步出口一律脱敏(值清空 + configured 标志),明文只经 skillEnvSecretUpdates sidecar 回桌面端合并落库(脱敏回声沿用本地值、configured 丢失即显式清除);WebUI 浏览器缓存与广播不含值本体,与 provider apiKey 同通道同水位。补 skillEnv 归并/注入/批量解析单测与卡片门禁断言。
StackCairn
marked this pull request as draft
August 21, 2026 17:39
Contributor
|
PR governance checks passed. Awaiting human review. |
收敛多行 import 为单行、GatewayApp import 归位等 biome check 安全修复;CI 的 GUI/WebUI lint 作业据此转绿。
AlphaCatMeow
marked this pull request as ready for review
August 21, 2026 18:20
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #582
概要
技能脚本常依赖第三方供应商凭据(API Key 等),此前无处声明、无处配置,脚本跑挂才暴露。本 PR 为每个技能提供环境变量配置能力,桌面端与 WebUI 全量接入:
NAME=值与多行 .env 粘贴批量导入。卡片 hover 提供 Key 图标直达,详情文字可选中复制。metadata.env声明必填(frontmatter 既有自由字段内的可选约定,不发明顶层键)+ 用户标记/采纳的变量。未满足时卡片显示「待配置」徽标、启用开关拦截并引导至抽屉,批量启用同步跳过。status: unavailable;SkillsManager(action=read)前置拦截返回skill_env_missing结构化结果,聊天渲染引导卡——「去技能详情页填写」(跳转 Skills Hub 并自动打开对应抽屉)/「读取系统环境变量」(现场探测);模型侧文案禁止引导用户在聊天中粘贴密钥。shell_run新增extra_envs,注入值优先于继承环境),cron 走同一通道。configured标志),明文只经skillEnvSecretUpdatessidecar 回桌面端合并落库;WebUI 浏览器缓存与广播不含值本体——与 provider apiKey 同通道同水位。与 #582 评论中定稿方案的差异:桌面端验收试用后,按反馈把「探测驱动硬门禁」修订为「恒定手动入口 + 探测仅建议」,门禁来源收窄到声明与用户标记(详见 issue 后续评论)。
独立修复
首个 commit 修复 dev 环境:
@svgr/core/@svgr/plugin-jsx提升到根 devDependencies——unplugin-icons 经 local-pkg 从.pnpm真实路径懒加载它们,而工作区直接 devDep 不进 pnpm 内部提升目录,TS7 升级重算 peer 后全新检出首次tauri dev即报Cannot find package '@svgr/core'。验证
cargo check --lib干净;探测引擎 12/12 单测通过tsc --noEmit全绿;改动文件 biome lint 干净test/skills全部通过(含新增 skillEnv 归并/注入/批量解析用例与卡片门禁断言);test/settings仅一项既有 byte-for-byte 比对在本地失败(CRLF 检出环境噪音,与本改动无关)tauri dev人工验收通过:探测建议与采纳、批量粘贴导入、门禁与调用拦截引导卡、文字选中复制