{"record":{"id":"b85cf42362c2618f","repo":"BigPizzaV3/CodexPlusPlus","slug":"missing-cached-plugin-plugin-for-openai-bundled","errorCode":null,"errorMessage":"missing cached {plugin} plugin for openai-bundled marketplace","messagePattern":"missing cached (.+?) plugin for openai-bundled marketplace","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/codex-plus-core/src/computer_use_guard.rs","lineNumber":639,"sourceCode":"    });\n    candidates.into_iter().next()\n}\n\n#[cfg(windows)]\nfn build_marketplace_from_cache(home: &Path, staging: &Path) -> anyhow::Result<()> {\n    let plugins_dir = staging.join(\"plugins\");\n    std::fs::create_dir_all(staging.join(\".agents\").join(\"plugins\"))?;\n    std::fs::create_dir_all(&plugins_dir)?;\n    std::fs::write(\n        staging\n            .join(\".agents\")\n            .join(\"plugins\")\n            .join(\"marketplace.json\"),\n        bundled_marketplace_json().as_bytes(),\n    )?;\n    for plugin in BUNDLED_MARKETPLACE_PLUGINS {\n        let Some(source) = latest_cache_plugin_version(home, plugin) else {\n            anyhow::bail!(\"missing cached {plugin} plugin for openai-bundled marketplace\");\n        };\n        copy_dir_recursive(&source, &plugins_dir.join(plugin))?;\n    }\n    Ok(())\n}\n\n#[cfg(windows)]\nfn bundled_marketplace_json() -> String {\n    let plugins = [\n        (\"browser\", \"Engineering\"),\n        (\"chrome\", \"Productivity\"),\n        (\"computer-use\", \"Productivity\"),\n        (\"latex\", \"Research\"),\n    ]\n    .into_iter()\n    .map(|(name, category)| {\n        serde_json::json!({\n            \"name\": name,","sourceCodeStart":621,"sourceCodeEnd":657,"githubUrl":"https://github.com/BigPizzaV3/CodexPlusPlus/blob/1f431ae49b57b3055e0e6845ba6156c6b4232b4d/crates/codex-plus-core/src/computer_use_guard.rs#L621-L657","documentation":"On Windows, staging the openai-bundled marketplace (crates/codex-plus-core/src/computer_use_guard.rs:639) does not ship plugin files itself — it copies each plugin in BUNDLED_MARKETPLACE_PLUGINS from the local cache via latest_cache_plugin_version(home, plugin). If no cached version of any listed plugin exists, the guard bails with 'missing cached <plugin> plugin for openai-bundled marketplace' before completing the staging directory.","triggerScenarios":"Running the computer-use guard on Windows before Codex has ever downloaded the required plugins (fresh install, always-offline machine), or after the plugin cache directory was cleared/deleted; cache layout change between versions can also make lookups miss.","commonSituations":"Fresh Windows install where the user enables computer-use features before the first successful online Codex session; disk-cleanup tools purging the cache; CI environments with a pristine home directory; version upgrades that moved/renamed cached plugin directories.","solutions":["Run Codex once while online so it downloads and caches the required plugins, then re-run the guard/staging","Check the plugin cache directory under the home dir for the expected plugin version subfolders and re-populate it if a cleanup tool removed them","Verify you are on current Codex++/Codex versions — a cache-layout change on either side makes old caches unfindable","If the machine must stay offline, pre-seed the cache from another machine with the same plugin versions"],"exampleFix":"# before: fresh install, guard runs offline, cache is empty\n# -> missing cached computer-use plugin for openai-bundled marketplace\n\n# after: let Codex populate the plugin cache once, then re-run\n# 1) launch Codex with network access and trigger plugin install\n# 2) re-run the guard / manager action; staging now finds the cached plugins","handlingStrategy":"validation","validationCode":"// Before invoking the guard on Windows, confirm cached plugins exist\nfor plugin in [\"browser\", \"chrome\", \"computer-use\"] { // mirror BUNDLED_MARKETPLACE_PLUGINS\n    ensure!(latest_cache_plugin_version(home, plugin).is_some(),\n        \"plugin '{plugin}' not cached — run Codex online once first\");\n}","typeGuard":"fn bundled_plugins_cached(home: &std::path::Path) -> bool {\n    BUNDLED_MARKETPLACE_PLUGINS.iter()\n        .all(|p| latest_cache_plugin_version(home, p).is_some())\n}","tryCatchPattern":"match stage_bundled_marketplace(home) {\n    Ok(()) => Ok(()),\n    Err(e) if e.to_string().contains(\"missing cached\") => {\n        // expected on fresh/offline installs — degrade gracefully and guide the user\n        eprintln!(\"run Codex once online to populate the plugin cache, then retry\");\n        Err(e)\n    }\n    Err(e) => Err(e),\n}","preventionTips":["Populate the plugin cache with one online Codex session before enabling computer-use features","Exclude the plugin cache directory from disk-cleanup tools","After version upgrades, re-verify cached plugin layout before running the guard","On offline machines, pre-seed the cache from an identical online install"],"tags":["windows","cache","marketplace","plugins","computer-use-guard","offline"],"backgroundTag":"missing-cache-files","analyzedSha":"1f431ae49b57b3055e0e6845ba6156c6b4232b4d","analyzedAt":"2026-08-16T20:54:18.598Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}