{"record":{"id":"99bbe0c44df2c647","repo":"BigPizzaV3/CodexPlusPlus","slug":"dream-skin-99bbe0","errorCode":null,"errorMessage":"不支持的 Dream Skin 主题协议版本","messagePattern":"不支持的 Dream Skin 主题协议版本","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/dream_skin_package.rs","lineNumber":909,"sourceCode":"        bail!(\"主题包背景图片内容与扩展名不一致：{name}\");\n    }\n    Ok(())\n}\n\nfn file_limit(name: &str) -> usize {\n    match name {\n        \"manifest.json\" => MANIFEST_LIMIT,\n        \"theme.json\" => THEME_LIMIT,\n        \"theme.css\" => CSS_LIMIT,\n        \"LICENSE.txt\" => LICENSE_LIMIT,\n        \"manifest.sig\" => SIGNATURE_LIMIT,\n        _ => IMAGE_LIMIT,\n    }\n}\n\nfn validate_manifest(manifest: &DreamSkinPackageManifest, platform: &str) -> anyhow::Result<()> {\n    if manifest.package_version != 1 || manifest.skin_api_version != 1 {\n        bail!(\"不支持的 Dream Skin 主题协议版本\");\n    }\n    if manifest.theme_id.chars().count() < 3\n        || manifest.theme_id.chars().count() > 64\n        || !valid_theme_id(&manifest.theme_id)\n    {\n        bail!(\"manifest.themeId 无效\");\n    }\n    if !valid_semver(&manifest.version) || !valid_semver(&manifest.min_client_version) {\n        bail!(\"manifest 版本号无效\");\n    }\n    if compare_semver(&manifest.min_client_version, \"1.5.12\").is_gt() {\n        bail!(\n            \"主题包需要更新版本的 Dream Skin 协议：{}\",\n            manifest.min_client_version\n        );\n    }\n    if manifest.platforms.is_empty()\n        || manifest.platforms.len() > 2","sourceCodeStart":891,"sourceCodeEnd":927,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/f2074595a281bc057525c748175c8eb9805b0673/crates/codex-plus-core/src/dream_skin_package.rs#L891-L927","documentation":"Thrown by validate_manifest when manifest.package_version or manifest.skin_api_version is not exactly 1 — the only Dream Skin package/skin protocol generation this client understands. It fires before any field-level checks, so it indicates a package from a newer (or simply alien) protocol; the offending inputs are the two version integers in manifest.json.","triggerScenarios":"Thrown at crates/codex-plus-core/src/dream_skin_package.rs:909 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["升级 Codex++ 到支持该协议版本的发行版","使用 package_version=1、skin_api_version=1 的主题包","联系主题作者更新主题包版本"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f2074595a281bc057525c748175c8eb9805b0673","analyzedAt":"2026-08-23T12:52:24.489Z","contentChangedAt":"2026-08-23T12:52:24.489Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}