comfygit-core 0.4.1__tar.gz → 0.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/PKG-INFO +1 -1
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/pyproject.toml +1 -1
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/core/environment.py +2 -1
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/node_manager.py +69 -40
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_per_environment_manager.py +97 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_registry_node_update_empty_download_url.py +5 -12
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/.gitignore +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/.python-version +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/AGENTS.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/CLAUDE.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/LICENSE.txt +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/README.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/docs/architecture-deep-dive.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/docs/architecture.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/docs/knowledge/comfyui-node-loader-base-directories.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/docs/knowledge/model-tracking-system.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/docs/knowledge/node-resolution-behavior.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/docs/layer-hierarchy.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/docs/plans/uv-overlay-system.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/config_comparison.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/custom_node_scanner.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/git_change_parser.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/model_scanner.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/node_classifier.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/node_git_analyzer.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/ref_diff_analyzer.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/status_scanner.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/workflow_dependency_parser.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/caching/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/caching/api_cache.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/caching/base.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/caching/comfyui_cache.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/caching/custom_node_cache.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/caching/workflow_cache.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/clients/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/clients/civitai_client.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/clients/github_client.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/clients/registry_client.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/configs/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/configs/comfyui_builtin_nodes.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/configs/comfyui_models.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/configs/model_config.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/configs/package_config.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/constants.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/core/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/core/workspace.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/sageattention.toml +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/triton.toml +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/xformers.toml +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/factories/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/factories/environment_factory.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/factories/uv_factory.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/factories/workspace_factory.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/infrastructure/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/infrastructure/sqlite_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/integrations/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/integrations/uv_command.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/lifecycle/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/lifecycle/comfyui_readiness.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/lifecycle/switch_observer.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/logging/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/logging/logging_config.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/environment_git_orchestrator.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/environment_model_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/export_import_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/git_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/model_download_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/model_symlink_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/overlay_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/pyproject_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/pytorch_backend_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/system_node_symlink_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/user_content_symlink_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/uv_project_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/workflow_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/merging/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/merging/atomic_executor.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/merging/merge_validator.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/merging/semantic_merger.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/civitai.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/comfyui_builtin_versions.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/commit.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/dependency_resolution.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/environment.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/exceptions.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/manifest.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/materialization.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/merge_plan.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/node_mapping.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/overlay.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/protocols.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/readiness.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/ref_diff.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/registry.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/shared.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/sync.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/system.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/workflow.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/workflow_contract.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/workflow_execution.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/workspace_config.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/py.typed +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/repositories/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/repositories/comfyui_builtin_versions_repository.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/repositories/migrate_paths.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/repositories/model_repository.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/repositories/node_mappings_repository.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/repositories/workflow_repository.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/repositories/workspace_config_repository.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/resolvers/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/resolvers/global_node_resolver.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/resolvers/model_resolver.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/dependency_resolution_preview.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/environment_readiness.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/huggingface_url.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/import_analyzer.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/model_downloader.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/model_source_lookup.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/node_lookup_service.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/registry_data_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_analysis_service.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_execution.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_input.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_resolution_service.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/strategies/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/strategies/auto.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/strategies/confirmation.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/builtin_extractor.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/comfyui_ops.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/common.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/conflict_analyzer.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/conflict_parser.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/dependency_parser.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/dependency_probe.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/download.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/environment_cleanup.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/environment_lock.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/filesystem.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/folder_paths_extractor.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/git.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/input_signature.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/model_categories.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/model_loader_extractor.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/node_identity.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/pytorch.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/pytorch_prober.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/requirements.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/retry.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/symlink_utils.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/system_detector.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/uuid.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/uv_error_handler.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/version.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/utils/workflow_hash.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/validation/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/validation/resolution_tester.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/README.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/caching/TEST_REDUCTION_SUMMARY.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/caching/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/caching/test_workflow_cache.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/caching/test_workflow_cache_context_hash.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/conftest.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/fixtures/models/test_models.json +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/fixtures/workflows/checkpoint_loader_with_missing_model.json +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/fixtures/workflows/kjnodes_workflow.json +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/fixtures/workflows/simple_txt2img.json +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/fixtures/workflows/with_custom_node.json +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/fixtures/workflows/with_missing_model.json +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/fixtures/workflows/workflow_with_duplicates.json +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/fixtures/workflows/workflow_with_properties.json +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/fixtures/workflows/workflow_without_properties.json +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/helpers/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/helpers/model_index_builder.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/helpers/pyproject_assertions.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/helpers/workflow_builder.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_atomic_semantic_merge.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_auto_model_index_sync.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_branch_workflow_preservation.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_cache_invalidation_on_model_deletion.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_cache_node_version_invalidation.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_checkout_b_with_modified_workflow.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_commit_git_changes.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_commit_git_changes_SUMMARY.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_commit_history.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_context_aware_node_resolution.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_create_with_version_spec.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_custom_node_path_preservation.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_deferred_model_downloads.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_deleted_model_download_intent.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_dependency_group_removal.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_dev_node_git_references.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_dev_node_improvements.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_download_cleanup.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_download_intent_cache_invalidation.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_environment_basic.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_environment_branching.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_environment_create_progress.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_export_import.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_git_branching.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_git_import.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_git_pull_push.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_git_remote.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_git_subdirectory_import.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_import_auto_remote.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_import_comfyui_version_bug.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_import_preview.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_category_mismatch_detection.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_directory_switch.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_download_integration.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_index_mismatch_bug_SUMMARY.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_path_sync_detection.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_resolution_stale_directory.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_show_command.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_source_management.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_source_preservation.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_source_preservation_SUMMARY.md +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_model_source_removal.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_multiple_optional_group_failures.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_node_prune.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_node_version_replacement.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_opencv_conflict_resolution.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_optional_dependency_groups.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_overlay_e2e.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_overlay_git_integration.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_overlay_system_integration.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_package_config.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_pyproject_batch_writes.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_pytorch_reconfiguration.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_registry_git_fallback.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_repair_completion_marker.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_repair_model_download.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_repair_node_removal.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_repair_workflow.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_requirements_inline_comments_bug.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_runtime_restart_workflow_preservation.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_status_abstraction.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_status_uninstalled_nodes.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_workflow_caching_integration.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_workflow_commit_flow.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_workflow_deletion_cleanup.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_workflow_model_criticality_update.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_workflow_path_update_after_interactive_resolution.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_workflow_resolution_cleanup.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_workflow_resolution_pipeline.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_workflow_resolve_install.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_workflow_subgraph_resolution.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/test_public_api.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/analyzers/test_config_comparison.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/analyzers/test_custom_node_scanner.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/analyzers/test_ref_diff_analyzer.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/analyzers/test_status_scanner_disabled_nodes.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/analyzers/test_workflow_dependency_parser.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/caching/test_cache_base.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/caching/test_comfyui_cache.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/caching/test_custom_node_cache_refactor.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/caching/test_workspace_relative_caching.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/clients/test_civitai_client.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/clients/test_civitai_parsing.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/clients/test_github_releases.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/configs/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/configs/test_package_config.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/core/test_environment_operation_locking.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/core/test_environment_uninstalled_nodes.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/core/test_import_download_failures.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/core/test_import_no_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/core/test_reserved_environment_names.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/core/test_sync_node_dependency_provisioning.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/core/test_workspace_model_delete.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/factories/test_environment_factory_manager_install.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/lifecycle/test_comfyui_readiness.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_environment_model_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_export_import_overlays.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_git_manager_gitignore.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_git_manager_log_refs.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_model_index_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_model_short_hash.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_node_conflict_detection.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_node_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_overlay_fuzz.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_overlay_injection.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_overlay_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_pyproject_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_pyproject_schema_version.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_pytorch_backend_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_pytorch_injection.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_pytorch_stripping.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_sqlite_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_uv_no_build_isolation.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_workflow_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_workflow_node_cleanup.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/managers/test_workflow_status.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/merging/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/merging/test_atomic_executor.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/merging/test_merge_validator.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/merging/test_semantic_merger.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/models/test_comfyui_builtin_versions.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/models/test_overlay.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/models/test_ref_diff.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/models/test_workflow_dependencies.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/models/test_workflow_roundtrip.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/models/test_workflow_subgraph.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/resolvers/test_global_node_resolver_v2.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/resolvers/test_model_resolver.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_dependency_resolution_preview.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_environment_readiness.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_global_node_resolver.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_huggingface_url.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_import_analyzer.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_model_downloader.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_model_source_lookup.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_node_lookup_api_first.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_node_lookup_version_fallback.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_registry_data_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_scan_requirements_substitution.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_analysis_service.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_execution.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_input.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_resolution_service.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_add_dependencies_substitution.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_auto_strategies.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_builtin_extractor.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_dev_node_rename_detection.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_environment_py_dependencies.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_external_uv_cache.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_folder_paths_extractor.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_github_auth_config.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_github_url_installation.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_headless_import.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_materialization.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_minimal_schema_compatibility.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_model_config_dynamic_loading.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_model_downloader_errors.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_model_loader_extractor.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_model_repository_cleanup.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_model_symlink_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_node_callbacks.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_node_conflict_context.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_node_mappings_repository.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_node_resolution_context.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_unified_node_search.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_user_content_symlink_manager.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_uv_error_handling.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_uv_error_parser.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_workflow_manager_deduplication.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/test_workspace_config_resilience.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_conflict_analyzer.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_conflict_parser.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_dependency_parser.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_dependency_probe.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_environment_cleanup.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_git.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_input_signature.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_node_identity.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_pytorch.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_pytorch_prober.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_requirements.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_symlink_utils.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_uuid.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/unit/utils/test_version.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/utils/__init__.py +0 -0
- {comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/utils/test_workflow_hash.py +0 -0
|
@@ -456,10 +456,11 @@ class Environment:
|
|
|
456
456
|
# Check if already tracked
|
|
457
457
|
nodes = self.pyproject.nodes.get_existing()
|
|
458
458
|
if MANAGER_NODE_ID in nodes and not was_migration:
|
|
459
|
-
# Standard update flow
|
|
459
|
+
# Standard update flow, optionally pinned to a caller-selected version.
|
|
460
460
|
result = self.node_manager.update_node(
|
|
461
461
|
MANAGER_NODE_ID,
|
|
462
462
|
confirmation_strategy=confirmation_strategy,
|
|
463
|
+
target_version=None if version == "latest" else version,
|
|
463
464
|
)
|
|
464
465
|
|
|
465
466
|
# Cleanup legacy dependency group if present
|
|
@@ -149,24 +149,12 @@ class NodeManager:
|
|
|
149
149
|
|
|
150
150
|
return candidate
|
|
151
151
|
|
|
152
|
-
def
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
Args:
|
|
160
|
-
node_info: Pre-fetched node information from API
|
|
161
|
-
no_test: Skip dependency resolution testing
|
|
162
|
-
|
|
163
|
-
Returns:
|
|
164
|
-
NodeInfo of the installed node
|
|
165
|
-
|
|
166
|
-
Raises:
|
|
167
|
-
CDEnvironmentError: If installation fails
|
|
168
|
-
CDNodeConflictError: If dependency conflicts detected
|
|
169
|
-
"""
|
|
152
|
+
def _prepare_node_installation(
|
|
153
|
+
self,
|
|
154
|
+
node_info: NodeInfo,
|
|
155
|
+
no_test: bool = False,
|
|
156
|
+
) -> tuple[Path, NodePackage]:
|
|
157
|
+
"""Download, scan, and validate a node before mutating the environment."""
|
|
170
158
|
# Download to cache
|
|
171
159
|
cache_path = self.node_lookup.download_to_cache(node_info)
|
|
172
160
|
if not cache_path:
|
|
@@ -187,6 +175,28 @@ class NodeManager:
|
|
|
187
175
|
pkg_spec = node_package.requirements[0] if node_package.requirements else None
|
|
188
176
|
self._raise_dependency_conflict(node_package.name, test_result, package_spec=pkg_spec)
|
|
189
177
|
|
|
178
|
+
return cache_path, node_package
|
|
179
|
+
|
|
180
|
+
def _install_node_from_info(self, node_info: NodeInfo, no_test: bool = False) -> NodeInfo:
|
|
181
|
+
"""Install a node given a pre-fetched NodeInfo object.
|
|
182
|
+
|
|
183
|
+
This bypasses the lookup/cache layer and directly installs the node
|
|
184
|
+
using the provided node info. Useful for update operations where we've
|
|
185
|
+
already fetched fresh data from the API.
|
|
186
|
+
|
|
187
|
+
Args:
|
|
188
|
+
node_info: Pre-fetched node information from API
|
|
189
|
+
no_test: Skip dependency resolution testing
|
|
190
|
+
|
|
191
|
+
Returns:
|
|
192
|
+
NodeInfo of the installed node
|
|
193
|
+
|
|
194
|
+
Raises:
|
|
195
|
+
CDEnvironmentError: If installation fails
|
|
196
|
+
CDNodeConflictError: If dependency conflicts detected
|
|
197
|
+
"""
|
|
198
|
+
cache_path, node_package = self._prepare_node_installation(node_info, no_test=no_test)
|
|
199
|
+
|
|
190
200
|
# === BEGIN TRANSACTIONAL SECTION ===
|
|
191
201
|
# Snapshot state before any modifications for rollback
|
|
192
202
|
pyproject_snapshot = self.pyproject.snapshot()
|
|
@@ -1619,7 +1629,8 @@ class NodeManager:
|
|
|
1619
1629
|
self,
|
|
1620
1630
|
identifier: str,
|
|
1621
1631
|
confirmation_strategy: ConfirmationStrategy | None = None,
|
|
1622
|
-
no_test: bool = False
|
|
1632
|
+
no_test: bool = False,
|
|
1633
|
+
target_version: str | None = None,
|
|
1623
1634
|
) -> UpdateResult:
|
|
1624
1635
|
"""Update a node based on its source type.
|
|
1625
1636
|
|
|
@@ -1627,6 +1638,8 @@ class NodeManager:
|
|
|
1627
1638
|
identifier: Node identifier or name
|
|
1628
1639
|
confirmation_strategy: Strategy for confirming updates (None = auto-confirm)
|
|
1629
1640
|
no_test: Skip resolution testing (dev nodes only)
|
|
1641
|
+
target_version: Optional exact registry version to install. Registry
|
|
1642
|
+
nodes default to the registry's latest version when omitted.
|
|
1630
1643
|
|
|
1631
1644
|
Returns:
|
|
1632
1645
|
UpdateResult with details of what changed
|
|
@@ -1661,7 +1674,13 @@ class NodeManager:
|
|
|
1661
1674
|
if node_info.source == 'development':
|
|
1662
1675
|
return self._update_development_node(actual_identifier, node_info, no_test)
|
|
1663
1676
|
elif node_info.source == 'registry':
|
|
1664
|
-
return self._update_registry_node(
|
|
1677
|
+
return self._update_registry_node(
|
|
1678
|
+
actual_identifier,
|
|
1679
|
+
node_info,
|
|
1680
|
+
confirmation_strategy,
|
|
1681
|
+
no_test,
|
|
1682
|
+
target_version=target_version,
|
|
1683
|
+
)
|
|
1665
1684
|
elif node_info.source == 'git':
|
|
1666
1685
|
return self._update_git_node(actual_identifier, node_info, confirmation_strategy, no_test)
|
|
1667
1686
|
else:
|
|
@@ -1785,7 +1804,8 @@ class NodeManager:
|
|
|
1785
1804
|
identifier: str,
|
|
1786
1805
|
node_info: NodeInfo,
|
|
1787
1806
|
confirmation_strategy: ConfirmationStrategy,
|
|
1788
|
-
no_test: bool
|
|
1807
|
+
no_test: bool,
|
|
1808
|
+
target_version: str | None = None,
|
|
1789
1809
|
) -> UpdateResult:
|
|
1790
1810
|
"""Update registry node to latest version with atomic rollback on failure."""
|
|
1791
1811
|
result = UpdateResult(node_name=node_info.name, source='registry')
|
|
@@ -1804,7 +1824,7 @@ class NodeManager:
|
|
|
1804
1824
|
result.message = "No updates available (registry unavailable)"
|
|
1805
1825
|
return result
|
|
1806
1826
|
|
|
1807
|
-
latest_version = registry_node.latest_version.version
|
|
1827
|
+
latest_version = target_version or registry_node.latest_version.version
|
|
1808
1828
|
current_version = node_info.version or "unknown"
|
|
1809
1829
|
|
|
1810
1830
|
if latest_version == current_version:
|
|
@@ -1816,6 +1836,24 @@ class NodeManager:
|
|
|
1816
1836
|
result.message = "Update cancelled by user"
|
|
1817
1837
|
return result
|
|
1818
1838
|
|
|
1839
|
+
# Fetch complete install metadata and prepare the replacement before
|
|
1840
|
+
# removing the old manifest entry. This is especially important for
|
|
1841
|
+
# comfygit-manager because removing its dependency group can uninstall
|
|
1842
|
+
# the running comfygit-core package from disk mid-update.
|
|
1843
|
+
complete_version = self.node_lookup.registry_client.install_node(
|
|
1844
|
+
node_info.registry_id,
|
|
1845
|
+
latest_version
|
|
1846
|
+
)
|
|
1847
|
+
|
|
1848
|
+
if not complete_version:
|
|
1849
|
+
raise CDEnvironmentError(
|
|
1850
|
+
f"Failed to get install metadata for '{node_info.name}' version {latest_version}"
|
|
1851
|
+
)
|
|
1852
|
+
|
|
1853
|
+
registry_node.latest_version = complete_version
|
|
1854
|
+
fresh_node_info = NodeInfo.from_registry_node(registry_node)
|
|
1855
|
+
cache_path, node_package = self._prepare_node_installation(fresh_node_info, no_test=no_test)
|
|
1856
|
+
|
|
1819
1857
|
# === ATOMIC UPDATE WITH ROLLBACK ===
|
|
1820
1858
|
# Preserve old node by disabling it instead of removing
|
|
1821
1859
|
node_path = self.custom_nodes_path / node_info.name
|
|
@@ -1831,27 +1869,18 @@ class NodeManager:
|
|
|
1831
1869
|
shutil.move(node_path, disabled_path)
|
|
1832
1870
|
logger.debug(f"Disabled old version of '{node_info.name}'")
|
|
1833
1871
|
|
|
1834
|
-
# STEP 2: Remove old node from tracking
|
|
1872
|
+
# STEP 2: Remove old node from tracking. Do not sync here; the
|
|
1873
|
+
# replacement package has already been prepared and will be synced
|
|
1874
|
+
# in the same transaction after the new manifest entry is written.
|
|
1835
1875
|
self.pyproject.nodes.remove(identifier)
|
|
1836
|
-
self._sync_uv(quiet=True, all_groups=True, pytorch_manager=self.pytorch_manager)
|
|
1837
|
-
|
|
1838
|
-
# STEP 3: Get complete version data with downloadUrl from install endpoint
|
|
1839
|
-
complete_version = self.node_lookup.registry_client.install_node(
|
|
1840
|
-
node_info.registry_id,
|
|
1841
|
-
latest_version
|
|
1842
|
-
)
|
|
1843
|
-
|
|
1844
|
-
if complete_version:
|
|
1845
|
-
# Replace incomplete version data with complete version
|
|
1846
|
-
registry_node.latest_version = complete_version
|
|
1847
1876
|
|
|
1848
|
-
#
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
self.
|
|
1877
|
+
# STEP 3: Install the prepared replacement and sync once.
|
|
1878
|
+
shutil.copytree(cache_path, node_path, dirs_exist_ok=True)
|
|
1879
|
+
logger.info(f"Installed node '{fresh_node_info.name}' to {node_path}")
|
|
1880
|
+
self.add_node_package(node_package)
|
|
1881
|
+
self._sync_uv(quiet=True, all_groups=True, pytorch_manager=self.pytorch_manager)
|
|
1853
1882
|
|
|
1854
|
-
# STEP
|
|
1883
|
+
# STEP 4: Success - delete old disabled version
|
|
1855
1884
|
if disabled_path.exists():
|
|
1856
1885
|
rmtree(disabled_path)
|
|
1857
1886
|
logger.debug(f"Deleted old version of '{node_info.name}'")
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/tests/integration/test_per_environment_manager.py
RENAMED
|
@@ -230,6 +230,103 @@ class TestUpdateManager:
|
|
|
230
230
|
updated = test_env.pyproject.load()
|
|
231
231
|
assert "headless" not in updated.get("tool", {}).get("comfygit", {})
|
|
232
232
|
|
|
233
|
+
def test_update_manager_prepares_replacement_before_removing_manifest(
|
|
234
|
+
self, test_env, tmp_path, monkeypatch
|
|
235
|
+
):
|
|
236
|
+
"""Manager updates must not uninstall core before staging the replacement."""
|
|
237
|
+
from comfygit_core.models.registry import RegistryNodeInfo, RegistryNodeVersion
|
|
238
|
+
from comfygit_core.models.shared import NodeInfo
|
|
239
|
+
|
|
240
|
+
current = NodeInfo(
|
|
241
|
+
name="comfygit-manager",
|
|
242
|
+
version="0.1.1",
|
|
243
|
+
source="registry",
|
|
244
|
+
registry_id="comfygit-manager",
|
|
245
|
+
repository="https://github.com/comfygit-ai/comfygit-manager",
|
|
246
|
+
download_url="https://cdn.comfy.org/akatz/comfygit-manager/0.1.1/node.zip",
|
|
247
|
+
)
|
|
248
|
+
group_name = test_env.pyproject.nodes.generate_group_name(current, "comfygit-manager")
|
|
249
|
+
|
|
250
|
+
config = test_env.pyproject.load()
|
|
251
|
+
config.setdefault("tool", {}).setdefault("comfygit", {}).setdefault("nodes", {})
|
|
252
|
+
config["tool"]["comfygit"]["nodes"]["comfygit-manager"] = {
|
|
253
|
+
"name": current.name,
|
|
254
|
+
"version": current.version,
|
|
255
|
+
"source": current.source,
|
|
256
|
+
"registry_id": current.registry_id,
|
|
257
|
+
"repository": current.repository,
|
|
258
|
+
"download_url": current.download_url,
|
|
259
|
+
}
|
|
260
|
+
config.setdefault("dependency-groups", {})[group_name] = ["comfygit-core==0.4.0"]
|
|
261
|
+
test_env.pyproject.save(config)
|
|
262
|
+
|
|
263
|
+
manager_path = test_env.comfyui_path / "custom_nodes" / "comfygit-manager"
|
|
264
|
+
manager_path.mkdir(parents=True)
|
|
265
|
+
(manager_path / "__init__.py").write_text("# manager 0.1.1")
|
|
266
|
+
|
|
267
|
+
cache_path = tmp_path / "cache" / "comfygit-manager-0.1.2"
|
|
268
|
+
cache_path.mkdir(parents=True)
|
|
269
|
+
(cache_path / "__init__.py").write_text("# manager 0.1.2")
|
|
270
|
+
|
|
271
|
+
registry_node = RegistryNodeInfo(
|
|
272
|
+
id="comfygit-manager",
|
|
273
|
+
name="comfygit-manager",
|
|
274
|
+
description="ComfyGit Manager",
|
|
275
|
+
repository="https://github.com/comfygit-ai/comfygit-manager",
|
|
276
|
+
latest_version=RegistryNodeVersion(
|
|
277
|
+
changelog="",
|
|
278
|
+
dependencies=[],
|
|
279
|
+
deprecated=False,
|
|
280
|
+
id="manager-v0.1.2",
|
|
281
|
+
version="0.1.2",
|
|
282
|
+
download_url="",
|
|
283
|
+
),
|
|
284
|
+
)
|
|
285
|
+
install_version = RegistryNodeVersion(
|
|
286
|
+
changelog="",
|
|
287
|
+
dependencies=[],
|
|
288
|
+
deprecated=False,
|
|
289
|
+
id="manager-v0.1.2",
|
|
290
|
+
version="0.1.2",
|
|
291
|
+
download_url="https://cdn.comfy.org/akatz/comfygit-manager/0.1.2/node.zip",
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
def assert_manifest_still_present(_node_info):
|
|
295
|
+
nodes = test_env.pyproject.nodes.get_existing()
|
|
296
|
+
groups = test_env.pyproject.load().get("dependency-groups", {})
|
|
297
|
+
assert "comfygit-manager" in nodes
|
|
298
|
+
assert group_name in groups
|
|
299
|
+
return cache_path
|
|
300
|
+
|
|
301
|
+
monkeypatch.setattr(test_env.pytorch_manager, "ensure_backend", lambda *_args, **_kwargs: "cu121")
|
|
302
|
+
monkeypatch.setattr(
|
|
303
|
+
test_env.node_lookup,
|
|
304
|
+
"get_node",
|
|
305
|
+
lambda _identifier: NodeInfo(
|
|
306
|
+
name="comfygit-manager",
|
|
307
|
+
version="0.1.2",
|
|
308
|
+
source="registry",
|
|
309
|
+
registry_id="comfygit-manager",
|
|
310
|
+
),
|
|
311
|
+
)
|
|
312
|
+
monkeypatch.setattr(test_env.node_lookup.registry_client, "get_node", lambda _node_id: registry_node)
|
|
313
|
+
monkeypatch.setattr(
|
|
314
|
+
test_env.node_lookup.registry_client,
|
|
315
|
+
"install_node",
|
|
316
|
+
lambda _node_id, _version: install_version,
|
|
317
|
+
)
|
|
318
|
+
monkeypatch.setattr(test_env.node_lookup, "download_to_cache", assert_manifest_still_present)
|
|
319
|
+
monkeypatch.setattr(test_env.node_lookup, "scan_requirements", lambda _path, **_kwargs: [])
|
|
320
|
+
monkeypatch.setattr(test_env.node_manager, "_sync_uv", lambda **_kwargs: None)
|
|
321
|
+
|
|
322
|
+
result = test_env.update_manager(version="0.1.2")
|
|
323
|
+
|
|
324
|
+
assert result.changed is True
|
|
325
|
+
assert result.old_version == "0.1.1"
|
|
326
|
+
assert result.new_version == "0.1.2"
|
|
327
|
+
assert test_env.pyproject.nodes.get_existing()["comfygit-manager"].version == "0.1.2"
|
|
328
|
+
assert (manager_path / "__init__.py").read_text() == "# manager 0.1.2"
|
|
329
|
+
|
|
233
330
|
|
|
234
331
|
class TestEnvironmentCreation:
|
|
235
332
|
"""Tests for new environment creation with per-environment manager."""
|
|
@@ -21,15 +21,12 @@ from comfygit_core.strategies.confirmation import AutoConfirmStrategy
|
|
|
21
21
|
class TestRegistryNodeUpdateEmptyDownloadUrl:
|
|
22
22
|
"""Test registry node updates when API returns empty downloadUrl."""
|
|
23
23
|
|
|
24
|
-
def
|
|
25
|
-
"""Test update fails when
|
|
24
|
+
def test_update_fails_clearly_when_install_metadata_is_unavailable(self, test_env):
|
|
25
|
+
"""Test update fails clearly when complete install metadata is unavailable.
|
|
26
26
|
|
|
27
27
|
Given: Node v1.8.0 is installed with valid downloadUrl
|
|
28
|
-
When: User updates and registry
|
|
29
|
-
Then: Update should fail
|
|
30
|
-
|
|
31
|
-
This test documents the BUG - it expects failure.
|
|
32
|
-
After fix, this test will need to be updated to expect success.
|
|
28
|
+
When: User updates and the registry install endpoint has no v2.1.0 payload
|
|
29
|
+
Then: Update should fail before mutating the installed node.
|
|
33
30
|
"""
|
|
34
31
|
# ARRANGE: Install initial version 1.8.0 with valid downloadUrl
|
|
35
32
|
node_info_v1_8_0 = NodeInfo(
|
|
@@ -81,14 +78,10 @@ class TestRegistryNodeUpdateEmptyDownloadUrl:
|
|
|
81
78
|
|
|
82
79
|
strategy = AutoConfirmStrategy()
|
|
83
80
|
|
|
84
|
-
# ACT & ASSERT: Update should fail because downloadUrl is empty
|
|
85
|
-
# The current implementation will try to fall back to git clone with version "2.1.0" as tag
|
|
86
|
-
# which will fail if the repo has no tags
|
|
87
81
|
with pytest.raises(CDEnvironmentError) as exc_info:
|
|
88
82
|
test_env.node_manager.update_node("test-node", confirmation_strategy=strategy, no_test=True)
|
|
89
83
|
|
|
90
|
-
|
|
91
|
-
assert "Failed to update node" in str(exc_info.value)
|
|
84
|
+
assert "Failed to get install metadata" in str(exc_info.value)
|
|
92
85
|
|
|
93
86
|
# Verify old node is preserved after failed update (atomic rollback)
|
|
94
87
|
nodes = test_env.pyproject.nodes.get_existing()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/docs/knowledge/comfyui-node-loader-base-directories.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/config_comparison.py
RENAMED
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/custom_node_scanner.py
RENAMED
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/git_change_parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/node_git_analyzer.py
RENAMED
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/ref_diff_analyzer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/configs/comfyui_builtin_nodes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/sageattention.toml
RENAMED
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/triton.toml
RENAMED
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/xformers.toml
RENAMED
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/factories/environment_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/factories/workspace_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/infrastructure/sqlite_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/lifecycle/comfyui_readiness.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/environment_model_manager.py
RENAMED
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/export_import_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/model_download_manager.py
RENAMED
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/model_symlink_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/pytorch_backend_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/managers/uv_project_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/comfyui_builtin_versions.py
RENAMED
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/models/dependency_resolution.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/repositories/model_repository.py
RENAMED
|
File without changes
|
|
File without changes
|
{comfygit_core-0.4.1 → comfygit_core-0.4.2}/src/comfygit_core/repositories/workflow_repository.py
RENAMED
|
File without changes
|