griptape-nodes 0.63.7__tar.gz → 0.66.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 (297) hide show
  1. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/PKG-INFO +4 -1
  2. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/README.md +1 -0
  3. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/pyproject.toml +3 -1
  4. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/app/app.py +25 -5
  5. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/utils/python_subprocess_executor.py +4 -1
  6. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_executors/subprocess_workflow_executor.py +3 -0
  7. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_publishers/subprocess_workflow_publisher.py +3 -0
  8. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/cli/commands/init.py +65 -54
  9. griptape_nodes-0.66.2/src/griptape_nodes/cli/commands/libraries.py +108 -0
  10. griptape_nodes-0.66.2/src/griptape_nodes/cli/commands/self.py +241 -0
  11. griptape_nodes-0.66.2/src/griptape_nodes/common/node_executor.py +2932 -0
  12. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/storage/base_storage_driver.py +12 -3
  13. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/storage/griptape_cloud_storage_driver.py +18 -2
  14. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/storage/local_storage_driver.py +42 -5
  15. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/base_iterative_nodes.py +1003 -0
  16. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/connections.py +207 -21
  17. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/core_types.py +234 -7
  18. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/flow.py +6 -6
  19. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/node_groups/__init__.py +7 -0
  20. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/node_groups/base_iterative_node_group.py +177 -0
  21. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/node_groups/base_node_group.py +32 -0
  22. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/node_groups/subflow_node_group.py +1040 -0
  23. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/node_types.py +82 -303
  24. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/param_components/README.md +414 -0
  25. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/param_components/api_key_provider_parameter.py +200 -0
  26. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/param_components/artifact_url/__init__.py +1 -0
  27. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/param_components/artifact_url/public_artifact_url_parameter.py +155 -0
  28. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_model_parameter.py +2 -0
  29. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_file_parameter.py +112 -0
  30. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_components/progress_bar_component.py +1 -1
  31. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_types/parameter_audio.py +1 -1
  32. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_types/parameter_bool.py +1 -1
  33. griptape_nodes-0.66.2/src/griptape_nodes/exe_types/param_types/parameter_button.py +443 -0
  34. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_types/parameter_float.py +1 -1
  35. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_types/parameter_image.py +1 -1
  36. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_types/parameter_int.py +1 -1
  37. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_types/parameter_number.py +1 -1
  38. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_types/parameter_string.py +28 -1
  39. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_types/parameter_three_d.py +1 -1
  40. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_types/parameter_video.py +1 -1
  41. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/machines/control_flow.py +141 -233
  42. griptape_nodes-0.66.2/src/griptape_nodes/machines/dag_builder.py +428 -0
  43. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/machines/fsm.py +10 -0
  44. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/machines/parallel_resolution.py +89 -289
  45. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/machines/sequential_resolution.py +61 -15
  46. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/node_library/library_registry.py +42 -2
  47. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/node_library/workflow_registry.py +1 -1
  48. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/agent_events.py +2 -0
  49. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/app_events.py +1 -0
  50. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/base_events.py +16 -13
  51. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/connection_events.py +3 -0
  52. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/execution_events.py +35 -0
  53. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/flow_events.py +20 -8
  54. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/library_events.py +494 -8
  55. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/node_events.py +134 -0
  56. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/os_events.py +98 -7
  57. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/project_events.py +15 -1
  58. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/workflow_events.py +58 -1
  59. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/griptape_nodes.py +6 -2
  60. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/agent_manager.py +33 -1
  61. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/config_manager.py +41 -8
  62. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/event_manager.py +168 -0
  63. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/__init__.py +4 -0
  64. griptape_nodes-0.66.2/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/incompatible_requirements_problem.py +34 -0
  65. griptape_nodes-0.66.2/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/old_xdg_location_warning_problem.py +43 -0
  66. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/flow_manager.py +942 -372
  67. griptape_nodes-0.66.2/src/griptape_nodes/retained_mode/managers/library_manager.py +4026 -0
  68. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/model_manager.py +3 -4
  69. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/node_manager.py +442 -69
  70. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/object_manager.py +3 -1
  71. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/operation_manager.py +3 -1
  72. griptape_nodes-0.66.2/src/griptape_nodes/retained_mode/managers/os_manager.py +3205 -0
  73. griptape_nodes-0.66.2/src/griptape_nodes/retained_mode/managers/resource_types/compute_resource.py +82 -0
  74. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/resource_types/os_resource.py +17 -0
  75. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/secrets_manager.py +2 -3
  76. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/settings.py +21 -1
  77. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/static_files_manager.py +21 -8
  78. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/sync_manager.py +5 -4
  79. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/version_compatibility_manager.py +116 -72
  80. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/workflow_manager.py +368 -82
  81. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/retained_mode.py +3 -3
  82. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/servers/mcp.py +32 -0
  83. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/servers/static.py +1 -0
  84. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/button.py +44 -2
  85. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/file_system_picker.py +2 -2
  86. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/updater/__init__.py +3 -2
  87. griptape_nodes-0.66.2/src/griptape_nodes/utils/file_utils.py +101 -0
  88. griptape_nodes-0.66.2/src/griptape_nodes/utils/git_utils.py +1257 -0
  89. griptape_nodes-0.66.2/src/griptape_nodes/utils/library_utils.py +122 -0
  90. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/version_compatibility/versions/v0_39_0/modified_parameters_set_removal.py +5 -5
  91. griptape_nodes-0.66.2/src/griptape_nodes/version_compatibility/versions/v0_63_8/__init__.py +1 -0
  92. griptape_nodes-0.66.2/src/griptape_nodes/version_compatibility/versions/v0_63_8/deprecated_nodegroup_parameters.py +105 -0
  93. griptape_nodes-0.66.2/src/griptape_nodes/version_compatibility/versions/v0_65_4/__init__.py +5 -0
  94. griptape_nodes-0.66.2/src/griptape_nodes/version_compatibility/versions/v0_65_4/run_in_parallel_to_run_in_order.py +79 -0
  95. griptape_nodes-0.66.2/src/griptape_nodes/version_compatibility/versions/v0_65_5/__init__.py +5 -0
  96. griptape_nodes-0.66.2/src/griptape_nodes/version_compatibility/versions/v0_65_5/flux_2_removed_parameters.py +85 -0
  97. griptape_nodes-0.63.7/src/griptape_nodes/cli/commands/libraries.py +0 -101
  98. griptape_nodes-0.63.7/src/griptape_nodes/cli/commands/self.py +0 -120
  99. griptape_nodes-0.63.7/src/griptape_nodes/common/node_executor.py +0 -642
  100. griptape_nodes-0.63.7/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_file_parameter.py +0 -38
  101. griptape_nodes-0.63.7/src/griptape_nodes/machines/dag_builder.py +0 -437
  102. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/__init__.py +0 -45
  103. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/data_models.py +0 -191
  104. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_directory.py +0 -346
  105. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_fsm.py +0 -439
  106. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/__init__.py +0 -17
  107. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/base.py +0 -82
  108. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/github.py +0 -116
  109. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/local_file.py +0 -367
  110. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/package.py +0 -104
  111. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance/sandbox.py +0 -155
  112. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_provenance.py +0 -18
  113. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_lifecycle/library_status.py +0 -12
  114. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/library_manager.py +0 -2227
  115. griptape_nodes-0.63.7/src/griptape_nodes/retained_mode/managers/os_manager.py +0 -1805
  116. griptape_nodes-0.63.7/src/griptape_nodes/version_compatibility/workflow_versions/__init__.py +0 -1
  117. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/__init__.py +0 -0
  118. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/__main__.py +0 -0
  119. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/api_client/__init__.py +0 -0
  120. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/api_client/client.py +0 -0
  121. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/api_client/request_client.py +0 -0
  122. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/app/.python-version +0 -0
  123. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/app/__init__.py +0 -0
  124. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/app/watch.py +0 -0
  125. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/__init__.py +0 -0
  126. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/utils/__init__.py +0 -0
  127. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_executors/__init__.py +0 -0
  128. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_executors/local_session_workflow_executor.py +0 -0
  129. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_executors/local_workflow_executor.py +0 -0
  130. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_executors/utils/__init__.py +0 -0
  131. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_executors/utils/subprocess_script.py +0 -0
  132. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_executors/workflow_executor.py +0 -0
  133. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_publishers/__init__.py +0 -0
  134. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_publishers/local_workflow_publisher.py +0 -0
  135. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_publishers/utils/__init__.py +0 -0
  136. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/bootstrap/workflow_publishers/utils/subprocess_script.py +0 -0
  137. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/cli/__init__.py +0 -0
  138. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/cli/commands/__init__.py +0 -0
  139. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/cli/commands/config.py +0 -0
  140. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/cli/commands/engine.py +0 -0
  141. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/cli/commands/models.py +0 -0
  142. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/cli/main.py +0 -0
  143. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/cli/shared.py +0 -0
  144. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/__init__.py +0 -0
  145. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/directed_graph.py +0 -0
  146. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/macro_parser/__init__.py +0 -0
  147. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/macro_parser/core.py +0 -0
  148. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/macro_parser/exceptions.py +0 -0
  149. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/macro_parser/formats.py +0 -0
  150. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/macro_parser/matching.py +0 -0
  151. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/macro_parser/parsing.py +0 -0
  152. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/macro_parser/resolution.py +0 -0
  153. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/macro_parser/segments.py +0 -0
  154. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/project_templates/__init__.py +0 -0
  155. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/project_templates/default_project_template.py +0 -0
  156. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/project_templates/defaults/README.md +0 -0
  157. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/project_templates/directory.py +0 -0
  158. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/project_templates/loader.py +0 -0
  159. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/project_templates/project.py +0 -0
  160. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/project_templates/situation.py +0 -0
  161. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/common/project_templates/validation.py +0 -0
  162. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/__init__.py +0 -0
  163. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/storage/__init__.py +0 -0
  164. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/storage/storage_backend.py +0 -0
  165. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/thread_storage/__init__.py +0 -0
  166. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/thread_storage/base_thread_storage_driver.py +0 -0
  167. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/thread_storage/griptape_cloud_thread_storage_driver.py +0 -0
  168. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/thread_storage/local_thread_storage_driver.py +0 -0
  169. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/drivers/thread_storage/thread_storage_backend.py +0 -0
  170. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/__init__.py +0 -0
  171. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_components/__init__.py +0 -0
  172. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_components/execution_status_component.py +0 -0
  173. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_components/huggingface/__init__.py +0 -0
  174. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_parameter.py +0 -0
  175. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_components/huggingface/huggingface_utils.py +0 -0
  176. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_components/log_parameter.py +0 -0
  177. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_components/seed_parameter.py +0 -0
  178. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/param_types/__init__.py +0 -0
  179. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/exe_types/type_validator.py +0 -0
  180. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/machines/__init__.py +0 -0
  181. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/mcp_server/__init__.py +0 -0
  182. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/node_library/__init__.py +0 -0
  183. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/node_library/advanced_node_library.py +0 -0
  184. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/py.typed +0 -0
  185. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/__init__.py +0 -0
  186. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/__init__.py +0 -0
  187. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/arbitrary_python_events.py +0 -0
  188. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/config_events.py +0 -0
  189. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/context_events.py +0 -0
  190. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/generate_request_payload_schemas.py +0 -0
  191. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/logger_events.py +0 -0
  192. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/mcp_events.py +0 -0
  193. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/model_events.py +0 -0
  194. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/object_events.py +0 -0
  195. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/parameter_events.py +0 -0
  196. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/payload_registry.py +0 -0
  197. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/resource_events.py +0 -0
  198. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/secrets_events.py +0 -0
  199. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/static_file_events.py +0 -0
  200. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/sync_events.py +0 -0
  201. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/validation_events.py +0 -0
  202. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/events/variable_events.py +0 -0
  203. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/__init__.py +0 -0
  204. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/arbitrary_code_exec_manager.py +0 -0
  205. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/context_manager.py +0 -0
  206. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/engine_identity_manager.py +0 -0
  207. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/__init__.py +0 -0
  208. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/advanced_library_load_failure_problem.py +0 -0
  209. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/after_library_callback_problem.py +0 -0
  210. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/before_library_callback_problem.py +0 -0
  211. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/create_config_category_problem.py +0 -0
  212. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/dependency_installation_failed_problem.py +0 -0
  213. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/deprecated_node_warning_problem.py +0 -0
  214. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/duplicate_library_problem.py +0 -0
  215. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/duplicate_node_registration_problem.py +0 -0
  216. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/engine_version_error_problem.py +0 -0
  217. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/insufficient_disk_space_problem.py +0 -0
  218. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/invalid_version_string_problem.py +0 -0
  219. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_json_decode_problem.py +0 -0
  220. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_load_exception_problem.py +0 -0
  221. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_not_found_problem.py +0 -0
  222. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_problem.py +0 -0
  223. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_schema_exception_problem.py +0 -0
  224. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/library_schema_validation_problem.py +0 -0
  225. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/modified_parameters_set_deprecation_warning_problem.py +0 -0
  226. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/modified_parameters_set_removed_problem.py +0 -0
  227. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_class_not_base_node_problem.py +0 -0
  228. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_class_not_found_problem.py +0 -0
  229. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/node_module_import_problem.py +0 -0
  230. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/sandbox_directory_missing_problem.py +0 -0
  231. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/ui_options_field_modified_incompatible_problem.py +0 -0
  232. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/ui_options_field_modified_warning_problem.py +0 -0
  233. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/update_config_category_problem.py +0 -0
  234. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/libraries/venv_creation_failed_problem.py +0 -0
  235. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/__init__.py +0 -0
  236. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/deprecated_node_in_workflow_problem.py +0 -0
  237. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_dependency_version_string_problem.py +0 -0
  238. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_library_version_string_problem.py +0 -0
  239. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_metadata_schema_problem.py +0 -0
  240. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_metadata_section_count_problem.py +0 -0
  241. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/invalid_toml_format_problem.py +0 -0
  242. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_not_registered_problem.py +0 -0
  243. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_below_required_problem.py +0 -0
  244. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_large_difference_problem.py +0 -0
  245. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_major_mismatch_problem.py +0 -0
  246. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/library_version_minor_difference_problem.py +0 -0
  247. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_creation_date_problem.py +0 -0
  248. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_last_modified_date_problem.py +0 -0
  249. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/missing_toml_section_problem.py +0 -0
  250. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/node_type_not_found_problem.py +0 -0
  251. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_not_found_problem.py +0 -0
  252. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_problem.py +0 -0
  253. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/fitness_problems/workflows/workflow_schema_version_problem.py +0 -0
  254. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/mcp_manager.py +0 -0
  255. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/project_manager.py +0 -0
  256. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/resource_components/__init__.py +0 -0
  257. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/resource_components/capability_field.py +0 -0
  258. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/resource_components/comparator.py +0 -0
  259. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/resource_components/resource_instance.py +0 -0
  260. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/resource_components/resource_type.py +0 -0
  261. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/resource_manager.py +0 -0
  262. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/resource_types/__init__.py +0 -0
  263. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/resource_types/cpu_resource.py +0 -0
  264. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/session_manager.py +0 -0
  265. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/user_manager.py +0 -0
  266. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/managers/variable_manager.py +0 -0
  267. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/utils/__init__.py +0 -0
  268. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/utils/name_generator.py +0 -0
  269. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/retained_mode/variable_types.py +0 -0
  270. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/servers/__init__.py +0 -0
  271. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/__init__.py +0 -0
  272. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/add_param_button.py +0 -0
  273. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/clamp.py +0 -0
  274. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/color_picker.py +0 -0
  275. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/compare.py +0 -0
  276. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/compare_images.py +0 -0
  277. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/minmax.py +0 -0
  278. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/multi_options.py +0 -0
  279. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/numbers_selector.py +0 -0
  280. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/options.py +0 -0
  281. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/slider.py +0 -0
  282. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/trait_registry.py +0 -0
  283. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/traits/traits.json +0 -0
  284. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/updater/__main__.py +0 -0
  285. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/utils/__init__.py +0 -0
  286. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/utils/async_utils.py +0 -0
  287. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/utils/dict_utils.py +0 -0
  288. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/utils/huggingface_utils.py +0 -0
  289. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/utils/image_preview.py +0 -0
  290. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/utils/metaclasses.py +0 -0
  291. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/utils/uv_utils.py +0 -0
  292. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/utils/version_utils.py +0 -0
  293. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/version_compatibility/__init__.py +0 -0
  294. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/version_compatibility/versions/__init__.py +0 -0
  295. {griptape_nodes-0.63.7 → griptape_nodes-0.66.2}/src/griptape_nodes/version_compatibility/versions/v0_39_0/__init__.py +0 -0
  296. {griptape_nodes-0.63.7/src/griptape_nodes/version_compatibility/workflow_versions → griptape_nodes-0.66.2/src/griptape_nodes/version_compatibility/versions}/v0_7_0/__init__.py +0 -0
  297. {griptape_nodes-0.63.7/src/griptape_nodes/version_compatibility/workflow_versions → griptape_nodes-0.66.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.63.7
3
+ Version: 0.66.2
4
4
  Summary: Add your description here
5
5
  Requires-Dist: griptape>=1.8.12
6
6
  Requires-Dist: pydantic>=2.10.6
@@ -27,6 +27,8 @@ Requires-Dist: aiofiles>=25.1.0
27
27
  Requires-Dist: aioshutil>=1.5
28
28
  Requires-Dist: ruamel-yaml>=0.18.15
29
29
  Requires-Dist: asyncio-thread-runner>=1.0
30
+ Requires-Dist: portalocker>=2.10.0
31
+ Requires-Dist: pygit2>=1.19.0
30
32
  Requires-Dist: austin-dist>=3.7.0 ; extra == 'profiling'
31
33
  Requires-Python: >=3.12.0, <3.13
32
34
  Provides-Extra: profiling
@@ -55,6 +57,7 @@ This repository contains the Griptape Nodes Engine - the local component that ru
55
57
  - **📚 Full Documentation:** [docs.griptapenodes.com](https://docs.griptapenodes.com)
56
58
  - **⚙️ Installation:** [docs.griptapenodes.com/en/stable/installation/](https://docs.griptapenodes.com/en/latest/installation/)
57
59
  - **🔧 Engine Configuration:** [docs.griptapenodes.com/en/stable/configuration/](https://docs.griptapenodes.com/en/latest/configuration/)
60
+ - **📋 Migration Guide:** [MIGRATION.md](MIGRATION.md) - Guide for migrating from deprecated nodes
58
61
 
59
62
  **🧩 Extending Griptape Nodes:**
60
63
 
@@ -21,6 +21,7 @@ This repository contains the Griptape Nodes Engine - the local component that ru
21
21
  - **📚 Full Documentation:** [docs.griptapenodes.com](https://docs.griptapenodes.com)
22
22
  - **⚙️ Installation:** [docs.griptapenodes.com/en/stable/installation/](https://docs.griptapenodes.com/en/latest/installation/)
23
23
  - **🔧 Engine Configuration:** [docs.griptapenodes.com/en/stable/configuration/](https://docs.griptapenodes.com/en/latest/configuration/)
24
+ - **📋 Migration Guide:** [MIGRATION.md](MIGRATION.md) - Guide for migrating from deprecated nodes
24
25
 
25
26
  **🧩 Extending Griptape Nodes:**
26
27
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "griptape-nodes"
3
- version = "0.63.7"
3
+ version = "0.66.2"
4
4
  description = "Add your description here"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12.0, <3.13"
@@ -31,6 +31,8 @@ dependencies = [
31
31
  "aioshutil>=1.5",
32
32
  "ruamel.yaml>=0.18.15",
33
33
  "asyncio-thread-runner>=1.0",
34
+ "portalocker>=2.10.0",
35
+ "pygit2>=1.19.0",
34
36
  ]
35
37
 
36
38
  [project.optional-dependencies]
@@ -73,6 +73,8 @@ websocket_event_loop_ready = threading.Event()
73
73
  # Semaphore to limit concurrent requests
74
74
  REQUEST_SEMAPHORE = asyncio.Semaphore(100)
75
75
 
76
+ config_manager = GriptapeNodes.ConfigManager()
77
+
76
78
 
77
79
  class EventLogHandler(logging.Handler):
78
80
  """Custom logging handler that emits log messages as AppEvents.
@@ -81,18 +83,24 @@ class EventLogHandler(logging.Handler):
81
83
  """
82
84
 
83
85
  def emit(self, record: logging.LogRecord) -> None:
84
- log_event = AppEvent(
85
- payload=LogHandlerEvent(message=record.getMessage(), levelname=record.levelname, created=record.created)
86
- )
87
- griptape_nodes.EventManager().put_event(log_event)
86
+ log_level_no = logging.getLevelNamesMapping()[config_manager.get_config_value("log_level").upper()]
87
+ if record.levelno >= log_level_no:
88
+ log_event = AppEvent(
89
+ payload=LogHandlerEvent(message=record.getMessage(), levelname=record.levelname, created=record.created)
90
+ )
91
+ griptape_nodes.EventManager().put_event(log_event)
88
92
 
89
93
 
90
94
  # Logger for this module. Important that this is not the same as the griptape_nodes logger or else we'll have infinite log events.
91
95
  logger = logging.getLogger("griptape_nodes_app")
92
96
 
97
+ # Get configured log level from config
98
+ log_level_str = config_manager.get_config_value("log_level").upper()
99
+ log_level = logging.getLevelNamesMapping()[log_level_str]
100
+
93
101
  griptape_nodes_logger = logging.getLogger("griptape_nodes")
94
102
  griptape_nodes_logger.addHandler(EventLogHandler())
95
- griptape_nodes_logger.setLevel(logging.INFO)
103
+ griptape_nodes_logger.setLevel(log_level)
96
104
 
97
105
  # Root logger only gets RichHandler for console output
98
106
  logging.basicConfig(
@@ -313,6 +321,10 @@ async def _process_app_event(event: AppEvent) -> None:
313
321
 
314
322
  async def _process_node_event(event: GriptapeNodeEvent) -> None:
315
323
  """Process GriptapeNodeEvents and send them to the API (async version)."""
324
+ # Check if events are suppressed
325
+ if griptape_nodes.EventManager().should_suppress_event(event):
326
+ return
327
+
316
328
  # Emit the result back to the GUI
317
329
  result_event = event.wrapped_event
318
330
 
@@ -341,11 +353,19 @@ async def _process_node_event(event: GriptapeNodeEvent) -> None:
341
353
 
342
354
  async def _process_execution_node_event(event: ExecutionGriptapeNodeEvent) -> None:
343
355
  """Process ExecutionGriptapeNodeEvents and send them to the API (async version)."""
356
+ # Check if events are suppressed
357
+ if griptape_nodes.EventManager().should_suppress_event(event):
358
+ return
359
+
344
360
  await _send_message("execution_event", event.wrapped_event.json())
345
361
 
346
362
 
347
363
  async def _process_progress_event(gt_event: ProgressEvent) -> None:
348
364
  """Process Griptape framework events and send them to the API (async version)."""
365
+ # Check if events are suppressed
366
+ if griptape_nodes.EventManager().should_suppress_event(gt_event):
367
+ return
368
+
349
369
  node_name = gt_event.node_name
350
370
  if node_name:
351
371
  value = gt_event.value
@@ -7,6 +7,7 @@ from typing import TYPE_CHECKING, Any
7
7
 
8
8
  if TYPE_CHECKING:
9
9
  from pathlib import Path
10
+ from subprocess import _ENV
10
11
 
11
12
  logger = logging.getLogger(__name__)
12
13
 
@@ -21,7 +22,7 @@ class PythonSubprocessExecutor:
21
22
  self._is_running = False
22
23
 
23
24
  async def execute_python_script(
24
- self, script_path: Path, args: list[str] | None = None, cwd: Path | None = None
25
+ self, script_path: Path, args: list[str] | None = None, cwd: Path | None = None, env: _ENV | None = None
25
26
  ) -> None:
26
27
  """Execute a Python script in a subprocess and wait for completion.
27
28
 
@@ -29,6 +30,7 @@ class PythonSubprocessExecutor:
29
30
  script_path: Path to the Python script to execute
30
31
  args: Additional command line arguments
31
32
  cwd: Working directory for the subprocess
33
+ env: Environment variables for the subprocess
32
34
  """
33
35
  if self.is_running():
34
36
  logger.warning("Another subprocess is already running. Terminating it first.")
@@ -44,6 +46,7 @@ class PythonSubprocessExecutor:
44
46
  self._process = await asyncio.create_subprocess_exec(
45
47
  *command,
46
48
  cwd=cwd,
49
+ env=env,
47
50
  stdout=asyncio.subprocess.PIPE,
48
51
  stderr=asyncio.subprocess.PIPE,
49
52
  )
@@ -125,6 +125,9 @@ class SubprocessWorkflowExecutor(LocalSessionWorkflowExecutor, PythonSubprocessE
125
125
  script_path=tmp_script_path,
126
126
  args=args,
127
127
  cwd=Path(tmpdir),
128
+ env={
129
+ "GTN_CONFIG_ENABLE_WORKSPACE_FILE_WATCHING": "false",
130
+ },
128
131
  )
129
132
  except Exception as e:
130
133
  msg = f"Failed to execute subprocess script: {e}"
@@ -83,4 +83,7 @@ class SubprocessWorkflowPublisher(LocalWorkflowPublisher, PythonSubprocessExecut
83
83
  script_path=tmp_script_path,
84
84
  args=args,
85
85
  cwd=Path(tmpdir),
86
+ env={
87
+ "GTN_CONFIG_ENABLE_WORKSPACE_FILE_WATCHING": "false",
88
+ },
86
89
  )
@@ -1,9 +1,8 @@
1
1
  """Init command for Griptape Nodes CLI."""
2
2
 
3
- import asyncio
4
3
  import json
5
4
  from pathlib import Path
6
- from typing import Annotated, Any
5
+ from typing import Annotated, Any, NamedTuple
7
6
 
8
7
  import typer
9
8
  from rich.box import HEAVY_EDGE
@@ -11,12 +10,10 @@ from rich.panel import Panel
11
10
  from rich.prompt import Confirm, Prompt
12
11
  from rich.table import Table
13
12
 
14
- from griptape_nodes.cli.commands.libraries import _sync_libraries
15
13
  from griptape_nodes.cli.shared import (
16
14
  CONFIG_DIR,
17
15
  CONFIG_FILE,
18
16
  ENV_FILE,
19
- ENV_LIBRARIES_BASE_DIR,
20
17
  GT_CLOUD_BASE_URL,
21
18
  NODES_APP_URL,
22
19
  InitConfig,
@@ -25,6 +22,9 @@ from griptape_nodes.cli.shared import (
25
22
  from griptape_nodes.drivers.storage import StorageBackend
26
23
  from griptape_nodes.drivers.storage.griptape_cloud_storage_driver import GriptapeCloudStorageDriver
27
24
  from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes
25
+ from griptape_nodes.retained_mode.managers.settings import LIBRARIES_TO_DOWNLOAD_KEY, LIBRARIES_TO_REGISTER_KEY
26
+ from griptape_nodes.utils.git_utils import extract_repo_name_from_url
27
+ from griptape_nodes.utils.library_utils import filter_old_xdg_library_paths
28
28
 
29
29
  config_manager = GriptapeNodes.ConfigManager()
30
30
  secrets_manager = GriptapeNodes.SecretsManager()
@@ -54,10 +54,6 @@ def init_command( # noqa: PLR0913
54
54
  help="Install the Griptape Cloud Library.",
55
55
  ),
56
56
  ] = None,
57
- libraries_sync: Annotated[
58
- bool | None,
59
- typer.Option("--libraries-sync/--no-libraries-sync", help="Sync the Griptape Nodes libraries."),
60
- ] = None,
61
57
  no_interactive: Annotated[ # noqa: FBT002
62
58
  bool,
63
59
  typer.Option(help="Run init in non-interactive mode (no prompts)."),
@@ -93,7 +89,6 @@ def init_command( # noqa: PLR0913
93
89
  register_griptape_cloud_library=register_griptape_cloud_library,
94
90
  config_values=config_values,
95
91
  secret_values=secret_values,
96
- libraries_sync=libraries_sync,
97
92
  bucket_name=bucket_name,
98
93
  hf_token=hf_token,
99
94
  )
@@ -111,10 +106,6 @@ def _run_init(config: InitConfig) -> None:
111
106
  # Run configuration flow
112
107
  _run_init_configuration(config)
113
108
 
114
- # Sync libraries
115
- if config.libraries_sync is not False:
116
- asyncio.run(_sync_libraries(load_libraries_from_config=False))
117
-
118
109
  console.print("[bold green]Initialization complete![/bold green]")
119
110
 
120
111
 
@@ -240,14 +231,24 @@ def _handle_additional_library_config(config: InitConfig) -> bool | None:
240
231
  )
241
232
 
242
233
  if register_advanced_library is not None or register_griptape_cloud_library is not None:
243
- libraries_to_register = _build_libraries_list(
234
+ libraries_config = _build_libraries_list(
244
235
  register_advanced_library=register_advanced_library,
245
236
  register_griptape_cloud_library=register_griptape_cloud_library,
246
237
  )
247
238
  config_manager.set_config_value(
248
- "app_events.on_app_initialization_complete.libraries_to_register", libraries_to_register
239
+ LIBRARIES_TO_DOWNLOAD_KEY,
240
+ libraries_config.libraries_to_download,
241
+ )
242
+ config_manager.set_config_value(
243
+ LIBRARIES_TO_REGISTER_KEY,
244
+ libraries_config.libraries_to_register,
245
+ )
246
+ console.print(
247
+ f"[bold green]Libraries to download: {', '.join(libraries_config.libraries_to_download)}[/bold green]"
248
+ )
249
+ console.print(
250
+ f"[bold green]Libraries to register: {', '.join(libraries_config.libraries_to_register)}[/bold green]"
249
251
  )
250
- console.print(f"[bold green]Libraries to register set to: {', '.join(libraries_to_register)}[/bold green]")
251
252
 
252
253
  return register_advanced_library
253
254
 
@@ -500,62 +501,72 @@ def _prompt_for_griptape_cloud_library(*, default_prompt_for_griptape_cloud_libr
500
501
  return Confirm.ask("Register Griptape Cloud Library?", default=default_prompt_for_griptape_cloud_library)
501
502
 
502
503
 
504
+ class LibrariesConfig(NamedTuple):
505
+ """Configuration for library lists."""
506
+
507
+ libraries_to_download: list[str]
508
+ libraries_to_register: list[str]
509
+
510
+
503
511
  def _build_libraries_list(
504
512
  *, register_advanced_library: bool | None = False, register_griptape_cloud_library: bool | None = False
505
- ) -> list[str]:
506
- """Builds the list of libraries to register based on library settings."""
507
- # TODO: https://github.com/griptape-ai/griptape-nodes/issues/929
508
- libraries_key = "app_events.on_app_initialization_complete.libraries_to_register"
509
- library_base_dir = Path(ENV_LIBRARIES_BASE_DIR)
510
-
511
- current_libraries = config_manager.get_config_value(
512
- libraries_key,
513
+ ) -> LibrariesConfig:
514
+ """Builds the lists of libraries to download and register based on library settings."""
515
+ # Get current configuration for both lists
516
+ download_key = LIBRARIES_TO_DOWNLOAD_KEY
517
+ register_key = LIBRARIES_TO_REGISTER_KEY
518
+
519
+ current_downloads = config_manager.get_config_value(
520
+ download_key,
513
521
  config_source="user_config",
514
- default=config_manager.get_config_value(libraries_key, config_source="default_config", default=[]),
522
+ default=config_manager.get_config_value(download_key, config_source="default_config", default=[]),
515
523
  )
516
- new_libraries = current_libraries.copy()
524
+ current_register = config_manager.get_config_value(
525
+ register_key,
526
+ config_source="user_config",
527
+ default=config_manager.get_config_value(register_key, config_source="default_config", default=[]),
528
+ )
529
+
530
+ new_downloads = current_downloads.copy()
531
+ new_register = current_register.copy()
517
532
 
518
- def _get_library_identifier(library_path: str) -> str:
519
- """Get the unique identifier for a library based on parent/filename."""
520
- path = Path(library_path)
521
- return f"{path.parent.name}/{path.name}"
533
+ # Remove old XDG data home library paths from libraries_to_register
534
+ new_register, _ = filter_old_xdg_library_paths(new_register)
522
535
 
523
- # Create a set of current library identifiers for fast lookup
524
- current_identifiers = {_get_library_identifier(lib) for lib in current_libraries}
536
+ # Create a set of current download identifiers for fast lookup
537
+ current_download_identifiers = {extract_repo_name_from_url(lib) for lib in current_downloads}
525
538
 
526
- default_library = str(library_base_dir / "griptape_nodes_library/griptape_nodes_library.json")
527
- default_identifier = _get_library_identifier(default_library)
528
- # If somehow the user removed the default library, add it back
529
- if default_identifier not in current_identifiers:
530
- new_libraries.append(default_library)
539
+ # Default library
540
+ default_library = "https://github.com/griptape-ai/griptape-nodes-library-standard@stable"
541
+ default_identifier = extract_repo_name_from_url(default_library)
542
+ if default_identifier not in current_download_identifiers:
543
+ new_downloads.append(default_library)
531
544
 
532
- advanced_media_library = str(library_base_dir / "griptape_nodes_advanced_media_library/griptape_nodes_library.json")
533
- advanced_identifier = _get_library_identifier(advanced_media_library)
545
+ # Advanced media library
546
+ advanced_media_library = "https://github.com/griptape-ai/griptape-nodes-library-advanced-media@stable"
547
+ advanced_identifier = extract_repo_name_from_url(advanced_media_library)
534
548
  if register_advanced_library:
535
- # If the advanced media library is not registered, add it
536
- if advanced_identifier not in current_identifiers:
537
- new_libraries.append(advanced_media_library)
549
+ if advanced_identifier not in current_download_identifiers:
550
+ new_downloads.append(advanced_media_library)
538
551
  else:
539
- # If the advanced media library is registered, remove it
540
- libraries_to_remove = [lib for lib in new_libraries if _get_library_identifier(lib) == advanced_identifier]
552
+ libraries_to_remove = [lib for lib in new_downloads if extract_repo_name_from_url(lib) == advanced_identifier]
541
553
  for lib in libraries_to_remove:
542
- new_libraries.remove(lib)
554
+ new_downloads.remove(lib)
543
555
 
544
- griptape_cloud_library = str(library_base_dir / "griptape_cloud/griptape_nodes_library.json")
545
- griptape_cloud_identifier = _get_library_identifier(griptape_cloud_library)
556
+ # Griptape Cloud library
557
+ griptape_cloud_library = "https://github.com/griptape-ai/griptape-nodes-library-griptape-cloud@stable"
558
+ griptape_cloud_identifier = extract_repo_name_from_url(griptape_cloud_library)
546
559
  if register_griptape_cloud_library:
547
- # If the griptape cloud library is not registered, add it
548
- if griptape_cloud_identifier not in current_identifiers:
549
- new_libraries.append(griptape_cloud_library)
560
+ if griptape_cloud_identifier not in current_download_identifiers:
561
+ new_downloads.append(griptape_cloud_library)
550
562
  else:
551
- # If the griptape cloud library is registered, remove it
552
563
  libraries_to_remove = [
553
- lib for lib in new_libraries if _get_library_identifier(lib) == griptape_cloud_identifier
564
+ lib for lib in new_downloads if extract_repo_name_from_url(lib) == griptape_cloud_identifier
554
565
  ]
555
566
  for lib in libraries_to_remove:
556
- new_libraries.remove(lib)
567
+ new_downloads.remove(lib)
557
568
 
558
- return new_libraries
569
+ return LibrariesConfig(libraries_to_download=new_downloads, libraries_to_register=new_register)
559
570
 
560
571
 
561
572
  def _create_new_bucket(bucket_name: str) -> str:
@@ -0,0 +1,108 @@
1
+ """Libraries command for Griptape Nodes CLI."""
2
+
3
+ import asyncio
4
+
5
+ import typer
6
+
7
+ from griptape_nodes.cli.shared import console
8
+ from griptape_nodes.retained_mode.events.library_events import (
9
+ DownloadLibraryRequest,
10
+ DownloadLibraryResultSuccess,
11
+ SyncLibrariesRequest,
12
+ SyncLibrariesResultSuccess,
13
+ )
14
+ from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes
15
+ from griptape_nodes.utils.git_utils import normalize_github_url
16
+
17
+ app = typer.Typer(help="Manage local libraries.")
18
+
19
+
20
+ @app.command()
21
+ def sync(
22
+ overwrite: bool = typer.Option(False, "--overwrite", help="Discard uncommitted changes in libraries"), # noqa: FBT001
23
+ ) -> None:
24
+ """Sync all libraries to latest versions from their git repositories."""
25
+ asyncio.run(_sync_libraries(overwrite_existing=overwrite))
26
+
27
+
28
+ async def _sync_libraries(*, overwrite_existing: bool) -> None:
29
+ """Sync all libraries by checking for updates and installing dependencies."""
30
+ console.print("[bold cyan]Syncing libraries...[/bold cyan]")
31
+
32
+ # Create sync request with provided parameters
33
+ request = SyncLibrariesRequest(
34
+ overwrite_existing=overwrite_existing,
35
+ )
36
+
37
+ # Execute the sync
38
+ result = await GriptapeNodes.ahandle_request(request)
39
+
40
+ # Display results - failure case first
41
+ if not isinstance(result, SyncLibrariesResultSuccess):
42
+ console.print(f"[red]Failed to sync libraries: {result.result_details}[/red]")
43
+ return
44
+
45
+ # Success path
46
+ console.print(f"[green]Checked {result.libraries_checked} libraries[/green]")
47
+
48
+ if result.libraries_updated > 0:
49
+ console.print(f"[bold green]Updated {result.libraries_updated} libraries:[/bold green]")
50
+ for lib_name, update_info in result.update_summary.items():
51
+ if update_info.get("status") == "updated":
52
+ console.print(
53
+ f" [green]✓ {lib_name}: {update_info['old_version']} → {update_info['new_version']}[/green]"
54
+ )
55
+ elif update_info.get("status") == "failed":
56
+ console.print(f" [red]✗ {lib_name}: {update_info.get('error', 'Unknown error')}[/red]")
57
+ else:
58
+ console.print("[green]All libraries are up to date[/green]")
59
+
60
+ console.print("[bold green]Libraries synced successfully.[/bold green]")
61
+
62
+
63
+ @app.command()
64
+ def download(
65
+ git_url: str = typer.Argument(..., help="Git repository URL to download"),
66
+ branch: str | None = typer.Option(None, "--branch", help="Branch, tag, or commit to checkout"),
67
+ target_dir: str | None = typer.Option(None, "--target-dir", help="Target directory name"),
68
+ download_dir: str | None = typer.Option(None, "--download-dir", help="Parent directory for library download"),
69
+ overwrite: bool = typer.Option(False, "--overwrite", help="Overwrite existing library directory if it exists"), # noqa: FBT001
70
+ ) -> None:
71
+ """Download a library from a git repository."""
72
+ asyncio.run(_download_library(git_url, branch, target_dir, download_dir, overwrite_existing=overwrite))
73
+
74
+
75
+ async def _download_library(
76
+ git_url: str,
77
+ branch_tag_commit: str | None,
78
+ target_directory_name: str | None,
79
+ download_directory: str | None,
80
+ *,
81
+ overwrite_existing: bool,
82
+ ) -> None:
83
+ """Download a library from a git repository."""
84
+ # Normalize GitHub shorthand to full URL
85
+ git_url = normalize_github_url(git_url)
86
+
87
+ console.print(f"[bold cyan]Downloading library from {git_url}...[/bold cyan]")
88
+
89
+ # Create the download request
90
+ request = DownloadLibraryRequest(
91
+ git_url=git_url,
92
+ branch_tag_commit=branch_tag_commit,
93
+ target_directory_name=target_directory_name,
94
+ download_directory=download_directory,
95
+ overwrite_existing=overwrite_existing,
96
+ )
97
+
98
+ # Execute the download
99
+ result = await GriptapeNodes.ahandle_request(request)
100
+
101
+ # Display results - failure case first
102
+ if not isinstance(result, DownloadLibraryResultSuccess):
103
+ console.print(f"[red]Failed to download library: {result.result_details}[/red]")
104
+ return
105
+
106
+ # Success path
107
+ console.print(f"[bold green]Library '{result.library_name}' downloaded successfully![/bold green]")
108
+ console.print(f"[green]Downloaded to: {result.library_path}[/green]")