comfygit-core 0.4.0__tar.gz → 0.4.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/PKG-INFO +1 -1
  2. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/pyproject.toml +1 -1
  3. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/workflow_dependency_parser.py +109 -37
  4. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/workflow_cache.py +39 -3
  5. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/configs/__init__.py +2 -2
  6. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/configs/comfyui_models.py +10 -0
  7. comfygit_core-0.4.2/src/comfygit_core/configs/model_config.py +416 -0
  8. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/core/environment.py +69 -5
  9. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/factories/environment_factory.py +11 -0
  10. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/environment_model_manager.py +31 -2
  11. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/git_manager.py +4 -0
  12. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/node_manager.py +263 -37
  13. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/workflow_manager.py +257 -5
  14. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/__init__.py +1 -0
  15. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/manifest.py +6 -2
  16. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/shared.py +15 -0
  17. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/workflow.py +12 -0
  18. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/__init__.py +2 -0
  19. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/model_repository.py +38 -30
  20. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/resolvers/global_node_resolver.py +40 -12
  21. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/environment_readiness.py +1 -1
  22. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_resolution_service.py +1 -1
  23. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/comfyui_ops.py +1 -1
  24. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/git.py +13 -6
  25. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/model_categories.py +12 -2
  26. comfygit_core-0.4.2/src/comfygit_core/utils/model_loader_extractor.py +349 -0
  27. comfygit_core-0.4.2/src/comfygit_core/utils/node_identity.py +60 -0
  28. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/caching/test_workflow_cache_context_hash.py +73 -0
  29. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_per_environment_manager.py +97 -0
  30. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_registry_node_update_empty_download_url.py +5 -12
  31. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/analyzers/test_workflow_dependency_parser.py +110 -0
  32. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_environment_uninstalled_nodes.py +29 -0
  33. comfygit_core-0.4.2/tests/unit/managers/test_environment_model_manager.py +92 -0
  34. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_git_manager_gitignore.py +13 -2
  35. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_model_short_hash.py +10 -1
  36. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_node_manager.py +130 -0
  37. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_pyproject_manager.py +24 -0
  38. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_workflow_manager.py +179 -0
  39. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_environment_readiness.py +23 -1
  40. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_model_config_dynamic_loading.py +48 -0
  41. comfygit_core-0.4.2/tests/unit/test_model_loader_extractor.py +80 -0
  42. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_node_resolution_context.py +61 -0
  43. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_git.py +10 -0
  44. comfygit_core-0.4.2/tests/unit/utils/test_node_identity.py +48 -0
  45. comfygit_core-0.4.0/src/comfygit_core/configs/model_config.py +0 -224
  46. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/.gitignore +0 -0
  47. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/.python-version +0 -0
  48. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/AGENTS.md +0 -0
  49. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/CLAUDE.md +0 -0
  50. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/LICENSE.txt +0 -0
  51. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/README.md +0 -0
  52. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/architecture-deep-dive.md +0 -0
  53. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/architecture.md +0 -0
  54. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/knowledge/comfyui-node-loader-base-directories.md +0 -0
  55. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/knowledge/model-tracking-system.md +0 -0
  56. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/knowledge/node-resolution-behavior.md +0 -0
  57. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/layer-hierarchy.md +0 -0
  58. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/docs/plans/uv-overlay-system.md +0 -0
  59. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/__init__.py +0 -0
  60. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/__init__.py +0 -0
  61. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/config_comparison.py +0 -0
  62. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/custom_node_scanner.py +0 -0
  63. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/git_change_parser.py +0 -0
  64. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/model_scanner.py +0 -0
  65. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/node_classifier.py +0 -0
  66. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/node_git_analyzer.py +0 -0
  67. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/ref_diff_analyzer.py +0 -0
  68. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/analyzers/status_scanner.py +0 -0
  69. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/__init__.py +0 -0
  70. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/api_cache.py +0 -0
  71. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/base.py +0 -0
  72. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/comfyui_cache.py +0 -0
  73. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/caching/custom_node_cache.py +0 -0
  74. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/clients/__init__.py +0 -0
  75. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/clients/civitai_client.py +0 -0
  76. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/clients/github_client.py +0 -0
  77. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/clients/registry_client.py +0 -0
  78. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/configs/comfyui_builtin_nodes.py +0 -0
  79. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/configs/package_config.py +0 -0
  80. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/constants.py +0 -0
  81. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/core/__init__.py +0 -0
  82. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/core/workspace.py +0 -0
  83. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/sageattention.toml +0 -0
  84. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/triton.toml +0 -0
  85. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/data/overlays/stock/xformers.toml +0 -0
  86. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/factories/__init__.py +0 -0
  87. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/factories/uv_factory.py +0 -0
  88. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/factories/workspace_factory.py +0 -0
  89. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/infrastructure/__init__.py +0 -0
  90. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/infrastructure/sqlite_manager.py +0 -0
  91. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/integrations/__init__.py +0 -0
  92. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/integrations/uv_command.py +0 -0
  93. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/lifecycle/__init__.py +0 -0
  94. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/lifecycle/comfyui_readiness.py +0 -0
  95. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/lifecycle/switch_observer.py +0 -0
  96. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/logging/__init__.py +0 -0
  97. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/logging/logging_config.py +0 -0
  98. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/__init__.py +0 -0
  99. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/environment_git_orchestrator.py +0 -0
  100. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/export_import_manager.py +0 -0
  101. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/model_download_manager.py +0 -0
  102. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/model_symlink_manager.py +0 -0
  103. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/overlay_manager.py +0 -0
  104. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/pyproject_manager.py +0 -0
  105. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/pytorch_backend_manager.py +0 -0
  106. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/system_node_symlink_manager.py +0 -0
  107. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/user_content_symlink_manager.py +0 -0
  108. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/managers/uv_project_manager.py +0 -0
  109. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/merging/__init__.py +0 -0
  110. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/merging/atomic_executor.py +0 -0
  111. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/merging/merge_validator.py +0 -0
  112. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/merging/semantic_merger.py +0 -0
  113. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/civitai.py +0 -0
  114. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/comfyui_builtin_versions.py +0 -0
  115. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/commit.py +0 -0
  116. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/dependency_resolution.py +0 -0
  117. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/environment.py +0 -0
  118. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/exceptions.py +0 -0
  119. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/materialization.py +0 -0
  120. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/merge_plan.py +0 -0
  121. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/node_mapping.py +0 -0
  122. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/overlay.py +0 -0
  123. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/protocols.py +0 -0
  124. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/readiness.py +0 -0
  125. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/ref_diff.py +0 -0
  126. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/registry.py +0 -0
  127. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/sync.py +0 -0
  128. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/system.py +0 -0
  129. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/workflow_contract.py +0 -0
  130. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/workflow_execution.py +0 -0
  131. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/models/workspace_config.py +0 -0
  132. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/py.typed +0 -0
  133. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/comfyui_builtin_versions_repository.py +0 -0
  134. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/migrate_paths.py +0 -0
  135. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/node_mappings_repository.py +0 -0
  136. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/workflow_repository.py +0 -0
  137. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/repositories/workspace_config_repository.py +0 -0
  138. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/resolvers/__init__.py +0 -0
  139. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/resolvers/model_resolver.py +0 -0
  140. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/__init__.py +0 -0
  141. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/dependency_resolution_preview.py +0 -0
  142. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/huggingface_url.py +0 -0
  143. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/import_analyzer.py +0 -0
  144. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/model_downloader.py +0 -0
  145. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/model_source_lookup.py +0 -0
  146. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/node_lookup_service.py +0 -0
  147. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/registry_data_manager.py +0 -0
  148. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_analysis_service.py +0 -0
  149. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_execution.py +0 -0
  150. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/services/workflow_input.py +0 -0
  151. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/strategies/__init__.py +0 -0
  152. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/strategies/auto.py +0 -0
  153. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/strategies/confirmation.py +0 -0
  154. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/__init__.py +0 -0
  155. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/builtin_extractor.py +0 -0
  156. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/common.py +0 -0
  157. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/conflict_analyzer.py +0 -0
  158. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/conflict_parser.py +0 -0
  159. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/dependency_parser.py +0 -0
  160. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/dependency_probe.py +0 -0
  161. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/download.py +0 -0
  162. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/environment_cleanup.py +0 -0
  163. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/environment_lock.py +0 -0
  164. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/filesystem.py +0 -0
  165. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/folder_paths_extractor.py +0 -0
  166. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/input_signature.py +0 -0
  167. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/pytorch.py +0 -0
  168. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/pytorch_prober.py +0 -0
  169. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/requirements.py +0 -0
  170. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/retry.py +0 -0
  171. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/symlink_utils.py +0 -0
  172. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/system_detector.py +0 -0
  173. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/uuid.py +0 -0
  174. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/uv_error_handler.py +0 -0
  175. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/version.py +0 -0
  176. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/utils/workflow_hash.py +0 -0
  177. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/validation/__init__.py +0 -0
  178. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/src/comfygit_core/validation/resolution_tester.py +0 -0
  179. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/README.md +0 -0
  180. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/caching/TEST_REDUCTION_SUMMARY.md +0 -0
  181. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/caching/__init__.py +0 -0
  182. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/caching/test_workflow_cache.py +0 -0
  183. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/conftest.py +0 -0
  184. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/models/test_models.json +0 -0
  185. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/checkpoint_loader_with_missing_model.json +0 -0
  186. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/kjnodes_workflow.json +0 -0
  187. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/simple_txt2img.json +0 -0
  188. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/with_custom_node.json +0 -0
  189. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/with_missing_model.json +0 -0
  190. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/workflow_with_duplicates.json +0 -0
  191. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/workflow_with_properties.json +0 -0
  192. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/fixtures/workflows/workflow_without_properties.json +0 -0
  193. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/helpers/__init__.py +0 -0
  194. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/helpers/model_index_builder.py +0 -0
  195. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/helpers/pyproject_assertions.py +0 -0
  196. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/helpers/workflow_builder.py +0 -0
  197. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_atomic_semantic_merge.py +0 -0
  198. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_auto_model_index_sync.py +0 -0
  199. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_branch_workflow_preservation.py +0 -0
  200. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_cache_invalidation_on_model_deletion.py +0 -0
  201. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_cache_node_version_invalidation.py +0 -0
  202. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_checkout_b_with_modified_workflow.py +0 -0
  203. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_commit_git_changes.py +0 -0
  204. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_commit_git_changes_SUMMARY.md +0 -0
  205. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_commit_history.py +0 -0
  206. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_context_aware_node_resolution.py +0 -0
  207. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_create_with_version_spec.py +0 -0
  208. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_custom_node_path_preservation.py +0 -0
  209. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_deferred_model_downloads.py +0 -0
  210. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_deleted_model_download_intent.py +0 -0
  211. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_dependency_group_removal.py +0 -0
  212. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_dev_node_git_references.py +0 -0
  213. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_dev_node_improvements.py +0 -0
  214. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_download_cleanup.py +0 -0
  215. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_download_intent_cache_invalidation.py +0 -0
  216. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_environment_basic.py +0 -0
  217. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_environment_branching.py +0 -0
  218. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_environment_create_progress.py +0 -0
  219. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_export_import.py +0 -0
  220. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_git_branching.py +0 -0
  221. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_git_import.py +0 -0
  222. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_git_pull_push.py +0 -0
  223. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_git_remote.py +0 -0
  224. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_git_subdirectory_import.py +0 -0
  225. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_import_auto_remote.py +0 -0
  226. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_import_comfyui_version_bug.py +0 -0
  227. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_import_preview.py +0 -0
  228. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_category_mismatch_detection.py +0 -0
  229. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_directory_switch.py +0 -0
  230. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_download_integration.py +0 -0
  231. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_index_mismatch_bug_SUMMARY.md +0 -0
  232. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_path_sync_detection.py +0 -0
  233. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_resolution_stale_directory.py +0 -0
  234. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_show_command.py +0 -0
  235. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_source_management.py +0 -0
  236. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_source_preservation.py +0 -0
  237. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_source_preservation_SUMMARY.md +0 -0
  238. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_model_source_removal.py +0 -0
  239. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_multiple_optional_group_failures.py +0 -0
  240. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_node_prune.py +0 -0
  241. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_node_version_replacement.py +0 -0
  242. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_opencv_conflict_resolution.py +0 -0
  243. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_optional_dependency_groups.py +0 -0
  244. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_overlay_e2e.py +0 -0
  245. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_overlay_git_integration.py +0 -0
  246. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_overlay_system_integration.py +0 -0
  247. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_package_config.py +0 -0
  248. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_pyproject_batch_writes.py +0 -0
  249. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_pytorch_reconfiguration.py +0 -0
  250. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_registry_git_fallback.py +0 -0
  251. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_repair_completion_marker.py +0 -0
  252. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_repair_model_download.py +0 -0
  253. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_repair_node_removal.py +0 -0
  254. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_repair_workflow.py +0 -0
  255. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_requirements_inline_comments_bug.py +0 -0
  256. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_runtime_restart_workflow_preservation.py +0 -0
  257. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_status_abstraction.py +0 -0
  258. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_status_uninstalled_nodes.py +0 -0
  259. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_caching_integration.py +0 -0
  260. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_commit_flow.py +0 -0
  261. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_deletion_cleanup.py +0 -0
  262. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_model_criticality_update.py +0 -0
  263. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_path_update_after_interactive_resolution.py +0 -0
  264. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_resolution_cleanup.py +0 -0
  265. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_resolution_pipeline.py +0 -0
  266. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_resolve_install.py +0 -0
  267. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/integration/test_workflow_subgraph_resolution.py +0 -0
  268. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/test_public_api.py +0 -0
  269. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/analyzers/test_config_comparison.py +0 -0
  270. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/analyzers/test_custom_node_scanner.py +0 -0
  271. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/analyzers/test_ref_diff_analyzer.py +0 -0
  272. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/analyzers/test_status_scanner_disabled_nodes.py +0 -0
  273. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/caching/test_cache_base.py +0 -0
  274. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/caching/test_comfyui_cache.py +0 -0
  275. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/caching/test_custom_node_cache_refactor.py +0 -0
  276. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/caching/test_workspace_relative_caching.py +0 -0
  277. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/clients/test_civitai_client.py +0 -0
  278. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/clients/test_civitai_parsing.py +0 -0
  279. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/clients/test_github_releases.py +0 -0
  280. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/configs/__init__.py +0 -0
  281. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/configs/test_package_config.py +0 -0
  282. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_environment_operation_locking.py +0 -0
  283. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_import_download_failures.py +0 -0
  284. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_import_no_manager.py +0 -0
  285. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_reserved_environment_names.py +0 -0
  286. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_sync_node_dependency_provisioning.py +0 -0
  287. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/core/test_workspace_model_delete.py +0 -0
  288. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/factories/test_environment_factory_manager_install.py +0 -0
  289. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/lifecycle/test_comfyui_readiness.py +0 -0
  290. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_export_import_overlays.py +0 -0
  291. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_git_manager_log_refs.py +0 -0
  292. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_model_index_manager.py +0 -0
  293. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_node_conflict_detection.py +0 -0
  294. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_overlay_fuzz.py +0 -0
  295. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_overlay_injection.py +0 -0
  296. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_overlay_manager.py +0 -0
  297. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_pyproject_schema_version.py +0 -0
  298. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_pytorch_backend_manager.py +0 -0
  299. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_pytorch_injection.py +0 -0
  300. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_pytorch_stripping.py +0 -0
  301. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_sqlite_manager.py +0 -0
  302. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_uv_no_build_isolation.py +0 -0
  303. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_workflow_node_cleanup.py +0 -0
  304. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/managers/test_workflow_status.py +0 -0
  305. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/merging/__init__.py +0 -0
  306. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/merging/test_atomic_executor.py +0 -0
  307. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/merging/test_merge_validator.py +0 -0
  308. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/merging/test_semantic_merger.py +0 -0
  309. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_comfyui_builtin_versions.py +0 -0
  310. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_overlay.py +0 -0
  311. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_ref_diff.py +0 -0
  312. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_workflow_dependencies.py +0 -0
  313. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_workflow_roundtrip.py +0 -0
  314. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/models/test_workflow_subgraph.py +0 -0
  315. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/resolvers/test_global_node_resolver_v2.py +0 -0
  316. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/resolvers/test_model_resolver.py +0 -0
  317. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_dependency_resolution_preview.py +0 -0
  318. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_global_node_resolver.py +0 -0
  319. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_huggingface_url.py +0 -0
  320. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_import_analyzer.py +0 -0
  321. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_model_downloader.py +0 -0
  322. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_model_source_lookup.py +0 -0
  323. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_node_lookup_api_first.py +0 -0
  324. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_node_lookup_version_fallback.py +0 -0
  325. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_registry_data_manager.py +0 -0
  326. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_scan_requirements_substitution.py +0 -0
  327. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_analysis_service.py +0 -0
  328. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_execution.py +0 -0
  329. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_input.py +0 -0
  330. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/services/test_workflow_resolution_service.py +0 -0
  331. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_add_dependencies_substitution.py +0 -0
  332. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_auto_strategies.py +0 -0
  333. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_builtin_extractor.py +0 -0
  334. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_dev_node_rename_detection.py +0 -0
  335. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_environment_py_dependencies.py +0 -0
  336. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_external_uv_cache.py +0 -0
  337. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_folder_paths_extractor.py +0 -0
  338. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_github_auth_config.py +0 -0
  339. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_github_url_installation.py +0 -0
  340. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_headless_import.py +0 -0
  341. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_materialization.py +0 -0
  342. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_minimal_schema_compatibility.py +0 -0
  343. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_model_downloader_errors.py +0 -0
  344. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_model_repository_cleanup.py +0 -0
  345. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_model_symlink_manager.py +0 -0
  346. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_node_callbacks.py +0 -0
  347. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_node_conflict_context.py +0 -0
  348. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_node_mappings_repository.py +0 -0
  349. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_unified_node_search.py +0 -0
  350. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_user_content_symlink_manager.py +0 -0
  351. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_uv_error_handling.py +0 -0
  352. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_uv_error_parser.py +0 -0
  353. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_workflow_manager_deduplication.py +0 -0
  354. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/test_workspace_config_resilience.py +0 -0
  355. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_conflict_analyzer.py +0 -0
  356. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_conflict_parser.py +0 -0
  357. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_dependency_parser.py +0 -0
  358. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_dependency_probe.py +0 -0
  359. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_environment_cleanup.py +0 -0
  360. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_input_signature.py +0 -0
  361. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_pytorch.py +0 -0
  362. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_pytorch_prober.py +0 -0
  363. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_requirements.py +0 -0
  364. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_symlink_utils.py +0 -0
  365. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_uuid.py +0 -0
  366. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/unit/utils/test_version.py +0 -0
  367. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/utils/__init__.py +0 -0
  368. {comfygit_core-0.4.0 → comfygit_core-0.4.2}/tests/utils/test_workflow_hash.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: comfygit-core
3
- Version: 0.4.0
3
+ Version: 0.4.2
4
4
  Summary: ComfyGit Core - Git-based ComfyUI environment manager
5
5
  Project-URL: Documentation, https://docs.comfygit.org/
6
6
  Project-URL: Repository, https://github.com/comfygit-ai/comfygit
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "comfygit-core"
3
- version = "0.4.0"
3
+ version = "0.4.2"
4
4
  description = "ComfyGit Core - Git-based ComfyUI environment manager"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -7,9 +7,10 @@ from typing import TYPE_CHECKING
7
7
  from comfygit_core.repositories.workflow_repository import WorkflowRepository
8
8
 
9
9
  from ..configs.comfyui_models import MULTI_MODEL_WIDGET_CONFIGS
10
- from ..configs.model_config import ModelConfig
10
+ from ..configs.model_config import ModelConfig, ModelLoaderWidgetMapping
11
11
  from ..logging.logging_config import get_logger
12
12
  from ..models.workflow import (
13
+ NodeInput,
13
14
  Workflow,
14
15
  WorkflowDependencies,
15
16
  WorkflowNode,
@@ -37,7 +38,7 @@ class WorkflowDependencyParser:
37
38
  builtin_versions_repository: ComfyUIBuiltinVersionsRepository | None = None,
38
39
  version_agnostic: bool = False,
39
40
  ):
40
- self.model_config = model_config or ModelConfig.load()
41
+ self.model_config = model_config or ModelConfig.load(cec_path=cec_path)
41
42
  self.cec_path = cec_path
42
43
  self.builtin_versions_repository = builtin_versions_repository
43
44
  self.version_agnostic = version_agnostic
@@ -115,8 +116,7 @@ class WorkflowDependencyParser:
115
116
 
116
117
  Uses explicit extraction strategies:
117
118
  1. Extract from properties.models (preferred - has URLs for auto-download)
118
- 2. Extract from known multi-model node widget configs
119
- 3. Extract from known single-model loader widget config
119
+ 2. Extract from configured/generated model-loader widget metadata
120
120
 
121
121
  Args:
122
122
  node_id: Scoped node ID from workflow.nodes dict key (e.g., "uuid:12" for subgraph nodes)
@@ -129,14 +129,11 @@ class WorkflowDependencyParser:
129
129
  if property_models:
130
130
  refs.extend(self._extract_from_properties_models(node_id, node_info, property_models))
131
131
 
132
- # Strategy 2: Multi-model nodes (explicit widget indices from config)
133
- if node_info.type in MULTI_MODEL_WIDGET_CONFIGS:
134
- widget_refs = self._extract_multi_model_widgets(node_id, node_info)
135
- refs = self._merge_model_refs(refs, widget_refs)
136
-
137
- # Strategy 3: Standard single-model loaders
138
- elif self.model_config.is_model_loader_node(node_info.type):
139
- widget_refs = self._extract_single_model_widget(node_id, node_info)
132
+ # Strategy 2: Generated/static model loader widget metadata
133
+ if self.model_config.is_model_loader_node(node_info.type):
134
+ widget_refs = self._extract_model_loader_widgets(node_id, node_info)
135
+ if not widget_refs:
136
+ widget_refs = self._extract_static_fallback_widgets(node_id, node_info)
140
137
  refs = self._merge_model_refs(refs, widget_refs)
141
138
 
142
139
  return refs
@@ -181,42 +178,117 @@ class WorkflowDependencyParser:
181
178
  return idx
182
179
  return None
183
180
 
184
- def _extract_multi_model_widgets(self, node_id: str, node_info: WorkflowNode) -> list[WorkflowNodeWidgetRef]:
185
- """Extract models from multi-model nodes using MULTI_MODEL_WIDGET_CONFIGS.
181
+ def _find_widget_index_for_input_name(
182
+ self,
183
+ inputs: list[NodeInput],
184
+ widget_name: str,
185
+ ) -> int | None:
186
+ """Find frontend widget index from ComfyUI input metadata."""
187
+ widget_idx = 0
188
+ for input_info in inputs:
189
+ if input_info.link is not None:
190
+ continue
191
+
192
+ widget_metadata = input_info.widget or {}
193
+ if widget_metadata:
194
+ candidate_names = {input_info.name}
195
+ metadata_name = widget_metadata.get("name")
196
+ if isinstance(metadata_name, str):
197
+ candidate_names.add(metadata_name)
198
+
199
+ if widget_name in candidate_names:
200
+ return widget_idx
201
+
202
+ widget_idx += 1
203
+
204
+ return None
205
+
206
+ def _resolve_model_widget_index(
207
+ self,
208
+ node_info: WorkflowNode,
209
+ mapping: ModelLoaderWidgetMapping,
210
+ mapping_count: int,
211
+ ) -> int | None:
212
+ if mapping.widget_name:
213
+ index = self._find_widget_index_for_input_name(
214
+ node_info.inputs,
215
+ mapping.widget_name,
216
+ )
217
+ if index is not None:
218
+ return index
219
+
220
+ if mapping.widget_index is not None:
221
+ return mapping.widget_index
186
222
 
187
- Note: Unlike pattern matching, multi-model configs explicitly define which
188
- widgets contain models, so we trust them without extension filtering.
189
- This allows CheckpointLoader to capture both .safetensors and .yaml configs.
190
- """
191
- refs = []
192
- widget_indices = MULTI_MODEL_WIDGET_CONFIGS.get(node_info.type, [])
193
223
  widgets = node_info.widgets_values or []
224
+ if mapping_count == 1 and len(widgets) == 1:
225
+ return 0
194
226
 
195
- for widget_idx in widget_indices:
196
- if widget_idx < len(widgets) and widgets[widget_idx]:
197
- value = widgets[widget_idx]
198
- if isinstance(value, str) and value.strip():
199
- refs.append(WorkflowNodeWidgetRef(
200
- node_id=node_id,
201
- node_type=node_info.type,
202
- widget_index=widget_idx,
203
- widget_value=value
204
- ))
205
- return refs
227
+ return None
206
228
 
207
- def _extract_single_model_widget(self, node_id: str, node_info: WorkflowNode) -> list[WorkflowNodeWidgetRef]:
208
- """Extract model from standard single-model loader nodes."""
209
- refs = []
210
- widget_idx = self.model_config.get_widget_index_for_node(node_info.type)
229
+ def _extract_model_loader_widgets(
230
+ self,
231
+ node_id: str,
232
+ node_info: WorkflowNode,
233
+ ) -> list[WorkflowNodeWidgetRef]:
234
+ """Extract model refs from configured/generated model loader widgets."""
235
+ refs: list[WorkflowNodeWidgetRef] = []
236
+ mappings = self.model_config.get_model_loader_widgets(node_info.type)
211
237
  widgets = node_info.widgets_values or []
212
238
 
213
- if widget_idx < len(widgets) and widgets[widget_idx]:
239
+ for mapping in mappings:
240
+ widget_idx = self._resolve_model_widget_index(
241
+ node_info,
242
+ mapping,
243
+ len(mappings),
244
+ )
245
+ if widget_idx is None or widget_idx >= len(widgets):
246
+ continue
247
+
248
+ value = widgets[widget_idx]
249
+ if not isinstance(value, str) or not value.strip():
250
+ continue
251
+
214
252
  refs.append(WorkflowNodeWidgetRef(
215
253
  node_id=node_id,
216
254
  node_type=node_info.type,
217
255
  widget_index=widget_idx,
218
- widget_value=widgets[widget_idx]
256
+ widget_value=value,
257
+ property_directory=mapping.directories[0] if mapping.directories else None,
219
258
  ))
259
+
260
+ return refs
261
+
262
+ def _extract_static_fallback_widgets(
263
+ self,
264
+ node_id: str,
265
+ node_info: WorkflowNode,
266
+ ) -> list[WorkflowNodeWidgetRef]:
267
+ """Fallback for workflows without frontend input widget metadata."""
268
+ refs: list[WorkflowNodeWidgetRef] = []
269
+ widgets = node_info.widgets_values or []
270
+ widget_indices = MULTI_MODEL_WIDGET_CONFIGS.get(
271
+ node_info.type,
272
+ [self.model_config.get_widget_index_for_node(node_info.type)],
273
+ )
274
+ directories = self.model_config.get_directories_for_node(node_info.type)
275
+
276
+ for widget_idx in widget_indices:
277
+ if widget_idx >= len(widgets):
278
+ continue
279
+ value = widgets[widget_idx]
280
+ if not isinstance(value, str) or not value.strip():
281
+ continue
282
+ refs.append(
283
+ WorkflowNodeWidgetRef(
284
+ node_id=node_id,
285
+ node_type=node_info.type,
286
+ widget_index=widget_idx,
287
+ widget_value=value,
288
+ property_directory=directories[0] if directories else None,
289
+ )
290
+ )
291
+
220
292
  return refs
221
293
 
222
294
  def _merge_model_refs(
@@ -36,7 +36,7 @@ logger = get_logger(__name__)
36
36
  # - Resolution: Change node ID format (e.g., subgraph scoping), WorkflowNodeWidgetRef structure, etc.
37
37
  # - Model index: Hash algorithm changes (blake3 -> xxhash)
38
38
  # Migration: Wipes cache and rebuilds (cache is ephemeral)
39
- SCHEMA_VERSION = 5 # Invalidate after model hash algorithm change (blake3 -> xxhash)
39
+ SCHEMA_VERSION = 6 # Invalidate after custom-node consensus mapping context change
40
40
 
41
41
 
42
42
  class CachedWorkflowAnalysis:
@@ -766,6 +766,24 @@ class WorkflowCacheRepository:
766
766
  for node_type in node_types
767
767
  if node_type in custom_map
768
768
  }
769
+ workflow_configs = self.pyproject_manager.workflows.get_all_with_resolutions()
770
+ consensus_candidates: dict[str, set[str | bool]] = {}
771
+ for other_name, workflow_data in workflow_configs.items():
772
+ if other_name == workflow_name:
773
+ continue
774
+
775
+ other_custom_map = workflow_data.get("custom_node_map", {})
776
+ for node_type in node_types:
777
+ if node_type in other_custom_map:
778
+ package_id = other_custom_map[node_type]
779
+ if isinstance(package_id, (str, bool)):
780
+ consensus_candidates.setdefault(node_type, set()).add(package_id)
781
+
782
+ context["consensus_custom_mappings"] = {
783
+ node_type: next(iter(package_ids))
784
+ for node_type, package_ids in consensus_candidates.items()
785
+ if node_type not in custom_map and len(package_ids) == 1
786
+ }
769
787
  step_elapsed = (time.perf_counter() - step_start) * 1000
770
788
  logger.debug(f"[CONTEXT] Step 1 (custom mappings) took {step_elapsed:.2f}ms")
771
789
 
@@ -774,7 +792,7 @@ class WorkflowCacheRepository:
774
792
  step_start = time.perf_counter()
775
793
 
776
794
  # Read nodes list from workflow config (written by apply_resolution)
777
- workflow_config = self.pyproject_manager.workflows.get_all_with_resolutions().get(workflow_name, {})
795
+ workflow_config = workflow_configs.get(workflow_name, {})
778
796
  relevant_packages = set(workflow_config.get('nodes', []))
779
797
 
780
798
  # Get global package metadata
@@ -797,7 +815,25 @@ class WorkflowCacheRepository:
797
815
  workflow_models = self.pyproject_manager.workflows.get_workflow_models(workflow_name)
798
816
  model_pyproject_data = {}
799
817
  for manifest_model in workflow_models:
800
- for ref in manifest_model.nodes:
818
+ nodes = getattr(manifest_model, "nodes", None) or []
819
+ if not nodes:
820
+ key_source = (
821
+ getattr(manifest_model, "relative_path", None)
822
+ or getattr(manifest_model, "hash", None)
823
+ or getattr(manifest_model, "filename", None)
824
+ or "unknown"
825
+ )
826
+ model_pyproject_data[f"manual:{key_source}"] = {
827
+ "hash": manifest_model.hash,
828
+ "status": manifest_model.status,
829
+ "criticality": manifest_model.criticality,
830
+ "sources": manifest_model.sources,
831
+ "relative_path": manifest_model.relative_path,
832
+ "declared_by": getattr(manifest_model, "declared_by", None),
833
+ }
834
+ continue
835
+
836
+ for ref in nodes:
801
837
  ref_key = f"{ref.node_id}_{ref.widget_index}"
802
838
  model_pyproject_data[ref_key] = {
803
839
  "hash": manifest_model.hash,
@@ -2,7 +2,7 @@
2
2
 
3
3
  from .comfyui_builtin_nodes import COMFYUI_BUILTIN_NODES
4
4
  from .comfyui_models import COMFYUI_MODELS_CONFIG, MULTI_MODEL_WIDGET_CONFIGS
5
- from .model_config import ModelConfig
5
+ from .model_config import ModelConfig, ModelLoaderWidgetMapping
6
6
  from .package_config import PackageConfigManager
7
7
 
8
8
  __all__ = [
@@ -10,6 +10,6 @@ __all__ = [
10
10
  "COMFYUI_MODELS_CONFIG",
11
11
  "MULTI_MODEL_WIDGET_CONFIGS",
12
12
  "ModelConfig",
13
+ "ModelLoaderWidgetMapping",
13
14
  "PackageConfigManager",
14
15
  ]
15
-
@@ -23,6 +23,7 @@ COMFYUI_MODELS_CONFIG = {
23
23
  ],
24
24
  "standard_directories": [
25
25
  "audio_encoders",
26
+ "background_removal",
26
27
  "checkpoints",
27
28
  "clip",
28
29
  "clip_vision",
@@ -32,10 +33,13 @@ COMFYUI_MODELS_CONFIG = {
32
33
  "diffusers",
33
34
  "diffusion_models",
34
35
  "embeddings",
36
+ "frame_interpolation",
35
37
  "gligen",
36
38
  "hypernetworks",
39
+ "latent_upscale_models",
37
40
  "loras",
38
41
  "model_patches",
42
+ "optical_flow",
39
43
  "photomaker",
40
44
  "style_models",
41
45
  "text_encoders",
@@ -51,6 +55,7 @@ COMFYUI_MODELS_CONFIG = {
51
55
  "unCLIPCheckpointLoader": ["checkpoints"],
52
56
  "ImageOnlyCheckpointLoader": ["checkpoints"],
53
57
  "VAELoader": ["vae", "vae_approx"],
58
+ "AudioEncoderLoader": ["audio_encoders"],
54
59
  "LoraLoader": ["loras"],
55
60
  "LoraLoaderModelOnly": ["loras"],
56
61
  "CLIPLoader": ["clip"],
@@ -63,10 +68,15 @@ COMFYUI_MODELS_CONFIG = {
63
68
  "DiffControlNetLoader": ["controlnet"],
64
69
  "StyleModelLoader": ["style_models"],
65
70
  "UpscaleModelLoader": ["upscale_models"],
71
+ "LatentUpscaleModelLoader": ["latent_upscale_models"],
66
72
  "GLIGENLoader": ["gligen"],
67
73
  "HypernetworkLoader": ["hypernetworks"],
68
74
  "PhotoMakerLoader": ["photomaker"],
69
75
  "DiffusersLoader": ["diffusers"],
76
+ "FrameInterpolationModelLoader": ["frame_interpolation"],
77
+ "OpticalFlowLoader": ["optical_flow"],
78
+ "LoadBackgroundRemovalModel": ["background_removal"],
79
+ "ModelPatchLoader": ["model_patches"],
70
80
  },
71
81
  "node_widget_indices": {"CheckpointLoader": 1},
72
82
  }