griptape-nodes 0.64.11__py3-none-any.whl → 0.65.0__py3-none-any.whl

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 (55) hide show
  1. griptape_nodes/app/app.py +25 -5
  2. griptape_nodes/cli/commands/init.py +65 -54
  3. griptape_nodes/cli/commands/libraries.py +92 -85
  4. griptape_nodes/cli/commands/self.py +121 -0
  5. griptape_nodes/common/node_executor.py +2142 -101
  6. griptape_nodes/exe_types/base_iterative_nodes.py +1004 -0
  7. griptape_nodes/exe_types/connections.py +114 -19
  8. griptape_nodes/exe_types/core_types.py +225 -7
  9. griptape_nodes/exe_types/flow.py +3 -3
  10. griptape_nodes/exe_types/node_types.py +681 -225
  11. griptape_nodes/exe_types/param_components/README.md +414 -0
  12. griptape_nodes/exe_types/param_components/api_key_provider_parameter.py +200 -0
  13. griptape_nodes/exe_types/param_components/huggingface/huggingface_model_parameter.py +2 -0
  14. griptape_nodes/exe_types/param_components/huggingface/huggingface_repo_file_parameter.py +79 -5
  15. griptape_nodes/exe_types/param_types/parameter_button.py +443 -0
  16. griptape_nodes/machines/control_flow.py +77 -38
  17. griptape_nodes/machines/dag_builder.py +148 -70
  18. griptape_nodes/machines/parallel_resolution.py +61 -35
  19. griptape_nodes/machines/sequential_resolution.py +11 -113
  20. griptape_nodes/retained_mode/events/app_events.py +1 -0
  21. griptape_nodes/retained_mode/events/base_events.py +16 -13
  22. griptape_nodes/retained_mode/events/connection_events.py +3 -0
  23. griptape_nodes/retained_mode/events/execution_events.py +35 -0
  24. griptape_nodes/retained_mode/events/flow_events.py +15 -2
  25. griptape_nodes/retained_mode/events/library_events.py +347 -0
  26. griptape_nodes/retained_mode/events/node_events.py +48 -0
  27. griptape_nodes/retained_mode/events/os_events.py +86 -3
  28. griptape_nodes/retained_mode/events/project_events.py +15 -1
  29. griptape_nodes/retained_mode/events/workflow_events.py +48 -1
  30. griptape_nodes/retained_mode/griptape_nodes.py +6 -2
  31. griptape_nodes/retained_mode/managers/config_manager.py +10 -8
  32. griptape_nodes/retained_mode/managers/event_manager.py +168 -0
  33. griptape_nodes/retained_mode/managers/fitness_problems/libraries/__init__.py +2 -0
  34. griptape_nodes/retained_mode/managers/fitness_problems/libraries/old_xdg_location_warning_problem.py +43 -0
  35. griptape_nodes/retained_mode/managers/flow_manager.py +664 -123
  36. griptape_nodes/retained_mode/managers/library_manager.py +1134 -138
  37. griptape_nodes/retained_mode/managers/model_manager.py +2 -3
  38. griptape_nodes/retained_mode/managers/node_manager.py +148 -25
  39. griptape_nodes/retained_mode/managers/object_manager.py +3 -1
  40. griptape_nodes/retained_mode/managers/operation_manager.py +3 -1
  41. griptape_nodes/retained_mode/managers/os_manager.py +1158 -122
  42. griptape_nodes/retained_mode/managers/secrets_manager.py +2 -3
  43. griptape_nodes/retained_mode/managers/settings.py +21 -1
  44. griptape_nodes/retained_mode/managers/sync_manager.py +2 -3
  45. griptape_nodes/retained_mode/managers/workflow_manager.py +358 -104
  46. griptape_nodes/retained_mode/retained_mode.py +3 -3
  47. griptape_nodes/traits/button.py +44 -2
  48. griptape_nodes/traits/file_system_picker.py +2 -2
  49. griptape_nodes/utils/file_utils.py +101 -0
  50. griptape_nodes/utils/git_utils.py +1226 -0
  51. griptape_nodes/utils/library_utils.py +122 -0
  52. {griptape_nodes-0.64.11.dist-info → griptape_nodes-0.65.0.dist-info}/METADATA +2 -1
  53. {griptape_nodes-0.64.11.dist-info → griptape_nodes-0.65.0.dist-info}/RECORD +55 -47
  54. {griptape_nodes-0.64.11.dist-info → griptape_nodes-0.65.0.dist-info}/WHEEL +1 -1
  55. {griptape_nodes-0.64.11.dist-info → griptape_nodes-0.65.0.dist-info}/entry_points.txt +0 -0
@@ -23,6 +23,7 @@ from griptape_nodes.retained_mode.events.secrets_events import (
23
23
  )
24
24
  from griptape_nodes.retained_mode.managers.config_manager import ConfigManager
25
25
  from griptape_nodes.retained_mode.managers.event_manager import EventManager
26
+ from griptape_nodes.retained_mode.managers.settings import SECRETS_TO_REGISTER_KEY
26
27
 
27
28
  logger = logging.getLogger("griptape_nodes")
28
29
 
@@ -60,9 +61,7 @@ class SecretsManager:
60
61
  """
61
62
  secret_names = set()
62
63
 
63
- secrets_to_register = self.config_manager.get_config_value(
64
- "app_events.on_app_initialization_complete.secrets_to_register", default=[]
65
- )
64
+ secrets_to_register = self.config_manager.get_config_value(SECRETS_TO_REGISTER_KEY, default=[])
66
65
 
67
66
  secret_names.update(secrets_to_register)
68
67
 
@@ -6,6 +6,14 @@ from typing import Any, Literal
6
6
  from pydantic import BaseModel, ConfigDict, field_validator
7
7
  from pydantic import Field as PydanticField
8
8
 
9
+ LIBRARIES_TO_REGISTER_KEY = "app_events.on_app_initialization_complete.libraries_to_register"
10
+ LIBRARIES_TO_DOWNLOAD_KEY = "app_events.on_app_initialization_complete.libraries_to_download"
11
+ WORKFLOWS_TO_REGISTER_KEY = "app_events.on_app_initialization_complete.workflows_to_register"
12
+ SECRETS_TO_REGISTER_KEY = "app_events.on_app_initialization_complete.secrets_to_register"
13
+ MODELS_TO_DOWNLOAD_KEY = "app_events.on_app_initialization_complete.models_to_download"
14
+ PROJECTS_TO_REGISTER_KEY = "app_events.on_app_initialization_complete.projects_to_register"
15
+ EVENTS_TO_ECHO_KEY = "app_events.events_to_echo_as_retained_mode"
16
+
9
17
 
10
18
  class Category(BaseModel):
11
19
  """A category with name and optional description."""
@@ -95,7 +103,14 @@ class MCPServerConfig(BaseModel):
95
103
 
96
104
 
97
105
  class AppInitializationComplete(BaseModel):
98
- libraries_to_register: list[str] = Field(default_factory=list)
106
+ libraries_to_download: list[str] = Field(
107
+ default_factory=list,
108
+ description="Git URLs of libraries to automatically download when the engine starts. Downloaded into libraries_directory. Supports full URLs or GitHub shorthand (e.g., 'user/repo'). Optionally specify a branch, tag, or commit with @ref syntax (e.g., 'user/repo@stable' or 'https://github.com/user/repo@v1.0.0'). If no ref is specified, uses the repository's default branch.",
109
+ )
110
+ libraries_to_register: list[str] = Field(
111
+ default_factory=list,
112
+ description="Libraries to automatically load when the engine starts. Can contain paths to individual griptape_nodes_library.json files or directory paths (scanned recursively for library JSON files).",
113
+ )
99
114
  workflows_to_register: list[str] = Field(default_factory=list)
100
115
  secrets_to_register: list[str] = Field(
101
116
  default_factory=lambda: ["HF_TOKEN", "GT_CLOUD_API_KEY"],
@@ -155,6 +170,11 @@ class Settings(BaseModel):
155
170
  default="sandbox_library",
156
171
  description="Path to the sandbox library directory (useful while developing nodes). If presented as just a directory (e.g., 'sandbox_library') it will be interpreted as being relative to the workspace directory.",
157
172
  )
173
+ libraries_directory: str = Field(
174
+ category=FILE_SYSTEM,
175
+ default="libraries",
176
+ description="Path to directory for downloaded libraries. All griptape_nodes_library.json files found recursively will be auto-discovered on startup. Relative paths are interpreted relative to the workspace directory.",
177
+ )
158
178
  app_events: AppEvents = Field(
159
179
  category=APPLICATION_EVENTS,
160
180
  default_factory=AppEvents,
@@ -25,6 +25,7 @@ from griptape_nodes.retained_mode.events.workflow_events import (
25
25
  RegisterWorkflowsFromConfigResultSuccess,
26
26
  )
27
27
  from griptape_nodes.retained_mode.griptape_nodes import GriptapeNodes
28
+ from griptape_nodes.retained_mode.managers.settings import WORKFLOWS_TO_REGISTER_KEY
28
29
 
29
30
  if TYPE_CHECKING:
30
31
  from griptape_nodes.retained_mode.events.base_events import ResultPayload
@@ -490,9 +491,7 @@ class SyncManager:
490
491
  if synced_workflows:
491
492
  logger.info("Registering %d synced workflows from configuration", len(synced_workflows))
492
493
  try:
493
- register_request = RegisterWorkflowsFromConfigRequest(
494
- config_section="app_events.on_app_initialization_complete.workflows_to_register"
495
- )
494
+ register_request = RegisterWorkflowsFromConfigRequest(config_section=WORKFLOWS_TO_REGISTER_KEY)
496
495
  register_result = GriptapeNodes.handle_request(register_request)
497
496
 
498
497
  if isinstance(register_result, RegisterWorkflowsFromConfigResultSuccess):