comfygit-core 0.5.0__tar.gz → 0.7.0__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.5.0/README.md → comfygit_core-0.7.0/PKG-INFO +53 -0
- comfygit_core-0.5.0/PKG-INFO → comfygit_core-0.7.0/README.md +31 -19
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/docs/architecture.md +5 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/pyproject.toml +8 -4
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/model_scanner.py +7 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/node_classifier.py +1 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/node_git_analyzer.py +1 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/status_scanner.py +51 -14
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/unmanaged_comfyui_analyzer.py +6 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/caching/comfyui_cache.py +28 -6
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/caching/custom_node_cache.py +13 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/caching/workflow_cache.py +1 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/clients/civitai_client.py +6 -5
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/configs/package_config.py +1 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/constants.py +7 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/core/environment.py +231 -54
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/core/workspace.py +222 -31
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/factories/environment_factory.py +39 -9
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/factories/workspace_factory.py +46 -21
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/integrations/uv_command.py +1 -1
- comfygit_core-0.7.0/src/comfygit_core/lifecycle/runtime_control.py +186 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/lifecycle/switch_observer.py +76 -4
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/environment_git_orchestrator.py +32 -59
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/environment_model_manager.py +80 -3
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/export_import_manager.py +53 -3
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/git_manager.py +3 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/model_symlink_manager.py +2 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/node_manager.py +67 -9
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/overlay_manager.py +1 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/pytorch_backend_manager.py +1 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/user_content_symlink_manager.py +2 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/uv_project_manager.py +71 -7
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/workflow_manager.py +64 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/disposable_project.py +15 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/models.py +9 -3
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/pyproject_manifest.py +39 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/store.py +0 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/uv_config.py +3 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/workflows.py +1 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/merging/atomic_executor.py +1 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/merging/semantic_merger.py +8 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/__init__.py +26 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/build_readiness.py +6 -0
- comfygit_core-0.7.0/src/comfygit_core/models/credentials.py +71 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/environment.py +28 -7
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/exceptions.py +12 -5
- comfygit_core-0.7.0/src/comfygit_core/models/lifecycle.py +346 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/manifest.py +23 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/overlay.py +14 -6
- comfygit_core-0.7.0/src/comfygit_core/models/resource_inventory.py +236 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/shared.py +36 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/unmanaged_import.py +1 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/workflow.py +38 -18
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/workspace_config.py +4 -1
- comfygit_core-0.7.0/src/comfygit_core/repositories/credential_store.py +62 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/repositories/workspace_config_repository.py +100 -80
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/runtime.py +20 -0
- comfygit_core-0.7.0/src/comfygit_core/security.py +21 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/build_readiness.py +26 -4
- comfygit_core-0.7.0/src/comfygit_core/services/credential_service.py +201 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/dependency_resolution_preview.py +1 -0
- comfygit_core-0.7.0/src/comfygit_core/services/environment_lifecycle.py +1037 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/environment_readiness.py +4 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/environment_sync_coordinator.py +12 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/import_analyzer.py +4 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/model_downloader.py +35 -7
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/model_source_lookup.py +1 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/node_lookup_service.py +91 -6
- comfygit_core-0.7.0/src/comfygit_core/services/resource_inventory.py +514 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/unmanaged_environment_import.py +5 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_execution.py +35 -5
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_file_store.py +35 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_manifest_reconciler.py +180 -31
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_model_download_coordinator.py +136 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_resolution_fixer.py +1 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/comfyui_ops.py +99 -7
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/common.py +15 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/conflict_analyzer.py +2 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/dependency_probe.py +82 -3
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/download.py +57 -25
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/environment_cleanup.py +50 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/environment_lock.py +6 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/filesystem.py +37 -3
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/git.py +15 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/pytorch_prober.py +76 -8
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/redaction.py +55 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/requirements.py +2 -2
- comfygit_core-0.7.0/src/comfygit_core/utils/toml_compat.py +10 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/validation/resolution_tester.py +3 -3
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/conftest.py +38 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_branch_workflow_preservation.py +63 -32
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_create_with_version_spec.py +16 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_import_comfyui_version_bug.py +17 -11
- comfygit_core-0.7.0/tests/integration/test_lifecycle_status.py +158 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_optional_dependency_groups.py +7 -3
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_overlay_git_integration.py +29 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_per_environment_manager.py +2 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_repair_node_removal.py +1 -1
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_runtime_restart_workflow_preservation.py +37 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_workflow_caching_integration.py +13 -13
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_workflow_subgraph_resolution.py +187 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/test_public_api.py +43 -0
- comfygit_core-0.7.0/tests/unit/analyzers/test_model_scanner_symlinks.py +44 -0
- comfygit_core-0.7.0/tests/unit/analyzers/test_node_git_analyzer.py +37 -0
- comfygit_core-0.7.0/tests/unit/analyzers/test_status_scanner.py +21 -0
- comfygit_core-0.7.0/tests/unit/analyzers/test_status_scanner_package_sync.py +25 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/caching/test_comfyui_cache.py +32 -4
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/caching/test_custom_node_cache_refactor.py +13 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/core/test_environment_facades.py +81 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/core/test_environment_operation_locking.py +11 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/core/test_environment_run.py +16 -0
- comfygit_core-0.7.0/tests/unit/core/test_environment_sync.py +27 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/core/test_import_download_failures.py +4 -3
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/core/test_import_no_manager.py +32 -0
- comfygit_core-0.7.0/tests/unit/core/test_workflow_contract_access.py +12 -0
- comfygit_core-0.7.0/tests/unit/core/test_workspace_environment_creation.py +61 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_environment_model_manager.py +40 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_export_import_overlays.py +39 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_git_manager_gitignore.py +2 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_node_manager.py +67 -2
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_pyproject_manager.py +37 -3
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_pytorch_overlay_materialization.py +136 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_uv_no_build_isolation.py +39 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_workflow_manager.py +93 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_workflow_node_cleanup.py +27 -0
- comfygit_core-0.7.0/tests/unit/models/test_lifecycle.py +161 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/models/test_overlay.py +18 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/models/test_workflow_subgraph.py +24 -0
- comfygit_core-0.7.0/tests/unit/repositories/test_credential_store.py +57 -0
- comfygit_core-0.7.0/tests/unit/services/test_credential_service.py +275 -0
- comfygit_core-0.7.0/tests/unit/services/test_environment_lifecycle.py +644 -0
- comfygit_core-0.7.0/tests/unit/services/test_environment_model_requirements.py +142 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_environment_readiness.py +2 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_model_downloader.py +36 -4
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_node_lookup_api_first.py +20 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_node_lookup_version_fallback.py +60 -4
- comfygit_core-0.7.0/tests/unit/services/test_resource_inventory.py +437 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_scan_requirements_substitution.py +42 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_unmanaged_environment_import.py +1 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_execution.py +46 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_file_store.py +46 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_model_download_coordinator.py +110 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_github_auth_config.py +10 -5
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_materialization.py +34 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_model_downloader_errors.py +3 -3
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_user_content_symlink_manager.py +22 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_workspace_config_facade.py +22 -3
- comfygit_core-0.7.0/tests/unit/test_workspace_credential_overrides.py +81 -0
- comfygit_core-0.7.0/tests/unit/utils/test_comfyui_ops_source.py +99 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_dependency_probe.py +167 -4
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_environment_cleanup.py +42 -0
- comfygit_core-0.7.0/tests/unit/utils/test_filesystem.py +73 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_git.py +10 -0
- comfygit_core-0.7.0/tests/unit/utils/test_provider_auth_hardening.py +80 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_pytorch_prober.py +181 -20
- comfygit_core-0.5.0/tests/unit/utils/test_provider_auth_hardening.py +0 -33
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/.gitignore +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/.python-version +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/AGENTS.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/CLAUDE.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/LICENSE.txt +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/docs/architecture-deep-dive.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/docs/knowledge/comfyui-node-loader-base-directories.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/docs/knowledge/model-tracking-system.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/docs/knowledge/node-resolution-behavior.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/docs/layer-hierarchy.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/docs/plans/uv-overlay-system.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/config_comparison.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/custom_node_scanner.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/git_change_parser.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/ref_diff_analyzer.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/workflow_dependency_parser.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/assets.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/build_readiness.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/caching/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/caching/api_cache.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/caching/base.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/clients/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/clients/github_client.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/clients/registry_client.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/configs/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/configs/comfyui_builtin_nodes.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/configs/comfyui_models.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/configs/model_config.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/confirmation.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/core/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/data/overlays/stock/sageattention.toml +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/data/overlays/stock/triton.toml +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/data/overlays/stock/xformers.toml +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/factories/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/factories/uv_factory.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/git.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/imports.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/infrastructure/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/infrastructure/sqlite_manager.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/integrations/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/lifecycle/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/lifecycle/comfyui_readiness.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/logging/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/logging/logging_config.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/pyproject_manager.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/managers/system_node_symlink_manager.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/base.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/dependencies.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/migrations.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/nodes.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/overlays.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/manifest/sync_config.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/merging/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/merging/merge_validator.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/civitai.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/comfyui_builtin_versions.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/commit.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/dependency_resolution.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/git.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/materialization.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/merge_plan.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/model_scan.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/node_mapping.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/protocols.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/readiness.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/ref_diff.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/registry.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/runtime_config.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/sync.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/system.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/workflow_contract.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/models/workflow_execution.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/py.typed +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/readiness.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/repositories/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/repositories/comfyui_builtin_versions_repository.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/repositories/migrate_paths.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/repositories/model_repository.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/repositories/node_mappings_repository.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/repositories/workflow_repository.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/resolvers/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/resolvers/global_node_resolver.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/resolvers/model_resolver.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/huggingface_url.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/registry_data_manager.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_analysis_cache.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_analysis_service.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_input.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_manual_model_policy.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_model_dependency_service.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_model_path_policy.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_node_package_policy.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_resolution_context_builder.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_resolution_service.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/services/workflow_state_cleanup.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/strategies/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/strategies/auto.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/strategies/confirmation.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/builtin_extractor.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/conflict_parser.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/dependency_parser.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/folder_paths_extractor.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/input_signature.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/model_categories.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/model_loader_extractor.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/node_identity.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/provider_urls.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/pytorch.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/retry.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/symlink_utils.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/system_detector.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/uuid.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/uv_error_handler.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/version.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/utils/workflow_hash.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/validation/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/workflow.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/README.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/caching/TEST_REDUCTION_SUMMARY.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/caching/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/caching/test_workflow_cache.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/caching/test_workflow_cache_context_hash.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/fixtures/models/test_models.json +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/fixtures/workflows/checkpoint_loader_with_missing_model.json +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/fixtures/workflows/kjnodes_workflow.json +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/fixtures/workflows/simple_txt2img.json +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/fixtures/workflows/with_custom_node.json +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/fixtures/workflows/with_missing_model.json +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/fixtures/workflows/workflow_with_duplicates.json +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/fixtures/workflows/workflow_with_properties.json +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/fixtures/workflows/workflow_without_properties.json +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/helpers/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/helpers/model_index_builder.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/helpers/pyproject_assertions.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/helpers/workflow_builder.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_atomic_semantic_merge.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_auto_model_index_sync.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_cache_invalidation_on_model_deletion.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_cache_node_version_invalidation.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_checkout_b_with_modified_workflow.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_commit_git_changes.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_commit_git_changes_SUMMARY.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_commit_history.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_context_aware_node_resolution.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_custom_node_path_preservation.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_deferred_model_downloads.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_deleted_model_download_intent.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_dependency_group_removal.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_dev_node_git_references.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_dev_node_improvements.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_download_cleanup.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_download_intent_cache_invalidation.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_environment_basic.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_environment_branching.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_environment_create_progress.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_export_import.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_git_branching.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_git_import.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_git_pull_push.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_git_remote.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_git_subdirectory_import.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_import_auto_remote.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_import_preview.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_category_mismatch_detection.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_directory_switch.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_download_integration.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_index_mismatch_bug_SUMMARY.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_path_sync_detection.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_resolution_stale_directory.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_show_command.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_source_management.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_source_preservation.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_source_preservation_SUMMARY.md +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_model_source_removal.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_multiple_optional_group_failures.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_node_prune.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_node_version_replacement.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_opencv_conflict_resolution.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_overlay_e2e.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_overlay_system_integration.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_package_config.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_pyproject_batch_writes.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_pytorch_reconfiguration.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_registry_git_fallback.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_registry_node_update_empty_download_url.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_repair_completion_marker.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_repair_model_download.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_repair_workflow.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_requirements_inline_comments_bug.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_status_abstraction.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_status_uninstalled_nodes.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_workflow_cache_metadata_invalidation.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_workflow_commit_flow.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_workflow_deletion_cleanup.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_workflow_model_criticality_update.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_workflow_path_update_after_interactive_resolution.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_workflow_resolution_cleanup.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_workflow_resolution_pipeline.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/integration/test_workflow_resolve_install.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/test_architecture_boundaries.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/analyzers/test_config_comparison.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/analyzers/test_custom_node_scanner.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/analyzers/test_ref_diff_analyzer.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/analyzers/test_status_scanner_disabled_nodes.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/analyzers/test_workflow_dependency_parser.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/caching/test_cache_base.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/caching/test_workspace_relative_caching.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/clients/test_civitai_client.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/clients/test_civitai_parsing.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/clients/test_github_releases.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/configs/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/configs/test_package_config.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/core/test_environment_uninstalled_nodes.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/core/test_reserved_environment_names.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/core/test_sync_node_dependency_provisioning.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/core/test_workspace_model_delete.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/factories/test_environment_factory_manager_install.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/lifecycle/test_comfyui_readiness.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_git_manager_log_refs.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_model_index_manager.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_model_short_hash.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_node_conflict_detection.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_overlay_fuzz.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_overlay_manager.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_overlay_materialization.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_pyproject_schema_version.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_pytorch_backend_manager.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_pytorch_stripping.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_sqlite_manager.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/managers/test_workflow_status.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/merging/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/merging/test_atomic_executor.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/merging/test_merge_validator.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/merging/test_semantic_merger.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/models/test_comfyui_builtin_versions.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/models/test_ref_diff.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/models/test_workflow_contract.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/models/test_workflow_dependencies.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/models/test_workflow_roundtrip.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/resolvers/test_global_node_resolver_v2.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/resolvers/test_model_resolver.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_build_readiness.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_dependency_resolution_preview.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_global_node_resolver.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_huggingface_url.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_import_analyzer.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_model_source_lookup.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_registry_data_manager.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_analysis_cache.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_analysis_service.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_input.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_model_dependency_service.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_model_path_policy.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_resolution_context_builder.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_resolution_fixer.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_resolution_service.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/services/test_workflow_state_cleanup.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_add_dependencies_substitution.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_auto_strategies.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_builtin_extractor.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_dev_node_rename_detection.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_environment_py_dependencies.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_external_uv_cache.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_folder_paths_extractor.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_github_url_installation.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_headless_import.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_minimal_schema_compatibility.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_model_config_dynamic_loading.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_model_loader_extractor.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_model_repository_cleanup.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_model_symlink_manager.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_node_callbacks.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_node_conflict_context.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_node_mappings_repository.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_node_resolution_context.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_unified_node_search.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_uv_error_handling.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_uv_error_parser.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_workflow_manager_deduplication.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/test_workspace_config_resilience.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_conflict_analyzer.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_conflict_parser.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_dependency_parser.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_input_signature.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_node_identity.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_pytorch.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_requirements.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_symlink_utils.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_uuid.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/unit/utils/test_version.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/utils/__init__.py +0 -0
- {comfygit_core-0.5.0 → comfygit_core-0.7.0}/tests/utils/test_workflow_hash.py +0 -0
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: comfygit-core
|
|
3
|
+
Version: 0.7.0
|
|
4
|
+
Summary: ComfyGit Core - Git-based ComfyUI environment manager
|
|
5
|
+
Project-URL: Documentation, https://docs.comfygit.org/
|
|
6
|
+
Project-URL: Repository, https://github.com/comfygit-ai/comfygit
|
|
7
|
+
Project-URL: Issues, https://github.com/comfygit-ai/comfygit/issues
|
|
8
|
+
License-File: LICENSE.txt
|
|
9
|
+
Requires-Python: >=3.10
|
|
10
|
+
Requires-Dist: blake3>=0.3.3
|
|
11
|
+
Requires-Dist: huggingface-hub>=0.15.1
|
|
12
|
+
Requires-Dist: packaging>=16.2
|
|
13
|
+
Requires-Dist: requests>=2.32.4
|
|
14
|
+
Requires-Dist: requirements-parser>=0.11.0
|
|
15
|
+
Requires-Dist: tomli>=2.0.1; python_version < '3.11'
|
|
16
|
+
Requires-Dist: tomlkit>=0.11.0
|
|
17
|
+
Requires-Dist: uv>=0.11.15
|
|
18
|
+
Requires-Dist: xxhash>=2.0.0
|
|
19
|
+
Provides-Extra: keyring
|
|
20
|
+
Requires-Dist: keyring>=25.7.0; extra == 'keyring'
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
1
23
|
# ComfyGit Core
|
|
2
24
|
|
|
3
25
|
Core library for programmatic ComfyUI environment and package management. Build custom tools, GUIs, web interfaces, or CI/CD integrations on top of ComfyGit's architecture.
|
|
@@ -466,3 +488,34 @@ dependencies = [
|
|
|
466
488
|
"comfygit-core>=0.3.14,<0.4.0" # Pin to minor version
|
|
467
489
|
]
|
|
468
490
|
```
|
|
491
|
+
|
|
492
|
+
## Credentials in headless applications
|
|
493
|
+
|
|
494
|
+
The base `comfygit-core` installation does not require `keyring`. Install
|
|
495
|
+
`comfygit-core[keyring]` when OS-backed credential persistence is wanted; the
|
|
496
|
+
normal `comfygit` CLI includes this extra. An unavailable package or OS backend
|
|
497
|
+
produces a structured error when saving credentials, never plaintext fallback.
|
|
498
|
+
|
|
499
|
+
`Workspace.open`, `create`, `from_path`, and `open_or_create` accept an optional
|
|
500
|
+
`credential_overrides` mapping keyed by `CredentialProvider`. A nonempty token
|
|
501
|
+
is process-local and takes priority over environment variables, workspace secure
|
|
502
|
+
storage and provider-native login. An explicit `None` requests anonymous
|
|
503
|
+
provider access; omitted providers follow the normal resolution chain. For
|
|
504
|
+
Hugging Face downloads and lookup, anonymous access disables the SDK's saved
|
|
505
|
+
login discovery too. External git helpers/SSH and URL-embedded authentication
|
|
506
|
+
remain the embedding application's responsibility.
|
|
507
|
+
|
|
508
|
+
```python
|
|
509
|
+
from comfygit_core import Workspace
|
|
510
|
+
from comfygit_core.models import CredentialProvider
|
|
511
|
+
|
|
512
|
+
workspace = Workspace.open(
|
|
513
|
+
workspace_path,
|
|
514
|
+
credential_overrides={CredentialProvider.HUGGINGFACE: None},
|
|
515
|
+
)
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
No login is required for local operations or public resources that allow
|
|
519
|
+
anonymous access. For authenticated access without keyring, set the appropriate
|
|
520
|
+
provider environment variable or use an existing Hugging Face login. Tokens
|
|
521
|
+
are never exported in environment manifests.
|
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: comfygit-core
|
|
3
|
-
Version: 0.5.0
|
|
4
|
-
Summary: ComfyGit Core - Git-based ComfyUI environment manager
|
|
5
|
-
Project-URL: Documentation, https://docs.comfygit.org/
|
|
6
|
-
Project-URL: Repository, https://github.com/comfygit-ai/comfygit
|
|
7
|
-
Project-URL: Issues, https://github.com/comfygit-ai/comfygit/issues
|
|
8
|
-
License-File: LICENSE.txt
|
|
9
|
-
Requires-Python: >=3.10
|
|
10
|
-
Requires-Dist: blake3>=0.3.3
|
|
11
|
-
Requires-Dist: huggingface-hub>=0.11.0
|
|
12
|
-
Requires-Dist: packaging>=16.2
|
|
13
|
-
Requires-Dist: requests>=2.33.0
|
|
14
|
-
Requires-Dist: requirements-parser>=0.11.0
|
|
15
|
-
Requires-Dist: tomlkit>=0.11.0
|
|
16
|
-
Requires-Dist: uv>=0.11.8
|
|
17
|
-
Requires-Dist: xxhash>=2.0.0
|
|
18
|
-
Description-Content-Type: text/markdown
|
|
19
|
-
|
|
20
1
|
# ComfyGit Core
|
|
21
2
|
|
|
22
3
|
Core library for programmatic ComfyUI environment and package management. Build custom tools, GUIs, web interfaces, or CI/CD integrations on top of ComfyGit's architecture.
|
|
@@ -485,3 +466,34 @@ dependencies = [
|
|
|
485
466
|
"comfygit-core>=0.3.14,<0.4.0" # Pin to minor version
|
|
486
467
|
]
|
|
487
468
|
```
|
|
469
|
+
|
|
470
|
+
## Credentials in headless applications
|
|
471
|
+
|
|
472
|
+
The base `comfygit-core` installation does not require `keyring`. Install
|
|
473
|
+
`comfygit-core[keyring]` when OS-backed credential persistence is wanted; the
|
|
474
|
+
normal `comfygit` CLI includes this extra. An unavailable package or OS backend
|
|
475
|
+
produces a structured error when saving credentials, never plaintext fallback.
|
|
476
|
+
|
|
477
|
+
`Workspace.open`, `create`, `from_path`, and `open_or_create` accept an optional
|
|
478
|
+
`credential_overrides` mapping keyed by `CredentialProvider`. A nonempty token
|
|
479
|
+
is process-local and takes priority over environment variables, workspace secure
|
|
480
|
+
storage and provider-native login. An explicit `None` requests anonymous
|
|
481
|
+
provider access; omitted providers follow the normal resolution chain. For
|
|
482
|
+
Hugging Face downloads and lookup, anonymous access disables the SDK's saved
|
|
483
|
+
login discovery too. External git helpers/SSH and URL-embedded authentication
|
|
484
|
+
remain the embedding application's responsibility.
|
|
485
|
+
|
|
486
|
+
```python
|
|
487
|
+
from comfygit_core import Workspace
|
|
488
|
+
from comfygit_core.models import CredentialProvider
|
|
489
|
+
|
|
490
|
+
workspace = Workspace.open(
|
|
491
|
+
workspace_path,
|
|
492
|
+
credential_overrides={CredentialProvider.HUGGINGFACE: None},
|
|
493
|
+
)
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
No login is required for local operations or public resources that allow
|
|
497
|
+
anonymous access. For authenticated access without keyring, set the appropriate
|
|
498
|
+
provider environment variable or use an existing Hugging Face login. Tokens
|
|
499
|
+
are never exported in environment manifests.
|
|
@@ -41,7 +41,7 @@ ComfyGit Core is a **library-first Python package** providing environment manage
|
|
|
41
41
|
|--------|---------|--------------|
|
|
42
42
|
| **core/** | Public API | Workspace (multi-env), Environment (single env) |
|
|
43
43
|
| **models/** | Public typed contracts | Exported data classes, protocols, exceptions with context |
|
|
44
|
-
| **readiness.py**, **workflow.py**, **runtime.py**, **assets.py**, **git.py** | Public facades | Reusable domain helpers promoted for adapters |
|
|
44
|
+
| **readiness.py**, **workflow.py**, **runtime.py**, **assets.py**, **git.py**, **security.py** | Public facades | Reusable domain helpers promoted for adapters |
|
|
45
45
|
| **managers/** | Orchestration | Environment orchestrators (Git, Model), Resource managers (Node, Workflow, Model symlinks), Config managers (PyProject, UV, PyTorch backend) |
|
|
46
46
|
| **manifest/** | Internal manifest abstraction | Pyproject-backed store, section handlers, edit helpers, overlay materialization, migration cleanup |
|
|
47
47
|
| **analyzers/** | Analysis | Parse workflows/git/status; classify nodes |
|
|
@@ -79,6 +79,10 @@ ComfyGit Core is a **library-first Python package** providing environment manage
|
|
|
79
79
|
- `Workspace.create()` - Create new workspace with validation
|
|
80
80
|
- `Workspace.open_or_create()` - Setup-friendly load-or-create entry point
|
|
81
81
|
- `Workspace.list_environments()` / `get_environment()` - List/get environments
|
|
82
|
+
- `Workspace.get_resource_inventory()` / `get_model_inventory()` - Typed model,
|
|
83
|
+
environment, source, and storage inventory for adapters
|
|
84
|
+
- `Workspace.plan_model_deletion()` / `apply_model_deletion_plan()` - Dry-run-first,
|
|
85
|
+
location-specific model reclaim with conservative blockers
|
|
82
86
|
- `Workspace.get_schema_version()` / `is_legacy_schema()` - Check workspace version
|
|
83
87
|
- `Workspace.upgrade_schema_if_needed()` - Migrate to current schema
|
|
84
88
|
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "comfygit-core"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.7.0"
|
|
4
4
|
description = "ComfyGit Core - Git-based ComfyUI environment manager"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10"
|
|
7
7
|
dependencies = [
|
|
8
8
|
"blake3>=0.3.3",
|
|
9
|
-
"
|
|
9
|
+
"huggingface-hub>=0.15.1",
|
|
10
10
|
"packaging>=16.2",
|
|
11
|
-
"requests>=2.
|
|
11
|
+
"requests>=2.32.4",
|
|
12
12
|
"requirements-parser>=0.11.0",
|
|
13
13
|
"tomlkit>=0.11.0",
|
|
14
|
-
"
|
|
14
|
+
"tomli>=2.0.1; python_version < '3.11'",
|
|
15
|
+
"uv>=0.11.15",
|
|
15
16
|
"xxhash>=2.0.0",
|
|
16
17
|
]
|
|
17
18
|
|
|
19
|
+
[project.optional-dependencies]
|
|
20
|
+
keyring = ["keyring>=25.7.0"]
|
|
21
|
+
|
|
18
22
|
[project.urls]
|
|
19
23
|
Documentation = "https://docs.comfygit.org/"
|
|
20
24
|
Repository = "https://github.com/comfygit-ai/comfygit"
|
|
@@ -208,7 +208,13 @@ class ModelScanner:
|
|
|
208
208
|
continue
|
|
209
209
|
|
|
210
210
|
try:
|
|
211
|
-
|
|
211
|
+
# Model libraries commonly use file symlinks to share large
|
|
212
|
+
# weights between ComfyUI installations or expose a loader's
|
|
213
|
+
# expected filename as an alias. ``Path.stat()`` and the hash
|
|
214
|
+
# reader intentionally follow a valid file symlink, while the
|
|
215
|
+
# indexed location remains the alias path under ``models/``.
|
|
216
|
+
# Broken links and links to directories still fail is_file().
|
|
217
|
+
if not file_path.is_file():
|
|
212
218
|
skipped_not_file += 1
|
|
213
219
|
continue
|
|
214
220
|
|
|
@@ -6,11 +6,10 @@ from dataclasses import dataclass, field
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from typing import TYPE_CHECKING
|
|
8
8
|
|
|
9
|
-
import tomllib
|
|
10
|
-
|
|
11
9
|
from ..configs.comfyui_builtin_nodes import COMFYUI_BUILTIN_NODES
|
|
12
10
|
from ..logging.logging_config import get_logger
|
|
13
11
|
from ..models.comfyui_builtin_versions import BuiltinVersionGateInfo
|
|
12
|
+
from ..utils.toml_compat import tomllib
|
|
14
13
|
|
|
15
14
|
if TYPE_CHECKING:
|
|
16
15
|
from ..configs.model_config import ModelConfig
|
{comfygit_core-0.5.0 → comfygit_core-0.7.0}/src/comfygit_core/analyzers/node_git_analyzer.py
RENAMED
|
@@ -67,7 +67,7 @@ def get_node_git_info(node_path: Path) -> GitInfo | None:
|
|
|
67
67
|
git_info.github_repo = github_match.group(2).replace(".git", "")
|
|
68
68
|
|
|
69
69
|
# Check if there are uncommitted changes
|
|
70
|
-
status_entries = git_status_porcelain(node_path)
|
|
70
|
+
status_entries = git_status_porcelain(node_path, check=False)
|
|
71
71
|
git_info.is_dirty = bool(status_entries)
|
|
72
72
|
|
|
73
73
|
return git_info
|
|
@@ -41,6 +41,25 @@ def _versions_match(actual: str | None, expected: str | None) -> bool:
|
|
|
41
41
|
return False
|
|
42
42
|
|
|
43
43
|
|
|
44
|
+
_UV_DRY_RUN_CHANGE_PREFIXES = (
|
|
45
|
+
"Would update lockfile",
|
|
46
|
+
"Would download ",
|
|
47
|
+
"Would install ",
|
|
48
|
+
"Would uninstall ",
|
|
49
|
+
"Would upgrade ",
|
|
50
|
+
"Would downgrade ",
|
|
51
|
+
"Would remove ",
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _uv_dry_run_reports_changes(output: str) -> bool:
|
|
56
|
+
"""Return True when uv dry-run output says sync would mutate the env."""
|
|
57
|
+
return any(
|
|
58
|
+
line.strip().startswith(_UV_DRY_RUN_CHANGE_PREFIXES)
|
|
59
|
+
for line in output.splitlines()
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
44
63
|
class StatusScanner:
|
|
45
64
|
"""Scans environment to get current state."""
|
|
46
65
|
|
|
@@ -58,7 +77,12 @@ class StatusScanner:
|
|
|
58
77
|
self._comfyui_path = comfyui_path
|
|
59
78
|
self._pytorch_manager = pytorch_manager
|
|
60
79
|
|
|
61
|
-
def get_full_comparison(
|
|
80
|
+
def get_full_comparison(
|
|
81
|
+
self,
|
|
82
|
+
*,
|
|
83
|
+
check_package_sync: bool = False,
|
|
84
|
+
backend_override: str | None = None,
|
|
85
|
+
) -> EnvironmentComparison:
|
|
62
86
|
"""Get complete environment comparison with all details.
|
|
63
87
|
|
|
64
88
|
Args:
|
|
@@ -77,17 +101,19 @@ class StatusScanner:
|
|
|
77
101
|
# Get basic comparison
|
|
78
102
|
comparison = self.compare_states(current, expected)
|
|
79
103
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
104
|
+
if check_package_sync:
|
|
105
|
+
package_status = self.check_packages_sync(
|
|
106
|
+
backend_override=backend_override
|
|
107
|
+
)
|
|
108
|
+
comparison.packages_in_sync = package_status.in_sync
|
|
109
|
+
comparison.package_sync_message = package_status.message
|
|
110
|
+
else:
|
|
111
|
+
# Keep high-frequency status fast unless the manifest diff says uv
|
|
112
|
+
# materialization may be needed. Package drift self-corrects on the
|
|
113
|
+
# next explicit sync/run path, but dependency edits should guide the
|
|
114
|
+
# user to sync before committing.
|
|
115
|
+
comparison.packages_in_sync = True
|
|
116
|
+
comparison.package_sync_message = ""
|
|
91
117
|
|
|
92
118
|
return comparison
|
|
93
119
|
|
|
@@ -400,7 +426,11 @@ class StatusScanner:
|
|
|
400
426
|
|
|
401
427
|
return comparison
|
|
402
428
|
|
|
403
|
-
def check_packages_sync(
|
|
429
|
+
def check_packages_sync(
|
|
430
|
+
self,
|
|
431
|
+
*,
|
|
432
|
+
backend_override: str | None = None,
|
|
433
|
+
) -> PackageSyncStatus:
|
|
404
434
|
"""Check if packages are in sync with pyproject.toml.
|
|
405
435
|
|
|
406
436
|
Returns:
|
|
@@ -410,13 +440,20 @@ class StatusScanner:
|
|
|
410
440
|
# Use UV's dry-run to check if sync would change anything
|
|
411
441
|
# Disposable PyTorch overlay materialization ensures the check uses the correct backend.
|
|
412
442
|
extras, all_extras = self._pyproject.resolve_sync_extras(None, False)
|
|
413
|
-
self._uv.sync_project(
|
|
443
|
+
dry_run_output = self._uv.sync_project(
|
|
414
444
|
dry_run=True,
|
|
415
445
|
all_groups=True,
|
|
416
446
|
pytorch_manager=self._pytorch_manager,
|
|
447
|
+
backend_override=backend_override,
|
|
417
448
|
extras=extras,
|
|
418
449
|
all_extras=all_extras,
|
|
419
450
|
)
|
|
451
|
+
if _uv_dry_run_reports_changes(dry_run_output):
|
|
452
|
+
return PackageSyncStatus(
|
|
453
|
+
in_sync=False,
|
|
454
|
+
message="Packages out of sync (run 'cg sync' to update)",
|
|
455
|
+
details=dry_run_output,
|
|
456
|
+
)
|
|
420
457
|
return PackageSyncStatus(
|
|
421
458
|
in_sync=True, message="Packages match pyproject.toml"
|
|
422
459
|
)
|
|
@@ -77,6 +77,11 @@ def scan_unmanaged_comfyui(
|
|
|
77
77
|
ignored_custom_node_names=ignored_custom_node_names,
|
|
78
78
|
)
|
|
79
79
|
version, commit = _detect_comfyui_version(comfyui_path)
|
|
80
|
+
repository = (
|
|
81
|
+
_git_output(comfyui_path, "remote", "get-url", "origin")
|
|
82
|
+
if _is_git_checkout(comfyui_path)
|
|
83
|
+
else None
|
|
84
|
+
)
|
|
80
85
|
|
|
81
86
|
if not workflows:
|
|
82
87
|
warnings.append("No saved workflow JSON files were found.")
|
|
@@ -88,6 +93,7 @@ def scan_unmanaged_comfyui(
|
|
|
88
93
|
python_version=f"{sys.version_info.major}.{sys.version_info.minor}",
|
|
89
94
|
comfyui_version=version,
|
|
90
95
|
comfyui_commit=commit,
|
|
96
|
+
comfyui_repository=repository,
|
|
91
97
|
workflows=workflows,
|
|
92
98
|
model_references=model_references,
|
|
93
99
|
models_scanned=models_scanned,
|
|
@@ -4,9 +4,15 @@ Caches ComfyUI installations by version to avoid re-downloading and re-cloning.
|
|
|
4
4
|
Supports releases, commits, and branches.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
+
import hashlib
|
|
7
8
|
from dataclasses import dataclass
|
|
8
9
|
from pathlib import Path
|
|
9
10
|
|
|
11
|
+
from ..constants import DEFAULT_COMFYUI_REPOSITORY
|
|
12
|
+
from ..utils.comfyui_ops import (
|
|
13
|
+
comfyui_repository_identity,
|
|
14
|
+
normalize_comfyui_repository,
|
|
15
|
+
)
|
|
10
16
|
from .base import ContentCacheBase
|
|
11
17
|
|
|
12
18
|
|
|
@@ -16,6 +22,7 @@ class ComfyUISpec:
|
|
|
16
22
|
version: str # "v0.3.20", "abc123", "main"
|
|
17
23
|
version_type: str # "release", "commit", "branch"
|
|
18
24
|
commit_sha: str | None = None # Actual commit SHA (for branches)
|
|
25
|
+
repository: str = DEFAULT_COMFYUI_REPOSITORY
|
|
19
26
|
|
|
20
27
|
|
|
21
28
|
class ComfyUICacheManager(ContentCacheBase):
|
|
@@ -60,12 +67,20 @@ class ComfyUICacheManager(ContentCacheBase):
|
|
|
60
67
|
# Simple string version
|
|
61
68
|
return f"version_{spec}"
|
|
62
69
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
70
|
+
repository = normalize_comfyui_repository(spec.repository)
|
|
71
|
+
repository_identity = comfyui_repository_identity(repository)
|
|
72
|
+
repository_key = hashlib.sha256(
|
|
73
|
+
repository_identity.encode("utf-8")
|
|
74
|
+
).hexdigest()[:12]
|
|
66
75
|
|
|
67
|
-
#
|
|
68
|
-
|
|
76
|
+
# Any captured commit is the immutable cache authority, including
|
|
77
|
+
# snapshots originally described by a branch or release.
|
|
78
|
+
if spec.commit_sha:
|
|
79
|
+
revision_key = f"commit_{spec.commit_sha}"
|
|
80
|
+
else:
|
|
81
|
+
revision_key = f"{spec.version_type}_{spec.version}"
|
|
82
|
+
|
|
83
|
+
return f"source_{repository_key}_{revision_key}"
|
|
69
84
|
|
|
70
85
|
def cache_comfyui(self, spec: ComfyUISpec, source_path: Path) -> Path:
|
|
71
86
|
"""Cache a ComfyUI installation.
|
|
@@ -82,7 +97,8 @@ class ComfyUICacheManager(ContentCacheBase):
|
|
|
82
97
|
metadata = {
|
|
83
98
|
"version": spec.version,
|
|
84
99
|
"version_type": spec.version_type,
|
|
85
|
-
"commit_sha": spec.commit_sha
|
|
100
|
+
"commit_sha": spec.commit_sha,
|
|
101
|
+
"repository": normalize_comfyui_repository(spec.repository),
|
|
86
102
|
}
|
|
87
103
|
|
|
88
104
|
return self.cache_content(cache_key, source_path, metadata)
|
|
@@ -96,5 +112,11 @@ class ComfyUICacheManager(ContentCacheBase):
|
|
|
96
112
|
Returns:
|
|
97
113
|
Path to cached ComfyUI content, or None if not cached
|
|
98
114
|
"""
|
|
115
|
+
if (
|
|
116
|
+
isinstance(spec, ComfyUISpec)
|
|
117
|
+
and spec.version_type == "branch"
|
|
118
|
+
and not spec.commit_sha
|
|
119
|
+
):
|
|
120
|
+
return None
|
|
99
121
|
cache_key = self.generate_cache_key(spec)
|
|
100
122
|
return self.get_cached_path(cache_key)
|
|
@@ -127,9 +127,20 @@ class CustomNodeCacheManager(ContentCacheBase):
|
|
|
127
127
|
cache_dir = self.store_dir / cache_key
|
|
128
128
|
content_dir = cache_dir / "content"
|
|
129
129
|
|
|
130
|
+
if node_info.source == "git" and (content_dir / ".gitmodules").is_file():
|
|
131
|
+
from ..utils.git import _git
|
|
132
|
+
|
|
133
|
+
if not (content_dir / ".git").exists():
|
|
134
|
+
return False
|
|
135
|
+
try:
|
|
136
|
+
status = _git(["submodule", "status", "--recursive"], content_dir)
|
|
137
|
+
if any(line.startswith(("-", "+", "U")) for line in status.stdout.splitlines()):
|
|
138
|
+
return False
|
|
139
|
+
except (OSError, ValueError):
|
|
140
|
+
return False
|
|
130
141
|
return content_dir.exists() and any(content_dir.iterdir())
|
|
131
142
|
|
|
132
|
-
def
|
|
143
|
+
def get_cached_node_path(self, node_info: NodeInfo) -> Path | None:
|
|
133
144
|
"""Get the path to cached node content if it exists.
|
|
134
145
|
|
|
135
146
|
Returns:
|
|
@@ -225,7 +236,7 @@ class CustomNodeCacheManager(ContentCacheBase):
|
|
|
225
236
|
Returns:
|
|
226
237
|
True if successfully copied, False otherwise
|
|
227
238
|
"""
|
|
228
|
-
cached_path = self.
|
|
239
|
+
cached_path = self.get_cached_node_path(node_info)
|
|
229
240
|
if not cached_path:
|
|
230
241
|
return False
|
|
231
242
|
|
|
@@ -246,7 +246,7 @@ class WorkflowCacheRepository:
|
|
|
246
246
|
if from_version == to_version:
|
|
247
247
|
return
|
|
248
248
|
|
|
249
|
-
logger.info(f"Migrating workflow cache schema v{from_version}
|
|
249
|
+
logger.info(f"Migrating workflow cache schema v{from_version} -> v{to_version}")
|
|
250
250
|
|
|
251
251
|
# Drop and recreate (cache is ephemeral)
|
|
252
252
|
self.sqlite.execute_write("DROP TABLE IF EXISTS workflow_cache")
|
|
@@ -82,12 +82,13 @@ class CivitAIClient:
|
|
|
82
82
|
self.cache_manager = cache_manager
|
|
83
83
|
self.workspace_config = workspace_config
|
|
84
84
|
|
|
85
|
-
#
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if not self._api_key and workspace_config:
|
|
85
|
+
# Workspace resolution owns overrides, environment and secure-store order.
|
|
86
|
+
if api_key is not None:
|
|
87
|
+
self._api_key = api_key
|
|
88
|
+
elif workspace_config is not None:
|
|
90
89
|
self._api_key = workspace_config.get_civitai_token()
|
|
90
|
+
else:
|
|
91
|
+
self._api_key = os.environ.get("CIVITAI_API_TOKEN") or os.environ.get("CIVITAI_API_KEY")
|
|
91
92
|
|
|
92
93
|
self.rate_limiter = RateLimitManager(min_interval=0.1)
|
|
93
94
|
self.retry_config = RetryConfig(
|
|
@@ -77,6 +77,12 @@ LEGACY_SYSTEM_NODES = {
|
|
|
77
77
|
MANAGER_NODE_ID = 'comfygit-manager'
|
|
78
78
|
MANAGER_GITHUB_URL = 'https://github.com/comfygit-ai/comfygit-manager'
|
|
79
79
|
|
|
80
|
+
# Runtime-only PyTorch backend override used by `cg run --torch-backend`.
|
|
81
|
+
# This is intentionally non-persistent: it tells child Manager/UI processes
|
|
82
|
+
# which backend policy launched the current ComfyUI process without writing to
|
|
83
|
+
# `.pytorch-backend`.
|
|
84
|
+
ACTIVE_TORCH_BACKEND_OVERRIDE_ENV = "COMFYGIT_TORCH_BACKEND_OVERRIDE"
|
|
85
|
+
|
|
80
86
|
# Schema version for environment pyproject.toml format.
|
|
81
87
|
# Increment when making breaking changes to the pyproject.toml structure.
|
|
82
88
|
# v1: Original format with inline PyTorch config (indexes, sources, constraints)
|
|
@@ -87,6 +93,7 @@ PYPROJECT_SCHEMA_VERSION = 2
|
|
|
87
93
|
DEFAULT_REGISTRY_URL = "https://api.comfy.org"
|
|
88
94
|
DEFAULT_GITHUB_URL = "https://github.com"
|
|
89
95
|
GITHUB_API_BASE = "https://api.github.com"
|
|
96
|
+
DEFAULT_COMFYUI_REPOSITORY = "https://github.com/Comfy-Org/ComfyUI.git"
|
|
90
97
|
|
|
91
98
|
GITHUB_NODE_MAPPINGS_URL = "https://raw.githubusercontent.com/comfygit-ai/comfygit-registry-data/main/data/node_mappings.json"
|
|
92
99
|
GITHUB_COMFYUI_BUILTINS_BY_VERSION_URL = "https://raw.githubusercontent.com/comfygit-ai/comfygit-registry-data/main/data/comfyui_builtins_by_version.json"
|