{
  "$schema": "https://bestaiskill.com/schemas/agent-install/2.json",
  "skill": "product-launch-video",
  "built": "2026-10-26",
  "control_level": 4,
  "control_level_label": "L4 高权限",
  "capabilities": [
    "execute_command",
    "network",
    "write_file"
  ],
  "required_controls": {
    "agent": [
      "sandbox_recommended",
      "graded_authorization"
    ],
    "admin": [
      "approval_process",
      "rollback_support",
      "full_audit"
    ]
  },
  "evidence": [
    {
      "file": "scripts/",
      "summary": "Local script or command execution: node scripts/build-frame.mjs --preset <name> --hyperframes . (copies preset FRAM"
    },
    {
      "file": "网络端点",
      "summary": "Declared external network access: npx hyperframes capture \"<URL>\" (scrapes user-provided product websites: screenshots, DOM, tokens, assets)"
    },
    {
      "file": "本地工作目录",
      "summary": "File I/O and artifact output: videos/<project>/BRIEF.md, hyperframes.json, STORYBOARD.md, SCRIPT.md, audio_me"
    }
  ],
  "verification": {
    "method": "第二遍独立重读 + 反查（换角度抓第一遍的错）：① 全量文件清单（含隐藏）核对：30 个文件 = SKILL.md + 4 篇 references + 23 个 .mjs（含 13 个 .test.mjs）+ transitions.json；与 skills-manifest.json 的 files=30 一致，无脚本以外的资产。② token 扫描（URL / fetch / process.env / child_process / writeFile / API_KEY|TOKEN|SECRET|.env|Bearer）：URL 命中 5 处，逐条打开确认为——2 处装配脚本里写入产出 HTML 的 gsap CDN（带 SRI）、3 处测试夹具里的 data-* 属性字符串（非端点）；process.env 命中 2 处（HF_MEDIA_ENGINE / HF_TTS_PROVIDER，均为行为开关非凭证）；凭证关键词命中集中在 SKILL.md 的说明性文本（GEMINI_API_KEY/GOOGLE_API_KEY/.env/~/.heygen）而非脚本读取。③ 逐条打开关键脚本验证调用点：build-frame.mjs 头注释确证品牌重映射规则与动机；assemble-index.mjs 确证 spawnSync ffprobe/ffmpeg 的降级语义；audio.mjs 注释确证 'no HeyGen credential ⇒ skip' 的行为。④ 功能声明 vs 实际能力：description 的四类输入（URL/贴入脚本/brief/站点导览）与 Step 1 的输入分类逐条对应；未发现超出文本范围的承诺（skill 明确把设计/运动规则外派给 sibling 而不是自己宣称）。⑤ 与 faceless-explainer 对照：两者共享 5 个脚本名（audio/captions/transitions/frame-packets/assemble-index），但本 skill 独有 build-frame 的 preset+brand 重映射与 stage-assets，且多一个 capture 步骤——差异复核为真（faceless-explainer 明确 'Do **not** run `npx hyperframes capture`'）。",
    "second_pass": [
      {
        "item": "『外部资源』逐条回查调用点是否真实存在",
        "status": "ok",
        "detail": "hyperframes capture 命令原文在 Step 1；~/.heygen 与 HeyGen Audio API 在 Step 3.1 原文；GEMINI/GOOGLE/OpenRouter key 探测在 Step 1 原文；ffprobe/ffmpeg 在 assemble-index.mjs 的 ensureBgmCovers 内真实 spawnSync；gsap CDN 在 assemble-index.mjs:727 与 captions.mjs:480；media-use 的 prefs.mjs/recipe.mjs/heygen-tts.mjs 在 Step 0/3.1 原文。无一条属于推测。"
      },
      {
        "item": "凭证读取是否被夸大或漏报",
        "status": "ok",
        "detail": "脚本层（23 个 mjs）未发现任何读取 ~/.heygen 或 env key 的代码——凭证读取发生在 media-use / hyperframes CLI 侧，本 skill 只以文字指令调用它们。SKILL.md 同时明令不得把 key 写进 per-repo .env。判定为『授权链式凭证读取』而非本 skill 直读，橙色理由已按此措辞。"
      },
      {
        "item": "抓取失败是否真的硬停（有无隐藏的合成兜底）",
        "status": "ok",
        "detail": "Step 1 原文 'Do not manufacture a synthetic no-capture fallback after a failed URL capture.'；no-capture 路径被限定为『原始 brief 自带素材』或『用户在失败后明确改用提供的截图/brief』两种情形。未发现绕过路径。"
      },
      {
        "item": "验证：抓取/装配脚本是否有未声明的网络调用",
        "status": "ok",
        "detail": "对 23 个 mjs 做 fetch/axios/http.request/urllib 扫描 → 0 命中；唯一的对外引用是 HTML 模板字符串里的 CDN URL（浏览器侧加载）。脚本自身不发起 HTTP 请求，网络行为全在 hyperframes CLI 与 media-use 侧。"
      },
      {
        "item": "与同批 skill 的组内一致性（默认 provider/voice 与静音标记）",
        "status": "ok",
        "detail": "本 skill 与 faceless-explainer 都用 'Marcia (female) on HeyGen / am_michael on Kokoro' 作默认声线、都用 `music: none` 作静音标记；本 skill 额外要求传 `--provider <provider>`（因为它需要在 Step 0 就确定 provider 并在 Step 0 展示登录态语义）。差异有据，未见矛盾。"
      }
    ],
    "level": 1,
    "level_label": "V1 已固定",
    "commit": "b8328f957368713d288900957eb5bee0dca31dd9",
    "sha256": "744e4c9d6dfc554d7d170d2d4aba29aeba136c3ad44eddeff0b712195b71f1b1",
    "reviewed_by": null,
    "reviewed_at": null
  },
  "assessed_at": "2026-10-25",
  "method_version": "2.0",
  "mirror": {
    "archive": "https://skillpub.pages.dev/r2/v/2026-09-15/product-launch-video.tar.gz",
    "sha256": "744e4c9d6dfc554d7d170d2d4aba29aeba136c3ad44eddeff0b712195b71f1b1",
    "commit": "b8328f957368713d288900957eb5bee0dca31dd9"
  },
  "original": {
    "github": "https://github.com/heygen-com/hyperframes/tree/main/skills/product-launch-video",
    "path": "skills/product-launch-video",
    "commit": "b8328f957368713d288900957eb5bee0dca31dd9"
  }
}