flock-core 0.4.0b42__tar.gz → 0.4.0b44__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.

Potentially problematic release.


This version of flock-core might be problematic. Click here for more details.

Files changed (605) hide show
  1. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/PKG-INFO +1 -1
  2. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/pyproject.toml +1 -1
  3. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/api/__init__.py +1 -2
  4. flock_core-0.4.0b44/src/flock/core/api/endpoints.py +254 -0
  5. flock_core-0.4.0b44/src/flock/core/api/main.py +162 -0
  6. flock_core-0.4.0b44/src/flock/core/api/service.py +214 -0
  7. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/flock.py +192 -133
  8. flock_core-0.4.0b44/src/flock/webapp/app/api/agent_management.py +241 -0
  9. flock_core-0.4.0b44/src/flock/webapp/app/api/execution.py +164 -0
  10. flock_core-0.4.0b44/src/flock/webapp/app/api/flock_management.py +129 -0
  11. flock_core-0.4.0b44/src/flock/webapp/app/chat.py +233 -0
  12. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/app/config.py +6 -3
  13. flock_core-0.4.0b44/src/flock/webapp/app/dependencies.py +95 -0
  14. flock_core-0.4.0b44/src/flock/webapp/app/main.py +488 -0
  15. flock_core-0.4.0b44/src/flock/webapp/app/services/flock_service.py +313 -0
  16. flock_core-0.4.0b44/src/flock/webapp/run.py +213 -0
  17. flock_core-0.4.0b44/src/flock/webapp/static/css/chat.css +227 -0
  18. flock_core-0.4.0b44/src/flock/webapp/static/css/components.css +167 -0
  19. flock_core-0.4.0b44/src/flock/webapp/static/css/header.css +39 -0
  20. flock_core-0.4.0b44/src/flock/webapp/static/css/layout.css +46 -0
  21. flock_core-0.4.0b44/src/flock/webapp/static/css/sidebar.css +127 -0
  22. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/base.html +6 -1
  23. flock_core-0.4.0b44/src/flock/webapp/templates/chat.html +60 -0
  24. flock_core-0.4.0b44/src/flock/webapp/templates/chat_settings.html +20 -0
  25. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/flock_editor.html +1 -1
  26. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_agent_detail_form.html +4 -4
  27. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_agent_list.html +2 -2
  28. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_agent_manager_view.html +3 -4
  29. flock_core-0.4.0b44/src/flock/webapp/templates/partials/_chat_container.html +9 -0
  30. flock_core-0.4.0b44/src/flock/webapp/templates/partials/_chat_messages.html +13 -0
  31. flock_core-0.4.0b44/src/flock/webapp/templates/partials/_chat_settings_form.html +65 -0
  32. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_execution_form.html +2 -2
  33. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_execution_view_container.html +1 -1
  34. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_flock_properties_form.html +2 -2
  35. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_registry_viewer_content.html +3 -3
  36. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_sidebar.html +17 -1
  37. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/registry_viewer.html +3 -3
  38. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/uv.lock +1 -1
  39. flock_core-0.4.0b42/src/flock/core/api/endpoints.py +0 -322
  40. flock_core-0.4.0b42/src/flock/core/api/main.py +0 -681
  41. flock_core-0.4.0b42/src/flock/webapp/app/api/agent_management.py +0 -270
  42. flock_core-0.4.0b42/src/flock/webapp/app/api/execution.py +0 -173
  43. flock_core-0.4.0b42/src/flock/webapp/app/api/flock_management.py +0 -102
  44. flock_core-0.4.0b42/src/flock/webapp/app/main.py +0 -1074
  45. flock_core-0.4.0b42/src/flock/webapp/app/services/flock_service.py +0 -291
  46. flock_core-0.4.0b42/src/flock/webapp/run.py +0 -132
  47. flock_core-0.4.0b42/src/flock/webapp/static/css/custom.css +0 -612
  48. flock_core-0.4.0b42/src/flock/webapp/templates/partials/_agent_manager_view_old.html +0 -19
  49. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.devcontainer/devcontainer.json +0 -0
  50. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.env_template +0 -0
  51. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  52. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  53. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  54. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.github/workflows/.gitkeep +0 -0
  55. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.github/workflows/deploy-documentation.yml +0 -0
  56. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
  57. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.gitignore +0 -0
  58. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.gitmodules +0 -0
  59. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.vscode/launch.json +0 -0
  60. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.vscode/settings.json +0 -0
  61. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/.vscode/tasks.json +0 -0
  62. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/LICENSE +0 -0
  63. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/README.md +0 -0
  64. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/about/changelog.md +0 -0
  65. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/about/contributing.md +0 -0
  66. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/drawio/architecture.drawio +0 -0
  67. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/cli_outputs/out.png +0 -0
  68. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/components_chart.png +0 -0
  69. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/examples/01_01.png +0 -0
  70. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/examples/01_02.png +0 -0
  71. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/examples/01_03.png +0 -0
  72. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/examples/01_04.png +0 -0
  73. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/examples/01_05.png +0 -0
  74. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/examples/01_06.png +0 -0
  75. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/flock.png +0 -0
  76. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/flock_cli.png +0 -0
  77. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/flow_chart.png +0 -0
  78. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/getting-started/first_agent_00.png +0 -0
  79. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/hummingbird.png +0 -0
  80. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/icon.png +0 -0
  81. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/icon.png~ +0 -0
  82. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/logo.png +0 -0
  83. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/memory_concepts.png +0 -0
  84. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/memory_flow.png +0 -0
  85. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/assets/images/memory_flow_chart.png +0 -0
  86. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/components/evaluators.md +0 -0
  87. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/components/index.md +0 -0
  88. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/components/modules.md +0 -0
  89. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/components/tools.md +0 -0
  90. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/core-concepts/agents.md +0 -0
  91. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/core-concepts/declarative.md +0 -0
  92. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/core-concepts/index.md +0 -0
  93. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/core-concepts/workflows.md +0 -0
  94. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/create_doc_boilerplate.py +0 -0
  95. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/deployment/index.md +0 -0
  96. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/deployment/temporal.md +0 -0
  97. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/getting-started/concepts.md +0 -0
  98. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/getting-started/configuration.md +0 -0
  99. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/getting-started/index.md +0 -0
  100. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/getting-started/installation.md +0 -0
  101. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/getting-started/quickstart.md +0 -0
  102. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/guides/chaining-agents.md +0 -0
  103. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/guides/custom-endpoints.md +0 -0
  104. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/guides/index.md +0 -0
  105. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/guides/temporal-configuration.md +0 -0
  106. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/index.md +0 -0
  107. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/interacting-with-flock/cli-tool.md +0 -0
  108. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/interacting-with-flock/index.md +0 -0
  109. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/interacting-with-flock/interactive-cli.md +0 -0
  110. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/interacting-with-flock/programmatic.md +0 -0
  111. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/interacting-with-flock/rest-api.md +0 -0
  112. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/interacting-with-flock/web-ui.md +0 -0
  113. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/reference/flock_agent.md +0 -0
  114. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/reference/index.md +0 -0
  115. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/release-notes/magpie.md +0 -0
  116. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/docs/stylesheets/extra.css +0 -0
  117. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/mkdocs.yml +0 -0
  118. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/requirements.txt +0 -0
  119. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/scripts/code_collector.py +0 -0
  120. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/scripts/create_docs.py +0 -0
  121. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/scripts/ensure_uv.py +0 -0
  122. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/__init__.py +0 -0
  123. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/assets/release_notes.md +0 -0
  124. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/config.py +0 -0
  125. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/constants.py +0 -0
  126. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/create_agent.py +0 -0
  127. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/create_flock.py +0 -0
  128. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/execute_flock.py +0 -0
  129. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/load_agent.py +0 -0
  130. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/load_examples.py +0 -0
  131. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/load_flock.py +0 -0
  132. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/load_release_notes.py +0 -0
  133. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/loaded_flock_cli.py +0 -0
  134. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/manage_agents.py +0 -0
  135. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/registry_management.py +0 -0
  136. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/runner.py +0 -0
  137. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/settings.py +0 -0
  138. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/utils.py +0 -0
  139. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/view_results.py +0 -0
  140. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/cli/yaml_editor.py +0 -0
  141. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/config.py +0 -0
  142. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/__init__.py +0 -0
  143. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/api/custom_endpoint.py +0 -0
  144. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/api/models.py +0 -0
  145. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/api/run_store.py +0 -0
  146. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/api/runner.py +0 -0
  147. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/api/ui/__init__.py +0 -0
  148. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/api/ui/routes.py +0 -0
  149. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/api/ui/utils.py +0 -0
  150. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/context/context.py +0 -0
  151. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/context/context_manager.py +0 -0
  152. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/context/context_vars.py +0 -0
  153. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/evaluation/utils.py +0 -0
  154. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/execution/batch_executor.py +0 -0
  155. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/execution/evaluation_executor.py +0 -0
  156. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/execution/local_executor.py +0 -0
  157. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/execution/temporal_executor.py +0 -0
  158. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/flock_agent.py +0 -0
  159. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/flock_evaluator.py +0 -0
  160. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/flock_factory.py +0 -0
  161. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/flock_module.py +0 -0
  162. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/flock_registry.py +0 -0
  163. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/flock_router.py +0 -0
  164. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/interpreter/python_interpreter.py +0 -0
  165. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/__init__.py +0 -0
  166. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/formatters/enum_builder.py +0 -0
  167. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/formatters/theme_builder.py +0 -0
  168. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/formatters/themed_formatter.py +0 -0
  169. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/formatters/themes.py +0 -0
  170. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/logging.py +0 -0
  171. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/span_middleware/baggage_span_processor.py +0 -0
  172. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/telemetry.py +0 -0
  173. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/telemetry_exporter/base_exporter.py +0 -0
  174. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/telemetry_exporter/file_exporter.py +0 -0
  175. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/telemetry_exporter/sqlite_exporter.py +0 -0
  176. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/logging/trace_and_logged.py +0 -0
  177. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/mixin/dspy_integration.py +0 -0
  178. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/mixin/prompt_parser.py +0 -0
  179. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/serialization/__init__.py +0 -0
  180. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/serialization/callable_registry.py +0 -0
  181. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/serialization/flock_serializer.py +0 -0
  182. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/serialization/json_encoder.py +0 -0
  183. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/serialization/secure_serializer.py +0 -0
  184. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/serialization/serializable.py +0 -0
  185. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/serialization/serialization_utils.py +0 -0
  186. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/tools/azure_tools.py +0 -0
  187. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/tools/basic_tools.py +0 -0
  188. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/tools/dev_tools/github.py +0 -0
  189. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/tools/llm_tools.py +0 -0
  190. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/tools/markdown_tools.py +0 -0
  191. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/tools/zendesk_tools.py +0 -0
  192. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/util/cli_helper.py +0 -0
  193. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/util/file_path_utils.py +0 -0
  194. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/util/hydrator.py +0 -0
  195. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/util/input_resolver.py +0 -0
  196. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/util/loader.py +0 -0
  197. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/core/util/spliter.py +0 -0
  198. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/evaluators/declarative/declarative_evaluator.py +0 -0
  199. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/evaluators/memory/memory_evaluator.py +0 -0
  200. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/evaluators/test/test_case_evaluator.py +0 -0
  201. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/evaluators/zep/zep_evaluator.py +0 -0
  202. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/modules/assertion/assertion_module.py +0 -0
  203. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/modules/callback/callback_module.py +0 -0
  204. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/modules/memory/memory_module.py +0 -0
  205. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/modules/memory/memory_parser.py +0 -0
  206. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/modules/memory/memory_storage.py +0 -0
  207. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/modules/output/output_module.py +0 -0
  208. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/modules/performance/metrics_module.py +0 -0
  209. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/modules/zep/zep_module.py +0 -0
  210. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/platform/docker_tools.py +0 -0
  211. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/platform/jaeger_install.py +0 -0
  212. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/__init__.py +0 -0
  213. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/agent/__init__.py +0 -0
  214. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/agent/agent_router.py +0 -0
  215. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/agent/handoff_agent.py +0 -0
  216. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/conditional/conditional_router.py +0 -0
  217. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/default/__init__.py +0 -0
  218. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/default/default_router.py +0 -0
  219. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/feedback/feedback_router.py +0 -0
  220. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/list_generator/list_generator_router.py +0 -0
  221. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/llm/__init__.py +0 -0
  222. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/routers/llm/llm_router.py +0 -0
  223. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/3024-day.toml +0 -0
  224. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/3024-night.toml +0 -0
  225. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/aardvark-blue.toml +0 -0
  226. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/abernathy.toml +0 -0
  227. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/adventure.toml +0 -0
  228. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/adventuretime.toml +0 -0
  229. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/afterglow.toml +0 -0
  230. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/alabaster.toml +0 -0
  231. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/alienblood.toml +0 -0
  232. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/andromeda.toml +0 -0
  233. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/apple-classic.toml +0 -0
  234. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/apple-system-colors.toml +0 -0
  235. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/arcoiris.toml +0 -0
  236. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/argonaut copy.toml +0 -0
  237. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/argonaut.toml +0 -0
  238. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/arthur.toml +0 -0
  239. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ateliersulphurpool.toml +0 -0
  240. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/atom.toml +0 -0
  241. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/atom_test.toml +0 -0
  242. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/atomonelight.toml +0 -0
  243. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/aurora.toml +0 -0
  244. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ayu copy.toml +0 -0
  245. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ayu-light.toml +0 -0
  246. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ayu-mirage.toml +0 -0
  247. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ayu.toml +0 -0
  248. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/banana-blueberry.toml +0 -0
  249. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/batman.toml +0 -0
  250. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/belafonte-day.toml +0 -0
  251. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/belafonte-night.toml +0 -0
  252. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/birdsofparadise.toml +0 -0
  253. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/blazer.toml +0 -0
  254. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/blue-matrix.toml +0 -0
  255. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/blueberrypie.toml +0 -0
  256. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/bluedolphin.toml +0 -0
  257. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/blulocodark.toml +0 -0
  258. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/blulocolight.toml +0 -0
  259. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/borland.toml +0 -0
  260. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/breeze.toml +0 -0
  261. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/bright-lights.toml +0 -0
  262. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/broadcast.toml +0 -0
  263. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/brogrammer.toml +0 -0
  264. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/builtin-dark.toml +0 -0
  265. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/builtin-light.toml +0 -0
  266. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/builtin-pastel-dark.toml +0 -0
  267. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/builtin-solarized-dark.toml +0 -0
  268. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/builtin-solarized-light.toml +0 -0
  269. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/builtin-tango-dark.toml +0 -0
  270. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/builtin-tango-light.toml +0 -0
  271. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/c64.toml +0 -0
  272. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/calamity.toml +0 -0
  273. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/catppuccin-frappe.toml +0 -0
  274. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/catppuccin-latte.toml +0 -0
  275. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/catppuccin-macchiato.toml +0 -0
  276. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/catppuccin-mocha.toml +0 -0
  277. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/cga.toml +0 -0
  278. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/chalk.toml +0 -0
  279. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/chalkboard.toml +0 -0
  280. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/challengerdeep.toml +0 -0
  281. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/chester.toml +0 -0
  282. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ciapre.toml +0 -0
  283. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/clrs.toml +0 -0
  284. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/cobalt-neon.toml +0 -0
  285. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/cobalt2.toml +0 -0
  286. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/coffee-theme.toml +0 -0
  287. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/crayonponyfish.toml +0 -0
  288. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/cutiepro.toml +0 -0
  289. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/cyberdyne.toml +0 -0
  290. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/cyberpunk.toml +0 -0
  291. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
  292. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/dark+.toml +0 -0
  293. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/dark-pastel.toml +0 -0
  294. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/darkermatrix.toml +0 -0
  295. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/darkmatrix.toml +0 -0
  296. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/darkside.toml +0 -0
  297. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/dayfox.toml +0 -0
  298. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/deep.toml +0 -0
  299. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/desert.toml +0 -0
  300. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/dimidium.toml +0 -0
  301. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/dimmedmonokai.toml +0 -0
  302. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/django.toml +0 -0
  303. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/djangorebornagain.toml +0 -0
  304. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/djangosmooth.toml +0 -0
  305. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/doom-peacock.toml +0 -0
  306. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/doomone.toml +0 -0
  307. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/dotgov.toml +0 -0
  308. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/dracula+.toml +0 -0
  309. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/dracula.toml +0 -0
  310. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/duckbones.toml +0 -0
  311. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/duotone-dark.toml +0 -0
  312. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/earthsong.toml +0 -0
  313. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/elemental.toml +0 -0
  314. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/elementary.toml +0 -0
  315. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/encom.toml +0 -0
  316. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/espresso-libre.toml +0 -0
  317. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/espresso.toml +0 -0
  318. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/everblush.toml +0 -0
  319. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/fahrenheit.toml +0 -0
  320. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/fairyfloss.toml +0 -0
  321. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/farmhouse-dark.toml +0 -0
  322. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/farmhouse-light.toml +0 -0
  323. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/fideloper.toml +0 -0
  324. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/firefly-traditional.toml +0 -0
  325. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/firefoxdev.toml +0 -0
  326. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/firewatch.toml +0 -0
  327. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/fishtank.toml +0 -0
  328. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/flat.toml +0 -0
  329. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/flatland.toml +0 -0
  330. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/flexoki-dark.toml +0 -0
  331. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/flexoki-light.toml +0 -0
  332. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/floraverse.toml +0 -0
  333. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/forestblue.toml +0 -0
  334. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/framer.toml +0 -0
  335. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/frontenddelight.toml +0 -0
  336. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/funforrest.toml +0 -0
  337. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/galaxy.toml +0 -0
  338. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/galizur.toml +0 -0
  339. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/github-dark.toml +0 -0
  340. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/github.toml +0 -0
  341. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/glacier.toml +0 -0
  342. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/grape.toml +0 -0
  343. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/grass.toml +0 -0
  344. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/grey-green.toml +0 -0
  345. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/gruber-darker.toml +0 -0
  346. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/gruvboxdark.toml +0 -0
  347. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/gruvboxdarkhard.toml +0 -0
  348. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/gruvboxlight.toml +0 -0
  349. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/guezwhoz.toml +0 -0
  350. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hacktober.toml +0 -0
  351. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hardcore.toml +0 -0
  352. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/harper.toml +0 -0
  353. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hax0r-blue.toml +0 -0
  354. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hax0r-gr33n.toml +0 -0
  355. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hax0r-r3d.toml +0 -0
  356. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/highway.toml +0 -0
  357. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hipster-green.toml +0 -0
  358. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hivacruz.toml +0 -0
  359. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/homebrew.toml +0 -0
  360. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hopscotch.256.toml +0 -0
  361. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hopscotch.toml +0 -0
  362. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hurtado.toml +0 -0
  363. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/hybrid.toml +0 -0
  364. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ic-green-ppl.toml +0 -0
  365. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ic-orange-ppl.toml +0 -0
  366. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iceberg-dark.toml +0 -0
  367. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iceberg-light.toml +0 -0
  368. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/idea.toml +0 -0
  369. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/idletoes.toml +0 -0
  370. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ir-black.toml +0 -0
  371. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iterm2-dark-background.toml +0 -0
  372. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iterm2-default.toml +0 -0
  373. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iterm2-light-background.toml +0 -0
  374. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
  375. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iterm2-smoooooth.toml +0 -0
  376. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
  377. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iterm2-solarized-light.toml +0 -0
  378. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iterm2-tango-dark.toml +0 -0
  379. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/iterm2-tango-light.toml +0 -0
  380. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/jackie-brown.toml +0 -0
  381. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/japanesque.toml +0 -0
  382. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/jellybeans.toml +0 -0
  383. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/jetbrains-darcula.toml +0 -0
  384. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/jubi.toml +0 -0
  385. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/kanagawabones.toml +0 -0
  386. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/kibble.toml +0 -0
  387. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/kolorit.toml +0 -0
  388. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/konsolas.toml +0 -0
  389. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/kurokula.toml +0 -0
  390. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/lab-fox.toml +0 -0
  391. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/laser.toml +0 -0
  392. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/later-this-evening.toml +0 -0
  393. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/lavandula.toml +0 -0
  394. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/liquidcarbon.toml +0 -0
  395. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/liquidcarbontransparent.toml +0 -0
  396. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
  397. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/lovelace.toml +0 -0
  398. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/man-page.toml +0 -0
  399. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/mariana.toml +0 -0
  400. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/material.toml +0 -0
  401. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/materialdark.toml +0 -0
  402. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/materialdarker.toml +0 -0
  403. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/materialdesigncolors.toml +0 -0
  404. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/materialocean.toml +0 -0
  405. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/mathias.toml +0 -0
  406. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/matrix.toml +0 -0
  407. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/medallion.toml +0 -0
  408. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/mellifluous.toml +0 -0
  409. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/midnight-in-mojave.toml +0 -0
  410. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/mirage.toml +0 -0
  411. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/misterioso.toml +0 -0
  412. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/molokai.toml +0 -0
  413. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/monalisa.toml +0 -0
  414. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/monokai-remastered.toml +0 -0
  415. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/monokai-soda.toml +0 -0
  416. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/monokai-vivid.toml +0 -0
  417. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/n0tch2k.toml +0 -0
  418. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/neobones-dark.toml +0 -0
  419. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/neobones-light.toml +0 -0
  420. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/neon.toml +0 -0
  421. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/neopolitan.toml +0 -0
  422. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/neutron.toml +0 -0
  423. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/night-owlish-light.toml +0 -0
  424. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/nightfox.toml +0 -0
  425. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/nightlion-v1.toml +0 -0
  426. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/nightlion-v2.toml +0 -0
  427. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/niji.toml +0 -0
  428. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/nocturnal-winter.toml +0 -0
  429. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/nord-light.toml +0 -0
  430. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/nord.toml +0 -0
  431. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/novel.toml +0 -0
  432. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/nvimdark.toml +0 -0
  433. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/nvimlight.toml +0 -0
  434. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/obsidian.toml +0 -0
  435. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ocean.toml +0 -0
  436. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/oceanic-next.toml +0 -0
  437. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/oceanicmaterial.toml +0 -0
  438. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ollie.toml +0 -0
  439. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/onehalfdark.toml +0 -0
  440. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/onehalflight.toml +0 -0
  441. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/operator-mono-dark.toml +0 -0
  442. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/overnight-slumber.toml +0 -0
  443. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/oxocarbon.toml +0 -0
  444. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/palenighthc.toml +0 -0
  445. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/pandora.toml +0 -0
  446. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/paraiso-dark.toml +0 -0
  447. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/paulmillr.toml +0 -0
  448. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/pencildark.toml +0 -0
  449. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/pencillight.toml +0 -0
  450. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/peppermint.toml +0 -0
  451. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/piatto-light.toml +0 -0
  452. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/pnevma.toml +0 -0
  453. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/popping-and-locking.toml +0 -0
  454. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/primary.toml +0 -0
  455. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/pro-light.toml +0 -0
  456. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/pro.toml +0 -0
  457. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/purple-rain.toml +0 -0
  458. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/purplepeter.toml +0 -0
  459. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/rapture.toml +0 -0
  460. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/raycast-dark.toml +0 -0
  461. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/raycast-light.toml +0 -0
  462. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/rebecca.toml +0 -0
  463. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/red-alert.toml +0 -0
  464. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/red-planet.toml +0 -0
  465. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/red-sands.toml +0 -0
  466. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/relaxed.toml +0 -0
  467. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/retro.toml +0 -0
  468. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/rippedcasts.toml +0 -0
  469. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/rose-pine-dawn.toml +0 -0
  470. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/rose-pine-moon.toml +0 -0
  471. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/rose-pine.toml +0 -0
  472. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/rouge-2.toml +0 -0
  473. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/royal.toml +0 -0
  474. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ryuuko.toml +0 -0
  475. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/sakura.toml +0 -0
  476. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/scarlet-protocol.toml +0 -0
  477. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/seafoam-pastel.toml +0 -0
  478. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/seashells.toml +0 -0
  479. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/seoulbones-dark.toml +0 -0
  480. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/seoulbones-light.toml +0 -0
  481. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/seti.toml +0 -0
  482. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/shades-of-purple.toml +0 -0
  483. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/shaman.toml +0 -0
  484. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/slate.toml +0 -0
  485. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/sleepyhollow.toml +0 -0
  486. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/smyck.toml +0 -0
  487. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/snazzy.toml +0 -0
  488. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/softserver.toml +0 -0
  489. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/solarized-darcula.toml +0 -0
  490. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/solarized-dark---patched.toml +0 -0
  491. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
  492. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/spacedust.toml +0 -0
  493. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
  494. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/spacegray-eighties.toml +0 -0
  495. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/spacegray.toml +0 -0
  496. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/spiderman.toml +0 -0
  497. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/spring.toml +0 -0
  498. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/square.toml +0 -0
  499. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/sublette.toml +0 -0
  500. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/subliminal.toml +0 -0
  501. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/sugarplum.toml +0 -0
  502. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/sundried.toml +0 -0
  503. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/symfonic.toml +0 -0
  504. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/synthwave-everything.toml +0 -0
  505. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/synthwave.toml +0 -0
  506. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/synthwavealpha.toml +0 -0
  507. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tango-adapted.toml +0 -0
  508. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tango-half-adapted.toml +0 -0
  509. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/teerb.toml +0 -0
  510. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/terafox.toml +0 -0
  511. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/terminal-basic.toml +0 -0
  512. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/thayer-bright.toml +0 -0
  513. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/the-hulk.toml +0 -0
  514. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tinacious-design-(dark).toml +0 -0
  515. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tinacious-design-(light).toml +0 -0
  516. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tokyonight-day.toml +0 -0
  517. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tokyonight-storm.toml +0 -0
  518. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tokyonight.toml +0 -0
  519. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tomorrow-night-blue.toml +0 -0
  520. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tomorrow-night-bright.toml +0 -0
  521. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tomorrow-night-burns.toml +0 -0
  522. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
  523. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tomorrow-night.toml +0 -0
  524. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/tomorrow.toml +0 -0
  525. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/toychest.toml +0 -0
  526. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/treehouse.toml +0 -0
  527. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/twilight.toml +0 -0
  528. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ubuntu.toml +0 -0
  529. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ultradark.toml +0 -0
  530. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/ultraviolent.toml +0 -0
  531. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/underthesea.toml +0 -0
  532. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/unikitty.toml +0 -0
  533. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/urple.toml +0 -0
  534. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/vaughn.toml +0 -0
  535. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/vesper.toml +0 -0
  536. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/vibrantink.toml +0 -0
  537. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/vimbones.toml +0 -0
  538. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/violet-dark.toml +0 -0
  539. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/violet-light.toml +0 -0
  540. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/warmneon.toml +0 -0
  541. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/wez.toml +0 -0
  542. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/whimsy.toml +0 -0
  543. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/wildcherry.toml +0 -0
  544. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/wilmersdorf.toml +0 -0
  545. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/wombat.toml +0 -0
  546. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/wryan.toml +0 -0
  547. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/xcodedark.toml +0 -0
  548. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/xcodedarkhc.toml +0 -0
  549. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/xcodelight.toml +0 -0
  550. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/xcodelighthc.toml +0 -0
  551. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/xcodewwdc.toml +0 -0
  552. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/zenbones-dark.toml +0 -0
  553. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/zenbones-light.toml +0 -0
  554. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/zenbones.toml +0 -0
  555. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/zenburn.toml +0 -0
  556. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/zenburned.toml +0 -0
  557. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/zenwritten-dark.toml +0 -0
  558. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/themes/zenwritten-light.toml +0 -0
  559. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/__init__.py +0 -0
  560. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/app/__init__.py +0 -0
  561. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/app/api/__init__.py +0 -0
  562. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/app/api/registry_viewer.py +0 -0
  563. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/app/models_ui.py +0 -0
  564. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/app/services/__init__.py +0 -0
  565. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/app/templates/theme_mapper.html +0 -0
  566. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/app/theme_mapper.py +0 -0
  567. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/app/utils.py +0 -0
  568. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/index.html +0 -0
  569. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_agent_tools_checklist.html +0 -0
  570. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_create_flock_form.html +0 -0
  571. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -0
  572. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -0
  573. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -0
  574. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -0
  575. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -0
  576. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_env_vars_table.html +0 -0
  577. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_flock_file_list.html +0 -0
  578. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_flock_upload_form.html +0 -0
  579. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_header_flock_status.html +0 -0
  580. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_load_manager_view.html +0 -0
  581. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_registry_table.html +0 -0
  582. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_results_display.html +0 -0
  583. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_settings_env_content.html +0 -0
  584. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_settings_theme_content.html +0 -0
  585. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_settings_view.html +0 -0
  586. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_structured_data_view.html +0 -0
  587. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/webapp/templates/partials/_theme_preview.html +0 -0
  588. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/workflow/__init__.py +0 -0
  589. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/workflow/activities.py +0 -0
  590. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/workflow/agent_activities.py +0 -0
  591. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/workflow/agent_execution_activity.py +0 -0
  592. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/workflow/flock_workflow.py +0 -0
  593. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/workflow/temporal_config.py +0 -0
  594. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/src/flock/workflow/temporal_setup.py +0 -0
  595. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/__init__.py +0 -0
  596. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/api/test_custom_endpoints.py +0 -0
  597. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/core/test_flock_batch.py +0 -0
  598. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/core/test_flock_core.py +0 -0
  599. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/serialization/__init__.py +0 -0
  600. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/serialization/test_enhanced_serialization.py +0 -0
  601. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/serialization/test_file_path_serialization.py +0 -0
  602. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/serialization/test_flock_serializer.py +0 -0
  603. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/serialization/test_nested_serialization.py +0 -0
  604. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/serialization/test_yaml_serialization.py +0 -0
  605. {flock_core-0.4.0b42 → flock_core-0.4.0b44}/tests/tools/test_zendesk_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flock-core
3
- Version: 0.4.0b42
3
+ Version: 0.4.0b44
4
4
  Summary: Declarative LLM Orchestration at Scale
5
5
  Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "flock-core"
3
- version = "0.4.0b-42"
3
+ version = "0.4.0b-44"
4
4
  description = "Declarative LLM Orchestration at Scale"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -1,11 +1,10 @@
1
1
  # src/flock/core/api/__init__.py
2
2
  """Flock API Server components."""
3
3
 
4
- from .main import FlockAPI
4
+
5
5
  from .models import FlockAPIRequest, FlockAPIResponse
6
6
 
7
7
  __all__ = [
8
- "FlockAPI",
9
8
  "FlockAPIRequest",
10
9
  "FlockAPIResponse",
11
10
  ]
@@ -0,0 +1,254 @@
1
+ # src/flock/core/api/endpoints.py
2
+ """FastAPI endpoints for the Flock API, using FastAPI's dependency injection."""
3
+
4
+ import uuid
5
+ from typing import TYPE_CHECKING
6
+
7
+ from fastapi import (
8
+ APIRouter,
9
+ BackgroundTasks,
10
+ Depends, # Crucial import for dependency injection
11
+ HTTPException,
12
+ )
13
+
14
+ from flock.core.logging.logging import get_logger
15
+
16
+ # Import the dependency provider functions
17
+ # This assumes you'll create 'src/flock/webapp/app/dependencies.py' (or similar)
18
+ # with get_flock_instance and get_run_store functions.
19
+ # For now, to make this file runnable in isolation for generation,
20
+ # we might need temporary stubs or to adjust the import path later.
21
+ # Let's assume a common location for dependencies.
22
+ from flock.webapp.app.dependencies import get_flock_instance, get_run_store
23
+
24
+ from .models import (
25
+ FlockAPIRequest,
26
+ FlockAPIResponse,
27
+ FlockBatchRequest,
28
+ FlockBatchResponse,
29
+ )
30
+
31
+ if TYPE_CHECKING:
32
+ from flock.core.flock import Flock
33
+
34
+ from .run_store import RunStore
35
+ # We also need the _run_flock, _run_batch, _type_convert_inputs methods.
36
+ # These will be part of the Flock instance itself or helper functions
37
+ # that take Flock/RunStore as arguments. For now, let's assume they
38
+ # are methods on the Flock instance or can be called statically with it.
39
+
40
+ logger = get_logger("api.endpoints")
41
+
42
+ # The create_api_router function no longer needs to be passed the FlockAPI instance
43
+ # as dependencies will be injected directly into the route handlers.
44
+ def create_api_router() -> APIRouter:
45
+ """Creates the APIRouter for core Flock API endpoints."""
46
+ router = APIRouter()
47
+
48
+ # --- API Endpoints ---
49
+ @router.post("/run/flock", response_model=FlockAPIResponse, tags=["Flock API Core"])
50
+ async def run_flock_workflow(
51
+ request_model: FlockAPIRequest, # Renamed from 'request' to avoid conflict with FastAPI's Request
52
+ background_tasks: BackgroundTasks,
53
+ flock_instance: "Flock" = Depends(get_flock_instance), # Injected
54
+ run_store: "RunStore" = Depends(get_run_store) # Injected
55
+ ):
56
+ """Run a flock workflow starting with the specified agent."""
57
+ run_id = None
58
+ try:
59
+ run_id = str(uuid.uuid4())
60
+ run_store.create_run(run_id)
61
+ response_data = run_store.get_run(run_id)
62
+
63
+ if not response_data:
64
+ logger.error(f"Failed to create run record for run_id: {run_id}")
65
+ raise HTTPException(status_code=500, detail="Failed to initialize run.")
66
+
67
+ processed_inputs = request_model.inputs if request_model.inputs else {}
68
+ logger.info(
69
+ f"API request: run flock '{request_model.agent_name}' (run_id: {run_id})",
70
+ inputs=processed_inputs,
71
+ )
72
+
73
+ # The _run_flock logic now needs to be called. It could be a method on
74
+ # flock_instance, or a static/helper function that takes flock_instance.
75
+ # Let's assume it's a method on flock_instance for now.
76
+ # To avoid direct calls to private-like methods from router,
77
+ # Flock class would expose a public method that handles this internal logic.
78
+ # For this refactoring step, let's assume a helper `_execute_flock_run` exists
79
+ # that we can call.
80
+
81
+ async def _execute_flock_run_task(run_id_task, agent_name_task, inputs_task):
82
+ # This is a simplified version of what was in FlockAPI._run_flock
83
+ try:
84
+ if agent_name_task not in flock_instance.agents:
85
+ raise ValueError(f"Starting agent '{agent_name_task}' not found")
86
+ # Type conversion would ideally be part of the Flock's run logic
87
+ # or a utility. For now, assume it's handled or simple.
88
+ # typed_inputs = flock_instance._type_convert_inputs(agent_name_task, inputs_task) # Example if kept on Flock
89
+ typed_inputs = inputs_task # Simplified for now
90
+
91
+ result = await flock_instance.run_async(
92
+ start_agent=agent_name_task, input=typed_inputs
93
+ )
94
+ run_store.update_run_result(run_id_task, result)
95
+ except Exception as e_task:
96
+ logger.error(f"Error in background flock run {run_id_task}: {e_task!s}", exc_info=True)
97
+ run_store.update_run_status(run_id_task, "failed", str(e_task))
98
+
99
+
100
+ if request_model.async_run:
101
+ logger.debug(
102
+ f"Running flock '{request_model.agent_name}' asynchronously (run_id: {run_id})"
103
+ )
104
+ background_tasks.add_task(
105
+ _execute_flock_run_task,
106
+ run_id,
107
+ request_model.agent_name,
108
+ processed_inputs,
109
+ )
110
+ run_store.update_run_status(run_id, "running")
111
+ response_data.status = "running"
112
+ else:
113
+ logger.debug(
114
+ f"Running flock '{request_model.agent_name}' synchronously (run_id: {run_id})"
115
+ )
116
+ await _execute_flock_run_task(
117
+ run_id, request_model.agent_name, processed_inputs
118
+ )
119
+ response_data = run_store.get_run(run_id)
120
+
121
+ if not response_data:
122
+ logger.error(f"Run data lost for run_id: {run_id} after execution.")
123
+ raise HTTPException(status_code=500, detail="Run data lost after execution.")
124
+
125
+ return response_data
126
+ except ValueError as ve:
127
+ logger.error(f"Value error starting run for agent '{request_model.agent_name}': {ve}", exc_info=True)
128
+ if run_id: run_store.update_run_status(run_id, "failed", str(ve))
129
+ raise HTTPException(status_code=400, detail=str(ve))
130
+ except Exception as e:
131
+ error_msg = f"Internal server error during flock run: {type(e).__name__}"
132
+ logger.error(f"Error starting flock run: {e!s}", exc_info=True)
133
+ if run_id: run_store.update_run_status(run_id, "failed", error_msg)
134
+ raise HTTPException(status_code=500, detail=error_msg)
135
+
136
+ @router.post("/run/batch", response_model=FlockBatchResponse, tags=["Flock API Core"])
137
+ async def run_batch_workflow(
138
+ request_model: FlockBatchRequest, # Renamed from 'request'
139
+ background_tasks: BackgroundTasks,
140
+ flock_instance: "Flock" = Depends(get_flock_instance),
141
+ run_store: "RunStore" = Depends(get_run_store)
142
+ ):
143
+ """Run a batch of inputs through the flock workflow."""
144
+ batch_id = None
145
+ try:
146
+ if request_model.agent_name not in flock_instance.agents:
147
+ raise ValueError(f"Agent '{request_model.agent_name}' not found in current Flock.")
148
+
149
+ if isinstance(request_model.batch_inputs, list) and not request_model.batch_inputs:
150
+ raise ValueError("Batch inputs list cannot be empty if provided as a list.")
151
+
152
+ batch_id = str(uuid.uuid4())
153
+ run_store.create_batch(batch_id)
154
+ response_data = run_store.get_batch(batch_id)
155
+
156
+ if not response_data:
157
+ logger.error(f"Failed to create batch record for batch_id: {batch_id}")
158
+ raise HTTPException(status_code=500, detail="Failed to initialize batch run.")
159
+
160
+ batch_size = (
161
+ len(request_model.batch_inputs)
162
+ if isinstance(request_model.batch_inputs, list)
163
+ else "CSV/DataFrame"
164
+ )
165
+ logger.info(
166
+ f"API request: run batch with '{request_model.agent_name}' (batch_id: {batch_id})",
167
+ batch_size=batch_size,
168
+ )
169
+
170
+ async def _execute_flock_batch_task(batch_id_task, batch_request_task: FlockBatchRequest):
171
+ # This is a simplified version of what was in FlockAPI._run_batch
172
+ try:
173
+ # Directly use the flock_instance's run_batch_async method
174
+ results = await flock_instance.run_batch_async(
175
+ start_agent=batch_request_task.agent_name,
176
+ batch_inputs=batch_request_task.batch_inputs,
177
+ input_mapping=batch_request_task.input_mapping,
178
+ static_inputs=batch_request_task.static_inputs,
179
+ parallel=batch_request_task.parallel,
180
+ max_workers=batch_request_task.max_workers,
181
+ use_temporal=batch_request_task.use_temporal,
182
+ box_results=batch_request_task.box_results,
183
+ return_errors=batch_request_task.return_errors,
184
+ silent_mode=True, # API batch runs should be internally silent
185
+ write_to_csv=None # API handles CSV writing based on request if needed, not here
186
+ )
187
+ run_store.update_batch_result(batch_id_task, results)
188
+ logger.info(f"Batch run completed (batch_id: {batch_id_task})", num_results=len(results))
189
+ except Exception as e_task:
190
+ logger.error(f"Error in background flock batch {batch_id_task}: {e_task!s}", exc_info=True)
191
+ run_store.update_batch_status(batch_id_task, "failed", str(e_task))
192
+
193
+ logger.debug(
194
+ f"Running batch with '{request_model.agent_name}' asynchronously (batch_id: {batch_id})"
195
+ )
196
+ background_tasks.add_task(
197
+ _execute_flock_batch_task,
198
+ batch_id,
199
+ request_model, # Pass the Pydantic request model
200
+ )
201
+ run_store.update_batch_status(batch_id, "running")
202
+ response_data.status = "running"
203
+
204
+ return response_data
205
+ except ValueError as ve:
206
+ error_msg = f"Value error starting batch for agent '{request_model.agent_name}': {ve}"
207
+ logger.error(error_msg, exc_info=True)
208
+ if batch_id: run_store.update_batch_status(batch_id, "failed", str(ve))
209
+ raise HTTPException(status_code=400, detail=str(ve))
210
+ except Exception as e:
211
+ error_msg = f"Internal server error during batch run: {type(e).__name__}: {e!s}"
212
+ logger.error(error_msg, exc_info=True)
213
+ if batch_id: run_store.update_batch_status(batch_id, "failed", error_msg)
214
+ raise HTTPException(status_code=500, detail=error_msg)
215
+
216
+ @router.get("/run/{run_id}", response_model=FlockAPIResponse, tags=["Flock API Core"])
217
+ async def get_run_status(
218
+ run_id: str,
219
+ run_store: "RunStore" = Depends(get_run_store)
220
+ ):
221
+ """Get the status of a specific run."""
222
+ logger.debug(f"API request: get status for run_id: {run_id}")
223
+ run_data = run_store.get_run(run_id)
224
+ if not run_data:
225
+ logger.warning(f"Run ID not found: {run_id}")
226
+ raise HTTPException(status_code=404, detail="Run not found")
227
+ return run_data
228
+
229
+ @router.get("/batch/{batch_id}", response_model=FlockBatchResponse, tags=["Flock API Core"])
230
+ async def get_batch_status(
231
+ batch_id: str,
232
+ run_store: "RunStore" = Depends(get_run_store)
233
+ ):
234
+ """Get the status and results of a specific batch run."""
235
+ logger.debug(f"API request: get status for batch_id: {batch_id}")
236
+ batch_data = run_store.get_batch(batch_id)
237
+ if not batch_data:
238
+ logger.warning(f"Batch ID not found: {batch_id}")
239
+ raise HTTPException(status_code=404, detail="Batch not found")
240
+ return batch_data
241
+
242
+ @router.get("/agents", tags=["Flock API Core"])
243
+ async def list_agents(
244
+ flock_instance: "Flock" = Depends(get_flock_instance)
245
+ ):
246
+ """List all available agents in the currently loaded Flock."""
247
+ logger.debug("API request: list agents")
248
+ agents_list = [
249
+ {"name": agent.name, "description": agent.description or agent.name}
250
+ for agent in flock_instance.agents.values()
251
+ ]
252
+ return {"agents": agents_list}
253
+
254
+ return router
@@ -0,0 +1,162 @@
1
+ # src/flock/core/api/main.py
2
+ """This module defines the FlockAPI class, which is now primarily responsible for
3
+ managing and adding user-defined custom API endpoints to a main FastAPI application.
4
+ """
5
+
6
+ import inspect
7
+ from collections.abc import Callable, Sequence
8
+ from typing import TYPE_CHECKING, Any
9
+
10
+ from fastapi import ( # Ensure Request is aliased
11
+ Body,
12
+ Depends,
13
+ FastAPI,
14
+ Request as FastAPIRequest,
15
+ )
16
+
17
+ from flock.core.logging.logging import get_logger
18
+
19
+ from .custom_endpoint import FlockEndpoint
20
+
21
+ if TYPE_CHECKING:
22
+ from flock.core.flock import Flock
23
+
24
+ logger = get_logger("core.api.custom_setup")
25
+
26
+
27
+ class FlockAPI:
28
+ """A helper class to manage the addition of user-defined custom API endpoints
29
+ to an existing FastAPI application, in the context of a Flock instance.
30
+ """
31
+
32
+ def __init__(
33
+ self,
34
+ flock_instance: "Flock",
35
+ custom_endpoints: Sequence[FlockEndpoint] | dict[tuple[str, list[str] | None], Callable[..., Any]] | None = None,
36
+ ):
37
+ self.flock = flock_instance
38
+ self.processed_custom_endpoints: list[FlockEndpoint] = []
39
+ if custom_endpoints:
40
+ if isinstance(custom_endpoints, dict):
41
+ logger.warning("Received custom_endpoints as dict, converting. Prefer Sequence[FlockEndpoint].")
42
+ for (path, methods), cb in custom_endpoints.items():
43
+ self.processed_custom_endpoints.append(
44
+ FlockEndpoint(path=path, methods=list(methods) if methods else ["GET"], callback=cb)
45
+ )
46
+ elif isinstance(custom_endpoints, Sequence):
47
+ for ep_item in custom_endpoints: # Renamed loop variable
48
+ if isinstance(ep_item, FlockEndpoint):
49
+ self.processed_custom_endpoints.append(ep_item)
50
+ else:
51
+ logger.warning(f"Skipping non-FlockEndpoint item in custom_endpoints sequence: {type(ep_item)}")
52
+ else:
53
+ logger.warning(f"Unsupported type for custom_endpoints: {type(custom_endpoints)}")
54
+ logger.info(
55
+ f"FlockAPI helper initialized for Flock: '{self.flock.name}'. "
56
+ f"Prepared {len(self.processed_custom_endpoints)} custom endpoints."
57
+ )
58
+
59
+ def add_custom_routes_to_app(self, app: FastAPI):
60
+ if not self.processed_custom_endpoints:
61
+ logger.debug("No custom endpoints to add to the FastAPI app.")
62
+ return
63
+
64
+ logger.info(f"Adding {len(self.processed_custom_endpoints)} custom endpoints to the FastAPI app instance.")
65
+
66
+ for current_ep_def in self.processed_custom_endpoints: # Use current_ep_def to avoid closure issues
67
+
68
+ # This factory now takes current_ep_def to ensure it uses the correct endpoint's details
69
+ def _create_handler_factory(
70
+ # Capture the specific endpoint definition for this factory instance
71
+ specific_ep: FlockEndpoint
72
+ ):
73
+ # This inner function prepares the payload and calls the user's callback
74
+ async def _invoke_user_callback(
75
+ request_param: FastAPIRequest, # Parameter for FastAPI's Request object
76
+ body_param: Any, # Will be populated by the _route_handler
77
+ query_param: Any # Will be populated by the _route_handler
78
+ ):
79
+ payload_to_user: dict[str, Any] = {"flock": self.flock} # self here refers to FlockAPI instance
80
+
81
+ if request_param: # Ensure request_param is not None
82
+ payload_to_user.update(request_param.path_params)
83
+ # query_param is already the parsed Pydantic model or None
84
+ if specific_ep.query_model and query_param is not None:
85
+ payload_to_user["query"] = query_param
86
+ # Fallback for raw query if callback expects 'query' but no query_model was set
87
+ elif 'query' in inspect.signature(specific_ep.callback).parameters and not specific_ep.query_model:
88
+ if request_param.query_params:
89
+ payload_to_user["query"] = dict(request_param.query_params)
90
+
91
+ # body_param is already the parsed Pydantic model or None
92
+ if specific_ep.request_model and body_param is not None:
93
+ payload_to_user["body"] = body_param
94
+ # Fallback for raw body if callback expects 'body' but no request_model was set
95
+ elif 'body' in inspect.signature(specific_ep.callback).parameters and \
96
+ not specific_ep.request_model and \
97
+ request_param.method in {"POST", "PUT", "PATCH"}:
98
+ try: payload_to_user["body"] = await request_param.json()
99
+ except Exception: payload_to_user["body"] = await request_param.body()
100
+
101
+ # If user callback explicitly asks for 'request'
102
+ if 'request' in inspect.signature(specific_ep.callback).parameters:
103
+ payload_to_user['request'] = request_param
104
+
105
+
106
+ user_callback_sig = inspect.signature(specific_ep.callback)
107
+ final_kwargs = {
108
+ k: v for k, v in payload_to_user.items() if k in user_callback_sig.parameters
109
+ }
110
+
111
+ if inspect.iscoroutinefunction(specific_ep.callback):
112
+ return await specific_ep.callback(**final_kwargs)
113
+ return specific_ep.callback(**final_kwargs)
114
+
115
+ # --- Select the correct handler signature based on specific_ep's models ---
116
+ if specific_ep.request_model and specific_ep.query_model:
117
+ async def _route_handler_body_query(
118
+ request: FastAPIRequest, # Correct alias for FastAPI Request
119
+ body: specific_ep.request_model = Body(...), # type: ignore
120
+ query: specific_ep.query_model = Depends(specific_ep.query_model) # type: ignore
121
+ ):
122
+ return await _invoke_user_callback(request, body, query)
123
+ return _route_handler_body_query
124
+ elif specific_ep.request_model and not specific_ep.query_model:
125
+ async def _route_handler_body_only(
126
+ request: FastAPIRequest, # Correct alias
127
+ body: specific_ep.request_model = Body(...) # type: ignore
128
+ ):
129
+ return await _invoke_user_callback(request, body, None)
130
+ return _route_handler_body_only
131
+ elif not specific_ep.request_model and specific_ep.query_model:
132
+ async def _route_handler_query_only(
133
+ request: FastAPIRequest, # Correct alias
134
+ query: specific_ep.query_model = Depends(specific_ep.query_model) # type: ignore
135
+ ):
136
+ return await _invoke_user_callback(request, None, query)
137
+ return _route_handler_query_only
138
+ else: # Neither request_model nor query_model
139
+ async def _route_handler_request_only(
140
+ request: FastAPIRequest # Correct alias
141
+ ):
142
+ return await _invoke_user_callback(request, None, None)
143
+ return _route_handler_request_only
144
+
145
+ # Create the handler for the current_ep_def
146
+ selected_handler = _create_handler_factory(current_ep_def) # Pass current_ep_def
147
+ selected_handler.__name__ = f"handler_for_{current_ep_def.path.replace('/', '_').lstrip('_')}_{current_ep_def.methods[0]}"
148
+
149
+
150
+ app.add_api_route(
151
+ current_ep_def.path,
152
+ selected_handler,
153
+ methods=current_ep_def.methods or ["GET"],
154
+ name=current_ep_def.name or f"custom:{current_ep_def.path.replace('/', '_').lstrip('_')}",
155
+ include_in_schema=current_ep_def.include_in_schema,
156
+ response_model=current_ep_def.response_model,
157
+ summary=current_ep_def.summary,
158
+ description=current_ep_def.description,
159
+ dependencies=current_ep_def.dependencies,
160
+ tags=["Flock API Custom Endpoints"],
161
+ )
162
+ logger.debug(f"Added custom route to app: {current_ep_def.methods} {current_ep_def.path} (Handler: {selected_handler.__name__}, Summary: {current_ep_def.summary})")
@@ -0,0 +1,214 @@
1
+ # flock/core/api/service.py
2
+ from typing import TYPE_CHECKING, Any
3
+
4
+ if TYPE_CHECKING:
5
+ from flock.core.api.endpoints import FlockBatchRequest
6
+ from flock.core.api.run_store import RunStore
7
+ from flock.core.flock import Flock
8
+
9
+
10
+ from flock.core.logging.logging import get_logger
11
+
12
+ logger = get_logger("flock.api")
13
+
14
+ class FlockApiService:
15
+ def __init__(self, flock_instance: "Flock", run_store_instance: "RunStore"):
16
+ self.flock = flock_instance
17
+ self.run_store = run_store_instance
18
+ # You would move the _run_flock, _run_batch, _type_convert_inputs methods here
19
+ # from the old FlockAPI class.
20
+ async def _run_flock(
21
+ self, run_id: str, agent_name: str, inputs: dict[str, Any]
22
+ ):
23
+ """Executes a flock workflow run (internal helper)."""
24
+ try:
25
+ if agent_name not in self.flock.agents:
26
+ raise ValueError(f"Starting agent '{agent_name}' not found")
27
+
28
+ typed_inputs = self._type_convert_inputs(agent_name, inputs)
29
+
30
+ logger.debug(
31
+ f"Executing flock workflow starting with '{agent_name}' (run_id: {run_id})",
32
+ inputs=typed_inputs,
33
+ )
34
+ # Flock.run_async now handles context creation and execution
35
+ result = await self.flock.run_async(
36
+ start_agent=agent_name, input=typed_inputs
37
+ )
38
+ self.run_store.update_run_result(run_id, result)
39
+
40
+ final_agent_name = (
41
+ result.get("agent_name", "N/A") if isinstance(result, dict) else "N/A"
42
+ ) # Handle if result is not a dict (e.g. Box)
43
+ logger.info(
44
+ f"Flock workflow completed (run_id: {run_id})",
45
+ final_agent=final_agent_name,
46
+ )
47
+ except Exception as e:
48
+ logger.error(
49
+ f"Error in flock run {run_id} (started with '{agent_name}'): {e!s}",
50
+ exc_info=True,
51
+ )
52
+ self.run_store.update_run_status(run_id, "failed", str(e))
53
+ raise
54
+
55
+ async def _run_batch(self, batch_id: str, request: "FlockBatchRequest"):
56
+ """Executes a batch of runs (internal helper)."""
57
+ try:
58
+ if request.agent_name not in self.flock.agents:
59
+ raise ValueError(f"Agent '{request.agent_name}' not found")
60
+
61
+ logger.debug(
62
+ f"Executing batch run starting with '{request.agent_name}' (batch_id: {batch_id})",
63
+ batch_size=len(request.batch_inputs)
64
+ if isinstance(request.batch_inputs, list)
65
+ else "CSV/DataFrame",
66
+ )
67
+
68
+ # --- Re-integrating the threaded batch execution from Flock.run_batch_async ---
69
+ import asyncio
70
+ import threading
71
+ from concurrent.futures import ThreadPoolExecutor
72
+
73
+ def run_batch_sync_in_thread():
74
+ loop = asyncio.new_event_loop()
75
+ asyncio.set_event_loop(loop)
76
+ try:
77
+ batch_size = (
78
+ len(request.batch_inputs)
79
+ if isinstance(request.batch_inputs, list)
80
+ else 0 # Or attempt to get from DataFrame/CSV load
81
+ )
82
+ if batch_size > 0:
83
+ self.run_store.set_batch_total_items(batch_id, batch_size)
84
+
85
+ class ProgressTracker:
86
+ def __init__(self, store, b_id, total_size):
87
+ self.store, self.batch_id, self.total_size = store, b_id, total_size
88
+ self.current_count, self.partial_results, self._lock = 0, [], threading.Lock()
89
+ def increment(self, res=None):
90
+ with self._lock:
91
+ self.current_count += 1
92
+ if res is not None: self.partial_results.append(res)
93
+ try: self.store.update_batch_progress(self.batch_id, self.current_count, self.partial_results)
94
+ except Exception as e_prog: logger.error(f"Error updating progress: {e_prog}")
95
+ return self.current_count
96
+
97
+ progress_tracker = ProgressTracker(self.run_store, batch_id, batch_size)
98
+
99
+ async def progress_aware_worker(index, item_inputs):
100
+ try:
101
+ # Call Flock's run_async for a single item
102
+ item_result = await self.flock.run_async(
103
+ start_agent=request.agent_name,
104
+ input=item_inputs,
105
+ box_result=request.box_results,
106
+ )
107
+ progress_tracker.increment(item_result)
108
+ return item_result
109
+ except Exception as item_err:
110
+ logger.error(f"Error processing batch item {index}: {item_err}")
111
+ progress_tracker.increment(item_err if request.return_errors else None)
112
+ if request.return_errors: return item_err
113
+ return None
114
+
115
+ batch_inputs_list = request.batch_inputs
116
+ actual_results_list = []
117
+
118
+ if isinstance(batch_inputs_list, list):
119
+ tasks = []
120
+ for i, item_inputs in enumerate(batch_inputs_list):
121
+ full_inputs = {**(request.static_inputs or {}), **item_inputs}
122
+ tasks.append(progress_aware_worker(i, full_inputs))
123
+
124
+ if request.parallel and request.max_workers > 1:
125
+ semaphore = asyncio.Semaphore(request.max_workers)
126
+ async def bounded_worker(idx, inputs_item):
127
+ async with semaphore: return await progress_aware_worker(idx, inputs_item)
128
+ bounded_tasks = [bounded_worker(i, {**(request.static_inputs or {}), **item}) for i, item in enumerate(batch_inputs_list)]
129
+ actual_results_list = loop.run_until_complete(asyncio.gather(*bounded_tasks, return_exceptions=request.return_errors))
130
+ else:
131
+ for i, item_inputs in enumerate(batch_inputs_list):
132
+ full_inputs = {**(request.static_inputs or {}), **item_inputs}
133
+ actual_results_list.append(loop.run_until_complete(progress_aware_worker(i, full_inputs)))
134
+ else: # DataFrame or CSV path - let Flock's batch processor handle this directly
135
+ # This path relies on self.flock.run_batch_async being able to run within this new event loop.
136
+ # It might be simpler to always convert DataFrame/CSV to list of dicts before this point.
137
+ actual_results_list = loop.run_until_complete(
138
+ self.flock.run_batch_async(
139
+ start_agent=request.agent_name,
140
+ batch_inputs=request.batch_inputs, # DataFrame or path
141
+ input_mapping=request.input_mapping,
142
+ static_inputs=request.static_inputs,
143
+ parallel=request.parallel, # Will be re-evaluated by internal BatchProcessor
144
+ max_workers=request.max_workers,
145
+ use_temporal=request.use_temporal, # Will be re-evaluated
146
+ box_results=request.box_results,
147
+ return_errors=request.return_errors,
148
+ silent_mode=True, # Internal batch runs silently for API
149
+ write_to_csv=None # API handles CSV output separately if needed
150
+ )
151
+ )
152
+ # Progress for DataFrame/CSV would need integration into BatchProcessor or this loop
153
+ if actual_results_list:
154
+ self.run_store.set_batch_total_items(batch_id, len(actual_results_list))
155
+ self.run_store.update_batch_progress(batch_id, len(actual_results_list), actual_results_list)
156
+
157
+
158
+ self.run_store.update_batch_result(batch_id, actual_results_list)
159
+ logger.info(f"Batch run completed (batch_id: {batch_id})", num_results=len(actual_results_list))
160
+ return actual_results_list
161
+ except Exception as thread_err:
162
+ logger.error(f"Error in batch run thread {batch_id}: {thread_err!s}", exc_info=True)
163
+ self.run_store.update_batch_status(batch_id, "failed", str(thread_err))
164
+ return None
165
+ finally:
166
+ loop.close()
167
+ # --- End of re-integrated threaded batch execution ---
168
+
169
+ # Submit the synchronous function to a thread pool from the main event loop
170
+ main_loop = asyncio.get_running_loop()
171
+ with ThreadPoolExecutor(thread_name_prefix="flock-api-batch") as pool:
172
+ await main_loop.run_in_executor(pool, run_batch_sync_in_thread)
173
+
174
+ except Exception as e:
175
+ logger.error(
176
+ f"Error setting up batch run {batch_id} (started with '{request.agent_name}'): {e!s}",
177
+ exc_info=True,
178
+ )
179
+ self.run_store.update_batch_status(batch_id, "failed", str(e))
180
+ raise
181
+
182
+
183
+
184
+
185
+
186
+ def _type_convert_inputs(
187
+ self, agent_name: str, inputs: dict[str, Any]
188
+ ) -> dict[str, Any]:
189
+ """Converts input values (esp. from forms) to expected Python types."""
190
+ typed_inputs = {}
191
+ agent_def = self.flock.agents.get(agent_name)
192
+ if not agent_def or not agent_def.input or not isinstance(agent_def.input, str):
193
+ return inputs # Return original if no spec or spec is not a string
194
+
195
+ parsed_fields = self._parse_input_spec(agent_def.input) # Relies on the old UI helper
196
+ field_types = {f["name"]: f["type"] for f in parsed_fields}
197
+
198
+ for k, v in inputs.items():
199
+ target_type_str = field_types.get(k)
200
+ if target_type_str:
201
+ if target_type_str.startswith("bool"):
202
+ typed_inputs[k] = str(v).lower() in ["true", "on", "1", "yes"] if isinstance(v, str) else bool(v)
203
+ elif target_type_str.startswith("int"):
204
+ try: typed_inputs[k] = int(v)
205
+ except (ValueError, TypeError): logger.warning(f"Could not convert '{k}' value '{v}' to int for agent '{agent_name}'"); typed_inputs[k] = v
206
+ elif target_type_str.startswith("float"):
207
+ try: typed_inputs[k] = float(v)
208
+ except (ValueError, TypeError): logger.warning(f"Could not convert '{k}' value '{v}' to float for agent '{agent_name}'"); typed_inputs[k] = v
209
+ # TODO: Add list/dict parsing (e.g., json.loads) if type_str indicates these,
210
+ # especially if inputs come from HTML forms as strings.
211
+ else: typed_inputs[k] = v
212
+ else:
213
+ typed_inputs[k] = v
214
+ return typed_inputs