griptape-nodes 0.64.0__tar.gz → 0.64.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 (272) hide show
  1. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/PKG-INFO +1 -1
  2. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/pyproject.toml +1 -1
  3. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/node_manager.py +9 -0
  4. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/version_compatibility_manager.py +113 -69
  5. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/updater/__init__.py +2 -1
  6. griptape_nodes-0.64.2/src/griptape_nodes/version_compatibility/versions/v0_63_8/__init__.py +1 -0
  7. griptape_nodes-0.64.2/src/griptape_nodes/version_compatibility/versions/v0_63_8/deprecated_nodegroup_parameters.py +105 -0
  8. griptape_nodes-0.64.0/src/griptape_nodes/version_compatibility/workflow_versions/__init__.py +0 -1
  9. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/README.md +0 -0
  10. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/__init__.py +0 -0
  11. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/__main__.py +0 -0
  12. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/api_client/__init__.py +0 -0
  13. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/api_client/client.py +0 -0
  14. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/api_client/request_client.py +0 -0
  15. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/app/.python-version +0 -0
  16. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/app/__init__.py +0 -0
  17. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/app/app.py +0 -0
  18. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/app/watch.py +0 -0
  19. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/__init__.py +0 -0
  20. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/utils/__init__.py +0 -0
  21. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/utils/python_subprocess_executor.py +0 -0
  22. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_executors/__init__.py +0 -0
  23. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_executors/local_session_workflow_executor.py +0 -0
  24. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py +0 -0
  25. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py +0 -0
  26. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_executors/utils/__init__.py +0 -0
  27. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_executors/utils/subprocess_script.py +0 -0
  28. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_executors/workflow_executor.py +0 -0
  29. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_publishers/__init__.py +0 -0
  30. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_publishers/local_workflow_publisher.py +0 -0
  31. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_publishers/subprocess_workflow_publisher.py +0 -0
  32. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_publishers/utils/__init__.py +0 -0
  33. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/bootstrap/workflow_publishers/utils/subprocess_script.py +0 -0
  34. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/cli/__init__.py +0 -0
  35. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/cli/commands/__init__.py +0 -0
  36. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/cli/commands/config.py +0 -0
  37. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/cli/commands/engine.py +0 -0
  38. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/cli/commands/init.py +0 -0
  39. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/cli/commands/libraries.py +0 -0
  40. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/cli/commands/models.py +0 -0
  41. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/cli/commands/self.py +0 -0
  42. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/cli/main.py +0 -0
  43. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/cli/shared.py +0 -0
  44. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/__init__.py +0 -0
  45. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/directed_graph.py +0 -0
  46. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/macro_parser/__init__.py +0 -0
  47. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/macro_parser/core.py +0 -0
  48. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/macro_parser/exceptions.py +0 -0
  49. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/macro_parser/formats.py +0 -0
  50. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/macro_parser/matching.py +0 -0
  51. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/macro_parser/parsing.py +0 -0
  52. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/macro_parser/resolution.py +0 -0
  53. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/macro_parser/segments.py +0 -0
  54. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/node_executor.py +0 -0
  55. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/project_templates/__init__.py +0 -0
  56. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/project_templates/default_project_template.py +0 -0
  57. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/project_templates/defaults/README.md +0 -0
  58. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/project_templates/directory.py +0 -0
  59. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/project_templates/loader.py +0 -0
  60. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/project_templates/project.py +0 -0
  61. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/project_templates/situation.py +0 -0
  62. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/common/project_templates/validation.py +0 -0
  63. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/__init__.py +0 -0
  64. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/storage/__init__.py +0 -0
  65. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/storage/base_storage_driver.py +0 -0
  66. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py +0 -0
  67. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/storage/local_storage_driver.py +0 -0
  68. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/storage/storage_backend.py +0 -0
  69. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/thread_storage/__init__.py +0 -0
  70. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/thread_storage/base_thread_storage_driver.py +0 -0
  71. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/thread_storage/griptape_cloud_thread_storage_driver.py +0 -0
  72. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/thread_storage/local_thread_storage_driver.py +0 -0
  73. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/drivers/thread_storage/thread_storage_backend.py +0 -0
  74. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/__init__.py +0 -0
  75. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/connections.py +0 -0
  76. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/core_types.py +0 -0
  77. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/flow.py +0 -0
  78. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/node_types.py +0 -0
  79. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/__init__.py +0 -0
  80. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/artifact_url/__init__.py +0 -0
  81. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/artifact_url/public_artifact_url_parameter.py +0 -0
  82. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/execution_status_component.py +0 -0
  83. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/huggingface/__init__.py +0 -0
  84. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_model_parameter.py +0 -0
  85. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_file_parameter.py +0 -0
  86. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_parameter.py +0 -0
  87. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_utils.py +0 -0
  88. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/log_parameter.py +0 -0
  89. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/progress_bar_component.py +0 -0
  90. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_components/seed_parameter.py +0 -0
  91. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_types/__init__.py +0 -0
  92. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_types/parameter_audio.py +0 -0
  93. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_types/parameter_bool.py +0 -0
  94. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_types/parameter_float.py +0 -0
  95. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_types/parameter_image.py +0 -0
  96. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_types/parameter_int.py +0 -0
  97. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_types/parameter_number.py +0 -0
  98. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_types/parameter_string.py +0 -0
  99. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_types/parameter_three_d.py +0 -0
  100. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/param_types/parameter_video.py +0 -0
  101. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/exe_types/type_validator.py +0 -0
  102. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/machines/__init__.py +0 -0
  103. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/machines/control_flow.py +0 -0
  104. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/machines/dag_builder.py +0 -0
  105. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/machines/fsm.py +0 -0
  106. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/machines/parallel_resolution.py +0 -0
  107. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/machines/sequential_resolution.py +0 -0
  108. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/mcp_server/__init__.py +0 -0
  109. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/node_library/__init__.py +0 -0
  110. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/node_library/advanced_node_library.py +0 -0
  111. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/node_library/library_registry.py +0 -0
  112. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/node_library/workflow_registry.py +0 -0
  113. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/py.typed +0 -0
  114. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/__init__.py +0 -0
  115. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/__init__.py +0 -0
  116. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/agent_events.py +0 -0
  117. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/app_events.py +0 -0
  118. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/arbitrary_python_events.py +0 -0
  119. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/base_events.py +0 -0
  120. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/config_events.py +0 -0
  121. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/connection_events.py +0 -0
  122. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/context_events.py +0 -0
  123. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/execution_events.py +0 -0
  124. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/flow_events.py +0 -0
  125. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/generate_request_payload_schemas.py +0 -0
  126. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/library_events.py +0 -0
  127. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/logger_events.py +0 -0
  128. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/mcp_events.py +0 -0
  129. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/model_events.py +0 -0
  130. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/node_events.py +0 -0
  131. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/object_events.py +0 -0
  132. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/os_events.py +0 -0
  133. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/parameter_events.py +0 -0
  134. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/payload_registry.py +0 -0
  135. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/project_events.py +0 -0
  136. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/resource_events.py +0 -0
  137. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/secrets_events.py +0 -0
  138. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/static_file_events.py +0 -0
  139. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/sync_events.py +0 -0
  140. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/validation_events.py +0 -0
  141. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/variable_events.py +0 -0
  142. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/events/workflow_events.py +0 -0
  143. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/griptape_nodes.py +0 -0
  144. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/__init__.py +0 -0
  145. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/agent_manager.py +0 -0
  146. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py +0 -0
  147. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/config_manager.py +0 -0
  148. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/context_manager.py +0 -0
  149. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/engine_identity_manager.py +0 -0
  150. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/event_manager.py +0 -0
  151. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/__init__.py +0 -0
  152. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/__init__.py +0 -0
  153. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/advanced_library_load_failure_problem.py +0 -0
  154. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/after_library_callback_problem.py +0 -0
  155. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/before_library_callback_problem.py +0 -0
  156. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/create_config_category_problem.py +0 -0
  157. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/dependency_installation_failed_problem.py +0 -0
  158. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/deprecated_node_warning_problem.py +0 -0
  159. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/duplicate_library_problem.py +0 -0
  160. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/duplicate_node_registration_problem.py +0 -0
  161. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/engine_version_error_problem.py +0 -0
  162. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/insufficient_disk_space_problem.py +0 -0
  163. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/invalid_version_string_problem.py +0 -0
  164. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_json_decode_problem.py +0 -0
  165. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_load_exception_problem.py +0 -0
  166. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_not_found_problem.py +0 -0
  167. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_problem.py +0 -0
  168. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_schema_exception_problem.py +0 -0
  169. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_schema_validation_problem.py +0 -0
  170. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/modified_parameters_set_deprecation_warning_problem.py +0 -0
  171. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/modified_parameters_set_removed_problem.py +0 -0
  172. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_class_not_base_node_problem.py +0 -0
  173. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_class_not_found_problem.py +0 -0
  174. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_module_import_problem.py +0 -0
  175. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/sandbox_directory_missing_problem.py +0 -0
  176. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/ui_options_field_modified_incompatible_problem.py +0 -0
  177. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/ui_options_field_modified_warning_problem.py +0 -0
  178. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/update_config_category_problem.py +0 -0
  179. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/venv_creation_failed_problem.py +0 -0
  180. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/__init__.py +0 -0
  181. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/deprecated_node_in_workflow_problem.py +0 -0
  182. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_dependency_version_string_problem.py +0 -0
  183. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_library_version_string_problem.py +0 -0
  184. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_metadata_schema_problem.py +0 -0
  185. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_metadata_section_count_problem.py +0 -0
  186. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_toml_format_problem.py +0 -0
  187. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_not_registered_problem.py +0 -0
  188. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_below_required_problem.py +0 -0
  189. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_large_difference_problem.py +0 -0
  190. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_major_mismatch_problem.py +0 -0
  191. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_minor_difference_problem.py +0 -0
  192. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_creation_date_problem.py +0 -0
  193. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_last_modified_date_problem.py +0 -0
  194. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_toml_section_problem.py +0 -0
  195. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/node_type_not_found_problem.py +0 -0
  196. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_not_found_problem.py +0 -0
  197. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_problem.py +0 -0
  198. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_schema_version_problem.py +0 -0
  199. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/flow_manager.py +0 -0
  200. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py +0 -0
  201. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py +0 -0
  202. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py +0 -0
  203. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_fsm.py +0 -0
  204. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/__init__.py +0 -0
  205. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/base.py +0 -0
  206. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/github.py +0 -0
  207. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/local_file.py +0 -0
  208. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/package.py +0 -0
  209. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py +0 -0
  210. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py +0 -0
  211. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py +0 -0
  212. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/library_manager.py +0 -0
  213. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/mcp_manager.py +0 -0
  214. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/model_manager.py +0 -0
  215. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/object_manager.py +0 -0
  216. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/operation_manager.py +0 -0
  217. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/os_manager.py +0 -0
  218. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/project_manager.py +0 -0
  219. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/resource_components/__init__.py +0 -0
  220. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/resource_components/capability_field.py +0 -0
  221. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/resource_components/comparator.py +0 -0
  222. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/resource_components/resource_instance.py +0 -0
  223. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/resource_components/resource_type.py +0 -0
  224. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/resource_manager.py +0 -0
  225. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/resource_types/__init__.py +0 -0
  226. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/resource_types/cpu_resource.py +0 -0
  227. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/resource_types/os_resource.py +0 -0
  228. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/secrets_manager.py +0 -0
  229. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/session_manager.py +0 -0
  230. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/settings.py +0 -0
  231. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/static_files_manager.py +0 -0
  232. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/sync_manager.py +0 -0
  233. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/user_manager.py +0 -0
  234. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/variable_manager.py +0 -0
  235. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/managers/workflow_manager.py +0 -0
  236. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/retained_mode.py +0 -0
  237. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/utils/__init__.py +0 -0
  238. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/utils/name_generator.py +0 -0
  239. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/retained_mode/variable_types.py +0 -0
  240. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/servers/__init__.py +0 -0
  241. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/servers/mcp.py +0 -0
  242. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/servers/static.py +0 -0
  243. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/__init__.py +0 -0
  244. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/add_param_button.py +0 -0
  245. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/button.py +0 -0
  246. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/clamp.py +0 -0
  247. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/color_picker.py +0 -0
  248. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/compare.py +0 -0
  249. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/compare_images.py +0 -0
  250. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/file_system_picker.py +0 -0
  251. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/minmax.py +0 -0
  252. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/multi_options.py +0 -0
  253. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/numbers_selector.py +0 -0
  254. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/options.py +0 -0
  255. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/slider.py +0 -0
  256. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/trait_registry.py +0 -0
  257. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/traits/traits.json +0 -0
  258. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/updater/__main__.py +0 -0
  259. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/utils/__init__.py +0 -0
  260. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/utils/async_utils.py +0 -0
  261. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/utils/dict_utils.py +0 -0
  262. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/utils/huggingface_utils.py +0 -0
  263. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/utils/image_preview.py +0 -0
  264. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/utils/metaclasses.py +0 -0
  265. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/utils/uv_utils.py +0 -0
  266. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/utils/version_utils.py +0 -0
  267. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/version_compatibility/__init__.py +0 -0
  268. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/version_compatibility/versions/__init__.py +0 -0
  269. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py +0 -0
  270. {griptape_nodes-0.64.0 → griptape_nodes-0.64.2}/src/griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py +0 -0
  271. {griptape_nodes-0.64.0/src/griptape_nodes/version_compatibility/workflow_versions → griptape_nodes-0.64.2/src/griptape_nodes/version_compatibility/versions}/v0_7_0/__init__.py +0 -0
  272. {griptape_nodes-0.64.0/src/griptape_nodes/version_compatibility/workflow_versions → griptape_nodes-0.64.2/src/griptape_nodes/version_compatibility/versions}/v0_7_0/local_executor_argument_addition.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: griptape-nodes
3
- Version: 0.64.0
3
+ Version: 0.64.2
4
4
  Summary: Add your description here
5
5
  Requires-Dist: griptape>=1.8.12
6
6
  Requires-Dist: pydantic>=2.10.6
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "griptape-nodes"
3
- version = "0.64.0"
3
+ version = "0.64.2"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12.0, <3.13"
@@ -1912,6 +1912,14 @@ class NodeManager:
1912
1912
  details = f"Attempted to set parameter '{param_name}' value on node '{node_name}'. Failed because the Node was locked."
1913
1913
  return SetParameterValueResultFailure(result_details=details)
1914
1914
 
1915
+ # Let versioning system potentially squelch removed parameters.
1916
+ # This check must run BEFORE we validate parameter existence, since removed parameters won't exist.
1917
+ version_compat_result = GriptapeNodes.VersionCompatibilityManager().check_set_parameter_version_compatibility(
1918
+ node, param_name, request.value
1919
+ )
1920
+ if version_compat_result is not None:
1921
+ return version_compat_result
1922
+
1915
1923
  # Handle ErrorProxyNode parameter value requests
1916
1924
  if isinstance(node, ErrorProxyNode):
1917
1925
  if request.initial_setup:
@@ -1929,6 +1937,7 @@ class NodeManager:
1929
1937
 
1930
1938
  # Does the Parameter actually exist on the Node?
1931
1939
  parameter = node.get_parameter_by_name(param_name)
1940
+
1932
1941
  if parameter is None:
1933
1942
  details = f"Attempted to set parameter value for '{node_name}.{param_name}'. Failed because no parameter with that name could be found."
1934
1943
 
@@ -4,7 +4,7 @@ import importlib
4
4
  import logging
5
5
  from abc import ABC, abstractmethod
6
6
  from pathlib import Path
7
- from typing import TYPE_CHECKING, NamedTuple
7
+ from typing import TYPE_CHECKING, Any, NamedTuple
8
8
 
9
9
  import semver
10
10
 
@@ -35,8 +35,13 @@ from griptape_nodes.retained_mode.managers.fitness_problems.workflows.node_type_
35
35
  from griptape_nodes.retained_mode.managers.library_lifecycle.library_status import LibraryStatus
36
36
 
37
37
  if TYPE_CHECKING:
38
+ from griptape_nodes.exe_types.node_types import BaseNode
38
39
  from griptape_nodes.node_library.library_registry import LibrarySchema
39
40
  from griptape_nodes.node_library.workflow_registry import WorkflowMetadata
41
+ from griptape_nodes.retained_mode.events.parameter_events import (
42
+ SetParameterValueResultFailure,
43
+ SetParameterValueResultSuccess,
44
+ )
40
45
  from griptape_nodes.retained_mode.managers.event_manager import EventManager
41
46
  from griptape_nodes.retained_mode.managers.fitness_problems.libraries.library_problem import LibraryProblem
42
47
  from griptape_nodes.retained_mode.managers.fitness_problems.workflows.workflow_problem import WorkflowProblem
@@ -83,6 +88,38 @@ class WorkflowVersionCompatibilityCheck(ABC):
83
88
  """Perform the workflow compatibility check."""
84
89
 
85
90
 
91
+ class SetParameterVersionCompatibilityCheck(ABC):
92
+ """Abstract base class for runtime parameter set version compatibility checks."""
93
+
94
+ @abstractmethod
95
+ def applies_to_set_parameter(self, node: BaseNode, parameter_name: str, value: Any) -> bool:
96
+ """Return True if this check applies to the given parameter set operation.
97
+
98
+ Args:
99
+ node: The node instance
100
+ parameter_name: Name of the parameter being set
101
+ value: The value being set
102
+
103
+ Returns:
104
+ True if this check should be performed for this parameter
105
+ """
106
+
107
+ @abstractmethod
108
+ def set_parameter_value(
109
+ self, node: BaseNode, parameter_name: str, value: Any
110
+ ) -> SetParameterValueResultSuccess | SetParameterValueResultFailure:
111
+ """Handle setting the parameter value with version compatibility logic.
112
+
113
+ Args:
114
+ node: The node instance
115
+ parameter_name: Name of the parameter being set
116
+ value: The value being set
117
+
118
+ Returns:
119
+ SetParameterValueResultSuccess or SetParameterValueResultFailure
120
+ """
121
+
122
+
86
123
  class VersionCompatibilityManager:
87
124
  """Manages version compatibility checks for libraries and other components."""
88
125
 
@@ -90,89 +127,74 @@ class VersionCompatibilityManager:
90
127
  self._event_manager = event_manager
91
128
  self._compatibility_checks: list[LibraryVersionCompatibilityCheck] = []
92
129
  self._workflow_compatibility_checks: list[WorkflowVersionCompatibilityCheck] = []
130
+ self._set_parameter_compatibility_checks: list[SetParameterVersionCompatibilityCheck] = []
93
131
  self._discover_version_checks()
94
132
 
95
133
  def _discover_version_checks(self) -> None:
96
- """Automatically discover and register library and workflow version compatibility checks."""
97
- self._discover_library_version_checks()
98
- self._discover_workflow_version_checks()
134
+ """Automatically discover and register all version compatibility checks from the versions/ directory."""
135
+ try:
136
+ import griptape_nodes.version_compatibility.versions as versions_module
99
137
 
100
- def _discover_library_version_checks(self) -> None:
101
- """Discover and register library version compatibility checks."""
102
- # Get the path to the version_compatibility/versions directory
103
- import griptape_nodes.version_compatibility.versions as versions_module
138
+ if versions_module.__file__ is None:
139
+ logger.debug("No version compatibility checks directory found, skipping discovery")
140
+ return
104
141
 
105
- versions_path = Path(versions_module.__file__).parent
142
+ versions_path = Path(versions_module.__file__).parent
106
143
 
107
- # Iterate through version directories
108
- for version_dir in versions_path.iterdir():
109
- if version_dir.is_dir() and not version_dir.name.startswith("__"):
110
- self._discover_checks_in_version_dir(version_dir)
144
+ # Iterate through version directories (e.g., v0_39_0, v0_63_8)
145
+ for version_dir in versions_path.iterdir():
146
+ if not version_dir.is_dir() or version_dir.name.startswith("__"):
147
+ continue
111
148
 
112
- def _discover_workflow_version_checks(self) -> None:
113
- """Discover and register workflow version compatibility checks."""
114
- try:
115
- import griptape_nodes.version_compatibility.workflow_versions as workflow_versions_module
149
+ # Iterate through Python files in the version directory
150
+ for check_file in version_dir.glob("*.py"):
151
+ if check_file.name.startswith("__"):
152
+ continue
153
+
154
+ # Import the module once
155
+ file_module_path = (
156
+ f"griptape_nodes.version_compatibility.versions.{version_dir.name}.{check_file.stem}"
157
+ )
158
+ try:
159
+ check_module = importlib.import_module(file_module_path)
160
+ except ImportError as e:
161
+ logger.debug("Failed to import check module %s: %s", file_module_path, e)
162
+ continue
116
163
 
117
- workflow_versions_path = Path(workflow_versions_module.__file__).parent
164
+ # Scan and register all check types in this module
165
+ self._register_checks_from_module(check_module)
118
166
 
119
- # Iterate through version directories
120
- for version_dir in workflow_versions_path.iterdir():
121
- if version_dir.is_dir() and not version_dir.name.startswith("__"):
122
- self._discover_workflow_checks_in_version_dir(version_dir)
123
167
  except ImportError:
124
- # workflow_versions directory doesn't exist yet, skip discovery
125
- logger.debug("No workflow version compatibility checks directory found, skipping workflow check discovery")
126
-
127
- def _discover_checks_in_version_dir(self, version_dir: Path) -> None:
128
- """Discover compatibility checks in a specific version directory."""
129
- # Iterate through Python files in the version directory
130
- for check_file in version_dir.glob("*.py"):
131
- if check_file.name.startswith("__"):
132
- continue
168
+ logger.debug("No version compatibility checks directory found, skipping discovery")
169
+
170
+ def _register_checks_from_module(self, check_module: Any) -> None:
171
+ """Register all version compatibility checks found in a module.
133
172
 
134
- # Import the module
135
- module_path = f"griptape_nodes.version_compatibility.versions.{version_dir.name}.{check_file.stem}"
136
- module = importlib.import_module(module_path)
137
-
138
- # Look for classes that inherit from LibraryVersionCompatibilityCheck
139
- for attr_name in dir(module):
140
- attr = getattr(module, attr_name)
141
- if (
142
- isinstance(attr, type)
143
- and issubclass(attr, LibraryVersionCompatibilityCheck)
144
- and attr is not LibraryVersionCompatibilityCheck
145
- ):
146
- check_instance = attr()
147
- self._compatibility_checks.append(check_instance)
148
- logger.debug("Registered library version compatibility check: %s", attr_name)
149
-
150
- def _discover_workflow_checks_in_version_dir(self, version_dir: Path) -> None:
151
- """Discover workflow compatibility checks in a specific version directory."""
152
- # Iterate through Python files in the version directory
153
- for check_file in version_dir.glob("*.py"):
154
- if check_file.name.startswith("__"):
173
+ Args:
174
+ check_module: The imported module to scan for check classes
175
+ """
176
+ for attr_name in dir(check_module):
177
+ attr = getattr(check_module, attr_name)
178
+ if not isinstance(attr, type):
155
179
  continue
156
180
 
157
- # Import the module
158
- module_path = f"griptape_nodes.version_compatibility.workflow_versions.{version_dir.name}.{check_file.stem}"
159
- try:
160
- module = importlib.import_module(module_path)
161
- except ImportError as e:
162
- logger.debug("Failed to import workflow compatibility check module %s: %s", module_path, e)
181
+ # Skip abstract base classes
182
+ if ABC in getattr(attr, "__bases__", ()):
163
183
  continue
164
184
 
165
- # Look for classes that inherit from WorkflowVersionCompatibilityCheck
166
- for attr_name in dir(module):
167
- attr = getattr(module, attr_name)
168
- if (
169
- isinstance(attr, type)
170
- and issubclass(attr, WorkflowVersionCompatibilityCheck)
171
- and attr is not WorkflowVersionCompatibilityCheck
172
- ):
173
- check_instance = attr()
174
- self._workflow_compatibility_checks.append(check_instance)
175
- logger.debug("Registered workflow version compatibility check: %s", attr_name)
185
+ # Register based on which base class it inherits from
186
+ if issubclass(attr, LibraryVersionCompatibilityCheck):
187
+ check_instance = attr()
188
+ self._compatibility_checks.append(check_instance)
189
+ logger.debug("Registered library version compatibility check: %s", attr_name)
190
+ elif issubclass(attr, WorkflowVersionCompatibilityCheck):
191
+ check_instance = attr()
192
+ self._workflow_compatibility_checks.append(check_instance)
193
+ logger.debug("Registered workflow version compatibility check: %s", attr_name)
194
+ elif issubclass(attr, SetParameterVersionCompatibilityCheck):
195
+ check_instance = attr()
196
+ self._set_parameter_compatibility_checks.append(check_instance)
197
+ logger.debug("Registered set parameter version compatibility check: %s", attr_name)
176
198
 
177
199
  def _check_library_for_deprecated_nodes(
178
200
  self, library_data: LibrarySchema
@@ -333,6 +355,28 @@ class VersionCompatibilityManager:
333
355
 
334
356
  return issues
335
357
 
358
+ def check_set_parameter_version_compatibility(
359
+ self, node: BaseNode, parameter_name: str, value: Any
360
+ ) -> SetParameterValueResultSuccess | SetParameterValueResultFailure | None:
361
+ """Check if a parameter set operation requires version compatibility handling.
362
+
363
+ Args:
364
+ node: The node instance
365
+ parameter_name: Name of the parameter being set
366
+ value: The value being set
367
+
368
+ Returns:
369
+ SetParameterValueResultSuccess, SetParameterValueResultFailure, or None if no check applies
370
+ """
371
+ # Iterate through registered checks and find the first one that applies
372
+ for check_instance in self._set_parameter_compatibility_checks:
373
+ if check_instance.applies_to_set_parameter(node, parameter_name, value):
374
+ # First matching check handles the parameter
375
+ return check_instance.set_parameter_value(node, parameter_name, value)
376
+
377
+ # No checks applied
378
+ return None
379
+
336
380
  def _get_current_engine_version(self) -> semver.VersionInfo:
337
381
  """Get the current engine version."""
338
382
  result = GriptapeNodes.handle_request(GetEngineVersionRequest())
@@ -7,6 +7,7 @@ Usage:
7
7
  from __future__ import annotations
8
8
 
9
9
  import subprocess
10
+ import sys
10
11
 
11
12
  from rich.console import Console
12
13
 
@@ -60,7 +61,7 @@ def _sync_libraries() -> None:
60
61
  console.print("[bold green]Syncing libraries...[/bold green]")
61
62
  try:
62
63
  subprocess.run(
63
- ["griptape-nodes", "--no-update", "libraries", "sync"], # noqa: S607
64
+ [sys.executable, "--no-update", "libraries", "sync"],
64
65
  text=True,
65
66
  capture_output=True,
66
67
  check=True,
@@ -0,0 +1 @@
1
+ """Version 0.63.8 parameter compatibility checks."""
@@ -0,0 +1,105 @@
1
+ """Check for deprecated job_group and execution_environment parameters."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ from typing import TYPE_CHECKING, Any, ClassVar
7
+
8
+ import semver
9
+
10
+ from griptape_nodes.exe_types.node_types import NodeGroupNode
11
+ from griptape_nodes.retained_mode.events.app_events import (
12
+ GetEngineVersionRequest,
13
+ GetEngineVersionResultSuccess,
14
+ )
15
+ from griptape_nodes.retained_mode.events.parameter_events import SetParameterValueResultSuccess
16
+ from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes
17
+ from griptape_nodes.retained_mode.managers.version_compatibility_manager import (
18
+ SetParameterVersionCompatibilityCheck,
19
+ )
20
+
21
+ if TYPE_CHECKING:
22
+ from griptape_nodes.exe_types.node_types import BaseNode
23
+
24
+ logger = logging.getLogger("griptape_nodes")
25
+
26
+
27
+ class DeprecatedNodeGroupParametersCheck(SetParameterVersionCompatibilityCheck):
28
+ """Check for deprecated job_group and execution_environment parameters.
29
+
30
+ These parameters were removed in engine version 0.63.8 for all nodes except NodeGroup.
31
+ This check intercepts attempts to set these parameters and logs a warning prompting
32
+ users to resave their workflows.
33
+ """
34
+
35
+ DEPRECATED_PARAMETERS: ClassVar[set[str]] = {"job_group", "execution_environment"}
36
+ REMOVAL_VERSION: ClassVar[semver.VersionInfo] = semver.VersionInfo(0, 63, 8)
37
+
38
+ def __init__(self) -> None:
39
+ """Initialize the check with an empty set of warned workflows."""
40
+ super().__init__()
41
+ self._warned_workflows: set[str] = set()
42
+
43
+ def applies_to_set_parameter(self, node: BaseNode, parameter_name: str, _value: Any) -> bool:
44
+ """Return True if this is a deprecated parameter on a non-NodeGroup node.
45
+
46
+ Args:
47
+ node: The node instance
48
+ parameter_name: Name of the parameter being set
49
+ _value: The value being set (unused)
50
+
51
+ Returns:
52
+ True if this check should handle this parameter
53
+ """
54
+ # Check parameter name first (fastest check)
55
+ if parameter_name not in self.DEPRECATED_PARAMETERS:
56
+ return False
57
+
58
+ # Check if node is NOT a NodeGroup (we only block for non-NodeGroup nodes)
59
+ if isinstance(node, NodeGroupNode):
60
+ return False
61
+
62
+ # Check if current engine version is >= 0.63.8
63
+ engine_version_result = GriptapeNodes.handle_request(GetEngineVersionRequest())
64
+ if not isinstance(engine_version_result, GetEngineVersionResultSuccess):
65
+ return False
66
+
67
+ current_version = semver.VersionInfo(
68
+ engine_version_result.major, engine_version_result.minor, engine_version_result.patch
69
+ )
70
+ return current_version >= self.REMOVAL_VERSION
71
+
72
+ def set_parameter_value(self, _node: BaseNode, parameter_name: str, _value: Any) -> SetParameterValueResultSuccess:
73
+ """Handle the deprecated parameter by logging a warning and returning success with empty value.
74
+
75
+ Args:
76
+ _node: The node instance (unused)
77
+ parameter_name: Name of the parameter being set
78
+ _value: The value being set (unused)
79
+
80
+ Returns:
81
+ SetParameterValueResultSuccess with empty list value
82
+ """
83
+ # Get the current workflow name to track warnings per workflow
84
+ workflow_name = GriptapeNodes.ContextManager().get_current_workflow_name()
85
+
86
+ # Check if we've already warned for this workflow
87
+ if workflow_name not in self._warned_workflows:
88
+ # Mark this workflow as warned
89
+ self._warned_workflows.add(workflow_name)
90
+
91
+ # Log warning with all deprecated parameters
92
+ deprecated_params_list = ", ".join(f"'{param}'" for param in self.DEPRECATED_PARAMETERS)
93
+ logger.warning(
94
+ "This workflow uses deprecated parameters (%s) that were removed in engine version %s. "
95
+ "Please resave your workflow and this warning will go away.",
96
+ deprecated_params_list,
97
+ self.REMOVAL_VERSION,
98
+ )
99
+
100
+ # Return success with None as the value (parameter doesn't exist, so no meaningful value to return)
101
+ return SetParameterValueResultSuccess(
102
+ finalized_value=None,
103
+ data_type="any",
104
+ result_details=f"Parameter '{parameter_name}' was removed in v{self.REMOVAL_VERSION}. Please resave this workflow.",
105
+ )
@@ -1 +0,0 @@
1
- """Workflow version compatibility checks module."""