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.
Files changed (458) hide show
  1. comfygit_core-0.7.1/PKG-INFO +131 -0
  2. comfygit_core-0.7.1/README.md +109 -0
  3. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/architecture.md +5 -1
  4. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/pyproject.toml +7 -3
  5. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/model_scanner.py +7 -1
  6. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/unmanaged_comfyui_analyzer.py +6 -0
  7. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/comfyui_cache.py +28 -6
  8. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/custom_node_cache.py +13 -2
  9. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/clients/civitai_client.py +6 -5
  10. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/constants.py +1 -0
  11. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/core/environment.py +131 -38
  12. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/core/workspace.py +205 -30
  13. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/factories/environment_factory.py +39 -9
  14. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/factories/workspace_factory.py +46 -21
  15. comfygit_core-0.7.1/src/comfygit_core/lifecycle/runtime_control.py +188 -0
  16. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/lifecycle/switch_observer.py +61 -1
  17. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/environment_model_manager.py +80 -3
  18. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/node_manager.py +6 -0
  19. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/workflow_manager.py +13 -0
  20. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/models.py +9 -3
  21. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/pyproject_manifest.py +13 -1
  22. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/workflows.py +1 -1
  23. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/merging/semantic_merger.py +8 -1
  24. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/__init__.py +17 -0
  25. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/build_readiness.py +6 -0
  26. comfygit_core-0.7.1/src/comfygit_core/models/credentials.py +71 -0
  27. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/exceptions.py +34 -5
  28. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/manifest.py +30 -2
  29. comfygit_core-0.7.1/src/comfygit_core/models/resource_inventory.py +236 -0
  30. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/shared.py +33 -1
  31. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/unmanaged_import.py +1 -0
  32. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/workflow.py +17 -4
  33. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/workspace_config.py +4 -1
  34. comfygit_core-0.7.1/src/comfygit_core/repositories/credential_store.py +62 -0
  35. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/workspace_config_repository.py +100 -80
  36. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/runtime.py +16 -0
  37. comfygit_core-0.7.1/src/comfygit_core/security.py +21 -0
  38. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/build_readiness.py +25 -3
  39. comfygit_core-0.7.1/src/comfygit_core/services/credential_service.py +202 -0
  40. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/environment_readiness.py +4 -2
  41. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/environment_sync_coordinator.py +12 -2
  42. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/import_analyzer.py +4 -0
  43. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/model_downloader.py +35 -7
  44. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/model_source_lookup.py +1 -1
  45. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/node_lookup_service.py +1 -1
  46. comfygit_core-0.7.1/src/comfygit_core/services/resource_inventory.py +514 -0
  47. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/unmanaged_environment_import.py +5 -1
  48. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_execution.py +9 -2
  49. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_manifest_reconciler.py +10 -1
  50. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_model_download_coordinator.py +136 -0
  51. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/comfyui_ops.py +99 -7
  52. comfygit_core-0.7.1/src/comfygit_core/utils/environment_lock.py +196 -0
  53. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/filesystem.py +18 -0
  54. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/git.py +3 -0
  55. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/pytorch_prober.py +22 -3
  56. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/redaction.py +55 -2
  57. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/requirements.py +2 -2
  58. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/conftest.py +38 -1
  59. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_create_with_version_spec.py +16 -0
  60. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_import_comfyui_version_bug.py +17 -11
  61. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_per_environment_manager.py +2 -2
  62. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_repair_node_removal.py +1 -1
  63. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/test_public_api.py +32 -2
  64. comfygit_core-0.7.1/tests/unit/analyzers/test_model_scanner_symlinks.py +44 -0
  65. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/caching/test_comfyui_cache.py +32 -4
  66. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/caching/test_custom_node_cache_refactor.py +13 -0
  67. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_environment_operation_locking.py +8 -1
  68. comfygit_core-0.7.1/tests/unit/core/test_environment_shared_reads.py +85 -0
  69. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_import_download_failures.py +4 -3
  70. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_import_no_manager.py +32 -0
  71. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_workspace_environment_creation.py +0 -1
  72. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_environment_model_manager.py +40 -0
  73. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_node_manager.py +34 -1
  74. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_pyproject_manager.py +8 -1
  75. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_workflow_manager.py +34 -0
  76. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_workflow_subgraph.py +24 -0
  77. comfygit_core-0.7.1/tests/unit/repositories/test_credential_store.py +57 -0
  78. comfygit_core-0.7.1/tests/unit/services/test_credential_service.py +275 -0
  79. comfygit_core-0.7.1/tests/unit/services/test_environment_model_requirements.py +142 -0
  80. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_environment_readiness.py +2 -0
  81. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_model_downloader.py +36 -4
  82. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_node_lookup_version_fallback.py +7 -7
  83. comfygit_core-0.7.1/tests/unit/services/test_resource_inventory.py +437 -0
  84. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_unmanaged_environment_import.py +1 -0
  85. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_execution.py +11 -0
  86. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_model_download_coordinator.py +110 -0
  87. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_github_auth_config.py +10 -5
  88. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_materialization.py +34 -0
  89. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_model_downloader_errors.py +3 -3
  90. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_workspace_config_facade.py +22 -3
  91. comfygit_core-0.7.1/tests/unit/test_workspace_credential_overrides.py +81 -0
  92. comfygit_core-0.7.1/tests/unit/utils/test_comfyui_ops_source.py +99 -0
  93. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_environment_cleanup.py +0 -1
  94. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_filesystem.py +0 -1
  95. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_git.py +10 -0
  96. comfygit_core-0.7.1/tests/unit/utils/test_provider_auth_hardening.py +80 -0
  97. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_pytorch_prober.py +60 -1
  98. comfygit_core-0.6.0/PKG-INFO +0 -487
  99. comfygit_core-0.6.0/README.md +0 -468
  100. comfygit_core-0.6.0/src/comfygit_core/utils/environment_lock.py +0 -111
  101. comfygit_core-0.6.0/tests/unit/utils/test_provider_auth_hardening.py +0 -33
  102. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/.gitignore +0 -0
  103. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/.python-version +0 -0
  104. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/AGENTS.md +0 -0
  105. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/CLAUDE.md +0 -0
  106. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/LICENSE.txt +0 -0
  107. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/architecture-deep-dive.md +0 -0
  108. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/knowledge/comfyui-node-loader-base-directories.md +0 -0
  109. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/knowledge/model-tracking-system.md +0 -0
  110. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/knowledge/node-resolution-behavior.md +0 -0
  111. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/layer-hierarchy.md +0 -0
  112. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/docs/plans/uv-overlay-system.md +0 -0
  113. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/__init__.py +0 -0
  114. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/__init__.py +0 -0
  115. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/config_comparison.py +0 -0
  116. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/custom_node_scanner.py +0 -0
  117. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/git_change_parser.py +0 -0
  118. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/node_classifier.py +0 -0
  119. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/node_git_analyzer.py +0 -0
  120. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/ref_diff_analyzer.py +0 -0
  121. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/status_scanner.py +0 -0
  122. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/analyzers/workflow_dependency_parser.py +0 -0
  123. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/assets.py +0 -0
  124. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/build_readiness.py +0 -0
  125. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/__init__.py +0 -0
  126. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/api_cache.py +0 -0
  127. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/base.py +0 -0
  128. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/caching/workflow_cache.py +0 -0
  129. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/clients/__init__.py +0 -0
  130. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/clients/github_client.py +0 -0
  131. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/clients/registry_client.py +0 -0
  132. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/configs/__init__.py +0 -0
  133. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/configs/comfyui_builtin_nodes.py +0 -0
  134. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/configs/comfyui_models.py +0 -0
  135. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/configs/model_config.py +0 -0
  136. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/configs/package_config.py +0 -0
  137. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/confirmation.py +0 -0
  138. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/core/__init__.py +0 -0
  139. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/data/overlays/stock/sageattention.toml +0 -0
  140. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/data/overlays/stock/triton.toml +0 -0
  141. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/data/overlays/stock/xformers.toml +0 -0
  142. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/factories/__init__.py +0 -0
  143. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/factories/uv_factory.py +0 -0
  144. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/git.py +0 -0
  145. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/imports.py +0 -0
  146. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/infrastructure/__init__.py +0 -0
  147. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/infrastructure/sqlite_manager.py +0 -0
  148. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/integrations/__init__.py +0 -0
  149. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/integrations/uv_command.py +0 -0
  150. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/lifecycle/__init__.py +0 -0
  151. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/lifecycle/comfyui_readiness.py +0 -0
  152. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/logging/__init__.py +0 -0
  153. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/logging/logging_config.py +0 -0
  154. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/__init__.py +0 -0
  155. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/environment_git_orchestrator.py +0 -0
  156. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/export_import_manager.py +0 -0
  157. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/git_manager.py +0 -0
  158. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/model_symlink_manager.py +0 -0
  159. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/overlay_manager.py +0 -0
  160. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/pyproject_manager.py +0 -0
  161. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/pytorch_backend_manager.py +0 -0
  162. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/system_node_symlink_manager.py +0 -0
  163. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/user_content_symlink_manager.py +0 -0
  164. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/managers/uv_project_manager.py +0 -0
  165. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/__init__.py +0 -0
  166. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/base.py +0 -0
  167. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/dependencies.py +0 -0
  168. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/disposable_project.py +0 -0
  169. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/migrations.py +0 -0
  170. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/nodes.py +0 -0
  171. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/overlays.py +0 -0
  172. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/store.py +0 -0
  173. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/sync_config.py +0 -0
  174. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/manifest/uv_config.py +0 -0
  175. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/merging/__init__.py +0 -0
  176. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/merging/atomic_executor.py +0 -0
  177. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/merging/merge_validator.py +0 -0
  178. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/civitai.py +0 -0
  179. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/comfyui_builtin_versions.py +0 -0
  180. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/commit.py +0 -0
  181. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/dependency_resolution.py +0 -0
  182. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/environment.py +0 -0
  183. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/git.py +0 -0
  184. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/lifecycle.py +0 -0
  185. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/materialization.py +0 -0
  186. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/merge_plan.py +0 -0
  187. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/model_scan.py +0 -0
  188. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/node_mapping.py +0 -0
  189. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/overlay.py +0 -0
  190. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/protocols.py +0 -0
  191. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/readiness.py +0 -0
  192. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/ref_diff.py +0 -0
  193. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/registry.py +0 -0
  194. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/runtime_config.py +0 -0
  195. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/sync.py +0 -0
  196. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/system.py +0 -0
  197. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/workflow_contract.py +0 -0
  198. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/models/workflow_execution.py +0 -0
  199. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/py.typed +0 -0
  200. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/readiness.py +0 -0
  201. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/__init__.py +0 -0
  202. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/comfyui_builtin_versions_repository.py +0 -0
  203. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/migrate_paths.py +0 -0
  204. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/model_repository.py +0 -0
  205. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/node_mappings_repository.py +0 -0
  206. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/repositories/workflow_repository.py +0 -0
  207. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/resolvers/__init__.py +0 -0
  208. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/resolvers/global_node_resolver.py +0 -0
  209. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/resolvers/model_resolver.py +0 -0
  210. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/__init__.py +0 -0
  211. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/dependency_resolution_preview.py +0 -0
  212. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/environment_lifecycle.py +0 -0
  213. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/huggingface_url.py +0 -0
  214. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/registry_data_manager.py +0 -0
  215. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_analysis_cache.py +0 -0
  216. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_analysis_service.py +0 -0
  217. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_file_store.py +0 -0
  218. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_input.py +0 -0
  219. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_manual_model_policy.py +0 -0
  220. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_model_dependency_service.py +0 -0
  221. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_model_path_policy.py +0 -0
  222. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_node_package_policy.py +0 -0
  223. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_resolution_context_builder.py +0 -0
  224. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_resolution_fixer.py +0 -0
  225. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_resolution_service.py +0 -0
  226. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/services/workflow_state_cleanup.py +0 -0
  227. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/strategies/__init__.py +0 -0
  228. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/strategies/auto.py +0 -0
  229. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/strategies/confirmation.py +0 -0
  230. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/__init__.py +0 -0
  231. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/builtin_extractor.py +0 -0
  232. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/common.py +0 -0
  233. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/conflict_analyzer.py +0 -0
  234. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/conflict_parser.py +0 -0
  235. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/dependency_parser.py +0 -0
  236. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/dependency_probe.py +0 -0
  237. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/download.py +0 -0
  238. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/environment_cleanup.py +0 -0
  239. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/folder_paths_extractor.py +0 -0
  240. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/input_signature.py +0 -0
  241. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/model_categories.py +0 -0
  242. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/model_loader_extractor.py +0 -0
  243. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/node_identity.py +0 -0
  244. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/provider_urls.py +0 -0
  245. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/pytorch.py +0 -0
  246. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/retry.py +0 -0
  247. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/symlink_utils.py +0 -0
  248. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/system_detector.py +0 -0
  249. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/toml_compat.py +0 -0
  250. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/uuid.py +0 -0
  251. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/uv_error_handler.py +0 -0
  252. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/version.py +0 -0
  253. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/utils/workflow_hash.py +0 -0
  254. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/validation/__init__.py +0 -0
  255. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/validation/resolution_tester.py +0 -0
  256. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/src/comfygit_core/workflow.py +0 -0
  257. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/README.md +0 -0
  258. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/caching/TEST_REDUCTION_SUMMARY.md +0 -0
  259. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/caching/__init__.py +0 -0
  260. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/caching/test_workflow_cache.py +0 -0
  261. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/caching/test_workflow_cache_context_hash.py +0 -0
  262. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/models/test_models.json +0 -0
  263. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/checkpoint_loader_with_missing_model.json +0 -0
  264. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/kjnodes_workflow.json +0 -0
  265. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/simple_txt2img.json +0 -0
  266. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/with_custom_node.json +0 -0
  267. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/with_missing_model.json +0 -0
  268. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/workflow_with_duplicates.json +0 -0
  269. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/workflow_with_properties.json +0 -0
  270. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/fixtures/workflows/workflow_without_properties.json +0 -0
  271. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/helpers/__init__.py +0 -0
  272. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/helpers/model_index_builder.py +0 -0
  273. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/helpers/pyproject_assertions.py +0 -0
  274. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/helpers/workflow_builder.py +0 -0
  275. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_atomic_semantic_merge.py +0 -0
  276. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_auto_model_index_sync.py +0 -0
  277. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_branch_workflow_preservation.py +0 -0
  278. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_cache_invalidation_on_model_deletion.py +0 -0
  279. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_cache_node_version_invalidation.py +0 -0
  280. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_checkout_b_with_modified_workflow.py +0 -0
  281. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_commit_git_changes.py +0 -0
  282. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_commit_git_changes_SUMMARY.md +0 -0
  283. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_commit_history.py +0 -0
  284. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_context_aware_node_resolution.py +0 -0
  285. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_custom_node_path_preservation.py +0 -0
  286. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_deferred_model_downloads.py +0 -0
  287. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_deleted_model_download_intent.py +0 -0
  288. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_dependency_group_removal.py +0 -0
  289. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_dev_node_git_references.py +0 -0
  290. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_dev_node_improvements.py +0 -0
  291. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_download_cleanup.py +0 -0
  292. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_download_intent_cache_invalidation.py +0 -0
  293. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_environment_basic.py +0 -0
  294. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_environment_branching.py +0 -0
  295. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_environment_create_progress.py +0 -0
  296. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_export_import.py +0 -0
  297. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_git_branching.py +0 -0
  298. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_git_import.py +0 -0
  299. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_git_pull_push.py +0 -0
  300. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_git_remote.py +0 -0
  301. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_git_subdirectory_import.py +0 -0
  302. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_import_auto_remote.py +0 -0
  303. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_import_preview.py +0 -0
  304. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_lifecycle_status.py +0 -0
  305. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_category_mismatch_detection.py +0 -0
  306. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_directory_switch.py +0 -0
  307. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_download_integration.py +0 -0
  308. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_index_mismatch_bug_SUMMARY.md +0 -0
  309. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_path_sync_detection.py +0 -0
  310. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_resolution_stale_directory.py +0 -0
  311. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_show_command.py +0 -0
  312. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_source_management.py +0 -0
  313. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_source_preservation.py +0 -0
  314. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_source_preservation_SUMMARY.md +0 -0
  315. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_model_source_removal.py +0 -0
  316. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_multiple_optional_group_failures.py +0 -0
  317. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_node_prune.py +0 -0
  318. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_node_version_replacement.py +0 -0
  319. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_opencv_conflict_resolution.py +0 -0
  320. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_optional_dependency_groups.py +0 -0
  321. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_overlay_e2e.py +0 -0
  322. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_overlay_git_integration.py +0 -0
  323. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_overlay_system_integration.py +0 -0
  324. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_package_config.py +0 -0
  325. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_pyproject_batch_writes.py +0 -0
  326. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_pytorch_reconfiguration.py +0 -0
  327. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_registry_git_fallback.py +0 -0
  328. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_registry_node_update_empty_download_url.py +0 -0
  329. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_repair_completion_marker.py +0 -0
  330. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_repair_model_download.py +0 -0
  331. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_repair_workflow.py +0 -0
  332. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_requirements_inline_comments_bug.py +0 -0
  333. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_runtime_restart_workflow_preservation.py +0 -0
  334. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_status_abstraction.py +0 -0
  335. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_status_uninstalled_nodes.py +0 -0
  336. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_cache_metadata_invalidation.py +0 -0
  337. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_caching_integration.py +0 -0
  338. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_commit_flow.py +0 -0
  339. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_deletion_cleanup.py +0 -0
  340. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_model_criticality_update.py +0 -0
  341. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_path_update_after_interactive_resolution.py +0 -0
  342. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_resolution_cleanup.py +0 -0
  343. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_resolution_pipeline.py +0 -0
  344. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_resolve_install.py +0 -0
  345. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/integration/test_workflow_subgraph_resolution.py +0 -0
  346. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/test_architecture_boundaries.py +0 -0
  347. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_config_comparison.py +0 -0
  348. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_custom_node_scanner.py +0 -0
  349. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_node_git_analyzer.py +0 -0
  350. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_ref_diff_analyzer.py +0 -0
  351. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_status_scanner.py +0 -0
  352. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_status_scanner_disabled_nodes.py +0 -0
  353. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_status_scanner_package_sync.py +0 -0
  354. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/analyzers/test_workflow_dependency_parser.py +0 -0
  355. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/caching/test_cache_base.py +0 -0
  356. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/caching/test_workspace_relative_caching.py +0 -0
  357. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/clients/test_civitai_client.py +0 -0
  358. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/clients/test_civitai_parsing.py +0 -0
  359. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/clients/test_github_releases.py +0 -0
  360. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/configs/__init__.py +0 -0
  361. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/configs/test_package_config.py +0 -0
  362. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_environment_facades.py +0 -0
  363. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_environment_run.py +0 -0
  364. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_environment_sync.py +0 -0
  365. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_environment_uninstalled_nodes.py +0 -0
  366. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_reserved_environment_names.py +0 -0
  367. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_sync_node_dependency_provisioning.py +0 -0
  368. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_workflow_contract_access.py +0 -0
  369. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/core/test_workspace_model_delete.py +0 -0
  370. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/factories/test_environment_factory_manager_install.py +0 -0
  371. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/lifecycle/test_comfyui_readiness.py +0 -0
  372. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_export_import_overlays.py +0 -0
  373. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_git_manager_gitignore.py +0 -0
  374. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_git_manager_log_refs.py +0 -0
  375. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_model_index_manager.py +0 -0
  376. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_model_short_hash.py +0 -0
  377. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_node_conflict_detection.py +0 -0
  378. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_overlay_fuzz.py +0 -0
  379. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_overlay_manager.py +0 -0
  380. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_overlay_materialization.py +0 -0
  381. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_pyproject_schema_version.py +0 -0
  382. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_pytorch_backend_manager.py +0 -0
  383. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_pytorch_overlay_materialization.py +0 -0
  384. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_pytorch_stripping.py +0 -0
  385. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_sqlite_manager.py +0 -0
  386. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_uv_no_build_isolation.py +0 -0
  387. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_workflow_node_cleanup.py +0 -0
  388. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/managers/test_workflow_status.py +0 -0
  389. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/merging/__init__.py +0 -0
  390. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/merging/test_atomic_executor.py +0 -0
  391. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/merging/test_merge_validator.py +0 -0
  392. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/merging/test_semantic_merger.py +0 -0
  393. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_comfyui_builtin_versions.py +0 -0
  394. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_lifecycle.py +0 -0
  395. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_overlay.py +0 -0
  396. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_ref_diff.py +0 -0
  397. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_workflow_contract.py +0 -0
  398. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_workflow_dependencies.py +0 -0
  399. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/models/test_workflow_roundtrip.py +0 -0
  400. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/resolvers/test_global_node_resolver_v2.py +0 -0
  401. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/resolvers/test_model_resolver.py +0 -0
  402. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_build_readiness.py +0 -0
  403. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_dependency_resolution_preview.py +0 -0
  404. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_environment_lifecycle.py +0 -0
  405. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_global_node_resolver.py +0 -0
  406. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_huggingface_url.py +0 -0
  407. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_import_analyzer.py +0 -0
  408. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_model_source_lookup.py +0 -0
  409. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_node_lookup_api_first.py +0 -0
  410. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_registry_data_manager.py +0 -0
  411. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_scan_requirements_substitution.py +0 -0
  412. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_analysis_cache.py +0 -0
  413. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_analysis_service.py +0 -0
  414. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_file_store.py +0 -0
  415. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_input.py +0 -0
  416. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_model_dependency_service.py +0 -0
  417. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_model_path_policy.py +0 -0
  418. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_resolution_context_builder.py +0 -0
  419. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_resolution_fixer.py +0 -0
  420. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_resolution_service.py +0 -0
  421. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/services/test_workflow_state_cleanup.py +0 -0
  422. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_add_dependencies_substitution.py +0 -0
  423. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_auto_strategies.py +0 -0
  424. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_builtin_extractor.py +0 -0
  425. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_dev_node_rename_detection.py +0 -0
  426. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_environment_py_dependencies.py +0 -0
  427. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_external_uv_cache.py +0 -0
  428. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_folder_paths_extractor.py +0 -0
  429. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_github_url_installation.py +0 -0
  430. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_headless_import.py +0 -0
  431. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_minimal_schema_compatibility.py +0 -0
  432. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_model_config_dynamic_loading.py +0 -0
  433. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_model_loader_extractor.py +0 -0
  434. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_model_repository_cleanup.py +0 -0
  435. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_model_symlink_manager.py +0 -0
  436. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_node_callbacks.py +0 -0
  437. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_node_conflict_context.py +0 -0
  438. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_node_mappings_repository.py +0 -0
  439. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_node_resolution_context.py +0 -0
  440. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_unified_node_search.py +0 -0
  441. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_user_content_symlink_manager.py +0 -0
  442. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_uv_error_handling.py +0 -0
  443. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_uv_error_parser.py +0 -0
  444. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_workflow_manager_deduplication.py +0 -0
  445. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/test_workspace_config_resilience.py +0 -0
  446. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_conflict_analyzer.py +0 -0
  447. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_conflict_parser.py +0 -0
  448. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_dependency_parser.py +0 -0
  449. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_dependency_probe.py +0 -0
  450. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_input_signature.py +0 -0
  451. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_node_identity.py +0 -0
  452. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_pytorch.py +0 -0
  453. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_requirements.py +0 -0
  454. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_symlink_utils.py +0 -0
  455. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_uuid.py +0 -0
  456. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/unit/utils/test_version.py +0 -0
  457. {comfygit_core-0.6.0 → comfygit_core-0.7.1}/tests/utils/__init__.py +0 -0
  458. {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.6.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
- "huggingface_hub>=0.11.0",
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
- "uv>=0.11.8",
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
- if not file_path.is_file() or file_path.is_symlink():
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
- # Use commit SHA for branches (they can change)
64
- if spec.version_type == "branch" and spec.commit_sha:
65
- return f"commit_{spec.commit_sha}"
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
- # For releases and commits, use the version
68
- return f"{spec.version_type}_{spec.version}"
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 get_cached_path(self, node_info: NodeInfo) -> Path | None:
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.get_cached_path(node_info)
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
- # Resolve API key: direct > environment > config
86
- self._api_key = api_key
87
- if not self._api_key:
88
- self._api_key = os.environ.get("CIVITAI_API_TOKEN")
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"