comfygit-core 0.6.0__tar.gz → 0.7.1__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.7.1/PKG-INFO +131 -0
- comfygit_core-0.7.1/README.md +109 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/architecture.md +5 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/pyproject.toml +7 -3
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/model_scanner.py +7 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/unmanaged_comfyui_analyzer.py +6 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/comfyui_cache.py +28 -6
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/custom_node_cache.py +13 -2
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/clients/civitai_client.py +6 -5
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/constants.py +1 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/core/environment.py +131 -38
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/core/workspace.py +205 -30
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/factories/environment_factory.py +39 -9
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/factories/workspace_factory.py +46 -21
- comfygit_core-0.7.1/src/comfygit_core/lifecycle/runtime_control.py +188 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/lifecycle/switch_observer.py +61 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/environment_model_manager.py +80 -3
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/node_manager.py +6 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/workflow_manager.py +13 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/models.py +9 -3
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/pyproject_manifest.py +13 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/workflows.py +1 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/merging/semantic_merger.py +8 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/__init__.py +17 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/build_readiness.py +6 -0
- comfygit_core-0.7.1/src/comfygit_core/models/credentials.py +71 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/exceptions.py +34 -5
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/manifest.py +30 -2
- comfygit_core-0.7.1/src/comfygit_core/models/resource_inventory.py +236 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/shared.py +33 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/unmanaged_import.py +1 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/workflow.py +17 -4
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/workspace_config.py +4 -1
- comfygit_core-0.7.1/src/comfygit_core/repositories/credential_store.py +62 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/workspace_config_repository.py +100 -80
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/runtime.py +16 -0
- comfygit_core-0.7.1/src/comfygit_core/security.py +21 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/build_readiness.py +25 -3
- comfygit_core-0.7.1/src/comfygit_core/services/credential_service.py +202 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/environment_readiness.py +4 -2
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/environment_sync_coordinator.py +12 -2
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/import_analyzer.py +4 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/model_downloader.py +35 -7
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/model_source_lookup.py +1 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/node_lookup_service.py +1 -1
- comfygit_core-0.7.1/src/comfygit_core/services/resource_inventory.py +514 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/unmanaged_environment_import.py +5 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_execution.py +9 -2
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_manifest_reconciler.py +10 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_model_download_coordinator.py +136 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/comfyui_ops.py +99 -7
- comfygit_core-0.7.1/src/comfygit_core/utils/environment_lock.py +196 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/filesystem.py +18 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/git.py +3 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/pytorch_prober.py +22 -3
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/redaction.py +55 -2
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/requirements.py +2 -2
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/conftest.py +38 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_create_with_version_spec.py +16 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_import_comfyui_version_bug.py +17 -11
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_per_environment_manager.py +2 -2
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_repair_node_removal.py +1 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/test_public_api.py +32 -2
- comfygit_core-0.7.1/tests/unit/analyzers/test_model_scanner_symlinks.py +44 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/caching/test_comfyui_cache.py +32 -4
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/caching/test_custom_node_cache_refactor.py +13 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_environment_operation_locking.py +8 -1
- comfygit_core-0.7.1/tests/unit/core/test_environment_shared_reads.py +85 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_import_download_failures.py +4 -3
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_import_no_manager.py +32 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_workspace_environment_creation.py +0 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_environment_model_manager.py +40 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_node_manager.py +34 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_pyproject_manager.py +8 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_workflow_manager.py +34 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_workflow_subgraph.py +24 -0
- comfygit_core-0.7.1/tests/unit/repositories/test_credential_store.py +57 -0
- comfygit_core-0.7.1/tests/unit/services/test_credential_service.py +275 -0
- comfygit_core-0.7.1/tests/unit/services/test_environment_model_requirements.py +142 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_environment_readiness.py +2 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_model_downloader.py +36 -4
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_node_lookup_version_fallback.py +7 -7
- comfygit_core-0.7.1/tests/unit/services/test_resource_inventory.py +437 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_unmanaged_environment_import.py +1 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_execution.py +11 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_model_download_coordinator.py +110 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_github_auth_config.py +10 -5
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_materialization.py +34 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_model_downloader_errors.py +3 -3
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_workspace_config_facade.py +22 -3
- comfygit_core-0.7.1/tests/unit/test_workspace_credential_overrides.py +81 -0
- comfygit_core-0.7.1/tests/unit/utils/test_comfyui_ops_source.py +99 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_environment_cleanup.py +0 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_filesystem.py +0 -1
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_git.py +10 -0
- comfygit_core-0.7.1/tests/unit/utils/test_provider_auth_hardening.py +80 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_pytorch_prober.py +60 -1
- comfygit_core-0.6.0/PKG-INFO +0 -487
- comfygit_core-0.6.0/README.md +0 -468
- comfygit_core-0.6.0/src/comfygit_core/utils/environment_lock.py +0 -111
- comfygit_core-0.6.0/tests/unit/utils/test_provider_auth_hardening.py +0 -33
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/.gitignore +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/.python-version +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/AGENTS.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/CLAUDE.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/LICENSE.txt +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/architecture-deep-dive.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/knowledge/comfyui-node-loader-base-directories.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/knowledge/model-tracking-system.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/knowledge/node-resolution-behavior.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/layer-hierarchy.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/plans/uv-overlay-system.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/config_comparison.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/custom_node_scanner.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/git_change_parser.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/node_classifier.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/node_git_analyzer.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/ref_diff_analyzer.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/status_scanner.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/workflow_dependency_parser.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/assets.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/build_readiness.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/api_cache.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/base.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/workflow_cache.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/clients/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/clients/github_client.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/clients/registry_client.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/configs/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/configs/comfyui_builtin_nodes.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/configs/comfyui_models.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/configs/model_config.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/configs/package_config.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/confirmation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/core/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/data/overlays/stock/sageattention.toml +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/data/overlays/stock/triton.toml +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/data/overlays/stock/xformers.toml +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/factories/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/factories/uv_factory.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/git.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/imports.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/infrastructure/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/infrastructure/sqlite_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/integrations/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/integrations/uv_command.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/lifecycle/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/lifecycle/comfyui_readiness.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/logging/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/logging/logging_config.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/environment_git_orchestrator.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/export_import_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/git_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/model_symlink_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/overlay_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/pyproject_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/pytorch_backend_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/system_node_symlink_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/user_content_symlink_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/uv_project_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/base.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/dependencies.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/disposable_project.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/migrations.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/nodes.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/overlays.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/store.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/sync_config.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/uv_config.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/merging/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/merging/atomic_executor.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/merging/merge_validator.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/civitai.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/comfyui_builtin_versions.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/commit.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/dependency_resolution.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/environment.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/git.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/lifecycle.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/materialization.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/merge_plan.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/model_scan.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/node_mapping.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/overlay.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/protocols.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/readiness.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/ref_diff.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/registry.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/runtime_config.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/sync.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/system.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/workflow_contract.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/workflow_execution.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/py.typed +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/readiness.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/comfyui_builtin_versions_repository.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/migrate_paths.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/model_repository.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/node_mappings_repository.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/workflow_repository.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/resolvers/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/resolvers/global_node_resolver.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/resolvers/model_resolver.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/dependency_resolution_preview.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/environment_lifecycle.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/huggingface_url.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/registry_data_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_analysis_cache.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_analysis_service.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_file_store.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_input.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_manual_model_policy.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_model_dependency_service.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_model_path_policy.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_node_package_policy.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_resolution_context_builder.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_resolution_fixer.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_resolution_service.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_state_cleanup.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/strategies/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/strategies/auto.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/strategies/confirmation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/builtin_extractor.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/common.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/conflict_analyzer.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/conflict_parser.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/dependency_parser.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/dependency_probe.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/download.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/environment_cleanup.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/folder_paths_extractor.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/input_signature.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/model_categories.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/model_loader_extractor.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/node_identity.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/provider_urls.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/pytorch.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/retry.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/symlink_utils.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/system_detector.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/toml_compat.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/uuid.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/uv_error_handler.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/version.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/workflow_hash.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/validation/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/validation/resolution_tester.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/workflow.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/README.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/caching/TEST_REDUCTION_SUMMARY.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/caching/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/caching/test_workflow_cache.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/caching/test_workflow_cache_context_hash.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/models/test_models.json +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/checkpoint_loader_with_missing_model.json +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/kjnodes_workflow.json +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/simple_txt2img.json +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/with_custom_node.json +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/with_missing_model.json +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/workflow_with_duplicates.json +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/workflow_with_properties.json +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/workflow_without_properties.json +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/helpers/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/helpers/model_index_builder.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/helpers/pyproject_assertions.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/helpers/workflow_builder.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_atomic_semantic_merge.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_auto_model_index_sync.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_branch_workflow_preservation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_cache_invalidation_on_model_deletion.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_cache_node_version_invalidation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_checkout_b_with_modified_workflow.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_commit_git_changes.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_commit_git_changes_SUMMARY.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_commit_history.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_context_aware_node_resolution.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_custom_node_path_preservation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_deferred_model_downloads.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_deleted_model_download_intent.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_dependency_group_removal.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_dev_node_git_references.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_dev_node_improvements.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_download_cleanup.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_download_intent_cache_invalidation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_environment_basic.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_environment_branching.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_environment_create_progress.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_export_import.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_git_branching.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_git_import.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_git_pull_push.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_git_remote.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_git_subdirectory_import.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_import_auto_remote.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_import_preview.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_lifecycle_status.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_category_mismatch_detection.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_directory_switch.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_download_integration.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_index_mismatch_bug_SUMMARY.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_path_sync_detection.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_resolution_stale_directory.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_show_command.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_source_management.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_source_preservation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_source_preservation_SUMMARY.md +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_source_removal.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_multiple_optional_group_failures.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_node_prune.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_node_version_replacement.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_opencv_conflict_resolution.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_optional_dependency_groups.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_overlay_e2e.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_overlay_git_integration.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_overlay_system_integration.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_package_config.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_pyproject_batch_writes.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_pytorch_reconfiguration.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_registry_git_fallback.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_registry_node_update_empty_download_url.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_repair_completion_marker.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_repair_model_download.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_repair_workflow.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_requirements_inline_comments_bug.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_runtime_restart_workflow_preservation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_status_abstraction.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_status_uninstalled_nodes.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_cache_metadata_invalidation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_caching_integration.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_commit_flow.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_deletion_cleanup.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_model_criticality_update.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_path_update_after_interactive_resolution.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_resolution_cleanup.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_resolution_pipeline.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_resolve_install.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_subgraph_resolution.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/test_architecture_boundaries.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_config_comparison.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_custom_node_scanner.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_node_git_analyzer.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_ref_diff_analyzer.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_status_scanner.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_status_scanner_disabled_nodes.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_status_scanner_package_sync.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_workflow_dependency_parser.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/caching/test_cache_base.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/caching/test_workspace_relative_caching.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/clients/test_civitai_client.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/clients/test_civitai_parsing.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/clients/test_github_releases.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/configs/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/configs/test_package_config.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_environment_facades.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_environment_run.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_environment_sync.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_environment_uninstalled_nodes.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_reserved_environment_names.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_sync_node_dependency_provisioning.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_workflow_contract_access.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_workspace_model_delete.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/factories/test_environment_factory_manager_install.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/lifecycle/test_comfyui_readiness.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_export_import_overlays.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_git_manager_gitignore.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_git_manager_log_refs.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_model_index_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_model_short_hash.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_node_conflict_detection.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_overlay_fuzz.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_overlay_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_overlay_materialization.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_pyproject_schema_version.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_pytorch_backend_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_pytorch_overlay_materialization.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_pytorch_stripping.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_sqlite_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_uv_no_build_isolation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_workflow_node_cleanup.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_workflow_status.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/merging/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/merging/test_atomic_executor.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/merging/test_merge_validator.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/merging/test_semantic_merger.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_comfyui_builtin_versions.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_lifecycle.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_overlay.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_ref_diff.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_workflow_contract.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_workflow_dependencies.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_workflow_roundtrip.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/resolvers/test_global_node_resolver_v2.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/resolvers/test_model_resolver.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_build_readiness.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_dependency_resolution_preview.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_environment_lifecycle.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_global_node_resolver.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_huggingface_url.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_import_analyzer.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_model_source_lookup.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_node_lookup_api_first.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_registry_data_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_scan_requirements_substitution.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_analysis_cache.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_analysis_service.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_file_store.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_input.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_model_dependency_service.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_model_path_policy.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_resolution_context_builder.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_resolution_fixer.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_resolution_service.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_state_cleanup.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_add_dependencies_substitution.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_auto_strategies.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_builtin_extractor.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_dev_node_rename_detection.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_environment_py_dependencies.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_external_uv_cache.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_folder_paths_extractor.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_github_url_installation.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_headless_import.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_minimal_schema_compatibility.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_model_config_dynamic_loading.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_model_loader_extractor.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_model_repository_cleanup.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_model_symlink_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_node_callbacks.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_node_conflict_context.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_node_mappings_repository.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_node_resolution_context.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_unified_node_search.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_user_content_symlink_manager.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_uv_error_handling.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_uv_error_parser.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_workflow_manager_deduplication.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_workspace_config_resilience.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_conflict_analyzer.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_conflict_parser.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_dependency_parser.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_dependency_probe.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_input_signature.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_node_identity.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_pytorch.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_requirements.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_symlink_utils.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_uuid.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_version.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/utils/__init__.py +0 -0
- {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/utils/test_workflow_hash.py +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: comfygit-core
|
|
3
|
+
Version: 0.7.1
|
|
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
|
+
|
|
23
|
+
# ComfyGit Core
|
|
24
|
+
|
|
25
|
+
`comfygit-core` is the UI-independent library behind ComfyGit's CLI and runtime
|
|
26
|
+
adapters. It owns workspace discovery, environment manifests, custom nodes,
|
|
27
|
+
model metadata, dependency resolution, sync, import/export and materialization.
|
|
28
|
+
APIs are still evolving; integrations should pin a tested release.
|
|
29
|
+
|
|
30
|
+
## Installation
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
uv add 'comfygit-core==0.7.0'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Core does not require desktop keyring. For OS-backed credential persistence,
|
|
37
|
+
install the optional `comfygit-core[keyring]==0.7.0` extra. The CLI includes that
|
|
38
|
+
extra; headless library users can use environment credentials or inject their
|
|
39
|
+
own store instead.
|
|
40
|
+
|
|
41
|
+
## Open a workspace
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
from pathlib import Path
|
|
45
|
+
from comfygit_core import Workspace
|
|
46
|
+
|
|
47
|
+
workspace = Workspace.open(Path.home() / "comfygit")
|
|
48
|
+
env = workspace.get_environment("my-project", auto_sync=False)
|
|
49
|
+
status = env.status()
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
`Workspace.create(path)` creates a workspace; `Workspace.open_or_create(path)`
|
|
53
|
+
handles either case. Opening with `auto_sync=False` above avoids reconciling the
|
|
54
|
+
environment just to inspect it.
|
|
55
|
+
|
|
56
|
+
## Create and reconcile an environment
|
|
57
|
+
|
|
58
|
+
```python
|
|
59
|
+
env = workspace.create_environment(
|
|
60
|
+
name="experiment",
|
|
61
|
+
python_version="3.12",
|
|
62
|
+
torch_backend="auto",
|
|
63
|
+
no_manager=True,
|
|
64
|
+
)
|
|
65
|
+
env.add_node("rgthree-comfy")
|
|
66
|
+
result = env.sync(model_strategy="required")
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Creation and sync can download code and packages. Resolve an existing saved
|
|
70
|
+
workflow by its name, not an arbitrary JSON path:
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
result = env.resolve_workflow("my-workflow")
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
For ambiguous resolution, supply implementations of the protocols in
|
|
77
|
+
[`models/protocols.py`](src/comfygit_core/models/protocols.py). Do not put prompts,
|
|
78
|
+
printing or CLI policy into Core. A successful dependency resolution is not proof
|
|
79
|
+
that a ComfyUI inference job succeeds.
|
|
80
|
+
|
|
81
|
+
## Credentials
|
|
82
|
+
|
|
83
|
+
Workspace entry points accept process-local `credential_overrides`, keyed by
|
|
84
|
+
`CredentialProvider`. A token overrides all discovery for that provider; `None`
|
|
85
|
+
explicitly selects anonymous access. Omitted providers use normal discovery.
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
from comfygit_core.models.credentials import CredentialProvider
|
|
89
|
+
|
|
90
|
+
workspace = Workspace.open(
|
|
91
|
+
Path.home() / "comfygit",
|
|
92
|
+
credential_overrides={CredentialProvider.HUGGINGFACE: None},
|
|
93
|
+
)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Normal resolution uses provider environment variables, workspace secure storage,
|
|
97
|
+
provider-native credentials when available, then legacy workspace values during
|
|
98
|
+
migration. An unavailable keyring backend does not prevent environment/native
|
|
99
|
+
credentials from working. Saving a new credential requires a working secure store;
|
|
100
|
+
there is no new plaintext fallback. Callers may inject a `CredentialStore` through
|
|
101
|
+
the `credential_store` parameter.
|
|
102
|
+
|
|
103
|
+
## Portable and local state
|
|
104
|
+
|
|
105
|
+
The tracked `pyproject.toml`, `workflows/`, `workflow_api/`, shared overlays and
|
|
106
|
+
source metadata form the portable environment. Model bytes stay in the shared
|
|
107
|
+
model directory. ComfyUI/node checkouts, virtualenvs, `.cec/`, local overlays,
|
|
108
|
+
credentials and backend choices are derived or machine-local state.
|
|
109
|
+
|
|
110
|
+
Use ComfyGit operations to change the recipe; manual runtime edits may be
|
|
111
|
+
replaced on sync. For a headless recreation, use the materialization API or
|
|
112
|
+
[`cg materialize`](https://docs.comfygit.org/user-guide/collaboration/materialize/).
|
|
113
|
+
|
|
114
|
+
## API and development references
|
|
115
|
+
|
|
116
|
+
- [Workspace entry points](src/comfygit_core/core/workspace.py)
|
|
117
|
+
- [Environment operations](src/comfygit_core/core/environment.py)
|
|
118
|
+
- [Architecture](docs/architecture.md)
|
|
119
|
+
- [Normative contracts](../../docs/contracts/) and [specifications](../../docs/specs/)
|
|
120
|
+
- [Contributing](../../CONTRIBUTING.md)
|
|
121
|
+
|
|
122
|
+
From the monorepo root:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
uv sync --frozen --all-packages
|
|
126
|
+
uv run pytest packages/core/tests -q
|
|
127
|
+
make lint
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Core, Studio runtime and CLI releases use matched versions. See the root
|
|
131
|
+
[agent guide](../../AGENTS.md) for release ordering and package boundaries.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# ComfyGit Core
|
|
2
|
+
|
|
3
|
+
`comfygit-core` is the UI-independent library behind ComfyGit's CLI and runtime
|
|
4
|
+
adapters. It owns workspace discovery, environment manifests, custom nodes,
|
|
5
|
+
model metadata, dependency resolution, sync, import/export and materialization.
|
|
6
|
+
APIs are still evolving; integrations should pin a tested release.
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
uv add 'comfygit-core==0.7.0'
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Core does not require desktop keyring. For OS-backed credential persistence,
|
|
15
|
+
install the optional `comfygit-core[keyring]==0.7.0` extra. The CLI includes that
|
|
16
|
+
extra; headless library users can use environment credentials or inject their
|
|
17
|
+
own store instead.
|
|
18
|
+
|
|
19
|
+
## Open a workspace
|
|
20
|
+
|
|
21
|
+
```python
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
from comfygit_core import Workspace
|
|
24
|
+
|
|
25
|
+
workspace = Workspace.open(Path.home() / "comfygit")
|
|
26
|
+
env = workspace.get_environment("my-project", auto_sync=False)
|
|
27
|
+
status = env.status()
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
`Workspace.create(path)` creates a workspace; `Workspace.open_or_create(path)`
|
|
31
|
+
handles either case. Opening with `auto_sync=False` above avoids reconciling the
|
|
32
|
+
environment just to inspect it.
|
|
33
|
+
|
|
34
|
+
## Create and reconcile an environment
|
|
35
|
+
|
|
36
|
+
```python
|
|
37
|
+
env = workspace.create_environment(
|
|
38
|
+
name="experiment",
|
|
39
|
+
python_version="3.12",
|
|
40
|
+
torch_backend="auto",
|
|
41
|
+
no_manager=True,
|
|
42
|
+
)
|
|
43
|
+
env.add_node("rgthree-comfy")
|
|
44
|
+
result = env.sync(model_strategy="required")
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Creation and sync can download code and packages. Resolve an existing saved
|
|
48
|
+
workflow by its name, not an arbitrary JSON path:
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
result = env.resolve_workflow("my-workflow")
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
For ambiguous resolution, supply implementations of the protocols in
|
|
55
|
+
[`models/protocols.py`](src/comfygit_core/models/protocols.py). Do not put prompts,
|
|
56
|
+
printing or CLI policy into Core. A successful dependency resolution is not proof
|
|
57
|
+
that a ComfyUI inference job succeeds.
|
|
58
|
+
|
|
59
|
+
## Credentials
|
|
60
|
+
|
|
61
|
+
Workspace entry points accept process-local `credential_overrides`, keyed by
|
|
62
|
+
`CredentialProvider`. A token overrides all discovery for that provider; `None`
|
|
63
|
+
explicitly selects anonymous access. Omitted providers use normal discovery.
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from comfygit_core.models.credentials import CredentialProvider
|
|
67
|
+
|
|
68
|
+
workspace = Workspace.open(
|
|
69
|
+
Path.home() / "comfygit",
|
|
70
|
+
credential_overrides={CredentialProvider.HUGGINGFACE: None},
|
|
71
|
+
)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Normal resolution uses provider environment variables, workspace secure storage,
|
|
75
|
+
provider-native credentials when available, then legacy workspace values during
|
|
76
|
+
migration. An unavailable keyring backend does not prevent environment/native
|
|
77
|
+
credentials from working. Saving a new credential requires a working secure store;
|
|
78
|
+
there is no new plaintext fallback. Callers may inject a `CredentialStore` through
|
|
79
|
+
the `credential_store` parameter.
|
|
80
|
+
|
|
81
|
+
## Portable and local state
|
|
82
|
+
|
|
83
|
+
The tracked `pyproject.toml`, `workflows/`, `workflow_api/`, shared overlays and
|
|
84
|
+
source metadata form the portable environment. Model bytes stay in the shared
|
|
85
|
+
model directory. ComfyUI/node checkouts, virtualenvs, `.cec/`, local overlays,
|
|
86
|
+
credentials and backend choices are derived or machine-local state.
|
|
87
|
+
|
|
88
|
+
Use ComfyGit operations to change the recipe; manual runtime edits may be
|
|
89
|
+
replaced on sync. For a headless recreation, use the materialization API or
|
|
90
|
+
[`cg materialize`](https://docs.comfygit.org/user-guide/collaboration/materialize/).
|
|
91
|
+
|
|
92
|
+
## API and development references
|
|
93
|
+
|
|
94
|
+
- [Workspace entry points](src/comfygit_core/core/workspace.py)
|
|
95
|
+
- [Environment operations](src/comfygit_core/core/environment.py)
|
|
96
|
+
- [Architecture](docs/architecture.md)
|
|
97
|
+
- [Normative contracts](../../docs/contracts/) and [specifications](../../docs/specs/)
|
|
98
|
+
- [Contributing](../../CONTRIBUTING.md)
|
|
99
|
+
|
|
100
|
+
From the monorepo root:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
uv sync --frozen --all-packages
|
|
104
|
+
uv run pytest packages/core/tests -q
|
|
105
|
+
make lint
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Core, Studio runtime and CLI releases use matched versions. See the root
|
|
109
|
+
[agent guide](../../AGENTS.md) for release ordering and package boundaries.
|
|
@@ -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.1"
|
|
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
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
|
|
|
@@ -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
|
|
|
@@ -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(
|
|
@@ -93,6 +93,7 @@ PYPROJECT_SCHEMA_VERSION = 2
|
|
|
93
93
|
DEFAULT_REGISTRY_URL = "https://api.comfy.org"
|
|
94
94
|
DEFAULT_GITHUB_URL = "https://github.com"
|
|
95
95
|
GITHUB_API_BASE = "https://api.github.com"
|
|
96
|
+
DEFAULT_COMFYUI_REPOSITORY = "https://github.com/Comfy-Org/ComfyUI.git"
|
|
96
97
|
|
|
97
98
|
GITHUB_NODE_MAPPINGS_URL = "https://raw.githubusercontent.com/comfygit-ai/comfygit-registry-data/main/data/node_mappings.json"
|
|
98
99
|
GITHUB_COMFYUI_BUILTINS_BY_VERSION_URL = "https://raw.githubusercontent.com/comfygit-ai/comfygit-registry-data/main/data/comfyui_builtins_by_version.json"
|