mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-09-08 10:49:09 +02:00
* fix(claude_desktop): install the complete Codex package, not just the executable Since codex-cli 0.147.0 the CLI delegates every shell and file-read tool call to a companion codex-code-mode-host binary that it looks up next to its own executable. 81-codex_cli.sh downloaded the codex-<target>.tar.gz release asset, which contains only the codex executable, so that binary was never installed and every tool call failed with "failed to spawn code-mode host ...: No such file or directory" while the run still exited 0. Download the codex-package-<target>.tar.gz asset instead — the complete package tree upstream's own installer uses — and install all of it into the existing /data/codex prefix, which already satisfies Codex's layout contract. Make the "already installed" test require the code-mode host and the package manifest so existing incomplete installs repair themselves, and report layout completeness in claude-tools-doctor.sh. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(claude_desktop): advertise Codex only when its package tree is complete 82-claude_tools.sh registers the Codex MCP server whenever the launcher at /data/codex/bin/codex is executable and re-checks nothing else, while the launcher and the package tree persist in /data independently of each other. Three paths therefore reached that launcher next to an install that cannot run a tool call: a boot that cannot reach the release metadata and keeps a pre-existing install missing the code-mode host or the manifest, the same boot finding a stamp-less tree left by an interrupted replacement, and a launcher surviving from an earlier boot after the install was dropped. All three reproduced against the real script with stubbed bashio/s6 and an unreachable metadata endpoint. Define completeness once (executable, code-mode host, package manifest, version stamp) and gate the launcher on it, removing the launcher and the /usr/local/bin symlink when it does not hold. Nothing else is deleted, so a later boot completes the install without another download or another login. The doctor's layout check now includes the stamp for the same reason. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(claude_desktop): install the Codex package tree by position, not by name The whole reason for downloading the 118 MB codex-package asset instead of the lone executable is that a helper Codex needs must not be left out — that is the bug this branch fixes. install_codex_package still enumerated the five paths release 0.148.0 happens to ship, so a helper added by a future release would be downloaded, extracted and then discarded, failing exactly the way the missing code-mode host does today. Verified against the extracted function: with a staged tree carrying an unknown bin/ helper and an unknown top-level directory, the previous code installed neither. Move whatever the archive contains instead: every staged entry beside bin/ into /data/codex, every staged bin/ entry except the entrypoint into /data/codex/bin, then the entrypoint to codex-real last, so the ordering guarantee the stamp relies on is unchanged. Only paths the archive actually contains are touched, because /data/codex also holds this install's staging directory, and the existing launcher is skipped by name while the version stamp is a dot file that no glob matches. Removing each destination before moving onto it also drops files an older release left behind. Exercised with a scaffold around the extracted function: fresh install with unknown helpers present, upgrade over an existing install with a stale helper and a launcher to preserve, a minimal package with no optional directories, and an unwritable prefix to confirm failure is reported rather than swallowed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * docs(claude_desktop): scope the two deletion claims to what the code does Both overstated. install_codex_package() replaces every path the new release ships, but does not prune a path upstream stops shipping, so "files an older release left behind are removed with it" was wrong for exactly that case; and "nothing is deleted beyond the launcher" read as if the /usr/local/bin/codex symlink named in the previous sentence survived, when it is removed with it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>