refactor: remove package-level caching to support dynamic installation

Remove package-level caching in cnr_utils and node_package modules to enable
proper dynamic custom node installation and version switching without ComfyUI
server restarts.

Key Changes:
- Remove @lru_cache decorators from version-sensitive functions
- Remove cached_property from NodePackage for dynamic state updates
- Add comprehensive test suite with parallel execution support
- Implement version switching tests (CNR ↔ Nightly)
- Add case sensitivity integration tests
- Improve error handling and logging

API Priority Rules (manager_core.py:1801):
- Enabled-Priority: Show only enabled version when both exist
- CNR-Priority: Show only CNR when both CNR and Nightly are disabled
- Prevents duplicate package entries in /v2/customnode/installed API
- Cross-match using cnr_id and aux_id for CNR ↔ Nightly detection

Test Infrastructure:
- 8 test files with 59 comprehensive test cases
- Parallel test execution across 5 isolated environments
- Automated test scripts with environment setup
- Configurable timeout (60 minutes default)
- Support for both master and dr-support-pip-cm branches

Bug Fixes:
- Fix COMFYUI_CUSTOM_NODES_PATH environment variable export
- Resolve test fixture regression with module-level variables
- Fix import timing issues in test configuration
- Register pytest integration marker to eliminate warnings
- Fix POSIX compliance in shell scripts (((var++)) → $((var + 1)))

Documentation:
- CNR_VERSION_MANAGEMENT_DESIGN.md v1.0 → v1.1 with API priority rules
- Add test guides and execution documentation (TESTING_PROMPT.md)
- Add security-enhanced installation guide
- Create CLI migration guides and references
- Document package version management

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Dr.Lt.Data
2025-11-07 10:04:21 +09:00
parent d3906e3cbc
commit 43647249cf
62 changed files with 17790 additions and 10789 deletions

View File

@@ -42,13 +42,13 @@ components:
oneOf:
- $ref: '#/components/schemas/InstallPackParams'
- $ref: '#/components/schemas/UpdatePackParams'
- $ref: '#/components/schemas/UpdateAllPacksParams'
- $ref: '#/components/schemas/UpdateComfyUIParams'
- $ref: '#/components/schemas/FixPackParams'
- $ref: '#/components/schemas/UninstallPackParams'
- $ref: '#/components/schemas/DisablePackParams'
- $ref: '#/components/schemas/EnablePackParams'
- $ref: '#/components/schemas/ModelMetadata'
- $ref: '#/components/schemas/UpdateComfyUIParams'
- $ref: '#/components/schemas/UpdateAllPacksParams'
required: [ui_id, client_id, kind, params]
TaskHistoryItem:
type: object
@@ -206,7 +206,10 @@ components:
description: The version of the pack that is installed (Git commit hash or semantic version)
cnr_id:
type: [string, 'null']
description: The name of the pack if installed from the registry
description: The name of the pack if installed from the registry (normalized lowercase)
original_name:
type: [string, 'null']
description: The original case-preserved name of the pack from the registry
aux_id:
type: [string, 'null']
description: The name of the pack if installed from github (author/repo-name format)
@@ -238,6 +241,10 @@ components:
type: string
enum: [strong, normal, normal-, weak]
description: Security level configuration (from most to least restrictive)
NetworkMode:
type: string
enum: [public, private, offline]
description: Network mode configuration
RiskLevel:
type: string
enum: [block, high+, high, middle+, middle]
@@ -316,7 +323,7 @@ components:
skip_post_install:
type: boolean
description: Whether to skip post-installation steps
required: [selected_version, mode, channel]
required: [selected_version]
UpdateAllPacksParams:
type: object
properties:
@@ -711,8 +718,7 @@ components:
security_level:
$ref: '#/components/schemas/SecurityLevel'
network_mode:
type: [string, 'null']
description: Network mode (online, offline, private)
$ref: '#/components/schemas/NetworkMode'
cli_args:
type: object
additionalProperties: true