fix: Add consolidation API to InstallStateManager#41
Open
colombod wants to merge 2 commits intomicrosoft:mainfrom
Open
fix: Add consolidation API to InstallStateManager#41colombod wants to merge 2 commits intomicrosoft:mainfrom
colombod wants to merge 2 commits intomicrosoft:mainfrom
Conversation
…(issue #193) Addresses microsoft/amplifier#193 - Consolidate install-state.json manipulation. Adds to InstallStateManager: - invalidate_modules_with_missing_deps() - Surgical invalidation checking each tracked module's dependencies against what's actually installed. Returns (checked, invalidated) tuple for reporting. - clear() - Convenience method for full state reset. Also enhances is_installed() to proactively verify dependencies are present, catching stale state after operations like `uv tool install --force` that wipe the venv but don't clear install-state.json. Module-level helpers added: - _extract_dependencies_from_pyproject() - Parses pyproject.toml for deps - _check_dependency_installed() - Uses importlib.metadata for reliable package detection with PEP 503 name normalization This enables amplifier-app-cli to use InstallStateManager instead of direct JSON manipulation in update_executor.py and reset.py. 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
Adds 35 tests covering: - _extract_dependencies_from_pyproject() helper - Simple deps, version specifiers, extras, namespace packages - Edge cases: nonexistent file, empty deps, invalid TOML - _check_dependency_installed() helper - Installed/uninstalled packages - Case insensitivity and hyphen/underscore normalization - InstallStateManager core functionality - Fresh state creation, loading existing state - Version mismatch and Python executable change handling - Invalid JSON recovery - is_installed() with dependency verification - Fingerprint matching - Dependency presence checking - Auto-invalidation on missing deps - mark_installed(), save(), invalidate() - New methods: clear(), invalidate_modules_with_missing_deps() - Surgical invalidation of modules with missing deps - Mixed module handling (valid + invalid) - Persistence verification 🤖 Generated with [Amplifier](https://github.com/microsoft/amplifier) Co-Authored-By: Amplifier <240397093+microsoft-amplifier@users.noreply.github.com>
Closed
2 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds consolidation API to
InstallStateManagerfor proper dependency verification and state management, enabling users stuck in stale install state to auto-recover.Problem
After operations like
uv tool install --forceoramplifier update, the Python venv is recreated butinstall-state.jsonpersists. This causes:Users had no automatic recovery path and had to manually delete
~/.amplifier/install-state.json.Solution
Three new capabilities added to
InstallStateManager:invalidate_modules_with_missing_deps()clear()is_installed()(enhanced)Evidence of Improvement
Before (stale state causes crash)
After (auto-healing on startup)
Shadow Test Results
invalidate_modules_with_missing_deps()APIUnit Test Coverage
API for app-cli Integration
This enables follow-up work in microsoft/amplifier#195 to replace direct JSON manipulation:
Files Changed
amplifier_foundation/modules/install_state.py- New API methods + dependency verificationtests/test_install_state.py- Comprehensive test coverage (new file)🤖 Generated with Amplifier