flock-core 0.4.525__tar.gz → 0.4.527__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 (668) hide show
  1. {flock_core-0.4.525 → flock_core-0.4.527}/PKG-INFO +1 -1
  2. {flock_core-0.4.525 → flock_core-0.4.527}/docs/interacting-with-flock/web-ui.md +14 -0
  3. {flock_core-0.4.525 → flock_core-0.4.527}/pyproject.toml +1 -1
  4. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/conditional/conditional_router.py +4 -0
  5. flock_core-0.4.527/src/flock/webapp/app/api/execution.py +590 -0
  6. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/chat.py +142 -2
  7. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/services/sharing_store.py +153 -5
  8. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_execution_form.html +29 -1
  9. flock_core-0.4.527/src/flock/webapp/templates/partials/_registry_viewer_content.html +61 -0
  10. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/registry_viewer.html +21 -18
  11. {flock_core-0.4.525 → flock_core-0.4.527}/uv.lock +1 -1
  12. flock_core-0.4.525/src/flock/webapp/app/api/execution.py +0 -311
  13. flock_core-0.4.525/src/flock/webapp/templates/partials/_registry_viewer_content.html +0 -46
  14. {flock_core-0.4.525 → flock_core-0.4.527}/.devcontainer/devcontainer.json +0 -0
  15. {flock_core-0.4.525 → flock_core-0.4.527}/.env_template +0 -0
  16. {flock_core-0.4.525 → flock_core-0.4.527}/.github/ISSUE_TEMPLATE/bug_report.yaml +0 -0
  17. {flock_core-0.4.525 → flock_core-0.4.527}/.github/ISSUE_TEMPLATE/documentation_improvement.yaml +0 -0
  18. {flock_core-0.4.525 → flock_core-0.4.527}/.github/ISSUE_TEMPLATE/feature_request.yaml +0 -0
  19. {flock_core-0.4.525 → flock_core-0.4.527}/.github/ISSUE_TEMPLATE/question_support_request.yaml +0 -0
  20. {flock_core-0.4.525 → flock_core-0.4.527}/.github/ISSUE_TEMPLATE/vulnerability_report.md +0 -0
  21. {flock_core-0.4.525 → flock_core-0.4.527}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  22. {flock_core-0.4.525 → flock_core-0.4.527}/.github/workflows/.gitkeep +0 -0
  23. {flock_core-0.4.525 → flock_core-0.4.527}/.github/workflows/deploy-documentation.yml +0 -0
  24. {flock_core-0.4.525 → flock_core-0.4.527}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
  25. {flock_core-0.4.525 → flock_core-0.4.527}/.gitignore +0 -0
  26. {flock_core-0.4.525 → flock_core-0.4.527}/.gitmodules +0 -0
  27. {flock_core-0.4.525 → flock_core-0.4.527}/.vscode/launch.json +0 -0
  28. {flock_core-0.4.525 → flock_core-0.4.527}/.vscode/settings.json +0 -0
  29. {flock_core-0.4.525 → flock_core-0.4.527}/.vscode/tasks.json +0 -0
  30. {flock_core-0.4.525 → flock_core-0.4.527}/CODE_OF_CONDUCT.md +0 -0
  31. {flock_core-0.4.525 → flock_core-0.4.527}/CONTRIBUTING.md +0 -0
  32. {flock_core-0.4.525 → flock_core-0.4.527}/LICENSE +0 -0
  33. {flock_core-0.4.525 → flock_core-0.4.527}/README.md +0 -0
  34. {flock_core-0.4.525 → flock_core-0.4.527}/SECURITY.md +0 -0
  35. {flock_core-0.4.525 → flock_core-0.4.527}/docs/about/changelog.md +0 -0
  36. {flock_core-0.4.525 → flock_core-0.4.527}/docs/about/contributing.md +0 -0
  37. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/drawio/architecture.drawio +0 -0
  38. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/cli_outputs/out.png +0 -0
  39. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/components_chart.png +0 -0
  40. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/examples/01_01.png +0 -0
  41. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/examples/01_02.png +0 -0
  42. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/examples/01_03.png +0 -0
  43. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/examples/01_04.png +0 -0
  44. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/examples/01_05.png +0 -0
  45. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/examples/01_06.png +0 -0
  46. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/flock.png +0 -0
  47. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/flock_cli.png +0 -0
  48. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/flow_chart.png +0 -0
  49. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/getting-started/first_agent_00.png +0 -0
  50. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/hummingbird.png +0 -0
  51. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/icon.png +0 -0
  52. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/icon.png~ +0 -0
  53. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/logo.png +0 -0
  54. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/magpie.png +0 -0
  55. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/memory_concepts.png +0 -0
  56. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/memory_flow.png +0 -0
  57. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/memory_flow_chart.png +0 -0
  58. {flock_core-0.4.525 → flock_core-0.4.527}/docs/assets/images/readme_output.png +0 -0
  59. {flock_core-0.4.525 → flock_core-0.4.527}/docs/components/evaluators.md +0 -0
  60. {flock_core-0.4.525 → flock_core-0.4.527}/docs/components/index.md +0 -0
  61. {flock_core-0.4.525 → flock_core-0.4.527}/docs/components/modules.md +0 -0
  62. {flock_core-0.4.525 → flock_core-0.4.527}/docs/components/tools.md +0 -0
  63. {flock_core-0.4.525 → flock_core-0.4.527}/docs/core-concepts/agents.md +0 -0
  64. {flock_core-0.4.525 → flock_core-0.4.527}/docs/core-concepts/declarative.md +0 -0
  65. {flock_core-0.4.525 → flock_core-0.4.527}/docs/core-concepts/di.md +0 -0
  66. {flock_core-0.4.525 → flock_core-0.4.527}/docs/core-concepts/index.md +0 -0
  67. {flock_core-0.4.525 → flock_core-0.4.527}/docs/core-concepts/workflows.md +0 -0
  68. {flock_core-0.4.525 → flock_core-0.4.527}/docs/create_doc_boilerplate.py +0 -0
  69. {flock_core-0.4.525 → flock_core-0.4.527}/docs/deployment/index.md +0 -0
  70. {flock_core-0.4.525 → flock_core-0.4.527}/docs/deployment/temporal.md +0 -0
  71. {flock_core-0.4.525 → flock_core-0.4.527}/docs/getting-started/concepts.md +0 -0
  72. {flock_core-0.4.525 → flock_core-0.4.527}/docs/getting-started/configuration.md +0 -0
  73. {flock_core-0.4.525 → flock_core-0.4.527}/docs/getting-started/index.md +0 -0
  74. {flock_core-0.4.525 → flock_core-0.4.527}/docs/getting-started/installation.md +0 -0
  75. {flock_core-0.4.525 → flock_core-0.4.527}/docs/getting-started/quickstart.md +0 -0
  76. {flock_core-0.4.525 → flock_core-0.4.527}/docs/guides/chaining-agents.md +0 -0
  77. {flock_core-0.4.525 → flock_core-0.4.527}/docs/guides/custom-endpoints.md +0 -0
  78. {flock_core-0.4.525 → flock_core-0.4.527}/docs/guides/index.md +0 -0
  79. {flock_core-0.4.525 → flock_core-0.4.527}/docs/guides/temporal-configuration.md +0 -0
  80. {flock_core-0.4.525 → flock_core-0.4.527}/docs/index.md +0 -0
  81. {flock_core-0.4.525 → flock_core-0.4.527}/docs/interacting-with-flock/cli-tool.md +0 -0
  82. {flock_core-0.4.525 → flock_core-0.4.527}/docs/interacting-with-flock/index.md +0 -0
  83. {flock_core-0.4.525 → flock_core-0.4.527}/docs/interacting-with-flock/interactive-cli.md +0 -0
  84. {flock_core-0.4.525 → flock_core-0.4.527}/docs/interacting-with-flock/programmatic.md +0 -0
  85. {flock_core-0.4.525 → flock_core-0.4.527}/docs/interacting-with-flock/rest-api.md +0 -0
  86. {flock_core-0.4.525 → flock_core-0.4.527}/docs/reference/flock_agent.md +0 -0
  87. {flock_core-0.4.525 → flock_core-0.4.527}/docs/reference/index.md +0 -0
  88. {flock_core-0.4.525 → flock_core-0.4.527}/docs/release-notes/magpie.md +0 -0
  89. {flock_core-0.4.525 → flock_core-0.4.527}/docs/stylesheets/extra.css +0 -0
  90. {flock_core-0.4.525 → flock_core-0.4.527}/docs/wd-di.md +0 -0
  91. {flock_core-0.4.525 → flock_core-0.4.527}/mkdocs.yml +0 -0
  92. {flock_core-0.4.525 → flock_core-0.4.527}/requirements.txt +0 -0
  93. {flock_core-0.4.525 → flock_core-0.4.527}/scripts/code_collector.py +0 -0
  94. {flock_core-0.4.525 → flock_core-0.4.527}/scripts/create_docs.py +0 -0
  95. {flock_core-0.4.525 → flock_core-0.4.527}/scripts/ensure_uv.py +0 -0
  96. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/__init__.py +0 -0
  97. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/adapter/__init__.py +0 -0
  98. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/adapter/azure_adapter.py +0 -0
  99. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/adapter/chroma_adapter.py +0 -0
  100. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/adapter/faiss_adapter.py +0 -0
  101. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/adapter/pinecone_adapter.py +0 -0
  102. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/adapter/vector_base.py +0 -0
  103. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/assets/release_notes.md +0 -0
  104. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/config.py +0 -0
  105. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/constants.py +0 -0
  106. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/create_agent.py +0 -0
  107. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/create_flock.py +0 -0
  108. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/execute_flock.py +0 -0
  109. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/load_agent.py +0 -0
  110. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/load_examples.py +0 -0
  111. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/load_flock.py +0 -0
  112. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/load_release_notes.py +0 -0
  113. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/loaded_flock_cli.py +0 -0
  114. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/manage_agents.py +0 -0
  115. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/registry_management.py +0 -0
  116. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/runner.py +0 -0
  117. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/settings.py +0 -0
  118. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/utils.py +0 -0
  119. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/view_results.py +0 -0
  120. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/cli/yaml_editor.py +0 -0
  121. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/config.py +0 -0
  122. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/__init__.py +0 -0
  123. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/api/__init__.py +0 -0
  124. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/api/custom_endpoint.py +0 -0
  125. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/api/endpoints.py +0 -0
  126. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/api/main.py +0 -0
  127. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/api/models.py +0 -0
  128. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/api/run_store.py +0 -0
  129. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/api/runner.py +0 -0
  130. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/api/service.py +0 -0
  131. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/config/flock_agent_config.py +0 -0
  132. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/config/scheduled_agent_config.py +0 -0
  133. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/context/context.py +0 -0
  134. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/context/context_manager.py +0 -0
  135. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/context/context_vars.py +0 -0
  136. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/evaluation/utils.py +0 -0
  137. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/execution/batch_executor.py +0 -0
  138. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/execution/evaluation_executor.py +0 -0
  139. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/execution/local_executor.py +0 -0
  140. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/execution/opik_executor.py +0 -0
  141. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/execution/temporal_executor.py +0 -0
  142. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/flock.py +0 -0
  143. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/flock_agent.py +0 -0
  144. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/flock_evaluator.py +0 -0
  145. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/flock_factory.py +0 -0
  146. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/flock_module.py +0 -0
  147. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/flock_registry.py +0 -0
  148. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/flock_router.py +0 -0
  149. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/flock_scheduler.py +0 -0
  150. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/flock_server_manager.py +0 -0
  151. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/interpreter/python_interpreter.py +0 -0
  152. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/__init__.py +0 -0
  153. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/formatters/enum_builder.py +0 -0
  154. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/formatters/theme_builder.py +0 -0
  155. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/formatters/themed_formatter.py +0 -0
  156. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/formatters/themes.py +0 -0
  157. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/logging.py +0 -0
  158. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/span_middleware/baggage_span_processor.py +0 -0
  159. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/telemetry.py +0 -0
  160. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/telemetry_exporter/base_exporter.py +0 -0
  161. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/telemetry_exporter/file_exporter.py +0 -0
  162. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/telemetry_exporter/sqlite_exporter.py +0 -0
  163. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/logging/trace_and_logged.py +0 -0
  164. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/__init__.py +0 -0
  165. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/flock_mcp_server.py +0 -0
  166. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/flock_mcp_tool_base.py +0 -0
  167. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/mcp_client.py +0 -0
  168. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/mcp_client_manager.py +0 -0
  169. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/mcp_config.py +0 -0
  170. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/types/__init__.py +0 -0
  171. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/types/callbacks.py +0 -0
  172. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/types/factories.py +0 -0
  173. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/types/handlers.py +0 -0
  174. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/types/types.py +0 -0
  175. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/util/__init__.py +0 -0
  176. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mcp/util/helpers.py +0 -0
  177. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mixin/dspy_integration.py +0 -0
  178. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/mixin/prompt_parser.py +0 -0
  179. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/serialization/__init__.py +0 -0
  180. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/serialization/callable_registry.py +0 -0
  181. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/serialization/flock_serializer.py +0 -0
  182. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/serialization/json_encoder.py +0 -0
  183. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/serialization/secure_serializer.py +0 -0
  184. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/serialization/serializable.py +0 -0
  185. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/serialization/serialization_utils.py +0 -0
  186. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/util/cli_helper.py +0 -0
  187. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/util/file_path_utils.py +0 -0
  188. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/util/hydrator.py +0 -0
  189. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/util/input_resolver.py +0 -0
  190. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/util/loader.py +0 -0
  191. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/core/util/splitter.py +0 -0
  192. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/di.py +0 -0
  193. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/evaluators/__init__.py +0 -0
  194. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/evaluators/declarative/__init__.py +0 -0
  195. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/evaluators/declarative/declarative_evaluator.py +0 -0
  196. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/evaluators/memory/memory_evaluator.py +0 -0
  197. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/evaluators/test/test_case_evaluator.py +0 -0
  198. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/evaluators/zep/zep_evaluator.py +0 -0
  199. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/mcp/servers/sse/__init__.py +0 -0
  200. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/mcp/servers/sse/flock_sse_server.py +0 -0
  201. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/mcp/servers/stdio/__init__.py +0 -0
  202. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/mcp/servers/stdio/flock_stdio_server.py +0 -0
  203. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/mcp/servers/streamable_http/__init__.py +0 -0
  204. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/mcp/servers/streamable_http/flock_streamable_http_server.py +0 -0
  205. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/mcp/servers/websockets/__init__.py +0 -0
  206. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/mcp/servers/websockets/flock_websocket_server.py +0 -0
  207. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/__init__.py +0 -0
  208. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/assertion/__init__.py +0 -0
  209. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/assertion/assertion_module.py +0 -0
  210. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/callback/__init__.py +0 -0
  211. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/callback/callback_module.py +0 -0
  212. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/enterprise_memory/README.md +0 -0
  213. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/enterprise_memory/enterprise_memory_module.py +0 -0
  214. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/mem0/__init__.py +0 -0
  215. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/mem0/mem0_module.py +0 -0
  216. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/mem0_async/__init__.py +0 -0
  217. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/mem0_async/async_mem0_module.py +0 -0
  218. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/memory/__init__.py +0 -0
  219. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/memory/memory_module.py +0 -0
  220. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/memory/memory_parser.py +0 -0
  221. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/memory/memory_storage.py +0 -0
  222. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/output/__init__.py +0 -0
  223. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/output/output_module.py +0 -0
  224. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/performance/__init__.py +0 -0
  225. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/performance/metrics_module.py +0 -0
  226. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/zep/__init__.py +0 -0
  227. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/modules/zep/zep_module.py +0 -0
  228. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/platform/docker_tools.py +0 -0
  229. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/platform/jaeger_install.py +0 -0
  230. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/__init__.py +0 -0
  231. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/agent/__init__.py +0 -0
  232. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/agent/agent_router.py +0 -0
  233. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/agent/handoff_agent.py +0 -0
  234. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/default/__init__.py +0 -0
  235. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/default/default_router.py +0 -0
  236. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/feedback/feedback_router.py +0 -0
  237. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/list_generator/list_generator_router.py +0 -0
  238. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/llm/__init__.py +0 -0
  239. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/routers/llm/llm_router.py +0 -0
  240. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/3024-day.toml +0 -0
  241. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/3024-night.toml +0 -0
  242. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/aardvark-blue.toml +0 -0
  243. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/abernathy.toml +0 -0
  244. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/adventure.toml +0 -0
  245. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/adventuretime.toml +0 -0
  246. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/afterglow.toml +0 -0
  247. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/alabaster.toml +0 -0
  248. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/alienblood.toml +0 -0
  249. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/andromeda.toml +0 -0
  250. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/apple-classic.toml +0 -0
  251. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/apple-system-colors.toml +0 -0
  252. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/arcoiris.toml +0 -0
  253. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/argonaut copy.toml +0 -0
  254. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/argonaut.toml +0 -0
  255. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/arthur.toml +0 -0
  256. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ateliersulphurpool.toml +0 -0
  257. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/atom.toml +0 -0
  258. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/atom_test.toml +0 -0
  259. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/atomonelight.toml +0 -0
  260. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/aurora.toml +0 -0
  261. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ayu copy.toml +0 -0
  262. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ayu-light.toml +0 -0
  263. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ayu-mirage.toml +0 -0
  264. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ayu.toml +0 -0
  265. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/banana-blueberry.toml +0 -0
  266. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/batman.toml +0 -0
  267. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/belafonte-day.toml +0 -0
  268. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/belafonte-night.toml +0 -0
  269. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/birdsofparadise.toml +0 -0
  270. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/blazer.toml +0 -0
  271. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/blue-matrix.toml +0 -0
  272. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/blueberrypie.toml +0 -0
  273. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/bluedolphin.toml +0 -0
  274. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/blulocodark.toml +0 -0
  275. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/blulocolight.toml +0 -0
  276. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/borland.toml +0 -0
  277. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/breeze.toml +0 -0
  278. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/bright-lights.toml +0 -0
  279. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/broadcast.toml +0 -0
  280. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/brogrammer.toml +0 -0
  281. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/builtin-dark.toml +0 -0
  282. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/builtin-light.toml +0 -0
  283. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/builtin-pastel-dark.toml +0 -0
  284. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/builtin-solarized-dark.toml +0 -0
  285. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/builtin-solarized-light.toml +0 -0
  286. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/builtin-tango-dark.toml +0 -0
  287. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/builtin-tango-light.toml +0 -0
  288. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/c64.toml +0 -0
  289. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/calamity.toml +0 -0
  290. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/catppuccin-frappe.toml +0 -0
  291. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/catppuccin-latte.toml +0 -0
  292. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/catppuccin-macchiato.toml +0 -0
  293. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/catppuccin-mocha.toml +0 -0
  294. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/cga.toml +0 -0
  295. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/chalk.toml +0 -0
  296. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/chalkboard.toml +0 -0
  297. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/challengerdeep.toml +0 -0
  298. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/chester.toml +0 -0
  299. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ciapre.toml +0 -0
  300. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/clrs.toml +0 -0
  301. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/cobalt-neon.toml +0 -0
  302. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/cobalt2.toml +0 -0
  303. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/coffee-theme.toml +0 -0
  304. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/crayonponyfish.toml +0 -0
  305. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/cutiepro.toml +0 -0
  306. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/cyberdyne.toml +0 -0
  307. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/cyberpunk.toml +0 -0
  308. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
  309. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/dark+.toml +0 -0
  310. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/dark-pastel.toml +0 -0
  311. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/darkermatrix.toml +0 -0
  312. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/darkmatrix.toml +0 -0
  313. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/darkside.toml +0 -0
  314. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/dayfox.toml +0 -0
  315. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/deep.toml +0 -0
  316. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/desert.toml +0 -0
  317. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/dimidium.toml +0 -0
  318. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/dimmedmonokai.toml +0 -0
  319. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/django.toml +0 -0
  320. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/djangorebornagain.toml +0 -0
  321. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/djangosmooth.toml +0 -0
  322. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/doom-peacock.toml +0 -0
  323. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/doomone.toml +0 -0
  324. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/dotgov.toml +0 -0
  325. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/dracula+.toml +0 -0
  326. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/dracula.toml +0 -0
  327. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/duckbones.toml +0 -0
  328. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/duotone-dark.toml +0 -0
  329. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/earthsong.toml +0 -0
  330. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/elemental.toml +0 -0
  331. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/elementary.toml +0 -0
  332. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/encom.toml +0 -0
  333. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/espresso-libre.toml +0 -0
  334. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/espresso.toml +0 -0
  335. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/everblush.toml +0 -0
  336. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/fahrenheit.toml +0 -0
  337. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/fairyfloss.toml +0 -0
  338. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/farmhouse-dark.toml +0 -0
  339. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/farmhouse-light.toml +0 -0
  340. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/fideloper.toml +0 -0
  341. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/firefly-traditional.toml +0 -0
  342. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/firefoxdev.toml +0 -0
  343. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/firewatch.toml +0 -0
  344. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/fishtank.toml +0 -0
  345. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/flat.toml +0 -0
  346. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/flatland.toml +0 -0
  347. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/flexoki-dark.toml +0 -0
  348. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/flexoki-light.toml +0 -0
  349. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/floraverse.toml +0 -0
  350. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/forestblue.toml +0 -0
  351. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/framer.toml +0 -0
  352. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/frontenddelight.toml +0 -0
  353. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/funforrest.toml +0 -0
  354. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/galaxy.toml +0 -0
  355. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/galizur.toml +0 -0
  356. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/github-dark.toml +0 -0
  357. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/github.toml +0 -0
  358. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/glacier.toml +0 -0
  359. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/grape.toml +0 -0
  360. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/grass.toml +0 -0
  361. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/grey-green.toml +0 -0
  362. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/gruber-darker.toml +0 -0
  363. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/gruvboxdark.toml +0 -0
  364. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/gruvboxdarkhard.toml +0 -0
  365. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/gruvboxlight.toml +0 -0
  366. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/guezwhoz.toml +0 -0
  367. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hacktober.toml +0 -0
  368. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hardcore.toml +0 -0
  369. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/harper.toml +0 -0
  370. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hax0r-blue.toml +0 -0
  371. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hax0r-gr33n.toml +0 -0
  372. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hax0r-r3d.toml +0 -0
  373. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/highway.toml +0 -0
  374. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hipster-green.toml +0 -0
  375. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hivacruz.toml +0 -0
  376. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/homebrew.toml +0 -0
  377. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hopscotch.256.toml +0 -0
  378. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hopscotch.toml +0 -0
  379. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hurtado.toml +0 -0
  380. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/hybrid.toml +0 -0
  381. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ic-green-ppl.toml +0 -0
  382. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ic-orange-ppl.toml +0 -0
  383. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iceberg-dark.toml +0 -0
  384. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iceberg-light.toml +0 -0
  385. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/idea.toml +0 -0
  386. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/idletoes.toml +0 -0
  387. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ir-black.toml +0 -0
  388. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iterm2-dark-background.toml +0 -0
  389. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iterm2-default.toml +0 -0
  390. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iterm2-light-background.toml +0 -0
  391. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
  392. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iterm2-smoooooth.toml +0 -0
  393. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
  394. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iterm2-solarized-light.toml +0 -0
  395. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iterm2-tango-dark.toml +0 -0
  396. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/iterm2-tango-light.toml +0 -0
  397. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/jackie-brown.toml +0 -0
  398. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/japanesque.toml +0 -0
  399. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/jellybeans.toml +0 -0
  400. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/jetbrains-darcula.toml +0 -0
  401. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/jubi.toml +0 -0
  402. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/kanagawabones.toml +0 -0
  403. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/kibble.toml +0 -0
  404. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/kolorit.toml +0 -0
  405. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/konsolas.toml +0 -0
  406. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/kurokula.toml +0 -0
  407. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/lab-fox.toml +0 -0
  408. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/laser.toml +0 -0
  409. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/later-this-evening.toml +0 -0
  410. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/lavandula.toml +0 -0
  411. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/liquidcarbon.toml +0 -0
  412. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/liquidcarbontransparent.toml +0 -0
  413. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
  414. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/lovelace.toml +0 -0
  415. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/man-page.toml +0 -0
  416. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/mariana.toml +0 -0
  417. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/material.toml +0 -0
  418. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/materialdark.toml +0 -0
  419. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/materialdarker.toml +0 -0
  420. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/materialdesigncolors.toml +0 -0
  421. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/materialocean.toml +0 -0
  422. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/mathias.toml +0 -0
  423. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/matrix.toml +0 -0
  424. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/medallion.toml +0 -0
  425. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/mellifluous.toml +0 -0
  426. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/midnight-in-mojave.toml +0 -0
  427. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/mirage.toml +0 -0
  428. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/misterioso.toml +0 -0
  429. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/molokai.toml +0 -0
  430. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/monalisa.toml +0 -0
  431. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/monokai-remastered.toml +0 -0
  432. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/monokai-soda.toml +0 -0
  433. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/monokai-vivid.toml +0 -0
  434. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/n0tch2k.toml +0 -0
  435. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/neobones-dark.toml +0 -0
  436. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/neobones-light.toml +0 -0
  437. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/neon.toml +0 -0
  438. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/neopolitan.toml +0 -0
  439. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/neutron.toml +0 -0
  440. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/night-owlish-light.toml +0 -0
  441. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/nightfox.toml +0 -0
  442. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/nightlion-v1.toml +0 -0
  443. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/nightlion-v2.toml +0 -0
  444. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/niji.toml +0 -0
  445. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/nocturnal-winter.toml +0 -0
  446. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/nord-light.toml +0 -0
  447. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/nord.toml +0 -0
  448. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/novel.toml +0 -0
  449. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/nvimdark.toml +0 -0
  450. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/nvimlight.toml +0 -0
  451. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/obsidian.toml +0 -0
  452. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ocean.toml +0 -0
  453. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/oceanic-next.toml +0 -0
  454. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/oceanicmaterial.toml +0 -0
  455. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ollie.toml +0 -0
  456. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/onehalfdark.toml +0 -0
  457. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/onehalflight.toml +0 -0
  458. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/operator-mono-dark.toml +0 -0
  459. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/overnight-slumber.toml +0 -0
  460. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/oxocarbon.toml +0 -0
  461. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/palenighthc.toml +0 -0
  462. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/pandora.toml +0 -0
  463. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/paraiso-dark.toml +0 -0
  464. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/paulmillr.toml +0 -0
  465. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/pencildark.toml +0 -0
  466. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/pencillight.toml +0 -0
  467. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/peppermint.toml +0 -0
  468. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/piatto-light.toml +0 -0
  469. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/pnevma.toml +0 -0
  470. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/popping-and-locking.toml +0 -0
  471. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/primary.toml +0 -0
  472. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/pro-light.toml +0 -0
  473. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/pro.toml +0 -0
  474. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/purple-rain.toml +0 -0
  475. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/purplepeter.toml +0 -0
  476. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/rapture.toml +0 -0
  477. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/raycast-dark.toml +0 -0
  478. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/raycast-light.toml +0 -0
  479. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/rebecca.toml +0 -0
  480. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/red-alert.toml +0 -0
  481. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/red-planet.toml +0 -0
  482. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/red-sands.toml +0 -0
  483. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/relaxed.toml +0 -0
  484. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/retro.toml +0 -0
  485. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/rippedcasts.toml +0 -0
  486. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/rose-pine-dawn.toml +0 -0
  487. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/rose-pine-moon.toml +0 -0
  488. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/rose-pine.toml +0 -0
  489. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/rouge-2.toml +0 -0
  490. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/royal.toml +0 -0
  491. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ryuuko.toml +0 -0
  492. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/sakura.toml +0 -0
  493. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/scarlet-protocol.toml +0 -0
  494. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/seafoam-pastel.toml +0 -0
  495. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/seashells.toml +0 -0
  496. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/seoulbones-dark.toml +0 -0
  497. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/seoulbones-light.toml +0 -0
  498. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/seti.toml +0 -0
  499. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/shades-of-purple.toml +0 -0
  500. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/shaman.toml +0 -0
  501. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/slate.toml +0 -0
  502. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/sleepyhollow.toml +0 -0
  503. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/smyck.toml +0 -0
  504. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/snazzy.toml +0 -0
  505. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/softserver.toml +0 -0
  506. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/solarized-darcula.toml +0 -0
  507. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/solarized-dark---patched.toml +0 -0
  508. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
  509. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/spacedust.toml +0 -0
  510. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
  511. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/spacegray-eighties.toml +0 -0
  512. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/spacegray.toml +0 -0
  513. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/spiderman.toml +0 -0
  514. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/spring.toml +0 -0
  515. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/square.toml +0 -0
  516. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/sublette.toml +0 -0
  517. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/subliminal.toml +0 -0
  518. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/sugarplum.toml +0 -0
  519. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/sundried.toml +0 -0
  520. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/symfonic.toml +0 -0
  521. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/synthwave-everything.toml +0 -0
  522. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/synthwave.toml +0 -0
  523. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/synthwavealpha.toml +0 -0
  524. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tango-adapted.toml +0 -0
  525. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tango-half-adapted.toml +0 -0
  526. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/teerb.toml +0 -0
  527. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/terafox.toml +0 -0
  528. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/terminal-basic.toml +0 -0
  529. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/thayer-bright.toml +0 -0
  530. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/the-hulk.toml +0 -0
  531. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tinacious-design-(dark).toml +0 -0
  532. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tinacious-design-(light).toml +0 -0
  533. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tokyonight-day.toml +0 -0
  534. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tokyonight-storm.toml +0 -0
  535. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tokyonight.toml +0 -0
  536. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tomorrow-night-blue.toml +0 -0
  537. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tomorrow-night-bright.toml +0 -0
  538. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tomorrow-night-burns.toml +0 -0
  539. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
  540. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tomorrow-night.toml +0 -0
  541. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/tomorrow.toml +0 -0
  542. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/toychest.toml +0 -0
  543. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/treehouse.toml +0 -0
  544. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/twilight.toml +0 -0
  545. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ubuntu.toml +0 -0
  546. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ultradark.toml +0 -0
  547. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/ultraviolent.toml +0 -0
  548. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/underthesea.toml +0 -0
  549. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/unikitty.toml +0 -0
  550. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/urple.toml +0 -0
  551. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/vaughn.toml +0 -0
  552. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/vesper.toml +0 -0
  553. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/vibrantink.toml +0 -0
  554. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/vimbones.toml +0 -0
  555. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/violet-dark.toml +0 -0
  556. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/violet-light.toml +0 -0
  557. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/warmneon.toml +0 -0
  558. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/wez.toml +0 -0
  559. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/whimsy.toml +0 -0
  560. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/wildcherry.toml +0 -0
  561. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/wilmersdorf.toml +0 -0
  562. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/wombat.toml +0 -0
  563. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/wryan.toml +0 -0
  564. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/xcodedark.toml +0 -0
  565. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/xcodedarkhc.toml +0 -0
  566. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/xcodelight.toml +0 -0
  567. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/xcodelighthc.toml +0 -0
  568. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/xcodewwdc.toml +0 -0
  569. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/zenbones-dark.toml +0 -0
  570. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/zenbones-light.toml +0 -0
  571. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/zenbones.toml +0 -0
  572. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/zenburn.toml +0 -0
  573. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/zenburned.toml +0 -0
  574. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/zenwritten-dark.toml +0 -0
  575. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/themes/zenwritten-light.toml +0 -0
  576. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/tools/__init__.py +0 -0
  577. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/tools/azure_tools.py +0 -0
  578. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/tools/code_tools.py +0 -0
  579. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/tools/file_tools.py +0 -0
  580. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/tools/github_tools.py +0 -0
  581. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/tools/markdown_tools.py +0 -0
  582. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/tools/system_tools.py +0 -0
  583. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/tools/text_tools.py +0 -0
  584. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/tools/web_tools.py +0 -0
  585. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/tools/zendesk_tools.py +0 -0
  586. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/__init__.py +0 -0
  587. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/__init__.py +0 -0
  588. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/api/__init__.py +0 -0
  589. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/api/agent_management.py +0 -0
  590. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/api/flock_management.py +0 -0
  591. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/api/registry_viewer.py +0 -0
  592. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/config.py +0 -0
  593. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/dependencies.py +0 -0
  594. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/main.py +0 -0
  595. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/middleware.py +0 -0
  596. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/models_ui.py +0 -0
  597. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/services/__init__.py +0 -0
  598. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/services/flock_service.py +0 -0
  599. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/services/sharing_models.py +0 -0
  600. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/templates/theme_mapper.html +0 -0
  601. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/theme_mapper.py +0 -0
  602. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/app/utils.py +0 -0
  603. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/run.py +0 -0
  604. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/static/css/chat.css +0 -0
  605. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/static/css/components.css +0 -0
  606. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/static/css/header.css +0 -0
  607. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/static/css/layout.css +0 -0
  608. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/static/css/sidebar.css +0 -0
  609. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/static/css/two-pane.css +0 -0
  610. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/base.html +0 -0
  611. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/chat.html +0 -0
  612. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/chat_settings.html +0 -0
  613. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/flock_editor.html +0 -0
  614. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/index.html +0 -0
  615. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_agent_detail_form.html +0 -0
  616. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_agent_list.html +0 -0
  617. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_agent_manager_view.html +0 -0
  618. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_agent_tools_checklist.html +0 -0
  619. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_chat_container.html +0 -0
  620. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_chat_messages.html +0 -0
  621. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_chat_settings_form.html +0 -0
  622. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_create_flock_form.html +0 -0
  623. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -0
  624. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -0
  625. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -0
  626. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -0
  627. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -0
  628. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_env_vars_table.html +0 -0
  629. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_execution_view_container.html +0 -0
  630. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_flock_file_list.html +0 -0
  631. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_flock_properties_form.html +0 -0
  632. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_flock_upload_form.html +0 -0
  633. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_header_flock_status.html +0 -0
  634. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_load_manager_view.html +0 -0
  635. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_registry_table.html +0 -0
  636. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_results_display.html +0 -0
  637. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_settings_env_content.html +0 -0
  638. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_settings_theme_content.html +0 -0
  639. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_settings_view.html +0 -0
  640. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -0
  641. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_share_link_snippet.html +0 -0
  642. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_sidebar.html +0 -0
  643. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_structured_data_view.html +0 -0
  644. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/partials/_theme_preview.html +0 -0
  645. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/webapp/templates/shared_run_page.html +0 -0
  646. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/workflow/__init__.py +0 -0
  647. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/workflow/activities.py +0 -0
  648. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/workflow/agent_activities.py +0 -0
  649. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/workflow/agent_execution_activity.py +0 -0
  650. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/workflow/flock_workflow.py +0 -0
  651. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/workflow/temporal_config.py +0 -0
  652. {flock_core-0.4.525 → flock_core-0.4.527}/src/flock/workflow/temporal_setup.py +0 -0
  653. {flock_core-0.4.525 → flock_core-0.4.527}/test_store_integration.py +0 -0
  654. {flock_core-0.4.525 → flock_core-0.4.527}/tests/__init__.py +0 -0
  655. {flock_core-0.4.525 → flock_core-0.4.527}/tests/api/test_custom_endpoints.py +0 -0
  656. {flock_core-0.4.525 → flock_core-0.4.527}/tests/core/test_flock_batch.py +0 -0
  657. {flock_core-0.4.525 → flock_core-0.4.527}/tests/core/test_flock_core.py +0 -0
  658. {flock_core-0.4.525 → flock_core-0.4.527}/tests/integration/__init__.py +0 -0
  659. {flock_core-0.4.525 → flock_core-0.4.527}/tests/integration/test_shared_link_store.py +0 -0
  660. {flock_core-0.4.525 → flock_core-0.4.527}/tests/modules/test_enterprise_memory_store.py +0 -0
  661. {flock_core-0.4.525 → flock_core-0.4.527}/tests/modules/test_vector_adapters.py +0 -0
  662. {flock_core-0.4.525 → flock_core-0.4.527}/tests/serialization/__init__.py +0 -0
  663. {flock_core-0.4.525 → flock_core-0.4.527}/tests/serialization/test_enhanced_serialization.py +0 -0
  664. {flock_core-0.4.525 → flock_core-0.4.527}/tests/serialization/test_file_path_serialization.py +0 -0
  665. {flock_core-0.4.525 → flock_core-0.4.527}/tests/serialization/test_flock_serializer.py +0 -0
  666. {flock_core-0.4.525 → flock_core-0.4.527}/tests/serialization/test_nested_serialization.py +0 -0
  667. {flock_core-0.4.525 → flock_core-0.4.527}/tests/serialization/test_yaml_serialization.py +0 -0
  668. {flock_core-0.4.525 → flock_core-0.4.527}/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.525
3
+ Version: 0.4.527
4
4
  Summary: Declarative LLM Orchestration at Scale
5
5
  Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
6
6
  License-File: LICENSE
@@ -73,3 +73,17 @@ The Web UI is excellent for:
73
73
  - Demonstrating Flock capabilities without writing client code.
74
74
  - Simple internal tools where a basic web interface is sufficient.
75
75
 
76
+
77
+ ## Collecting Feedback
78
+
79
+ Sometimes, you might need to collect feedback on the
80
+ performance of your agents from your users as you iteratively refine your application.
81
+
82
+ The WebUI offers a simple feedback-mechanism, allowing
83
+ you to collect feedback from your users or team as you
84
+ iteratively refine your application.
85
+
86
+ You can retrieve a CSV-File with the collected
87
+ feedbacks for a specific agent by selecting
88
+ the `Download feedback for the selected agent...`
89
+ option below the `Run Flock`-Button.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "flock-core"
3
- version = "0.4.525"
3
+ version = "0.4.527"
4
4
  description = "Declarative LLM Orchestration at Scale"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -115,6 +115,10 @@ class ConditionalRouterConfig(FlockRouterConfig):
115
115
  default="flock.assertion_feedback", # Useful if paired with AssertionCheckerModule
116
116
  description="Optional context key containing feedback message to potentially include when retrying.",
117
117
  )
118
+ feedback_on_failure: str | None = Field(
119
+ default=None,
120
+ description="Default feedback message to use when condition evaluation fails.",
121
+ )
118
122
  retry_count_context_key_prefix: str = Field(
119
123
  default="flock.conditional_retry_count_",
120
124
  description="Internal prefix for context key storing retry attempts per agent.",
@@ -0,0 +1,590 @@
1
+ # src/flock/webapp/app/api/execution.py
2
+ import json
3
+ from datetime import datetime
4
+ from pathlib import Path
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ import html
8
+ import markdown2 # Import markdown2
9
+ from fastapi import ( # Ensure Form and HTTPException are imported
10
+ APIRouter,
11
+ Depends,
12
+ Form,
13
+ Request,
14
+ )
15
+ from fastapi.encoders import jsonable_encoder
16
+ from fastapi.responses import FileResponse, HTMLResponse
17
+ from fastapi.templating import Jinja2Templates
18
+
19
+ if TYPE_CHECKING:
20
+ from flock.core.flock import Flock
21
+
22
+
23
+ from flock.core.logging.logging import (
24
+ get_logger as get_flock_logger, # For logging within the new endpoint
25
+ )
26
+ from flock.core.util.splitter import parse_schema
27
+
28
+ # Import the dependency to get the current Flock instance
29
+ from flock.webapp.app.dependencies import (
30
+ get_flock_instance,
31
+ get_optional_flock_instance,
32
+ get_shared_link_store,
33
+ )
34
+
35
+ # Service function now takes app_state
36
+ from flock.webapp.app.services.flock_service import (
37
+ run_current_flock_service,
38
+ # get_current_flock_instance IS NO LONGER IMPORTED
39
+ )
40
+ from flock.webapp.app.services.sharing_store import SharedLinkStoreInterface
41
+
42
+ router = APIRouter()
43
+ BASE_DIR = Path(__file__).resolve().parent.parent.parent
44
+ templates = Jinja2Templates(directory=str(BASE_DIR / "templates"))
45
+
46
+
47
+ # Add markdown2 filter to Jinja2 environment for this router
48
+ def markdown_filter(text):
49
+ return markdown2.markdown(text, extras=["tables", "fenced-code-blocks"])
50
+
51
+
52
+ templates.env.filters["markdown"] = markdown_filter
53
+
54
+
55
+ @router.get("/htmx/execution-form-content", response_class=HTMLResponse)
56
+ async def htmx_get_execution_form_content(
57
+ request: Request,
58
+ current_flock: "Flock | None" = Depends(
59
+ get_optional_flock_instance
60
+ ), # Use optional if form can show 'no flock'
61
+ ):
62
+ # flock instance is injected
63
+ return templates.TemplateResponse(
64
+ "partials/_execution_form.html",
65
+ {
66
+ "request": request,
67
+ "flock": current_flock, # Pass the injected flock instance
68
+ "input_fields": [],
69
+ "selected_agent_name": None, # Form starts with no agent selected
70
+ },
71
+ )
72
+
73
+
74
+ @router.get("/htmx/agents/{agent_name}/input-form", response_class=HTMLResponse)
75
+ async def htmx_get_agent_input_form(
76
+ request: Request,
77
+ agent_name: str,
78
+ current_flock: "Flock" = Depends(
79
+ get_flock_instance
80
+ ), # Expect flock to be loaded
81
+ ):
82
+ # flock instance is injected
83
+ agent = current_flock.agents.get(agent_name)
84
+ if not agent:
85
+ return HTMLResponse(
86
+ f"<p class='error'>Agent '{agent_name}' not found in the current Flock.</p>"
87
+ )
88
+
89
+ input_fields = []
90
+ if agent.input and isinstance(agent.input, str):
91
+ try:
92
+ parsed_spec = parse_schema(agent.input)
93
+ for name, type_str, description in parsed_spec:
94
+ field_info = {
95
+ "name": name,
96
+ "type": type_str.lower(),
97
+ "description": description or "",
98
+ }
99
+ if "bool" in field_info["type"]:
100
+ field_info["html_type"] = "checkbox"
101
+ elif (
102
+ "int" in field_info["type"] or "float" in field_info["type"]
103
+ ):
104
+ field_info["html_type"] = "number"
105
+ elif (
106
+ "list" in field_info["type"] or "dict" in field_info["type"]
107
+ ):
108
+ field_info["html_type"] = "textarea"
109
+ field_info["placeholder"] = (
110
+ f"Enter JSON for {field_info['type']}"
111
+ )
112
+ else:
113
+ field_info["html_type"] = "text"
114
+ input_fields.append(field_info)
115
+ except Exception as e:
116
+ return HTMLResponse(
117
+ f"<p class='error'>Error parsing input signature for {agent_name}: {e}</p>"
118
+ )
119
+ return templates.TemplateResponse(
120
+ "partials/_dynamic_input_form_content.html",
121
+ {"request": request, "input_fields": input_fields},
122
+ )
123
+
124
+
125
+ @router.post("/htmx/run", response_class=HTMLResponse)
126
+ async def htmx_run_flock(
127
+ request: Request,
128
+ ):
129
+ current_flock_from_state: Flock | None = getattr(
130
+ request.app.state, "flock_instance", None
131
+ )
132
+ logger = get_flock_logger("webapp.execution.regular_run")
133
+
134
+ if not current_flock_from_state:
135
+ logger.error("HTMX Run (Regular): No Flock loaded in app_state.")
136
+ return HTMLResponse("<p class='error'>No Flock loaded to run.</p>")
137
+
138
+ form_data = await request.form()
139
+ start_agent_name = form_data.get("start_agent_name")
140
+
141
+ if not start_agent_name:
142
+ logger.warning("HTMX Run (Regular): Starting agent not selected.")
143
+ return HTMLResponse("<p class='error'>Starting agent not selected.</p>")
144
+
145
+ agent = current_flock_from_state.agents.get(start_agent_name)
146
+ if not agent:
147
+ logger.error(
148
+ f"HTMX Run (Regular): Agent '{start_agent_name}' not found in Flock '{current_flock_from_state.name}'."
149
+ )
150
+ return HTMLResponse(
151
+ f"<p class='error'>Agent '{start_agent_name}' not found in the current Flock.</p>"
152
+ )
153
+
154
+ inputs = {}
155
+ if agent.input and isinstance(agent.input, str):
156
+ try:
157
+ parsed_spec = parse_schema(agent.input)
158
+ for name, type_str, _ in parsed_spec:
159
+ form_field_name = f"agent_input_{name}"
160
+ raw_value = form_data.get(form_field_name)
161
+ if raw_value is None and "bool" in type_str.lower():
162
+ inputs[name] = False
163
+ continue
164
+ if raw_value is None:
165
+ inputs[name] = None
166
+ continue
167
+ if "int" in type_str.lower():
168
+ inputs[name] = int(raw_value)
169
+ elif "float" in type_str.lower():
170
+ inputs[name] = float(raw_value)
171
+ elif "bool" in type_str.lower():
172
+ inputs[name] = raw_value.lower() in [
173
+ "true",
174
+ "on",
175
+ "1",
176
+ "yes",
177
+ ]
178
+ elif "list" in type_str.lower() or "dict" in type_str.lower():
179
+ inputs[name] = json.loads(raw_value)
180
+ else:
181
+ inputs[name] = raw_value
182
+ except ValueError as ve:
183
+ logger.error(
184
+ f"HTMX Run (Regular): Input parsing error for agent '{start_agent_name}': {ve}",
185
+ exc_info=True,
186
+ )
187
+ return HTMLResponse(
188
+ "<p class='error'>Invalid input format. Please check your input and try again.</p>"
189
+ )
190
+ except Exception as e_parse:
191
+ logger.error(
192
+ f"HTMX Run (Regular): Error processing inputs for '{start_agent_name}': {e_parse}",
193
+ exc_info=True,
194
+ )
195
+ return HTMLResponse(
196
+ f"<p class='error'>Error processing inputs for {html.escape(str(start_agent_name))}: {html.escape(str(e_parse))}</p>"
197
+ )
198
+
199
+ result_data = await run_current_flock_service(
200
+ start_agent_name, inputs, request.app.state
201
+ )
202
+
203
+ raw_json_for_template = json.dumps(
204
+ jsonable_encoder(
205
+ result_data
206
+ ), # ← converts every nested BaseModel, datetime, etc.
207
+ indent=2,
208
+ ensure_ascii=False,
209
+ )
210
+ # Unescape newlines for proper display in HTML <pre> tag
211
+ result_data_raw_json_str = raw_json_for_template.replace("\\n", "\n")
212
+ root_path = request.scope.get("root_path", "")
213
+ return templates.TemplateResponse(
214
+ "partials/_results_display.html",
215
+ {
216
+ "request": request,
217
+ "result": result_data,
218
+ "result_raw_json": result_data_raw_json_str,
219
+ "feedback_endpoint": f"{root_path}/ui/api/flock/htmx/feedback",
220
+ "share_id": None,
221
+ "flock_name": current_flock_from_state.name,
222
+ "agent_name": start_agent_name,
223
+ "flock_definition": current_flock_from_state.to_yaml(),
224
+ },
225
+ )
226
+
227
+
228
+ # --- NEW ENDPOINT FOR SHARED RUNS ---
229
+ @router.post("/htmx/run-shared", response_class=HTMLResponse)
230
+ async def htmx_run_shared_flock(
231
+ request: Request,
232
+ share_id: str = Form(...),
233
+ ):
234
+ shared_logger = get_flock_logger("webapp.execution.shared_run_stateful")
235
+ form_data = await request.form()
236
+ start_agent_name = form_data.get("start_agent_name")
237
+
238
+ if not start_agent_name:
239
+ shared_logger.warning("HTMX Run Shared: Starting agent not selected.")
240
+ return HTMLResponse(
241
+ "<p class='error'>Starting agent not selected for shared run.</p>"
242
+ )
243
+
244
+ inputs: dict[str, Any] = {}
245
+ try:
246
+ shared_flocks_store = getattr(request.app.state, "shared_flocks", {})
247
+ temp_flock = shared_flocks_store.get(share_id)
248
+
249
+ if not temp_flock:
250
+ shared_logger.error(
251
+ f"HTMX Run Shared: Flock instance for share_id '{share_id}' not found in app.state."
252
+ )
253
+ return HTMLResponse(
254
+ f"<p class='error'>Shared session not found or expired. Please try accessing the shared link again.</p>"
255
+ )
256
+
257
+ shared_logger.info(
258
+ f"HTMX Run Shared: Successfully retrieved pre-loaded Flock '{temp_flock.name}' for agent '{start_agent_name}' (share_id: {share_id})."
259
+ )
260
+
261
+ agent = temp_flock.agents.get(start_agent_name)
262
+ if not agent:
263
+ shared_logger.error(
264
+ f"HTMX Run Shared: Agent '{start_agent_name}' not found in shared Flock '{temp_flock.name}'."
265
+ )
266
+ return HTMLResponse(
267
+ f"<p class='error'>Agent '{start_agent_name}' not found in the provided shared Flock definition.</p>"
268
+ )
269
+
270
+ if agent.input and isinstance(agent.input, str):
271
+ parsed_spec = parse_schema(agent.input)
272
+ for name, type_str, _ in parsed_spec:
273
+ form_field_name = f"agent_input_{name}"
274
+ raw_value = form_data.get(form_field_name)
275
+ if raw_value is None and "bool" in type_str.lower():
276
+ inputs[name] = False
277
+ continue
278
+ if raw_value is None:
279
+ inputs[name] = None
280
+ continue
281
+ if "int" in type_str.lower():
282
+ inputs[name] = int(raw_value)
283
+ elif "float" in type_str.lower():
284
+ inputs[name] = float(raw_value)
285
+ elif "bool" in type_str.lower():
286
+ inputs[name] = raw_value.lower() in [
287
+ "true",
288
+ "on",
289
+ "1",
290
+ "yes",
291
+ ]
292
+ elif "list" in type_str.lower() or "dict" in type_str.lower():
293
+ inputs[name] = json.loads(raw_value)
294
+ else:
295
+ inputs[name] = raw_value
296
+
297
+ shared_logger.info(
298
+ f"HTMX Run Shared: Executing agent '{start_agent_name}' in pre-loaded Flock '{temp_flock.name}'. Inputs: {list(inputs.keys())}"
299
+ )
300
+ result_data = await temp_flock.run_async(
301
+ start_agent=start_agent_name, input=inputs, box_result=False
302
+ )
303
+ raw_json_for_template = json.dumps(
304
+ jsonable_encoder(
305
+ result_data
306
+ ), # ← converts every nested BaseModel, datetime, etc.
307
+ indent=2,
308
+ ensure_ascii=False,
309
+ )
310
+ # Unescape newlines for proper display in HTML <pre> tag
311
+ result_data_raw_json_str = raw_json_for_template.replace("\\n", "\n")
312
+ shared_logger.info(
313
+ f"HTMX Run Shared: Agent '{start_agent_name}' executed. Result keys: {list(result_data.keys()) if isinstance(result_data, dict) else 'N/A'}"
314
+ )
315
+
316
+ except ValueError as ve:
317
+ shared_logger.error(
318
+ f"HTMX Run Shared: Input parsing error for '{start_agent_name}' (share_id: {share_id}): {ve}",
319
+ exc_info=True,
320
+ )
321
+ return HTMLResponse(
322
+ f"<p class='error'>Invalid input format: {ve!s}</p>"
323
+ )
324
+ except Exception as e:
325
+ shared_logger.error(
326
+ f"HTMX Run Shared: Error during execution for '{start_agent_name}' (share_id: {share_id}): {e}",
327
+ exc_info=True,
328
+ )
329
+ return HTMLResponse(
330
+ f"<p class='error'>An unexpected error occurred: {e!s}</p>"
331
+ )
332
+ root_path = request.scope.get("root_path", "")
333
+
334
+ return templates.TemplateResponse(
335
+ "partials/_results_display.html",
336
+ {
337
+ "request": request,
338
+ "result": result_data,
339
+ "result_raw_json": result_data_raw_json_str,
340
+ "feedback_endpoint": f"{root_path}/ui/api/flock/htmx/feedback-shared",
341
+ "share_id": share_id,
342
+ "flock_name": temp_flock.name,
343
+ "agent_name": start_agent_name,
344
+ "flock_definition": temp_flock.to_yaml(),
345
+ },
346
+ )
347
+
348
+
349
+ # --- Feedback endpoints ---
350
+ @router.post("/htmx/feedback", response_class=HTMLResponse)
351
+ async def htmx_submit_feedback(
352
+ request: Request,
353
+ reason: str = Form(...),
354
+ expected_response: str | None = Form(None),
355
+ actual_response: str | None = Form(None),
356
+ flock_name: str | None = Form(None),
357
+ agent_name: str | None = Form(None),
358
+ flock_definition: str | None = Form(None),
359
+ store: SharedLinkStoreInterface = Depends(get_shared_link_store),
360
+ ):
361
+ from uuid import uuid4
362
+
363
+ from flock.webapp.app.services.sharing_models import FeedbackRecord
364
+
365
+ record = FeedbackRecord(
366
+ feedback_id=uuid4().hex,
367
+ share_id=None,
368
+ context_type="agent_run",
369
+ reason=reason,
370
+ expected_response=expected_response,
371
+ actual_response=actual_response,
372
+ flock_name=flock_name,
373
+ agent_name=agent_name,
374
+ flock_definition=flock_definition,
375
+ )
376
+ await store.save_feedback(record)
377
+ return HTMLResponse("<p>🙏 Feedback received – thank you!</p>")
378
+
379
+
380
+ @router.post("/htmx/feedback-shared", response_class=HTMLResponse)
381
+ async def htmx_submit_feedback_shared(
382
+ request: Request,
383
+ share_id: str = Form(...),
384
+ reason: str = Form(...),
385
+ expected_response: str | None = Form(None),
386
+ actual_response: str | None = Form(None),
387
+ flock_definition: str | None = Form(None),
388
+ store: SharedLinkStoreInterface = Depends(get_shared_link_store),
389
+ ):
390
+ from uuid import uuid4
391
+
392
+ from flock.webapp.app.services.sharing_models import FeedbackRecord
393
+
394
+ record = FeedbackRecord(
395
+ feedback_id=uuid4().hex,
396
+ share_id=share_id,
397
+ context_type="agent_run",
398
+ reason=reason,
399
+ expected_response=expected_response,
400
+ actual_response=actual_response,
401
+ flock_definition=flock_definition,
402
+ )
403
+ await store.save_feedback(record)
404
+ return HTMLResponse(
405
+ "<p>🙏 Feedback received for shared run – thank you!</p>"
406
+ )
407
+
408
+
409
+ @router.get("/htmx/feedback-download/", response_class=FileResponse)
410
+ async def chat_feedback_download_all(
411
+ request: Request,
412
+ store: SharedLinkStoreInterface = Depends(get_shared_link_store),
413
+ ):
414
+ """Download all feedback records for all agents in the current flock as a CSV file.
415
+
416
+ This function iterates through all agents in the currently loaded flock and collects
417
+ all feedback records for each agent, then exports them as a single CSV file.
418
+
419
+ Args:
420
+ request: The FastAPI request object
421
+ store: The shared link store interface dependency
422
+
423
+ Returns:
424
+ FileResponse: CSV file containing all feedback records for all agents
425
+
426
+ Raises:
427
+ HTTPException: If no flock is loaded or no agents are found in the flock
428
+ """
429
+ import csv
430
+ import tempfile
431
+ from pathlib import Path
432
+
433
+ # Get the current flock instance to retrieve all agent names
434
+ from flock.core.flock import Flock
435
+
436
+ current_flock_instance: Flock | None = getattr(
437
+ request.app.state, "flock_instance", None
438
+ )
439
+
440
+ if not current_flock_instance:
441
+ # If no flock is loaded, return an error response
442
+ from fastapi import HTTPException
443
+
444
+ raise HTTPException(
445
+ status_code=400, detail="No Flock loaded to download feedback for"
446
+ )
447
+
448
+ # Get all agent names from the current flock
449
+ all_agent_names = list(current_flock_instance.agents.keys())
450
+
451
+ if not all_agent_names:
452
+ # If no agents in the flock, return an error response
453
+ from fastapi import HTTPException
454
+
455
+ raise HTTPException(
456
+ status_code=400, detail="No agents found in the current Flock"
457
+ )
458
+
459
+ # Collect all feedback records from all agents
460
+ all_records = []
461
+ for agent_name in all_agent_names:
462
+ records = await store.get_all_feedback_records_for_agent(
463
+ agent_name=agent_name
464
+ )
465
+ all_records.extend(records)
466
+
467
+ # Create a temporary CSV file
468
+ temp_dir = tempfile.gettempdir()
469
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
470
+ csv_filename = f"flock_feedback_all_agents_{timestamp}.csv"
471
+ csv_path = Path(temp_dir) / csv_filename
472
+
473
+ # Define CSV headers based on FeedbackRecord fields
474
+ headers = [
475
+ "feedback_id",
476
+ "share_id",
477
+ "context_type",
478
+ "reason",
479
+ "expected_response",
480
+ "actual_response",
481
+ "created_at",
482
+ "flock_name",
483
+ "agent_name",
484
+ "flock_definition",
485
+ ]
486
+
487
+ # Write records to CSV
488
+ with open(csv_path, "w", newline="", encoding="utf-8") as csvfile:
489
+ writer = csv.DictWriter(csvfile, fieldnames=headers)
490
+ writer.writeheader()
491
+
492
+ for record in all_records:
493
+ # Convert the Pydantic model to dict and ensure all fields are present
494
+ row_data = {}
495
+ for header in headers:
496
+ value = getattr(record, header, None)
497
+ # Convert datetime to ISO string for CSV
498
+ if header == "created_at" and value:
499
+ row_data[header] = (
500
+ value.isoformat()
501
+ if isinstance(value, datetime)
502
+ else str(value)
503
+ )
504
+ else:
505
+ row_data[header] = str(value) if value is not None else ""
506
+ writer.writerow(row_data)
507
+
508
+ # Return FileResponse with the CSV file
509
+ return FileResponse(
510
+ path=str(csv_path),
511
+ filename=csv_filename,
512
+ media_type="text/csv",
513
+ headers={"Content-Disposition": f"attachment; filename={csv_filename}"},
514
+ )
515
+
516
+
517
+ @router.get("/htmx/feedback-download/{agent_name}", response_class=FileResponse)
518
+ async def chat_feedback_download(
519
+ request: Request,
520
+ agent_name: str,
521
+ store: SharedLinkStoreInterface = Depends(get_shared_link_store),
522
+ ):
523
+ """Download all feedback records for a specific agent as a CSV file.
524
+
525
+ Args:
526
+ request: The FastAPI request object
527
+ agent_name: Name of the agent to download feedback for
528
+ store: The shared link store interface dependency
529
+
530
+ Returns:
531
+ FileResponse: CSV file containing all feedback records for the specified agent
532
+ """
533
+ import csv
534
+ import tempfile
535
+ from pathlib import Path
536
+ from werkzeug.utils import secure_filename
537
+
538
+ records = await store.get_all_feedback_records_for_agent(
539
+ agent_name=agent_name
540
+ )
541
+
542
+ # Create a temporary CSV file
543
+ temp_dir = tempfile.gettempdir()
544
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
545
+ safe_agent_name = secure_filename(agent_name)
546
+ csv_filename = f"flock_feedback_{safe_agent_name}_{timestamp}.csv"
547
+ csv_path = Path(temp_dir) / csv_filename
548
+
549
+ # Define CSV headers based on FeedbackRecord fields
550
+ headers = [
551
+ "feedback_id",
552
+ "share_id",
553
+ "context_type",
554
+ "reason",
555
+ "expected_response",
556
+ "actual_response",
557
+ "created_at",
558
+ "flock_name",
559
+ "agent_name",
560
+ "flock_definition",
561
+ ]
562
+
563
+ # Write records to CSV
564
+ with open(csv_path, "w", newline="", encoding="utf-8") as csvfile:
565
+ writer = csv.DictWriter(csvfile, fieldnames=headers)
566
+ writer.writeheader()
567
+
568
+ for record in records:
569
+ # Convert the Pydantic model to dict and ensure all fields are present
570
+ row_data = {}
571
+ for header in headers:
572
+ value = getattr(record, header, None)
573
+ # Convert datetime to ISO string for CSV
574
+ if header == "created_at" and value:
575
+ row_data[header] = (
576
+ value.isoformat()
577
+ if isinstance(value, datetime)
578
+ else str(value)
579
+ )
580
+ else:
581
+ row_data[header] = str(value) if value is not None else ""
582
+ writer.writerow(row_data)
583
+
584
+ # Return FileResponse with the CSV file
585
+ return FileResponse(
586
+ path=str(csv_path),
587
+ filename=csv_filename,
588
+ media_type="text/csv",
589
+ headers={"Content-Disposition": f"attachment; filename={csv_filename}"},
590
+ )