打包契约
cross_packager.py不仅仅是导出辅助工具。它验证平台契约,并从compile_skill.py嵌入目标编译器输出。
当前目标
openaiclaudegeneric
契约形态
每个目标契约定义:
- 必需的输出字段
- 必需的输出文件
- 来自中性源元数据的字段映射
- 来自 Skill IR 的编译契约
- 目标转换元数据,包括生成的文件和不支持的特性
- 可移植执行元数据
- 信任边界元数据
- 来自信任报告的权限契约元数据
- 目标特定的权限表示和审查者备注
- 针对原生表面、激活策略、资源策略、脚本策略、权限强制、安装范围、审查工件和回退行为的目标原生行为契约
- 降级策略元数据
失败处理
当提供了--expectations时:
- 缺失必需文件导致退出码
2 - 缺失必需字段导致退出码
2 - 验证失败在 JSON 报告中输出
打包之后,针对生成的包目录运行scripts/probe_runtime_permissions.py。打包创建权限元数据;运行时权限探测验证每个目标适配器是否暴露了契约、目标特定表示、原生强制标志、操作者备注和残余元数据回退风险。
事实来源
当 Skill IR 存在时,平台中立的语义源是 Skill IR:
reports/skill-ir.jsonskill-ir/examples/<skill-name>.json
结构验证来源仍然是:
SKILL.mdagents/interface.yaml
目标特定的元数据通过scripts/compile_skill.py生成,然后在打包时嵌入。适配器必须携带compiler、compiled_contract、permission_contract、target_permission_contract、target_native_contract、target_transform、ir_source、ir_schema_version、job_to_be_done、semantic_contract和semantic_parity,这样审查者就能看到目标是否保留了核心技能语义,还是回退到了仅 frontmatter 的元数据。
可移植性模型
打包层现在从中性源保留四种可移植语义:
- 激活
- 执行
- 信任
- 权限
- 降级
- 来自 Skill IR 的平台中立技能语义
- 针对激活、资源、脚本、权限强制、安装范围、审查工件和回退行为的目标特定原生行为备注
- 针对生成文件、适配器模式、保留语义和不支持特性的目标特定编译备注
这意味着可移植性不仅是"它能导出文件吗?“,还包括"导出的目标是否保留了源包的激活和安全假设?”