hexdag 0.7.0.dev12__tar.gz → 0.7.0.dev13__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 (363) hide show
  1. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/PKG-INFO +1 -1
  2. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/system_builder.py +86 -3
  3. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/yaml_validator.py +8 -3
  4. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/context/__init__.py +2 -0
  5. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/context/execution_context.py +14 -0
  6. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/domain/dag.py +5 -0
  7. hexdag-0.7.0.dev13/hexdag/kernel/domain/extraction_state.py +107 -0
  8. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/domain/pipeline_config.py +11 -0
  9. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/domain/system_config.py +42 -0
  10. hexdag-0.7.0.dev13/hexdag/kernel/lifecycle_runner.py +615 -0
  11. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/components/checkpoint_manager.py +36 -0
  12. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/components/execution_coordinator.py +61 -0
  13. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/components/lifecycle_manager.py +13 -4
  14. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/components/node_executor.py +31 -8
  15. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/events/__init__.py +18 -0
  16. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/events/events.py +168 -0
  17. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/models.py +1 -0
  18. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/orchestrator.py +32 -1
  19. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/orchestrator_factory.py +137 -0
  20. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/pipeline_runner.py +154 -4
  21. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/data_store.py +40 -0
  22. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/__init__.py +4 -0
  23. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/entity_state.py +182 -4
  24. hexdag-0.7.0.dev13/hexdag/stdlib/lib/extraction_job.py +284 -0
  25. hexdag-0.7.0.dev13/hexdag/stdlib/lib/pipeline_memory.py +101 -0
  26. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/__init__.py +2 -0
  27. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/agent_node.py +20 -5
  28. hexdag-0.7.0.dev13/hexdag/stdlib/nodes/transition_node.py +138 -0
  29. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/pyproject.toml +1 -1
  30. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/.gitignore +0 -0
  31. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/LICENSE +0 -0
  32. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/README.md +0 -0
  33. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/__init__.py +0 -0
  34. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/__main__.py +0 -0
  35. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/api/__init__.py +0 -0
  36. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/api/components.py +0 -0
  37. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/api/documentation.py +0 -0
  38. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/api/execution.py +0 -0
  39. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/api/export.py +0 -0
  40. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/api/logs.py +0 -0
  41. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/api/pipeline.py +0 -0
  42. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/api/processes.py +0 -0
  43. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/api/validation.py +0 -0
  44. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/api/vfs.py +0 -0
  45. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/__init__.py +0 -0
  46. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/__main__.py +0 -0
  47. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/__init__.py +0 -0
  48. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/build_cmd.py +0 -0
  49. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/create_cmd.py +0 -0
  50. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/docs_cmd.py +0 -0
  51. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/generate_types_cmd.py +0 -0
  52. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/init_cmd.py +0 -0
  53. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/lint_cmd.py +0 -0
  54. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/pipeline_cmd.py +0 -0
  55. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/plugin_dev_cmd.py +0 -0
  56. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/plugins_cmd.py +0 -0
  57. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/studio_cmd.py +0 -0
  58. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/commands/validate_cmd.py +0 -0
  59. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/cli/main.py +0 -0
  60. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/__init__.py +0 -0
  61. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/component_instantiator.py +0 -0
  62. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/config_loader.py +0 -0
  63. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/include_tag.py +0 -0
  64. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/pipeline_config.py +0 -0
  65. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/plugins/__init__.py +0 -0
  66. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/plugins/adapter_definition.py +0 -0
  67. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/plugins/config_definition.py +0 -0
  68. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/plugins/macro_definition.py +0 -0
  69. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/plugins/macro_entity.py +0 -0
  70. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/plugins/middleware_definition.py +0 -0
  71. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/plugins/node_entity.py +0 -0
  72. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/preprocessing/__init__.py +0 -0
  73. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/preprocessing/_type_guards.py +0 -0
  74. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/preprocessing/env_vars.py +0 -0
  75. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/preprocessing/include.py +0 -0
  76. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/preprocessing/template.py +0 -0
  77. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/py_tag.py +0 -0
  78. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/reference_resolver.py +0 -0
  79. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/tag_discovery.py +0 -0
  80. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/compiler/yaml_builder.py +0 -0
  81. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/docs/__init__.py +0 -0
  82. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/docs/extractors.py +0 -0
  83. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/docs/generators.py +0 -0
  84. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/docs/models.py +0 -0
  85. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/executors/__init__.py +0 -0
  86. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/executors/local_executor.py +0 -0
  87. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/http_client/__init__.py +0 -0
  88. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/http_client/http_client.py +0 -0
  89. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/observer_manager/__init__.py +0 -0
  90. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/observer_manager/local.py +0 -0
  91. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/pipeline_spawner/__init__.py +0 -0
  92. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/pipeline_spawner/local.py +0 -0
  93. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/vfs/__init__.py +0 -0
  94. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/vfs/local.py +0 -0
  95. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/vfs/providers/__init__.py +0 -0
  96. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/vfs/providers/lib_provider.py +0 -0
  97. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/vfs/providers/proc_entities_provider.py +0 -0
  98. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/vfs/providers/proc_runs_provider.py +0 -0
  99. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/vfs/providers/proc_scheduled_provider.py +0 -0
  100. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/drivers/vfs/providers/sys_caps_provider.py +0 -0
  101. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/__init__.py +0 -0
  102. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/_alias_registry.py +0 -0
  103. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/config/__init__.py +0 -0
  104. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/config/loader.py +0 -0
  105. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/config/models.py +0 -0
  106. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/configurable.py +0 -0
  107. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/discovery.py +0 -0
  108. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/domain/__init__.py +0 -0
  109. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/domain/agent_tools.py +0 -0
  110. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/domain/caps.py +0 -0
  111. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/domain/entity_state.py +0 -0
  112. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/domain/pipeline_run.py +0 -0
  113. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/domain/scheduled_task.py +0 -0
  114. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/domain/vfs.py +0 -0
  115. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/exceptions.py +0 -0
  116. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/expression_parser.py +0 -0
  117. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/lib_base.py +0 -0
  118. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/linting/__init__.py +0 -0
  119. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/linting/models.py +0 -0
  120. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/linting/pipeline_rules.py +0 -0
  121. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/linting/rules.py +0 -0
  122. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/logging.py +0 -0
  123. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/models/__init__.py +0 -0
  124. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/models/base.py +0 -0
  125. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/__init__.py +0 -0
  126. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/body_executor.py +0 -0
  127. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/components/__init__.py +0 -0
  128. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/components/adapter_lifecycle_manager.py +0 -0
  129. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/components/health_check_manager.py +0 -0
  130. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/components/input_mapper.py +0 -0
  131. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/components/secret_manager.py +0 -0
  132. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/constants.py +0 -0
  133. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/events/README.md +0 -0
  134. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/events/batching.py +0 -0
  135. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/events/decorators.py +0 -0
  136. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/events/observers/__init__.py +0 -0
  137. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/hook_context.py +0 -0
  138. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/hooks.py +0 -0
  139. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/port_wrappers.py +0 -0
  140. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/prompt/__init__.py +0 -0
  141. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/orchestration/prompt/template.py +0 -0
  142. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/pipeline_builder/__init__.py +0 -0
  143. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/__init__.py +0 -0
  144. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/api_call.py +0 -0
  145. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/database.py +0 -0
  146. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/detection.py +0 -0
  147. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/executor.py +0 -0
  148. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/file_storage.py +0 -0
  149. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/healthcheck.py +0 -0
  150. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/llm.py +0 -0
  151. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/memory.py +0 -0
  152. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/observer_manager.py +0 -0
  153. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/pipeline_spawner.py +0 -0
  154. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/secret.py +0 -0
  155. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/tool_router.py +0 -0
  156. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/vector_search.py +0 -0
  157. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports/vfs.py +0 -0
  158. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/ports_builder.py +0 -0
  159. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/protocols.py +0 -0
  160. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/resolver.py +0 -0
  161. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/schema/__init__.py +0 -0
  162. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/schema/generator.py +0 -0
  163. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/secrets.py +0 -0
  164. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/service.py +0 -0
  165. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/system_runner.py +0 -0
  166. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/types.py +0 -0
  167. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/utils/async_warnings.py +0 -0
  168. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/utils/caching.py +0 -0
  169. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/utils/input_normalization.py +0 -0
  170. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/utils/node_timer.py +0 -0
  171. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/utils/schema_conversion.py +0 -0
  172. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/utils/serialization.py +0 -0
  173. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/utils/sql_validation.py +0 -0
  174. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/validation/__init__.py +0 -0
  175. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/validation/retry.py +0 -0
  176. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/validation/sanitized_types.py +0 -0
  177. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/validation/secure_json.py +0 -0
  178. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/kernel/yaml_macro.py +0 -0
  179. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/mcp_server.py +0 -0
  180. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/py.typed +0 -0
  181. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/__init__.py +0 -0
  182. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/__init__.py +0 -0
  183. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/_discovery.py +0 -0
  184. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/anthropic/__init__.py +0 -0
  185. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/anthropic/anthropic_adapter.py +0 -0
  186. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/base.py +0 -0
  187. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/database/__init__.py +0 -0
  188. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/database/csv/csv_adapter.py +0 -0
  189. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/database/pgvector/__init__.py +0 -0
  190. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/database/pgvector/pgvector_adapter.py +0 -0
  191. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/database/sqlalchemy/sqlalchemy_adapter.py +0 -0
  192. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/database/sqlite/__init__.py +0 -0
  193. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/database/sqlite/sqlite_adapter.py +0 -0
  194. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/local/README.md +0 -0
  195. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/local/__init__.py +0 -0
  196. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/memory/__init__.py +0 -0
  197. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/memory/collection_memory.py +0 -0
  198. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/memory/file_memory_adapter.py +0 -0
  199. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/memory/in_memory_memory.py +0 -0
  200. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/memory/schemas.py +0 -0
  201. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/memory/session_memory.py +0 -0
  202. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/memory/sqlite_memory_adapter.py +0 -0
  203. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/memory/state_memory.py +0 -0
  204. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/mock/README.md +0 -0
  205. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/mock/__init__.py +0 -0
  206. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/mock/hexdag.yaml +0 -0
  207. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/mock/mock_database.py +0 -0
  208. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/mock/mock_embedding.py +0 -0
  209. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/mock/mock_http.py +0 -0
  210. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/mock/mock_llm.py +0 -0
  211. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/openai/__init__.py +0 -0
  212. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/openai/openai_adapter.py +0 -0
  213. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/redis/__init__.py +0 -0
  214. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/redis/redis_adapter.py +0 -0
  215. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/secret/__init__.py +0 -0
  216. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/adapters/secret/local_secret_adapter.py +0 -0
  217. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/database_tools.py +0 -0
  218. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/observers/__init__.py +0 -0
  219. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/observers/core_observers.py +0 -0
  220. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/observers/cost_profiler.py +0 -0
  221. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/observers/models.py +0 -0
  222. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/observers/port_call_observers.py +0 -0
  223. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/process_registry.py +0 -0
  224. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/process_registry_observer.py +0 -0
  225. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/scheduler.py +0 -0
  226. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib/vfs_tools.py +0 -0
  227. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/lib_base.py +0 -0
  228. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/macros/__init__.py +0 -0
  229. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/macros/_discovery.py +0 -0
  230. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/macros/conversation_agent.py +0 -0
  231. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/macros/llm_macro.py +0 -0
  232. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/macros/reasoning_agent.py +0 -0
  233. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/middleware/__init__.py +0 -0
  234. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/middleware/compose.py +0 -0
  235. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/middleware/distributed_cache.py +0 -0
  236. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/middleware/observable.py +0 -0
  237. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/middleware/observable_tool_router.py +0 -0
  238. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/middleware/rate_limiter.py +0 -0
  239. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/middleware/response_cache.py +0 -0
  240. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/middleware/retry.py +0 -0
  241. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/middleware/structured_output.py +0 -0
  242. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/middleware/timeout.py +0 -0
  243. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/_discovery.py +0 -0
  244. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/api_call_node.py +0 -0
  245. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/base_node_factory.py +0 -0
  246. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/checkpoint_node.py +0 -0
  247. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/composite_node.py +0 -0
  248. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/data_node.py +0 -0
  249. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/expression_node.py +0 -0
  250. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/function_node.py +0 -0
  251. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/llm_node.py +0 -0
  252. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/mapped_input.py +0 -0
  253. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/service_call_node.py +0 -0
  254. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/tool_call_node.py +0 -0
  255. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/nodes/tool_utils.py +0 -0
  256. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/prompts/__init__.py +0 -0
  257. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/prompts/base.py +0 -0
  258. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/prompts/chat_prompts.py +0 -0
  259. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/prompts/error_correction_prompts.py +0 -0
  260. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/stdlib/prompts/tool_prompts.py +0 -0
  261. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/__init__.py +0 -0
  262. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/build_ui.py +0 -0
  263. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/server/__init__.py +0 -0
  264. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/server/main.py +0 -0
  265. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/server/routes/__init__.py +0 -0
  266. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/server/routes/execute.py +0 -0
  267. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/server/routes/export.py +0 -0
  268. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/server/routes/files.py +0 -0
  269. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/server/routes/plugins.py +0 -0
  270. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/server/routes/validate.py +0 -0
  271. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/index.html +0 -0
  272. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/package-lock.json +0 -0
  273. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/package.json +0 -0
  274. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/postcss.config.js +0 -0
  275. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/public/hexdag.svg +0 -0
  276. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/App.tsx +0 -0
  277. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/Canvas.tsx +0 -0
  278. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/ContextMenu.tsx +0 -0
  279. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/FileBrowser.tsx +0 -0
  280. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/Header.tsx +0 -0
  281. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/HexdagNode.tsx +0 -0
  282. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/NodeInspector.tsx +0 -0
  283. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/NodePalette.tsx +0 -0
  284. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/NodePortsSection.tsx +0 -0
  285. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/PluginManager.tsx +0 -0
  286. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/PortsEditor.tsx +0 -0
  287. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/PythonEditor.tsx +0 -0
  288. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/ValidationPanel.tsx +0 -0
  289. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/YamlEditor.tsx +0 -0
  290. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/components/index.ts +0 -0
  291. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/index.css +0 -0
  292. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/lib/api.ts +0 -0
  293. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/lib/nodeTemplates.ts +0 -0
  294. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/lib/store.ts +0 -0
  295. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/main.tsx +0 -0
  296. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/types/index.ts +0 -0
  297. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/src/vite-env.d.ts +0 -0
  298. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/tailwind.config.js +0 -0
  299. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/tsconfig.json +0 -0
  300. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/tsconfig.node.json +0 -0
  301. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag/studio/ui/vite.config.ts +0 -0
  302. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/.gitignore +0 -0
  303. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/README.md +0 -0
  304. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/__init__.py +0 -0
  305. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/LICENSE +0 -0
  306. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/README.md +0 -0
  307. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/__init__.py +0 -0
  308. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/adapters/__init__.py +0 -0
  309. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/adapters/blob.py +0 -0
  310. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/adapters/cosmos.py +0 -0
  311. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/adapters/keyvault.py +0 -0
  312. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/adapters/openai.py +0 -0
  313. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/pyproject.toml +0 -0
  314. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/tests/__init__.py +0 -0
  315. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/tests/test_azure_blob_adapter.py +0 -0
  316. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/tests/test_azure_cosmos_adapter.py +0 -0
  317. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/tests/test_azure_keyvault_adapter.py +0 -0
  318. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/azure/tests/test_azure_openai_adapter.py +0 -0
  319. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/README.md +0 -0
  320. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/__init__.py +0 -0
  321. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/examples/01_simple_pandas_transform.py +0 -0
  322. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/examples/02_simple_pandas_only.py +0 -0
  323. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/examples/03_file_io_pipeline.py +0 -0
  324. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/examples/test_pandas_transform.py +0 -0
  325. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/hexdag.toml +0 -0
  326. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/hexdag_etl/__init__.py +0 -0
  327. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/__init__.py +0 -0
  328. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/api_extract.py +0 -0
  329. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/base_node_factory.py +0 -0
  330. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/file_io.py +0 -0
  331. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/pandas_transform.py +0 -0
  332. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/sql_extract_load.py +0 -0
  333. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/pyproject.toml +0 -0
  334. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/test_transform.py +0 -0
  335. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/hexdag_etl/tests/test_plugin_integration.py +0 -0
  336. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/mysql_adapter/LICENSE +0 -0
  337. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/mysql_adapter/README.md +0 -0
  338. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/mysql_adapter/__init__.py +0 -0
  339. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/mysql_adapter/adapters/__init__.py +0 -0
  340. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/mysql_adapter/adapters/mysql.py +0 -0
  341. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/mysql_adapter/mysql_adapter.py +0 -0
  342. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/mysql_adapter/pyproject.toml +0 -0
  343. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/mysql_adapter/tests/test_mysql_adapter.py +0 -0
  344. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/pyproject.toml +0 -0
  345. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/README.md +0 -0
  346. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/__init__.py +0 -0
  347. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/__init__.py +0 -0
  348. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/file/__init__.py +0 -0
  349. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/file/local.py +0 -0
  350. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/sql/__init__.py +0 -0
  351. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/sql/base.py +0 -0
  352. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/sql/collection_storage.py +0 -0
  353. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/sql/mysql.py +0 -0
  354. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/sql/postgresql.py +0 -0
  355. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/vector/__init__.py +0 -0
  356. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/vector/chromadb.py +0 -0
  357. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/vector/in_memory.py +0 -0
  358. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/adapters/vector/pgvector.py +0 -0
  359. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/ports/__init__.py +0 -0
  360. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/ports/vector_store.py +0 -0
  361. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/tests/__init__.py +0 -0
  362. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/tests/test_local_file_storage.py +0 -0
  363. {hexdag-0.7.0.dev12 → hexdag-0.7.0.dev13}/hexdag_plugins/storage/tests/test_sql_adapters.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hexdag
3
- Version: 0.7.0.dev12
3
+ Version: 0.7.0.dev13
4
4
  Summary: Lightweight DAG orchestration framework with enterprise pipeline capabilities
5
5
  Project-URL: Homepage, https://hexdag.ai
6
6
  Project-URL: Repository, https://github.com/omniviser/hexdag
@@ -125,6 +125,12 @@ class SystemBuilder:
125
125
  "ports": spec.get("ports", {}),
126
126
  "policies": spec.get("policies", {}),
127
127
  "services": spec.get("services", {}),
128
+ "state_machines": spec.get("state_machines", {}),
129
+ "states": spec.get("states", {}),
130
+ "on_transition": spec.get("on_transition", {}),
131
+ "observers": spec.get("observers", []),
132
+ "memory": spec.get("memory", {}),
133
+ "gc": spec.get("gc", {}),
128
134
  })
129
135
  except Exception as e:
130
136
  raise SystemBuildError(f"System validation error: {e}") from e
@@ -132,15 +138,23 @@ class SystemBuilder:
132
138
  # 5. Validate pipeline paths exist
133
139
  self._validate_pipeline_paths(system_config, resolved_base)
134
140
 
135
- # 6. Validate pipe DAG is acyclic
136
- self._validate_no_cycles(system_config)
141
+ # 6. Validate pipe DAG is acyclic (only for non-lifecycle systems)
142
+ if not system_config.is_lifecycle:
143
+ self._validate_no_cycles(system_config)
144
+
145
+ # 7. Validate lifecycle constraints (if state machines declared)
146
+ if system_config.is_lifecycle:
147
+ self._validate_lifecycle(system_config)
137
148
 
138
149
  system_name = metadata.get("name", "unnamed")
150
+ mode = "lifecycle" if system_config.is_lifecycle else "dag"
139
151
  logger.info(
140
- "Built system '{}': {} processes, {} pipes",
152
+ "Built system '{}' ({}): {} processes, {} pipes, {} state machines",
141
153
  system_name,
154
+ mode,
142
155
  len(system_config.processes),
143
156
  len(system_config.pipes),
157
+ len(system_config.state_machines),
144
158
  )
145
159
 
146
160
  return system_config
@@ -201,6 +215,75 @@ class SystemBuilder:
201
215
  "Cycle detected in pipe DAG. Processes must form a directed acyclic graph."
202
216
  )
203
217
 
218
+ @staticmethod
219
+ def _validate_lifecycle(config: SystemConfig) -> None:
220
+ """Validate lifecycle-mode constraints.
221
+
222
+ Ensures that ``states`` and ``on_transition`` reference valid
223
+ process names and valid state machine states.
224
+
225
+ Raises
226
+ ------
227
+ SystemBuildError
228
+ If lifecycle configuration is invalid.
229
+ """
230
+ process_names = set(config.process_names)
231
+
232
+ # Collect all valid states from state machines
233
+ all_states: set[str] = set()
234
+ for sm_spec in config.state_machines.values():
235
+ transitions = sm_spec.get("transitions", {})
236
+ for from_state, targets in transitions.items():
237
+ all_states.add(from_state)
238
+ if isinstance(targets, list):
239
+ for t in targets:
240
+ if isinstance(t, str):
241
+ all_states.add(t)
242
+ elif isinstance(t, dict) and "to" in t:
243
+ all_states.add(t["to"])
244
+ initial = sm_spec.get("initial")
245
+ if initial:
246
+ all_states.add(initial)
247
+
248
+ # Validate spec.states references
249
+ for state_name, state_spec in config.states.items():
250
+ if state_name not in all_states:
251
+ raise SystemBuildError(
252
+ f"spec.states references unknown state '{state_name}'. "
253
+ f"Valid states: {sorted(all_states)}"
254
+ )
255
+ on_enter = state_spec.get("on_enter")
256
+ if on_enter and on_enter not in process_names:
257
+ raise SystemBuildError(
258
+ f"State '{state_name}' references unknown process "
259
+ f"'{on_enter}'. Declared processes: {sorted(process_names)}"
260
+ )
261
+
262
+ # Validate spec.on_transition references
263
+ for transition_key, transition_spec in config.on_transition.items():
264
+ parts = [p.strip() for p in transition_key.split("->")]
265
+ if len(parts) != 2: # noqa: PLR2004
266
+ raise SystemBuildError(
267
+ f"Invalid on_transition key '{transition_key}'. "
268
+ "Expected format: 'FROM_STATE -> TO_STATE'"
269
+ )
270
+ from_state, to_state = parts
271
+ if from_state not in all_states:
272
+ raise SystemBuildError(
273
+ f"on_transition '{transition_key}' references unknown state '{from_state}'"
274
+ )
275
+ if to_state not in all_states:
276
+ raise SystemBuildError(
277
+ f"on_transition '{transition_key}' references unknown state '{to_state}'"
278
+ )
279
+ process_name = transition_spec.get("process")
280
+ if process_name and process_name not in process_names:
281
+ raise SystemBuildError(
282
+ f"on_transition '{transition_key}' references unknown "
283
+ f"process '{process_name}'. "
284
+ f"Declared processes: {sorted(process_names)}"
285
+ )
286
+
204
287
  @staticmethod
205
288
  def topological_order(config: SystemConfig) -> list[str]:
206
289
  """Compute topological execution order from the pipe DAG.
@@ -323,7 +323,7 @@ class YamlValidator:
323
323
  self._validate_dependencies_with_cache(nodes, result, node_ids, macro_instances)
324
324
 
325
325
  # Validate expression/mapping naming to prevent ambiguous resolution
326
- self._validate_naming_collisions(nodes, result, node_ids)
326
+ self._validate_naming_collisions(nodes, result, node_ids, macro_instances)
327
327
 
328
328
  return result
329
329
 
@@ -659,6 +659,7 @@ class YamlValidator:
659
659
  nodes: list[dict[str, Any]],
660
660
  result: ValidationReport,
661
661
  node_ids: set[str],
662
+ macro_instances: set[str],
662
663
  ) -> None:
663
664
  """Validate that expression variables and input_mapping aliases don't collide.
664
665
 
@@ -725,7 +726,7 @@ class YamlValidator:
725
726
  if not isinstance(expr, str):
726
727
  continue
727
728
  self._check_first_segments(
728
- expr, var_name, node_id, valid_first_segments, node_ids, result
729
+ expr, var_name, node_id, valid_first_segments, node_ids, macro_instances, result
729
730
  )
730
731
 
731
732
  for alias, source in input_mapping.items():
@@ -735,7 +736,7 @@ class YamlValidator:
735
736
  if source.startswith("$input") or source == "$input":
736
737
  continue
737
738
  self._check_first_segments(
738
- source, alias, node_id, valid_first_segments, node_ids, result
739
+ source, alias, node_id, valid_first_segments, node_ids, macro_instances, result
739
740
  )
740
741
 
741
742
  @staticmethod
@@ -745,6 +746,7 @@ class YamlValidator:
745
746
  node_id: str,
746
747
  valid_first_segments: set[str],
747
748
  node_ids: set[str],
749
+ macro_instances: set[str],
748
750
  result: "ValidationReport",
749
751
  ) -> None:
750
752
  """Check that first path segments in text are known references."""
@@ -754,6 +756,9 @@ class YamlValidator:
754
756
  continue
755
757
  if candidate in valid_first_segments:
756
758
  continue
759
+ # Check if candidate is a macro-expanded node name
760
+ if any(candidate.startswith(f"{mi}_") for mi in macro_instances):
761
+ continue
757
762
  # Unknown first segment — likely a typo
758
763
  close_matches = difflib.get_close_matches(candidate, sorted(node_ids), n=3, cutoff=0.6)
759
764
  suggestion = ""
@@ -7,6 +7,7 @@ from hexdag.kernel.context.execution_context import (
7
7
  get_current_node_name,
8
8
  get_node_results,
9
9
  get_observer_manager,
10
+ get_pipeline_memory,
10
11
  get_pipeline_name,
11
12
  get_port,
12
13
  get_ports,
@@ -32,6 +33,7 @@ __all__ = [
32
33
  "get_current_node_name",
33
34
  "get_node_results",
34
35
  "get_observer_manager",
36
+ "get_pipeline_memory",
35
37
  "get_pipeline_name",
36
38
  "get_port",
37
39
  "get_ports",
@@ -279,6 +279,20 @@ def get_services() -> dict[str, Any] | None:
279
279
  return _services_context.get()
280
280
 
281
281
 
282
+ def get_pipeline_memory() -> Any | None:
283
+ """Convenience getter for the auto-registered PipelineMemory service.
284
+
285
+ Returns
286
+ -------
287
+ PipelineMemory | None
288
+ The pipeline memory instance, or None if not available.
289
+ """
290
+ services = _services_context.get()
291
+ if services:
292
+ return services.get("pipeline_memory")
293
+ return None
294
+
295
+
282
296
  # ============================================================================
283
297
  # Pipeline Name Context
284
298
  # ============================================================================
@@ -116,6 +116,8 @@ class NodeSpec:
116
116
  retry_max_delay: float | None = None # Maximum delay cap in seconds (default: 60.0)
117
117
  when: str | None = None # Optional expression to evaluate before execution
118
118
  on_error: str | None = None # Name of DAG node to run if this node fails (after retries)
119
+ critical: bool = False # If True and node is skipped, pipeline fails
120
+ required_inputs: tuple[str, ...] | list[str] = () # Input fields that must be non-None
119
121
  # Factory metadata for distributed execution (set by YAML pipeline builder)
120
122
  factory_class: str | None = None # Module path, e.g. "hexdag.stdlib.nodes.LLMNode"
121
123
  factory_params: dict[str, Any] | None = None # Original factory **kwargs
@@ -141,6 +143,9 @@ class NodeSpec:
141
143
  object.__setattr__(self, "deps", frozenset(sys.intern(d) for d in self.deps))
142
144
  object.__setattr__(self, "params", MappingProxyType(self.params))
143
145
  object.__setattr__(self, "literals", MappingProxyType(self.literals))
146
+ # Normalize required_inputs to tuple for immutability
147
+ if isinstance(self.required_inputs, list):
148
+ object.__setattr__(self, "required_inputs", tuple(self.required_inputs))
144
149
  # Freeze factory_params if present
145
150
  if self.factory_params is not None:
146
151
  object.__setattr__(self, "factory_params", MappingProxyType(self.factory_params))
@@ -0,0 +1,107 @@
1
+ """Domain models for multi-round extraction state tracking.
2
+
3
+ Used by :class:`ExtractionJob <hexdag.stdlib.lib.extraction_job.ExtractionJob>`
4
+ to track extraction progress across multiple pipeline invocations.
5
+
6
+ Each extraction round is a separate pipeline run. The ``ExtractionState``
7
+ persists between runs via ``SupportsKeyValue`` storage, tracking which
8
+ fields have been extracted and which are still needed.
9
+
10
+ OS metaphor: like a process image saved to disk (SIGSTOP + core dump)
11
+ and resumed later (SIGCONT + restore).
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ from datetime import datetime
17
+ from typing import Any
18
+
19
+ from pydantic import BaseModel, Field, computed_field
20
+
21
+
22
+ class RoundRecord(BaseModel):
23
+ """Snapshot of a single extraction round.
24
+
25
+ Attributes
26
+ ----------
27
+ round_number : int
28
+ 1-based round index.
29
+ extracted_fields : dict[str, Any]
30
+ Fields successfully extracted in this round.
31
+ source : str
32
+ Description of the data source (e.g., "carrier_email", "api_response").
33
+ timestamp : datetime
34
+ When this round was executed.
35
+ raw_data : dict[str, Any]
36
+ Raw data received (for audit/debugging).
37
+ """
38
+
39
+ round_number: int
40
+ extracted_fields: dict[str, Any] = Field(default_factory=dict)
41
+ source: str = ""
42
+ timestamp: datetime = Field(default_factory=datetime.now)
43
+ raw_data: dict[str, Any] = Field(default_factory=dict)
44
+
45
+
46
+ class ExtractionState(BaseModel):
47
+ """Tracks multi-round extraction progress for a single entity.
48
+
49
+ Accumulates extracted data across rounds and computes which required
50
+ fields are still missing.
51
+
52
+ Attributes
53
+ ----------
54
+ job_id : str
55
+ Unique extraction job identifier.
56
+ entity_type : str
57
+ Type of entity being extracted (e.g., "claim", "order").
58
+ entity_id : str
59
+ Unique entity identifier.
60
+ status : str
61
+ Current status: "pending", "extracting", "complete", "failed".
62
+ current_round : int
63
+ Number of rounds completed so far.
64
+ max_rounds : int
65
+ Maximum allowed extraction rounds before auto-failure.
66
+ required_fields : list[str]
67
+ Fields that must be extracted for completion.
68
+ extracted_data : dict[str, Any]
69
+ Accumulated extracted data across all rounds.
70
+ round_history : list[RoundRecord]
71
+ Ordered list of round snapshots.
72
+ failure_reason : str | None
73
+ Reason for failure (if status is "failed").
74
+ """
75
+
76
+ job_id: str
77
+ entity_type: str = ""
78
+ entity_id: str = ""
79
+ status: str = "pending"
80
+ current_round: int = 0
81
+ max_rounds: int = 5
82
+ required_fields: list[str] = Field(default_factory=list)
83
+ extracted_data: dict[str, Any] = Field(default_factory=dict)
84
+ round_history: list[RoundRecord] = Field(default_factory=list)
85
+ failure_reason: str | None = None
86
+
87
+ @computed_field # type: ignore[prop-decorator]
88
+ @property
89
+ def missing_fields(self) -> list[str]:
90
+ """Fields still needed for completion."""
91
+ return [
92
+ f
93
+ for f in self.required_fields
94
+ if f not in self.extracted_data or self.extracted_data[f] is None
95
+ ]
96
+
97
+ @computed_field # type: ignore[prop-decorator]
98
+ @property
99
+ def is_complete(self) -> bool:
100
+ """Whether all required fields have been extracted."""
101
+ return len(self.missing_fields) == 0
102
+
103
+ @computed_field # type: ignore[prop-decorator]
104
+ @property
105
+ def is_max_rounds_reached(self) -> bool:
106
+ """Whether the maximum number of rounds has been reached."""
107
+ return self.current_round >= self.max_rounds
@@ -249,6 +249,17 @@ class PipelineConfig(BaseModel):
249
249
  default_factory=dict,
250
250
  description="Service configurations. Format: {service_name: {class: str, config: dict}}",
251
251
  )
252
+ state_machines: dict[str, dict[str, Any]] = Field(
253
+ default_factory=dict,
254
+ description=(
255
+ "Entity state machine definitions. "
256
+ "Format: {entity_type: {initial: str, transitions: dict}}"
257
+ ),
258
+ )
259
+ observers: list[dict[str, Any]] = Field(
260
+ default_factory=list,
261
+ description=("Observer configurations. Format: [{class: str, config: dict}]"),
262
+ )
252
263
 
253
264
  # Schema declarations
254
265
  input_schema: dict[str, Any] | None = Field(
@@ -160,10 +160,52 @@ class SystemConfig(BaseModel):
160
160
  default_factory=dict, description="Global service configurations"
161
161
  )
162
162
 
163
+ # Lifecycle extensions (opt-in: presence of state_machines activates lifecycle mode)
164
+ state_machines: dict[str, dict[str, Any]] = Field(
165
+ default_factory=dict,
166
+ description=(
167
+ "Entity state machine definitions. "
168
+ "Format: {entity_type: {initial: str, transitions: dict, handlers: dict}}"
169
+ ),
170
+ )
171
+ states: dict[str, dict[str, Any]] = Field(
172
+ default_factory=dict,
173
+ description=(
174
+ "State-to-process mapping. "
175
+ "Format: {STATE_NAME: {on_enter: process_name, terminal: bool}}"
176
+ ),
177
+ )
178
+ on_transition: dict[str, dict[str, Any]] = Field(
179
+ default_factory=dict,
180
+ description=(
181
+ "Transition-specific process overrides. Format: {'FROM -> TO': {process: process_name}}"
182
+ ),
183
+ )
184
+ observers: list[dict[str, Any]] = Field(
185
+ default_factory=list,
186
+ description="Observer configurations. Format: [{class: str, config: dict}]",
187
+ )
188
+ memory: dict[str, Any] = Field(
189
+ default_factory=dict,
190
+ description="Memory configuration (preload hooks).",
191
+ )
192
+ gc: dict[str, Any] = Field(
193
+ default_factory=dict,
194
+ description=(
195
+ "Garbage collection config for terminal entities. "
196
+ "Format: {check_interval: int, obligation_timeout: int, on_failure: str}"
197
+ ),
198
+ )
199
+
163
200
  # ------------------------------------------------------------------
164
201
  # Derived helpers
165
202
  # ------------------------------------------------------------------
166
203
 
204
+ @property
205
+ def is_lifecycle(self) -> bool:
206
+ """Whether this system operates in lifecycle mode."""
207
+ return bool(self.state_machines)
208
+
167
209
  @property
168
210
  def process_names(self) -> list[str]:
169
211
  """Return ordered list of process names."""