
SkillSpector v2.6.0 深度解析Provider 推理用量遥测导出与版本化发布说明自动生成【免费下载链接】SkillSpectorSecurity scanner for AI agent skills. Detect vulnerabilities, malicious patterns, security risks, prompt injection, data exfiltration, and supply-chain risks in Claude Code, Codex, and MCP skills before you install them.项目地址: https://gitcode.com/GitHub_Trending/sk/SkillSpectorSkillSpector 是一款面向 AI Agent 技能Claude Code、Codex、MCP 技能的安全扫描器。v2.6.0发布于 2026-08-05是自 release/2.5.3 以来的一个功能型版本包含两项面向用户的能力导出 provider 推理inference用量遥测与自动生成版本化发布说明。读完本文你将掌握metadata.inference_usageJSON 契约的字段语义与归一化规则、如何在 CI 中消费用量数据计算成本、以及版本化发布说明在发布流水线中的生成与落地方式。版本概览v2.6.0 的两项变更都已被 CHANGELOG.md 记录feat(release): auto-generate versioned release notes like CHANGELOGfeat(telemetry): export provider inference usage从发布说明的结构看见 docs/release/skillspector-2.6.0.md本次发布没有Changed、Fixed、Security、Breaking Changes、Deprecations 项是一个聚焦工程能力而非检测规则的版本。换句话说v2.6.0 不新增任何安全检测模式而是把扫描过程的可观测性和发布流程的自动化程度提升了一档——这为后续版本如 2.7.0 的fix(telemetry): harden inference usage normalization奠定了遥测基础设施。特性一导出 Provider 推理用量遥测设计动机成本可观测但不替你定价SkillSpector 的多个分析器如semantic_security_discovery、semantic_quality_policy、semantic_developer_intent、mcp_tool_poisoning、meta_analyzer会调用 LLM provider 完成语义级分析。在 v2.6.0 之前CI 消费者无法从扫描报告中得知一次扫描到底消耗了多少 token、走了哪个模型。官方文档 docs/INFERENCE_USAGE.md 明确了该特性的核心设计契约刻意保持原始raw——SkillSpector 只负责归一化 token 计数与模型来源provenance不附带价格、不计算货币值。这样下游系统可以在不改跑安全扫描的前提下用按生效日期定价的目录effective-dated pricing catalog随时重算历史成本。JSON 契约metadata.inference_usage运行扫描并输出机器可读 JSONskillspector scan ./my-skill --format json每一次成功观测到的 provider 响应都会向metadata.inference_usage追加一条记录示例{ metadata: { llm_requested: true, llm_available: true, inference_usage: [ { node: semantic_security_discovery, request_kind: structured_output, provider: nv_inference, model: azure/anthropic/claude-opus-4-6, model_source: provider_response, usage_source: provider_response, prompt_tokens: 1000, completion_tokens: 100, cached_tokens: 400, cache_write_tokens: 50, reasoning_tokens: 25, total_tokens: 1100 } ] } }各字段含义如下字段含义node发起请求的 SkillSpector 分析器名称。request_kind调用形态如structured_output或chat_completion。provider脱敏后的 provider 标识永不包含 endpoint 或凭据。model优先取 provider 返回的模型标识缺失时取实际请求的模型。model_sourceprovider_response响应明确给出了可区分的解析后模型requested_model响应未提供或与客户端配置的回退模型不可区分。usage_source恒为provider_response。SkillSpector 从不发出估算用量记录。prompt_tokens归一化后的输入 token 总数包含cache 读取与 cache 写入。completion_tokensprovider 报告的输出 token 数。cached_tokenscache 读取的输入 token是prompt_tokens的子集。cache_write_tokenscache 创建的输入 token是prompt_tokens的子集。reasoning_tokensprovider 报告的推理 token 分区通常是 completion 用量的子集。total_tokensprovider 总量当 prompt 与 completion 两部分都已知时归一化为二者之和。计数器字段均为可选不同 provider/传输层暴露的细节粒度不同。字段值为0表示观测到真实的 0字段缺失则表示provider 没有暴露该计数器绝不能按 0 处理。模型来源Model Provenance语义model_source与usage_source回答的是两个不同问题usage_sourceprovider_response记录中所有 token 计数器都来自一次完成的 provider 响应。SkillSpector 从不依据 prompt 长度、本地 tokenizer 或分析器 token 预算来推导计费数字。model_sourceprovider_responseprovider 返回了与请求值可区分的合法模型标识。这是定价时最可靠的身份因为网关可能把别名路由到不同的已部署模型。model_sourcerequested_model响应有计数器但没有可独立验证的模型标识包括 LangChain 客户端在 provider 省略该字段时把配置的模型复制进响应元数据的情况。此时model就是 SkillSpector 实际请求的模型下游可以用于定价但应保留较弱来源的标记。请求模型的解析对每个分析器槽位独立进行优先级为SKILLSPECTOR_MODEL_SLOT如SKILLSPECTOR_MODEL_META_ANALYZER只影响meta_analyzer槽位SKILLSPECTOR_MODEL覆盖所有未单独覆盖的槽位当前 provider 对该槽位的默认模型当前 provider 的通用默认模型需要特别强调配置了槽位模型并不等于该请求真的执行了。只有存在对应的inference_usage记录才能证明 SkillSpector 收到了带计数器的 provider 响应。缓存与总 token 的归一化语义SkillSpector 把不同 provider 的差异归一化成统一的可加计费形态uncached prompt prompt_tokens - cached_tokens - cache_write_tokens total tokens prompt_tokens completion_tokensOpenAI 兼容的响应通常把 cache 读取 token 作为 prompt 内已包含的分区报告原生 Anthropic 响应则把普通输入、cache 读取、cache 创建分开报告。SkillSpector 对原生 Anthropic 的 cache 分区恰好加一次使两种响应形态下的prompt_tokens都保持全包含inclusive。在 Anthropic cache 创建的 TTL 详情存在时会被合并进cache_write_tokens由于 SkillSpector 目前不发送 prompt-cache 控制指令它不会在 5 分钟与 1 小时两个 cache 写入档位之间做选择——下游定价不得推断响应中不存在的 TTL。此外有两处不得重复加的纪律reasoning_tokens是诊断分区不得在completion_tokens上再叠加一次归一化后cache 读写不得再叠加到prompt_tokens上。源码级实现LangChain 回调采集器用量采集器InferenceUsageCollector实现于 src/skillspector/inference_usage.py它被设计成LangChain 回调处理器BaseCallbackHandler在调用时挂接。这一点对结构化输出至关重要解析器返回 Pydantic 对象时会丢弃携带 token 计数器的 provider 消息因此必须在on_llm_end钩子里先把计数器捞出来。核心逻辑包括线程安全的记录收集_records受threading.Lock保护snapshot()返回深拷贝列表保证可安全用于图状态graph-state序列化。非 LangChain 传输路径CLI 类 providerclaude_cli、codex_cli、gemini_cli等没有 LangChain 回调通道AgentCLIChatModel适配器通过invoke_with_usage在传输成功后、解析前调用collector.mark_response_received()显式标记见 src/skillspector/llm_utils.py。provider 标签稳定性provider_name()把 provider 类名映射到稳定标识如AnthropicProvider - anthropic、BedrockProvider - bedrock只含字母数字与._:/-等安全字符杜绝 endpoint/凭据泄露src/skillspector/inference_usage.py。多来源计数器解析_usage_record依次检查usage_metadata、response_metadata.usage、token_usage三种承载位置并对 Anthropic 的cache_read_input_tokens/cache_creation_input_tokens等原始字段做仅当标准化 prompt 缺失时才走原始模式的兼容处理。在分析器侧src/skillspector/llm_analyzer_base.py 中LLMAnalyzerBase构造时即通过new_inference_usage_collector建立采集器并按是否有response_schema决定request_kind为structured_output或chat_completion。报告侧src/skillspector/nodes/report.py 的_build_metadata调用sanitize_inference_usage做最终白名单净化后写入metadata.inference_usage。隐私与信任边界白名单净化src/skillspector/inference_usage.py 中的sanitize_inference_usage是报告的显式允许清单仅保留有界标签与非负 provider 计数器。记录中绝不包含prompt、completion、被分析的技能内容、凭据、请求头、endpoint URL、provider 请求 ID 或原始 provider 元数据。来源未知、标签非法、计数为负/无界、或没有任何计数器的记录都会被丢弃。同时官方文档明确要求把 JSON 报告当作不可信输入——下游在追加指标或套用价格前必须再次校验白名单字段与计数器范围。缺失用量与 fail-closed 集成metadata.inference_usage在 JSON 输出中永远是列表。空列表表示用量不可观测不等于没有跑 LLM、免费或token 数为 0。典型原因包括provider/CLI 传输层不暴露计数器、LLM 调用在收到响应前失败、或纯静态扫描。成本可观测性与安全门禁有效性是两个独立的决策。JSON 消费者应当要求可解析的顶层 JSON 对象将致命进程退出或execution_successful: false视为阻塞性校验错误通过analysis_completeness.ledger_exceptions暴露诊断信息对risk_assessment.recommendation应用自己的安全策略摄入每一条合法inference_usage记录——包括失败的 LLM 尝试保留下来的记录因为失败的扫描同样可能产生 provider 成本。两条铁律畸形遥测必须被丢弃但不能把一次本来合法的扫描变成失败反之合法用量遥测也绝不能让一次不完整的扫描通过安全门禁。当集成工具以静态模式重试失败的 LLM 扫描时应只摄入失败尝试的用量一次避免对重试载荷重复计数。下游交接Downstream Handoff设计意图的完整链路为SkillSpector provider 响应 - SkillSpector JSON 报告中的 metadata.inference_usage - 集成评估器校验并投影原始用量 - CI 发布带版本号的指标产物 - 仪表盘按生效日期定价目录展示成本评估器应保留provider、model、model_source、usage_source、分析器/请求身份以及每个观测到的 token 分区。货币换算属于下游——这样历史用量可以在目录修正后被重新定价而无需重写原始扫描产物。测试验证该特性的行为由 tests/unit/test_inference_usage.py 覆盖包括采集器的线程安全快照、多来源计数器解析、以及sanitize_inference_usage对畸形记录非法标签、负计数、无计数器的丢弃逻辑。此外 tests/nodes/test_report.py 验证了metadata.inference_usage在报告中的最终投影。特性二自动生成版本化发布说明v2.6.0 的另一项变更让 SkillSpector 的发布流程进入半自动化阶段按版本生成类似 CHANGELOG 的发布说明。每个版本对应一份docs/release/skillspector-version.md文件本文所解析的 docs/release/skillspector-2.6.0.md 即产物之一由发布驱动程序依据release/2.5.3 以来的public-safe commit subject 自动生成。模板结构v2.6.0 的发布说明展示了固定的段落骨架Summary本次发布相对基线版本release/2.5.3的公共变更数量Highlights核心亮点列表Added/Changed/Fixed/Security按类别组织的变更项本次仅Added有内容Breaking Changes and Migration/Deprecations迁移与弃用说明本次为空Validation说明发布说明的生成来源本版本为自 release/2.5.3 以来的 public-safe commit subject 自动生成与是否记录了额外校验命令Known Limitations已知限制本次为空References指向CHANGELOG.md。这种结构让 CI、Agent 与人类读者都能快速判断一个版本是否需要升级动作。在发布流水线中的落地版本化发布说明被 scripts/release/public/create_github_release.py 直接消费用于生成 GitHub Release 正文。该脚本的关键行为版本来源单一化从pyproject.toml读取project.version_project_version据此确定 tagvversion与发布说明路径docs/release/skillspector-version.md_release_notes_path见 scripts/release/public/create_github_release.py。发布说明文件不存在时直接报错退出。标签一致性保障_ensure_tag_at_target会把 tag 解析到 commit SHA递归剥离 annotated tag若已存在的 tag 指向与请求目标不一致的提交则拒绝创建 release避免标签漂移。幂等与补发_release_exists检查同名 release 是否已存在含 draft若存在_reconcile_existing_release会用--clobber覆盖上传资产并把 release 置为已发布--draftfalse实现重跑即补丁的发布体验。dry-run 安全预览--dry-run只打印将要执行的动作不触碰远端便于发布前的演练。配合上一节提到的public-safe commit subject约定整个发布说明生成链路可以表述为合并带标签的 PR → 提交信息自动沉淀到 CHANGELOG → 发布驱动程序按版本生成docs/release/skillspector-version.md→create_github_release.py校验 tag 后发布 Release。这一机制的代码级细节可在 scripts/release/public/create_github_release.py 与测试 tests/unit/test_create_github_release.py 中继续挖掘。小结与升级建议SkillSpector v2.6.0 的两个特性互为表里推理用量遥测让安全扫描的成本可观测、可审计、可重定价这是 2.7.0 继续加固归一化逻辑的前奏版本化发布说明自动生成则让版本升级决策与发布产物本身更加机器可读。如果你在 CI 中消费 JSON 报告建议从 v2.6.0 起直接摄入metadata.inference_usage中每条usage_sourceprovider_response的记录无需解析日志或估算 token把model_source一并保留以便网关路由别名导致模型切换时仍能正确计价记住空列表 ≠ 零成本用execution_successful与analysis_completeness.ledger_exceptions辅助判定扫描是否完整在按生效日期定价的目录就位前不要急于丢弃历史报告——原始契约字段足以支持事后重算。更多权威细节请参考 docs/INFERENCE_USAGE.md 与 CHANGELOG.md。【免费下载链接】SkillSpectorSecurity scanner for AI agent skills. Detect vulnerabilities, malicious patterns, security risks, prompt injection, data exfiltration, and supply-chain risks in Claude Code, Codex, and MCP skills before you install them.项目地址: https://gitcode.com/GitHub_Trending/sk/SkillSpector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考