hexdag 0.7.0.dev10__tar.gz → 0.7.0.dev12__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 (361) hide show
  1. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/PKG-INFO +4 -1
  2. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/api/__init__.py +3 -0
  3. hexdag-0.7.0.dev12/hexdag/api/logs.py +221 -0
  4. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/config_loader.py +10 -0
  5. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/plugins/__init__.py +6 -0
  6. hexdag-0.7.0.dev12/hexdag/compiler/plugins/adapter_definition.py +140 -0
  7. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/plugins/macro_definition.py +27 -5
  8. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/plugins/macro_entity.py +93 -28
  9. hexdag-0.7.0.dev12/hexdag/compiler/plugins/middleware_definition.py +122 -0
  10. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/yaml_builder.py +104 -11
  11. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/yaml_validator.py +151 -3
  12. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/executors/local_executor.py +11 -3
  13. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/pipeline_spawner/local.py +28 -0
  14. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/vfs/local.py +37 -3
  15. hexdag-0.7.0.dev12/hexdag/drivers/vfs/providers/sys_caps_provider.py +166 -0
  16. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/config/models.py +27 -0
  17. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/configurable.py +52 -2
  18. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/context/__init__.py +4 -0
  19. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/context/execution_context.py +37 -0
  20. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/domain/__init__.py +4 -0
  21. hexdag-0.7.0.dev12/hexdag/kernel/domain/caps.py +248 -0
  22. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/domain/dag.py +20 -0
  23. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/domain/pipeline_config.py +4 -3
  24. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/exceptions.py +32 -0
  25. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/expression_parser.py +142 -13
  26. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/logging.py +3 -6
  27. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/components/execution_coordinator.py +35 -4
  28. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/components/lifecycle_manager.py +11 -7
  29. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/events/__init__.py +4 -0
  30. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/events/events.py +35 -0
  31. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/orchestrator.py +7 -2
  32. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/orchestrator_factory.py +134 -2
  33. hexdag-0.7.0.dev12/hexdag/kernel/orchestration/port_wrappers.py +96 -0
  34. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/pipeline_runner.py +27 -4
  35. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/__init__.py +2 -0
  36. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/detection.py +9 -1
  37. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/llm.py +90 -29
  38. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/pipeline_spawner.py +4 -0
  39. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/tool_router.py +20 -7
  40. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/yaml_macro.py +151 -18
  41. hexdag-0.7.0.dev12/hexdag/stdlib/adapters/anthropic/anthropic_adapter.py +383 -0
  42. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/mock/mock_llm.py +31 -0
  43. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/openai/openai_adapter.py +129 -0
  44. hexdag-0.7.0.dev12/hexdag/stdlib/adapters/redis/__init__.py +22 -0
  45. hexdag-0.7.0.dev12/hexdag/stdlib/adapters/redis/redis_adapter.py +230 -0
  46. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/observers/__init__.py +9 -0
  47. hexdag-0.7.0.dev12/hexdag/stdlib/lib/observers/port_call_observers.py +338 -0
  48. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/macros/llm_macro.py +1 -3
  49. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/macros/reasoning_agent.py +2 -2
  50. hexdag-0.7.0.dev12/hexdag/stdlib/middleware/__init__.py +56 -0
  51. hexdag-0.7.0.dev12/hexdag/stdlib/middleware/compose.py +27 -0
  52. hexdag-0.7.0.dev12/hexdag/stdlib/middleware/distributed_cache.py +190 -0
  53. hexdag-0.7.0.dev12/hexdag/stdlib/middleware/observable.py +135 -0
  54. hexdag-0.7.0.dev12/hexdag/stdlib/middleware/observable_tool_router.py +70 -0
  55. hexdag-0.7.0.dev12/hexdag/stdlib/middleware/rate_limiter.py +131 -0
  56. hexdag-0.7.0.dev12/hexdag/stdlib/middleware/response_cache.py +157 -0
  57. hexdag-0.7.0.dev12/hexdag/stdlib/middleware/retry.py +144 -0
  58. hexdag-0.7.0.dev12/hexdag/stdlib/middleware/structured_output.py +167 -0
  59. hexdag-0.7.0.dev12/hexdag/stdlib/middleware/timeout.py +100 -0
  60. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/agent_node.py +6 -2
  61. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/api_call_node.py +2 -1
  62. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/composite_node.py +7 -2
  63. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/expression_node.py +6 -1
  64. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/function_node.py +6 -2
  65. hexdag-0.7.0.dev12/hexdag/stdlib/nodes/llm_node.py +516 -0
  66. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/mapped_input.py +31 -10
  67. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/tool_call_node.py +2 -0
  68. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/pyproject.toml +16 -4
  69. hexdag-0.7.0.dev10/hexdag/kernel/orchestration/port_wrappers.py +0 -316
  70. hexdag-0.7.0.dev10/hexdag/stdlib/adapters/anthropic/anthropic_adapter.py +0 -196
  71. hexdag-0.7.0.dev10/hexdag/stdlib/nodes/llm_node.py +0 -506
  72. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/.gitignore +0 -0
  73. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/LICENSE +0 -0
  74. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/README.md +0 -0
  75. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/__init__.py +0 -0
  76. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/__main__.py +0 -0
  77. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/api/components.py +0 -0
  78. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/api/documentation.py +0 -0
  79. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/api/execution.py +0 -0
  80. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/api/export.py +0 -0
  81. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/api/pipeline.py +0 -0
  82. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/api/processes.py +0 -0
  83. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/api/validation.py +0 -0
  84. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/api/vfs.py +0 -0
  85. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/__init__.py +0 -0
  86. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/__main__.py +0 -0
  87. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/__init__.py +0 -0
  88. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/build_cmd.py +0 -0
  89. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/create_cmd.py +0 -0
  90. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/docs_cmd.py +0 -0
  91. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/generate_types_cmd.py +0 -0
  92. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/init_cmd.py +0 -0
  93. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/lint_cmd.py +0 -0
  94. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/pipeline_cmd.py +0 -0
  95. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/plugin_dev_cmd.py +0 -0
  96. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/plugins_cmd.py +0 -0
  97. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/studio_cmd.py +0 -0
  98. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/commands/validate_cmd.py +0 -0
  99. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/cli/main.py +0 -0
  100. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/__init__.py +0 -0
  101. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/component_instantiator.py +0 -0
  102. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/include_tag.py +0 -0
  103. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/pipeline_config.py +0 -0
  104. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/plugins/config_definition.py +0 -0
  105. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/plugins/node_entity.py +0 -0
  106. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/preprocessing/__init__.py +0 -0
  107. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/preprocessing/_type_guards.py +0 -0
  108. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/preprocessing/env_vars.py +0 -0
  109. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/preprocessing/include.py +0 -0
  110. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/preprocessing/template.py +0 -0
  111. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/py_tag.py +0 -0
  112. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/reference_resolver.py +0 -0
  113. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/system_builder.py +0 -0
  114. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/compiler/tag_discovery.py +0 -0
  115. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/docs/__init__.py +0 -0
  116. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/docs/extractors.py +0 -0
  117. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/docs/generators.py +0 -0
  118. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/docs/models.py +0 -0
  119. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/executors/__init__.py +0 -0
  120. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/http_client/__init__.py +0 -0
  121. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/http_client/http_client.py +0 -0
  122. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/observer_manager/__init__.py +0 -0
  123. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/observer_manager/local.py +0 -0
  124. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/pipeline_spawner/__init__.py +0 -0
  125. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/vfs/__init__.py +0 -0
  126. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/vfs/providers/__init__.py +0 -0
  127. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/vfs/providers/lib_provider.py +0 -0
  128. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/vfs/providers/proc_entities_provider.py +0 -0
  129. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/vfs/providers/proc_runs_provider.py +0 -0
  130. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/drivers/vfs/providers/proc_scheduled_provider.py +0 -0
  131. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/__init__.py +0 -0
  132. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/_alias_registry.py +0 -0
  133. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/config/__init__.py +0 -0
  134. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/config/loader.py +0 -0
  135. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/discovery.py +0 -0
  136. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/domain/agent_tools.py +0 -0
  137. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/domain/entity_state.py +0 -0
  138. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/domain/pipeline_run.py +0 -0
  139. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/domain/scheduled_task.py +0 -0
  140. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/domain/system_config.py +0 -0
  141. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/domain/vfs.py +0 -0
  142. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/lib_base.py +0 -0
  143. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/linting/__init__.py +0 -0
  144. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/linting/models.py +0 -0
  145. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/linting/pipeline_rules.py +0 -0
  146. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/linting/rules.py +0 -0
  147. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/models/__init__.py +0 -0
  148. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/models/base.py +0 -0
  149. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/__init__.py +0 -0
  150. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/body_executor.py +0 -0
  151. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/components/__init__.py +0 -0
  152. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/components/adapter_lifecycle_manager.py +0 -0
  153. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/components/checkpoint_manager.py +0 -0
  154. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/components/health_check_manager.py +0 -0
  155. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/components/input_mapper.py +0 -0
  156. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/components/node_executor.py +0 -0
  157. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/components/secret_manager.py +0 -0
  158. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/constants.py +0 -0
  159. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/events/README.md +0 -0
  160. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/events/batching.py +0 -0
  161. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/events/decorators.py +0 -0
  162. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/events/observers/__init__.py +0 -0
  163. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/hook_context.py +0 -0
  164. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/hooks.py +0 -0
  165. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/models.py +0 -0
  166. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/prompt/__init__.py +0 -0
  167. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/orchestration/prompt/template.py +0 -0
  168. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/pipeline_builder/__init__.py +0 -0
  169. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/api_call.py +0 -0
  170. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/data_store.py +0 -0
  171. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/database.py +0 -0
  172. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/executor.py +0 -0
  173. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/file_storage.py +0 -0
  174. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/healthcheck.py +0 -0
  175. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/memory.py +0 -0
  176. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/observer_manager.py +0 -0
  177. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/secret.py +0 -0
  178. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/vector_search.py +0 -0
  179. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports/vfs.py +0 -0
  180. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/ports_builder.py +0 -0
  181. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/protocols.py +0 -0
  182. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/resolver.py +0 -0
  183. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/schema/__init__.py +0 -0
  184. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/schema/generator.py +0 -0
  185. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/secrets.py +0 -0
  186. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/service.py +0 -0
  187. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/system_runner.py +0 -0
  188. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/types.py +0 -0
  189. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/utils/async_warnings.py +0 -0
  190. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/utils/caching.py +0 -0
  191. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/utils/input_normalization.py +0 -0
  192. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/utils/node_timer.py +0 -0
  193. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/utils/schema_conversion.py +0 -0
  194. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/utils/serialization.py +0 -0
  195. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/utils/sql_validation.py +0 -0
  196. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/validation/__init__.py +0 -0
  197. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/validation/retry.py +0 -0
  198. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/validation/sanitized_types.py +0 -0
  199. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/kernel/validation/secure_json.py +0 -0
  200. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/mcp_server.py +0 -0
  201. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/py.typed +0 -0
  202. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/__init__.py +0 -0
  203. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/__init__.py +0 -0
  204. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/_discovery.py +0 -0
  205. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/anthropic/__init__.py +0 -0
  206. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/base.py +0 -0
  207. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/database/__init__.py +0 -0
  208. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/database/csv/csv_adapter.py +0 -0
  209. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/database/pgvector/__init__.py +0 -0
  210. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/database/pgvector/pgvector_adapter.py +0 -0
  211. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/database/sqlalchemy/sqlalchemy_adapter.py +0 -0
  212. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/database/sqlite/__init__.py +0 -0
  213. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/database/sqlite/sqlite_adapter.py +0 -0
  214. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/local/README.md +0 -0
  215. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/local/__init__.py +0 -0
  216. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/memory/__init__.py +0 -0
  217. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/memory/collection_memory.py +0 -0
  218. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/memory/file_memory_adapter.py +0 -0
  219. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/memory/in_memory_memory.py +0 -0
  220. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/memory/schemas.py +0 -0
  221. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/memory/session_memory.py +0 -0
  222. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/memory/sqlite_memory_adapter.py +0 -0
  223. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/memory/state_memory.py +0 -0
  224. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/mock/README.md +0 -0
  225. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/mock/__init__.py +0 -0
  226. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/mock/hexdag.yaml +0 -0
  227. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/mock/mock_database.py +0 -0
  228. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/mock/mock_embedding.py +0 -0
  229. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/mock/mock_http.py +0 -0
  230. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/openai/__init__.py +0 -0
  231. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/secret/__init__.py +0 -0
  232. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/adapters/secret/local_secret_adapter.py +0 -0
  233. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/__init__.py +0 -0
  234. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/database_tools.py +0 -0
  235. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/entity_state.py +0 -0
  236. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/observers/core_observers.py +0 -0
  237. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/observers/cost_profiler.py +0 -0
  238. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/observers/models.py +0 -0
  239. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/process_registry.py +0 -0
  240. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/process_registry_observer.py +0 -0
  241. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/scheduler.py +0 -0
  242. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib/vfs_tools.py +0 -0
  243. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/lib_base.py +0 -0
  244. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/macros/__init__.py +0 -0
  245. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/macros/_discovery.py +0 -0
  246. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/macros/conversation_agent.py +0 -0
  247. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/__init__.py +0 -0
  248. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/_discovery.py +0 -0
  249. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/base_node_factory.py +0 -0
  250. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/checkpoint_node.py +0 -0
  251. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/data_node.py +0 -0
  252. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/service_call_node.py +0 -0
  253. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/nodes/tool_utils.py +0 -0
  254. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/prompts/__init__.py +0 -0
  255. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/prompts/base.py +0 -0
  256. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/prompts/chat_prompts.py +0 -0
  257. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/prompts/error_correction_prompts.py +0 -0
  258. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/stdlib/prompts/tool_prompts.py +0 -0
  259. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/__init__.py +0 -0
  260. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/build_ui.py +0 -0
  261. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/server/__init__.py +0 -0
  262. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/server/main.py +0 -0
  263. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/server/routes/__init__.py +0 -0
  264. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/server/routes/execute.py +0 -0
  265. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/server/routes/export.py +0 -0
  266. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/server/routes/files.py +0 -0
  267. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/server/routes/plugins.py +0 -0
  268. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/server/routes/validate.py +0 -0
  269. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/index.html +0 -0
  270. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/package-lock.json +0 -0
  271. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/package.json +0 -0
  272. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/postcss.config.js +0 -0
  273. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/public/hexdag.svg +0 -0
  274. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/App.tsx +0 -0
  275. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/Canvas.tsx +0 -0
  276. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/ContextMenu.tsx +0 -0
  277. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/FileBrowser.tsx +0 -0
  278. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/Header.tsx +0 -0
  279. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/HexdagNode.tsx +0 -0
  280. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/NodeInspector.tsx +0 -0
  281. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/NodePalette.tsx +0 -0
  282. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/NodePortsSection.tsx +0 -0
  283. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/PluginManager.tsx +0 -0
  284. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/PortsEditor.tsx +0 -0
  285. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/PythonEditor.tsx +0 -0
  286. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/ValidationPanel.tsx +0 -0
  287. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/YamlEditor.tsx +0 -0
  288. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/components/index.ts +0 -0
  289. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/index.css +0 -0
  290. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/lib/api.ts +0 -0
  291. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/lib/nodeTemplates.ts +0 -0
  292. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/lib/store.ts +0 -0
  293. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/main.tsx +0 -0
  294. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/types/index.ts +0 -0
  295. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/src/vite-env.d.ts +0 -0
  296. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/tailwind.config.js +0 -0
  297. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/tsconfig.json +0 -0
  298. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/tsconfig.node.json +0 -0
  299. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag/studio/ui/vite.config.ts +0 -0
  300. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/.gitignore +0 -0
  301. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/README.md +0 -0
  302. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/__init__.py +0 -0
  303. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/LICENSE +0 -0
  304. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/README.md +0 -0
  305. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/__init__.py +0 -0
  306. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/adapters/__init__.py +0 -0
  307. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/adapters/blob.py +0 -0
  308. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/adapters/cosmos.py +0 -0
  309. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/adapters/keyvault.py +0 -0
  310. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/adapters/openai.py +0 -0
  311. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/pyproject.toml +0 -0
  312. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/tests/__init__.py +0 -0
  313. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/tests/test_azure_blob_adapter.py +0 -0
  314. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/tests/test_azure_cosmos_adapter.py +0 -0
  315. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/tests/test_azure_keyvault_adapter.py +0 -0
  316. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/azure/tests/test_azure_openai_adapter.py +0 -0
  317. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/README.md +0 -0
  318. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/__init__.py +0 -0
  319. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/examples/01_simple_pandas_transform.py +0 -0
  320. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/examples/02_simple_pandas_only.py +0 -0
  321. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/examples/03_file_io_pipeline.py +0 -0
  322. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/examples/test_pandas_transform.py +0 -0
  323. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/hexdag.toml +0 -0
  324. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/hexdag_etl/__init__.py +0 -0
  325. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/__init__.py +0 -0
  326. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/api_extract.py +0 -0
  327. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/base_node_factory.py +0 -0
  328. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/file_io.py +0 -0
  329. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/pandas_transform.py +0 -0
  330. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/hexdag_etl/nodes/sql_extract_load.py +0 -0
  331. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/pyproject.toml +0 -0
  332. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/test_transform.py +0 -0
  333. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/hexdag_etl/tests/test_plugin_integration.py +0 -0
  334. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/mysql_adapter/LICENSE +0 -0
  335. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/mysql_adapter/README.md +0 -0
  336. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/mysql_adapter/__init__.py +0 -0
  337. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/mysql_adapter/adapters/__init__.py +0 -0
  338. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/mysql_adapter/adapters/mysql.py +0 -0
  339. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/mysql_adapter/mysql_adapter.py +0 -0
  340. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/mysql_adapter/pyproject.toml +0 -0
  341. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/mysql_adapter/tests/test_mysql_adapter.py +0 -0
  342. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/pyproject.toml +0 -0
  343. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/README.md +0 -0
  344. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/__init__.py +0 -0
  345. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/__init__.py +0 -0
  346. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/file/__init__.py +0 -0
  347. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/file/local.py +0 -0
  348. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/sql/__init__.py +0 -0
  349. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/sql/base.py +0 -0
  350. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/sql/collection_storage.py +0 -0
  351. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/sql/mysql.py +0 -0
  352. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/sql/postgresql.py +0 -0
  353. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/vector/__init__.py +0 -0
  354. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/vector/chromadb.py +0 -0
  355. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/vector/in_memory.py +0 -0
  356. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/adapters/vector/pgvector.py +0 -0
  357. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/ports/__init__.py +0 -0
  358. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/ports/vector_store.py +0 -0
  359. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/tests/__init__.py +0 -0
  360. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/hexdag_plugins/storage/tests/test_local_file_storage.py +0 -0
  361. {hexdag-0.7.0.dev10 → hexdag-0.7.0.dev12}/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.dev10
3
+ Version: 0.7.0.dev12
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
@@ -41,6 +41,7 @@ Requires-Dist: nbformat>=5.9.0; extra == 'all'
41
41
  Requires-Dist: openai>=1.0.0; extra == 'all'
42
42
  Requires-Dist: pandas>=2.1.0; extra == 'all'
43
43
  Requires-Dist: pgvector>=0.3.0; extra == 'all'
44
+ Requires-Dist: redis>=5.0.0; extra == 'all'
44
45
  Requires-Dist: sqlalchemy>=2.0.0; extra == 'all'
45
46
  Provides-Extra: anthropic
46
47
  Requires-Dist: anthropic>=0.25.0; extra == 'anthropic'
@@ -58,6 +59,8 @@ Requires-Dist: nbformat>=5.9.0; extra == 'notebooks'
58
59
  Requires-Dist: pandas>=2.1.0; extra == 'notebooks'
59
60
  Provides-Extra: openai
60
61
  Requires-Dist: openai>=1.0.0; extra == 'openai'
62
+ Provides-Extra: redis
63
+ Requires-Dist: redis>=5.0.0; extra == 'redis'
61
64
  Provides-Extra: storage-all
62
65
  Requires-Dist: aiomysql>=0.2.0; extra == 'storage-all'
63
66
  Requires-Dist: aiosqlite>=0.20.0; extra == 'storage-all'
@@ -32,6 +32,7 @@ Available submodules
32
32
  - documentation: Guides and references
33
33
  - export: Project export
34
34
  - processes: Process management (pipeline runs, scheduling, entity state)
35
+ - logs: Log querying (query, summarize, tail JSON log files)
35
36
  - vfs: Virtual filesystem (uniform path-based introspection)
36
37
  """
37
38
 
@@ -40,6 +41,7 @@ from hexdag.api import (
40
41
  documentation,
41
42
  execution,
42
43
  export,
44
+ logs,
43
45
  pipeline,
44
46
  processes,
45
47
  validation,
@@ -51,6 +53,7 @@ __all__ = [
51
53
  "documentation",
52
54
  "execution",
53
55
  "export",
56
+ "logs",
54
57
  "pipeline",
55
58
  "processes",
56
59
  "validation",
@@ -0,0 +1,221 @@
1
+ """Log query API — MCP/Studio tools for querying hexDAG JSON log files.
2
+
3
+ Provides unified functions that both the MCP server and hexdag-studio
4
+ REST API consume. Reads Loguru JSON log files (written by
5
+ ``configure_logging(output_file=...)``) and filters on structured fields.
6
+
7
+ MCP server usage::
8
+
9
+ from hexdag.api import logs
10
+
11
+ @mcp.tool()
12
+ async def query_logs(
13
+ level: str | None = None,
14
+ pipeline_name: str | None = None,
15
+ contains: str | None = None,
16
+ ):
17
+ return await logs.query_logs(
18
+ "hexdag.log", level=level, pipeline_name=pipeline_name, contains=contains,
19
+ )
20
+
21
+ Studio REST API::
22
+
23
+ @router.get("/logs")
24
+ async def get_logs(level: str | None = None, pipeline_name: str | None = None):
25
+ return await logs.query_logs("hexdag.log", level=level, pipeline_name=pipeline_name)
26
+ """
27
+
28
+ from __future__ import annotations
29
+
30
+ import json
31
+ from pathlib import Path
32
+ from typing import Any
33
+
34
+ import aiofiles
35
+
36
+ _LEVEL_ORDER = {
37
+ "TRACE": 0,
38
+ "DEBUG": 1,
39
+ "INFO": 2,
40
+ "WARNING": 3,
41
+ "ERROR": 4,
42
+ "CRITICAL": 5,
43
+ }
44
+
45
+
46
+ async def query_logs(
47
+ log_file: str | Path,
48
+ *,
49
+ level: str | None = None,
50
+ pipeline_name: str | None = None,
51
+ node_id: str | None = None,
52
+ contains: str | None = None,
53
+ limit: int = 100,
54
+ ) -> list[dict[str, Any]]:
55
+ """Query log records from a JSON log file with filters.
56
+
57
+ Each line in the log file is a JSON record produced by Loguru's
58
+ ``serialize=True`` mode. Structured fields (``pipeline_name``,
59
+ ``node``, ``node_type``) are extracted from ``record.extra``.
60
+
61
+ Args
62
+ ----
63
+ log_file: Path to the JSON log file.
64
+ level: Minimum log level (DEBUG, INFO, WARNING, ERROR, CRITICAL).
65
+ pipeline_name: Filter by pipeline name (exact match on extra.pipeline_name).
66
+ node_id: Filter by node name (exact match on extra.node).
67
+ contains: Substring match on the log message text.
68
+ limit: Maximum number of records to return (default 100).
69
+
70
+ Returns
71
+ -------
72
+ List of matching log records, newest first.
73
+ """
74
+ path = Path(log_file)
75
+ if not path.exists():
76
+ return []
77
+
78
+ min_level = _LEVEL_ORDER.get(level.upper(), 0) if level else 0
79
+ contains_lower = contains.lower() if contains else None
80
+
81
+ records = await _read_json_lines(path)
82
+
83
+ results: list[dict[str, Any]] = []
84
+ for rec in reversed(records):
85
+ if len(results) >= limit:
86
+ break
87
+
88
+ record = rec.get("record", {})
89
+ extra = record.get("extra", {})
90
+ rec_level = record.get("level", {}).get("name", "INFO")
91
+
92
+ # Level filter
93
+ if _LEVEL_ORDER.get(rec_level, 0) < min_level:
94
+ continue
95
+
96
+ # Pipeline filter
97
+ if pipeline_name and extra.get("pipeline_name") != pipeline_name:
98
+ continue
99
+
100
+ # Node filter
101
+ if node_id and extra.get("node") != node_id:
102
+ continue
103
+
104
+ # Substring match
105
+ message = record.get("message", rec.get("text", ""))
106
+ if contains_lower and contains_lower not in message.lower():
107
+ continue
108
+
109
+ results.append(_summarize_record(rec))
110
+
111
+ return results
112
+
113
+
114
+ async def get_log_summary(
115
+ log_file: str | Path,
116
+ *,
117
+ pipeline_name: str | None = None,
118
+ ) -> dict[str, Any]:
119
+ """Aggregate log counts by level from a JSON log file.
120
+
121
+ Args
122
+ ----
123
+ log_file: Path to the JSON log file.
124
+ pipeline_name: Scope summary to a specific pipeline.
125
+
126
+ Returns
127
+ -------
128
+ Dict with counts per level, total count, and time range.
129
+ """
130
+ path = Path(log_file)
131
+ if not path.exists():
132
+ return {"total": 0, "counts": {}, "pipeline_name": pipeline_name}
133
+
134
+ records = await _read_json_lines(path)
135
+
136
+ counts: dict[str, int] = {}
137
+ total = 0
138
+
139
+ for rec in records:
140
+ record = rec.get("record", {})
141
+ extra = record.get("extra", {})
142
+
143
+ if pipeline_name and extra.get("pipeline_name") != pipeline_name:
144
+ continue
145
+
146
+ rec_level = record.get("level", {}).get("name", "UNKNOWN")
147
+ counts[rec_level] = counts.get(rec_level, 0) + 1
148
+ total += 1
149
+
150
+ return {
151
+ "total": total,
152
+ "counts": counts,
153
+ "pipeline_name": pipeline_name,
154
+ }
155
+
156
+
157
+ async def tail_logs(
158
+ log_file: str | Path,
159
+ *,
160
+ n: int = 20,
161
+ level: str | None = None,
162
+ ) -> list[dict[str, Any]]:
163
+ """Get the N most recent log records from a JSON log file.
164
+
165
+ Args
166
+ ----
167
+ log_file: Path to the JSON log file.
168
+ n: Number of records to return (default 20).
169
+ level: Minimum log level filter.
170
+
171
+ Returns
172
+ -------
173
+ List of most recent records, newest first.
174
+ """
175
+ return await query_logs(log_file, level=level, limit=n)
176
+
177
+
178
+ # ---------------------------------------------------------------------------
179
+ # Internal helpers
180
+ # ---------------------------------------------------------------------------
181
+
182
+
183
+ async def _read_json_lines(path: Path) -> list[dict[str, Any]]:
184
+ """Read a JSON-lines log file, skipping malformed lines."""
185
+ records: list[dict[str, Any]] = []
186
+ async with aiofiles.open(path, encoding="utf-8") as f:
187
+ async for line in f:
188
+ line = line.strip()
189
+ if not line:
190
+ continue
191
+ try:
192
+ records.append(json.loads(line))
193
+ except json.JSONDecodeError:
194
+ continue
195
+ return records
196
+
197
+
198
+ def _summarize_record(rec: dict[str, Any]) -> dict[str, Any]:
199
+ """Extract key fields from a Loguru JSON record for API output."""
200
+ record = rec.get("record", {})
201
+ extra = record.get("extra", {})
202
+ level_info = record.get("level", {})
203
+ time_info = record.get("time", {})
204
+
205
+ result: dict[str, Any] = {
206
+ "timestamp": time_info.get("repr", ""),
207
+ "level": level_info.get("name", ""),
208
+ "message": record.get("message", rec.get("text", "")),
209
+ "module": extra.get("module", record.get("name", "")),
210
+ "function": record.get("function", ""),
211
+ "line": record.get("line", 0),
212
+ }
213
+
214
+ if pipeline_name := extra.get("pipeline_name"):
215
+ result["pipeline_name"] = pipeline_name
216
+ if node := extra.get("node"):
217
+ result["node"] = node
218
+ if node_type := extra.get("node_type"):
219
+ result["node_type"] = node_type
220
+
221
+ return result
@@ -29,6 +29,7 @@ from hexdag.kernel.config.models import (
29
29
  HexDAGConfig,
30
30
  LoggingConfig,
31
31
  ManifestEntry,
32
+ MCPPermissions,
32
33
  )
33
34
  from hexdag.kernel.logging import get_logger
34
35
  from hexdag.kernel.orchestration.models import OrchestratorConfig
@@ -377,6 +378,15 @@ class ConfigLoader:
377
378
  config.caps = DefaultCaps(
378
379
  default_set=caps_data.get("default_set"),
379
380
  deny=caps_data.get("deny"),
381
+ profiles=caps_data.get("profiles"),
382
+ )
383
+
384
+ # Parse MCP permissions
385
+ if "mcp_permissions" in data:
386
+ mcp_data = data["mcp_permissions"]
387
+ config.mcp_permissions = MCPPermissions(
388
+ default_profile=mcp_data.get("default_profile", "read-only"),
389
+ client_profiles=mcp_data.get("client_profiles", {}),
380
390
  )
381
391
 
382
392
  return config
@@ -1,20 +1,26 @@
1
1
  """Entity plugins for the YAML pipeline builder.
2
2
 
3
3
  These plugins build specific entity types from YAML configuration:
4
+ - AdapterDefinitionPlugin: Process Adapter definitions (kind: Adapter)
4
5
  - ConfigDefinitionPlugin: Process Config definitions (kind: Config)
5
6
  - MacroDefinitionPlugin: Process Macro definitions (kind: Macro)
6
7
  - MacroEntityPlugin: Expand macro invocations into subgraphs
8
+ - MiddlewareDefinitionPlugin: Process Middleware definitions (kind: Middleware)
7
9
  - NodeEntityPlugin: Build regular nodes (llm_node, function_node, etc.)
8
10
  """
9
11
 
12
+ from hexdag.compiler.plugins.adapter_definition import AdapterDefinitionPlugin
10
13
  from hexdag.compiler.plugins.config_definition import ConfigDefinitionPlugin
11
14
  from hexdag.compiler.plugins.macro_definition import MacroDefinitionPlugin
12
15
  from hexdag.compiler.plugins.macro_entity import MacroEntityPlugin
16
+ from hexdag.compiler.plugins.middleware_definition import MiddlewareDefinitionPlugin
13
17
  from hexdag.compiler.plugins.node_entity import NodeEntityPlugin
14
18
 
15
19
  __all__ = [
20
+ "AdapterDefinitionPlugin",
16
21
  "ConfigDefinitionPlugin",
17
22
  "MacroDefinitionPlugin",
18
23
  "MacroEntityPlugin",
24
+ "MiddlewareDefinitionPlugin",
19
25
  "NodeEntityPlugin",
20
26
  ]
@@ -0,0 +1,140 @@
1
+ """Plugin for handling Adapter definitions (kind: Adapter).
2
+
3
+ Standalone ``kind: Adapter`` manifests define reusable adapter configurations
4
+ that can be referenced by name from ``spec.ports.<name>.ref``.
5
+
6
+ Example YAML::
7
+
8
+ apiVersion: hexdag/v1
9
+ kind: Adapter
10
+ metadata:
11
+ name: production-openai
12
+ description: Production OpenAI with low temperature
13
+ spec:
14
+ class: hexdag.stdlib.adapters.openai.OpenAIAdapter
15
+ config:
16
+ model: gpt-4o
17
+ temperature: 0.3
18
+ api_key: ${OPENAI_API_KEY}
19
+
20
+ Reference in a pipeline::
21
+
22
+ spec:
23
+ ports:
24
+ llm:
25
+ ref: production-openai
26
+ config: # optional overrides merged on top
27
+ temperature: 0.9
28
+ """
29
+
30
+ from __future__ import annotations
31
+
32
+ from typing import TYPE_CHECKING, Any
33
+
34
+ from hexdag.kernel.exceptions import YamlPipelineBuilderError
35
+ from hexdag.kernel.logging import get_logger
36
+
37
+ if TYPE_CHECKING:
38
+ from hexdag.compiler.yaml_builder import YamlPipelineBuilder
39
+ from hexdag.kernel.domain.dag import DirectedGraph, NodeSpec
40
+
41
+ logger = get_logger(__name__)
42
+
43
+ # Module-level registry for named adapter definitions
44
+ _adapter_registry: dict[str, dict[str, Any]] = {}
45
+
46
+
47
+ def get_adapter_definition(name: str) -> dict[str, Any] | None:
48
+ """Look up a registered adapter definition by name.
49
+
50
+ Parameters
51
+ ----------
52
+ name : str
53
+ Adapter name (from ``metadata.name``)
54
+
55
+ Returns
56
+ -------
57
+ dict[str, Any] | None
58
+ Adapter definition dict with ``class`` and ``config`` keys,
59
+ or None if not registered
60
+ """
61
+ return _adapter_registry.get(name)
62
+
63
+
64
+ def clear_adapter_registry() -> None:
65
+ """Clear all registered adapter definitions (for testing)."""
66
+ _adapter_registry.clear()
67
+
68
+
69
+ class AdapterDefinitionPlugin:
70
+ """Plugin for handling Adapter definitions (kind: Adapter).
71
+
72
+ Processes ``kind: Adapter`` YAML documents and registers the
73
+ adapter configuration for later reference by name. Does not add
74
+ nodes to the graph.
75
+ """
76
+
77
+ def can_handle(self, node_config: dict[str, Any]) -> bool:
78
+ """Handle Adapter kind."""
79
+ return node_config.get("kind") == "Adapter"
80
+
81
+ def build(
82
+ self, node_config: dict[str, Any], builder: YamlPipelineBuilder, graph: DirectedGraph
83
+ ) -> NodeSpec | None:
84
+ """Register named adapter definition.
85
+
86
+ Parameters
87
+ ----------
88
+ node_config : dict[str, Any]
89
+ Adapter definition configuration
90
+ builder : YamlPipelineBuilder
91
+ Builder instance (unused)
92
+ graph : DirectedGraph
93
+ Graph instance (unused — definitions don't add nodes)
94
+
95
+ Returns
96
+ -------
97
+ None
98
+ Adapter definitions don't add nodes to the graph
99
+ """
100
+ metadata = node_config.get("metadata", {})
101
+ name = metadata.get("name")
102
+ if not name:
103
+ raise YamlPipelineBuilderError("Adapter definition missing 'metadata.name'")
104
+
105
+ spec = node_config.get("spec", {})
106
+ adapter_class = spec.get("class")
107
+
108
+ if not adapter_class:
109
+ raise YamlPipelineBuilderError(
110
+ f"Adapter '{name}' missing 'spec.class'. "
111
+ f"Adapter definitions must specify the adapter class module path."
112
+ )
113
+
114
+ if not isinstance(adapter_class, str):
115
+ raise YamlPipelineBuilderError(
116
+ f"Adapter '{name}' spec.class must be a module path string, "
117
+ f"got {type(adapter_class).__name__}"
118
+ )
119
+
120
+ config = spec.get("config", {})
121
+ if not isinstance(config, dict):
122
+ raise YamlPipelineBuilderError(
123
+ f"Adapter '{name}' spec.config must be a dict, got {type(config).__name__}"
124
+ )
125
+
126
+ capabilities = spec.get("capabilities")
127
+
128
+ entry: dict[str, Any] = {"class": adapter_class, "config": config}
129
+ if capabilities is not None:
130
+ entry["capabilities"] = capabilities
131
+
132
+ _adapter_registry[name] = entry
133
+
134
+ logger.info(
135
+ "Registered adapter definition '{}' (class={})",
136
+ name,
137
+ adapter_class,
138
+ )
139
+
140
+ return None
@@ -67,6 +67,7 @@ class MacroDefinitionPlugin:
67
67
  Macro definitions don't add nodes to the graph
68
68
  """
69
69
  from hexdag.kernel.yaml_macro import ( # lazy: mutual cycle with yaml_builder
70
+ PortRequirement,
70
71
  YamlMacro,
71
72
  YamlMacroConfig,
72
73
  YamlMacroParameterSpec,
@@ -85,22 +86,31 @@ class MacroDefinitionPlugin:
85
86
  raw_parameters = node_config.get("parameters", [])
86
87
  parameters = [YamlMacroParameterSpec(**p) for p in raw_parameters]
87
88
 
88
- # Extract nodes
89
+ # Extract nodes — support both static list and raw YAML template string
89
90
  nodes = node_config.get("nodes", [])
90
- if not nodes:
91
+ nodes_raw = node_config.get("nodes_raw")
92
+
93
+ if not nodes and not nodes_raw:
91
94
  raise YamlPipelineBuilderError(
92
- f"Macro '{macro_name}' has no nodes. Macros must define at least one node."
95
+ f"Macro '{macro_name}' has no nodes. "
96
+ f"Macros must define 'nodes' (list) or 'nodes_raw' (template string)."
93
97
  )
94
98
 
95
99
  # Extract outputs (optional)
96
100
  outputs = node_config.get("outputs")
97
101
 
102
+ # Extract port requirements (optional)
103
+ raw_ports = node_config.get("requires_ports", [])
104
+ requires_ports = [PortRequirement(**p) for p in raw_ports]
105
+
98
106
  # Create YamlMacroConfig
99
107
  macro_config = YamlMacroConfig(
100
108
  macro_name=macro_name,
101
109
  macro_description=macro_description,
102
110
  parameters=parameters,
103
111
  nodes=nodes,
112
+ nodes_raw=nodes_raw,
113
+ requires_ports=requires_ports,
104
114
  outputs=outputs,
105
115
  )
106
116
 
@@ -108,12 +118,24 @@ class MacroDefinitionPlugin:
108
118
  # Create a dynamic class that pre-fills the YamlMacro config
109
119
  config_dict = macro_config.model_dump()
110
120
 
121
+ # Structural fields that must not be overridden at invocation time
122
+ _structural = frozenset({
123
+ "macro_name",
124
+ "macro_description",
125
+ "parameters",
126
+ "nodes",
127
+ "nodes_raw",
128
+ "requires_ports",
129
+ "outputs",
130
+ })
131
+
111
132
  class DynamicYamlMacro(YamlMacro):
112
133
  """Dynamically generated YamlMacro with pre-filled configuration."""
113
134
 
114
135
  def __init__(self, **kwargs: Any) -> None:
115
- # Merge pre-filled config with any override kwargs
116
- merged_config = {**config_dict, **kwargs}
136
+ # Only allow non-structural overrides (parameter values)
137
+ safe_kwargs = {k: v for k, v in kwargs.items() if k not in _structural}
138
+ merged_config = {**config_dict, **safe_kwargs}
117
139
  super().__init__(**merged_config)
118
140
 
119
141
  # Set class name for better debugging