flock-core 0.4.0b26__tar.gz → 0.4.0b28__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 (536) hide show
  1. flock_core-0.4.0b28/.gitmodules +4 -0
  2. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.vscode/settings.json +41 -3
  3. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/PKG-INFO +115 -8
  4. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/README.md +114 -7
  5. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/drawio/architecture.drawio +4 -4
  6. flock_core-0.4.0b28/docs/guides/chaining-agents.md +232 -0
  7. flock_core-0.4.0b28/docs/guides/index.md +17 -0
  8. flock_core-0.4.0b28/docs/guides/temporal-configuration.md +322 -0
  9. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/mkdocs.yml +1 -0
  10. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/pyproject.toml +16 -4
  11. flock_core-0.4.0b28/scripts/ensure_uv.py +20 -0
  12. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/context/context.py +10 -1
  13. flock_core-0.4.0b28/src/flock/core/execution/temporal_executor.py +166 -0
  14. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/flock.py +46 -2
  15. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/flock_agent.py +151 -146
  16. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/flock_factory.py +3 -0
  17. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/flock_module.py +7 -7
  18. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/modules/assertion/assertion_module.py +1 -1
  19. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/modules/callback/callback_module.py +1 -1
  20. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/modules/memory/memory_module.py +4 -4
  21. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/modules/output/output_module.py +1 -1
  22. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/modules/performance/metrics_module.py +4 -4
  23. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/modules/zep/zep_module.py +2 -2
  24. flock_core-0.4.0b28/src/flock/workflow/agent_execution_activity.py +228 -0
  25. flock_core-0.4.0b28/src/flock/workflow/flock_workflow.py +225 -0
  26. flock_core-0.4.0b28/src/flock/workflow/temporal_config.py +96 -0
  27. flock_core-0.4.0b28/src/flock/workflow/temporal_setup.py +60 -0
  28. flock_core-0.4.0b28/tests/__init__.py +1 -0
  29. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/tests/core/test_flock_core.py +149 -4
  30. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/tests/serialization/test_flock_serializer.py +104 -3
  31. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/tests/serialization/test_yaml_serialization.py +1 -1
  32. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/uv.lock +3032 -3370
  33. flock_core-0.4.0b26/docs/guides/chaining-agents.md +0 -8
  34. flock_core-0.4.0b26/docs/reference/index.md +0 -8
  35. flock_core-0.4.0b26/src/flock/core/execution/temporal_executor.py +0 -57
  36. flock_core-0.4.0b26/src/flock/workflow/flock_workflow.py +0 -58
  37. flock_core-0.4.0b26/src/flock/workflow/temporal_setup.py +0 -63
  38. flock_core-0.4.0b26/tests/serialization/__init__.py +0 -1
  39. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.devcontainer/devcontainer.json +0 -0
  40. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.env_template +0 -0
  41. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  42. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  43. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  44. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.github/workflows/.gitkeep +0 -0
  45. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.github/workflows/deploy-documentation.yml +0 -0
  46. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
  47. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.gitignore +0 -0
  48. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.vscode/launch.json +0 -0
  49. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/.vscode/tasks.json +0 -0
  50. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/LICENSE +0 -0
  51. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/about/changelog.md +0 -0
  52. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/about/contributing.md +0 -0
  53. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/cli_outputs/out.png +0 -0
  54. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/components_chart.png +0 -0
  55. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/examples/01_01.png +0 -0
  56. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/examples/01_02.png +0 -0
  57. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/examples/01_03.png +0 -0
  58. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/examples/01_04.png +0 -0
  59. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/examples/01_05.png +0 -0
  60. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/examples/01_06.png +0 -0
  61. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/flock.png +0 -0
  62. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/flock_cli.png +0 -0
  63. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/flow_chart.png +0 -0
  64. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/getting-started/first_agent_00.png +0 -0
  65. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/hummingbird.png +0 -0
  66. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/icon.png +0 -0
  67. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/icon.png~ +0 -0
  68. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/logo.png +0 -0
  69. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/memory_concepts.png +0 -0
  70. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/memory_flow.png +0 -0
  71. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/assets/images/memory_flow_chart.png +0 -0
  72. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/components/evaluators.md +0 -0
  73. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/components/index.md +0 -0
  74. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/components/modules.md +0 -0
  75. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/components/tools.md +0 -0
  76. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/core-concepts/agents.md +0 -0
  77. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/core-concepts/declarative.md +0 -0
  78. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/core-concepts/index.md +0 -0
  79. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/core-concepts/workflows.md +0 -0
  80. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/create_doc_boilerplate.py +0 -0
  81. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/deployment/index.md +0 -0
  82. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/deployment/temporal.md +0 -0
  83. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/getting-started/configuration.md +0 -0
  84. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/getting-started/index.md +0 -0
  85. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/getting-started/installation.md +0 -0
  86. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/getting-started/quickstart.md +0 -0
  87. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/index.md +0 -0
  88. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/interacting-with-flock/cli-tool.md +0 -0
  89. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/interacting-with-flock/index.md +0 -0
  90. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/interacting-with-flock/interactive-cli.md +0 -0
  91. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/interacting-with-flock/programmatic.md +0 -0
  92. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/interacting-with-flock/rest-api.md +0 -0
  93. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/interacting-with-flock/web-ui.md +0 -0
  94. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/reference/flock_agent.md +0 -0
  95. {flock_core-0.4.0b26/docs/guides → flock_core-0.4.0b28/docs/reference}/index.md +0 -0
  96. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/release-notes/magpie.md +0 -0
  97. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/docs/stylesheets/extra.css +0 -0
  98. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/requirements.txt +0 -0
  99. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/scripts/code_collector.py +0 -0
  100. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/scripts/create_docs.py +0 -0
  101. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/__init__.py +0 -0
  102. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/assets/release_notes.md +0 -0
  103. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/config.py +0 -0
  104. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/constants.py +0 -0
  105. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/create_agent.py +0 -0
  106. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/create_flock.py +0 -0
  107. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/execute_flock.py +0 -0
  108. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/load_agent.py +0 -0
  109. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/load_examples.py +0 -0
  110. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/load_flock.py +0 -0
  111. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/load_release_notes.py +0 -0
  112. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/loaded_flock_cli.py +0 -0
  113. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/manage_agents.py +0 -0
  114. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/registry_management.py +0 -0
  115. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/runner.py +0 -0
  116. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/settings.py +0 -0
  117. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/utils.py +0 -0
  118. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/view_results.py +0 -0
  119. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/cli/yaml_editor.py +0 -0
  120. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/config.py +0 -0
  121. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/__init__.py +0 -0
  122. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/api/__init__.py +0 -0
  123. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/api/endpoints.py +0 -0
  124. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/api/main.py +0 -0
  125. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/api/models.py +0 -0
  126. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/api/run_store.py +0 -0
  127. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/api/runner.py +0 -0
  128. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/api/ui/__init__.py +0 -0
  129. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/api/ui/routes.py +0 -0
  130. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/api/ui/utils.py +0 -0
  131. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/context/context_manager.py +0 -0
  132. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/context/context_vars.py +0 -0
  133. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/evaluation/utils.py +0 -0
  134. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/execution/batch_executor.py +0 -0
  135. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/execution/evaluation_executor.py +0 -0
  136. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/execution/local_executor.py +0 -0
  137. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/flock_evaluator.py +0 -0
  138. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/flock_registry.py +0 -0
  139. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/flock_router.py +0 -0
  140. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/interpreter/python_interpreter.py +0 -0
  141. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/__init__.py +0 -0
  142. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/formatters/enum_builder.py +0 -0
  143. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/formatters/theme_builder.py +0 -0
  144. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/formatters/themed_formatter.py +0 -0
  145. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/formatters/themes.py +0 -0
  146. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/logging.py +0 -0
  147. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/span_middleware/baggage_span_processor.py +0 -0
  148. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/telemetry.py +0 -0
  149. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/telemetry_exporter/base_exporter.py +0 -0
  150. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/telemetry_exporter/file_exporter.py +0 -0
  151. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/telemetry_exporter/sqlite_exporter.py +0 -0
  152. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/logging/trace_and_logged.py +0 -0
  153. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/mixin/dspy_integration.py +0 -0
  154. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/mixin/prompt_parser.py +0 -0
  155. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/serialization/__init__.py +0 -0
  156. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/serialization/callable_registry.py +0 -0
  157. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/serialization/flock_serializer.py +0 -0
  158. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/serialization/json_encoder.py +0 -0
  159. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/serialization/secure_serializer.py +0 -0
  160. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/serialization/serializable.py +0 -0
  161. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/serialization/serialization_utils.py +0 -0
  162. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/tools/azure_tools.py +0 -0
  163. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/tools/basic_tools.py +0 -0
  164. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/tools/dev_tools/github.py +0 -0
  165. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/tools/llm_tools.py +0 -0
  166. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/tools/markdown_tools.py +0 -0
  167. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/tools/zendesk_tools.py +0 -0
  168. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/util/cli_helper.py +0 -0
  169. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/util/file_path_utils.py +0 -0
  170. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/util/hydrator.py +0 -0
  171. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/util/input_resolver.py +0 -0
  172. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/core/util/loader.py +0 -0
  173. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/evaluators/declarative/declarative_evaluator.py +0 -0
  174. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/evaluators/memory/memory_evaluator.py +0 -0
  175. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/evaluators/test/test_case_evaluator.py +0 -0
  176. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/evaluators/zep/zep_evaluator.py +0 -0
  177. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/modules/memory/memory_parser.py +0 -0
  178. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/modules/memory/memory_storage.py +0 -0
  179. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/platform/docker_tools.py +0 -0
  180. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/platform/jaeger_install.py +0 -0
  181. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/__init__.py +0 -0
  182. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/agent/__init__.py +0 -0
  183. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/agent/agent_router.py +0 -0
  184. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/agent/handoff_agent.py +0 -0
  185. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/conditional/conditional_router.py +0 -0
  186. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/default/__init__.py +0 -0
  187. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/default/default_router.py +0 -0
  188. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/feedback/feedback_router.py +0 -0
  189. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/list_generator/list_generator_router.py +0 -0
  190. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/llm/__init__.py +0 -0
  191. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/routers/llm/llm_router.py +0 -0
  192. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/3024-day.toml +0 -0
  193. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/3024-night.toml +0 -0
  194. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/aardvark-blue.toml +0 -0
  195. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/abernathy.toml +0 -0
  196. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/adventure.toml +0 -0
  197. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/adventuretime.toml +0 -0
  198. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/afterglow.toml +0 -0
  199. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/alabaster.toml +0 -0
  200. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/alienblood.toml +0 -0
  201. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/andromeda.toml +0 -0
  202. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/apple-classic.toml +0 -0
  203. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/apple-system-colors.toml +0 -0
  204. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/arcoiris.toml +0 -0
  205. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/argonaut copy.toml +0 -0
  206. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/argonaut.toml +0 -0
  207. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/arthur.toml +0 -0
  208. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ateliersulphurpool.toml +0 -0
  209. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/atom.toml +0 -0
  210. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/atom_test.toml +0 -0
  211. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/atomonelight.toml +0 -0
  212. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/aurora.toml +0 -0
  213. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ayu copy.toml +0 -0
  214. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ayu-light.toml +0 -0
  215. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ayu-mirage.toml +0 -0
  216. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ayu.toml +0 -0
  217. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/banana-blueberry.toml +0 -0
  218. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/batman.toml +0 -0
  219. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/belafonte-day.toml +0 -0
  220. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/belafonte-night.toml +0 -0
  221. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/birdsofparadise.toml +0 -0
  222. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/blazer.toml +0 -0
  223. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/blue-matrix.toml +0 -0
  224. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/blueberrypie.toml +0 -0
  225. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/bluedolphin.toml +0 -0
  226. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/blulocodark.toml +0 -0
  227. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/blulocolight.toml +0 -0
  228. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/borland.toml +0 -0
  229. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/breeze.toml +0 -0
  230. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/bright-lights.toml +0 -0
  231. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/broadcast.toml +0 -0
  232. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/brogrammer.toml +0 -0
  233. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/builtin-dark.toml +0 -0
  234. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/builtin-light.toml +0 -0
  235. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/builtin-pastel-dark.toml +0 -0
  236. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/builtin-solarized-dark.toml +0 -0
  237. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/builtin-solarized-light.toml +0 -0
  238. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/builtin-tango-dark.toml +0 -0
  239. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/builtin-tango-light.toml +0 -0
  240. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/c64.toml +0 -0
  241. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/calamity.toml +0 -0
  242. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/catppuccin-frappe.toml +0 -0
  243. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/catppuccin-latte.toml +0 -0
  244. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/catppuccin-macchiato.toml +0 -0
  245. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/catppuccin-mocha.toml +0 -0
  246. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/cga.toml +0 -0
  247. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/chalk.toml +0 -0
  248. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/chalkboard.toml +0 -0
  249. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/challengerdeep.toml +0 -0
  250. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/chester.toml +0 -0
  251. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ciapre.toml +0 -0
  252. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/clrs.toml +0 -0
  253. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/cobalt-neon.toml +0 -0
  254. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/cobalt2.toml +0 -0
  255. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/coffee-theme.toml +0 -0
  256. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/crayonponyfish.toml +0 -0
  257. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/cutiepro.toml +0 -0
  258. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/cyberdyne.toml +0 -0
  259. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/cyberpunk.toml +0 -0
  260. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
  261. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/dark+.toml +0 -0
  262. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/dark-pastel.toml +0 -0
  263. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/darkermatrix.toml +0 -0
  264. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/darkmatrix.toml +0 -0
  265. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/darkside.toml +0 -0
  266. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/dayfox.toml +0 -0
  267. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/deep.toml +0 -0
  268. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/desert.toml +0 -0
  269. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/dimidium.toml +0 -0
  270. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/dimmedmonokai.toml +0 -0
  271. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/django.toml +0 -0
  272. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/djangorebornagain.toml +0 -0
  273. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/djangosmooth.toml +0 -0
  274. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/doom-peacock.toml +0 -0
  275. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/doomone.toml +0 -0
  276. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/dotgov.toml +0 -0
  277. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/dracula+.toml +0 -0
  278. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/dracula.toml +0 -0
  279. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/duckbones.toml +0 -0
  280. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/duotone-dark.toml +0 -0
  281. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/earthsong.toml +0 -0
  282. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/elemental.toml +0 -0
  283. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/elementary.toml +0 -0
  284. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/encom.toml +0 -0
  285. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/espresso-libre.toml +0 -0
  286. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/espresso.toml +0 -0
  287. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/everblush.toml +0 -0
  288. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/fahrenheit.toml +0 -0
  289. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/fairyfloss.toml +0 -0
  290. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/farmhouse-dark.toml +0 -0
  291. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/farmhouse-light.toml +0 -0
  292. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/fideloper.toml +0 -0
  293. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/firefly-traditional.toml +0 -0
  294. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/firefoxdev.toml +0 -0
  295. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/firewatch.toml +0 -0
  296. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/fishtank.toml +0 -0
  297. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/flat.toml +0 -0
  298. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/flatland.toml +0 -0
  299. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/flexoki-dark.toml +0 -0
  300. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/flexoki-light.toml +0 -0
  301. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/floraverse.toml +0 -0
  302. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/forestblue.toml +0 -0
  303. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/framer.toml +0 -0
  304. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/frontenddelight.toml +0 -0
  305. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/funforrest.toml +0 -0
  306. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/galaxy.toml +0 -0
  307. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/galizur.toml +0 -0
  308. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/github-dark.toml +0 -0
  309. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/github.toml +0 -0
  310. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/glacier.toml +0 -0
  311. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/grape.toml +0 -0
  312. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/grass.toml +0 -0
  313. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/grey-green.toml +0 -0
  314. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/gruber-darker.toml +0 -0
  315. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/gruvboxdark.toml +0 -0
  316. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/gruvboxdarkhard.toml +0 -0
  317. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/gruvboxlight.toml +0 -0
  318. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/guezwhoz.toml +0 -0
  319. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hacktober.toml +0 -0
  320. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hardcore.toml +0 -0
  321. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/harper.toml +0 -0
  322. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hax0r-blue.toml +0 -0
  323. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hax0r-gr33n.toml +0 -0
  324. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hax0r-r3d.toml +0 -0
  325. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/highway.toml +0 -0
  326. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hipster-green.toml +0 -0
  327. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hivacruz.toml +0 -0
  328. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/homebrew.toml +0 -0
  329. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hopscotch.256.toml +0 -0
  330. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hopscotch.toml +0 -0
  331. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hurtado.toml +0 -0
  332. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/hybrid.toml +0 -0
  333. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ic-green-ppl.toml +0 -0
  334. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ic-orange-ppl.toml +0 -0
  335. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iceberg-dark.toml +0 -0
  336. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iceberg-light.toml +0 -0
  337. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/idea.toml +0 -0
  338. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/idletoes.toml +0 -0
  339. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ir-black.toml +0 -0
  340. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iterm2-dark-background.toml +0 -0
  341. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iterm2-default.toml +0 -0
  342. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iterm2-light-background.toml +0 -0
  343. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
  344. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iterm2-smoooooth.toml +0 -0
  345. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
  346. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iterm2-solarized-light.toml +0 -0
  347. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iterm2-tango-dark.toml +0 -0
  348. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/iterm2-tango-light.toml +0 -0
  349. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/jackie-brown.toml +0 -0
  350. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/japanesque.toml +0 -0
  351. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/jellybeans.toml +0 -0
  352. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/jetbrains-darcula.toml +0 -0
  353. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/jubi.toml +0 -0
  354. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/kanagawabones.toml +0 -0
  355. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/kibble.toml +0 -0
  356. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/kolorit.toml +0 -0
  357. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/konsolas.toml +0 -0
  358. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/kurokula.toml +0 -0
  359. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/lab-fox.toml +0 -0
  360. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/laser.toml +0 -0
  361. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/later-this-evening.toml +0 -0
  362. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/lavandula.toml +0 -0
  363. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/liquidcarbon.toml +0 -0
  364. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/liquidcarbontransparent.toml +0 -0
  365. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
  366. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/lovelace.toml +0 -0
  367. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/man-page.toml +0 -0
  368. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/mariana.toml +0 -0
  369. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/material.toml +0 -0
  370. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/materialdark.toml +0 -0
  371. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/materialdarker.toml +0 -0
  372. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/materialdesigncolors.toml +0 -0
  373. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/materialocean.toml +0 -0
  374. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/mathias.toml +0 -0
  375. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/matrix.toml +0 -0
  376. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/medallion.toml +0 -0
  377. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/mellifluous.toml +0 -0
  378. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/midnight-in-mojave.toml +0 -0
  379. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/mirage.toml +0 -0
  380. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/misterioso.toml +0 -0
  381. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/molokai.toml +0 -0
  382. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/monalisa.toml +0 -0
  383. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/monokai-remastered.toml +0 -0
  384. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/monokai-soda.toml +0 -0
  385. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/monokai-vivid.toml +0 -0
  386. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/n0tch2k.toml +0 -0
  387. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/neobones-dark.toml +0 -0
  388. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/neobones-light.toml +0 -0
  389. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/neon.toml +0 -0
  390. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/neopolitan.toml +0 -0
  391. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/neutron.toml +0 -0
  392. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/night-owlish-light.toml +0 -0
  393. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/nightfox.toml +0 -0
  394. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/nightlion-v1.toml +0 -0
  395. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/nightlion-v2.toml +0 -0
  396. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/niji.toml +0 -0
  397. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/nocturnal-winter.toml +0 -0
  398. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/nord-light.toml +0 -0
  399. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/nord.toml +0 -0
  400. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/novel.toml +0 -0
  401. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/nvimdark.toml +0 -0
  402. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/nvimlight.toml +0 -0
  403. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/obsidian.toml +0 -0
  404. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ocean.toml +0 -0
  405. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/oceanic-next.toml +0 -0
  406. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/oceanicmaterial.toml +0 -0
  407. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ollie.toml +0 -0
  408. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/onehalfdark.toml +0 -0
  409. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/onehalflight.toml +0 -0
  410. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/operator-mono-dark.toml +0 -0
  411. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/overnight-slumber.toml +0 -0
  412. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/oxocarbon.toml +0 -0
  413. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/palenighthc.toml +0 -0
  414. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/pandora.toml +0 -0
  415. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/paraiso-dark.toml +0 -0
  416. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/paulmillr.toml +0 -0
  417. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/pencildark.toml +0 -0
  418. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/pencillight.toml +0 -0
  419. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/peppermint.toml +0 -0
  420. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/piatto-light.toml +0 -0
  421. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/pnevma.toml +0 -0
  422. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/popping-and-locking.toml +0 -0
  423. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/primary.toml +0 -0
  424. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/pro-light.toml +0 -0
  425. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/pro.toml +0 -0
  426. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/purple-rain.toml +0 -0
  427. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/purplepeter.toml +0 -0
  428. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/rapture.toml +0 -0
  429. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/raycast-dark.toml +0 -0
  430. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/raycast-light.toml +0 -0
  431. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/rebecca.toml +0 -0
  432. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/red-alert.toml +0 -0
  433. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/red-planet.toml +0 -0
  434. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/red-sands.toml +0 -0
  435. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/relaxed.toml +0 -0
  436. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/retro.toml +0 -0
  437. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/rippedcasts.toml +0 -0
  438. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/rose-pine-dawn.toml +0 -0
  439. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/rose-pine-moon.toml +0 -0
  440. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/rose-pine.toml +0 -0
  441. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/rouge-2.toml +0 -0
  442. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/royal.toml +0 -0
  443. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ryuuko.toml +0 -0
  444. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/sakura.toml +0 -0
  445. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/scarlet-protocol.toml +0 -0
  446. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/seafoam-pastel.toml +0 -0
  447. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/seashells.toml +0 -0
  448. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/seoulbones-dark.toml +0 -0
  449. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/seoulbones-light.toml +0 -0
  450. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/seti.toml +0 -0
  451. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/shades-of-purple.toml +0 -0
  452. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/shaman.toml +0 -0
  453. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/slate.toml +0 -0
  454. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/sleepyhollow.toml +0 -0
  455. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/smyck.toml +0 -0
  456. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/snazzy.toml +0 -0
  457. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/softserver.toml +0 -0
  458. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/solarized-darcula.toml +0 -0
  459. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/solarized-dark---patched.toml +0 -0
  460. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
  461. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/spacedust.toml +0 -0
  462. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
  463. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/spacegray-eighties.toml +0 -0
  464. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/spacegray.toml +0 -0
  465. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/spiderman.toml +0 -0
  466. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/spring.toml +0 -0
  467. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/square.toml +0 -0
  468. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/sublette.toml +0 -0
  469. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/subliminal.toml +0 -0
  470. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/sugarplum.toml +0 -0
  471. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/sundried.toml +0 -0
  472. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/symfonic.toml +0 -0
  473. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/synthwave-everything.toml +0 -0
  474. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/synthwave.toml +0 -0
  475. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/synthwavealpha.toml +0 -0
  476. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tango-adapted.toml +0 -0
  477. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tango-half-adapted.toml +0 -0
  478. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/teerb.toml +0 -0
  479. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/terafox.toml +0 -0
  480. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/terminal-basic.toml +0 -0
  481. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/thayer-bright.toml +0 -0
  482. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/the-hulk.toml +0 -0
  483. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tinacious-design-(dark).toml +0 -0
  484. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tinacious-design-(light).toml +0 -0
  485. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tokyonight-day.toml +0 -0
  486. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tokyonight-storm.toml +0 -0
  487. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tokyonight.toml +0 -0
  488. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tomorrow-night-blue.toml +0 -0
  489. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tomorrow-night-bright.toml +0 -0
  490. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tomorrow-night-burns.toml +0 -0
  491. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
  492. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tomorrow-night.toml +0 -0
  493. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/tomorrow.toml +0 -0
  494. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/toychest.toml +0 -0
  495. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/treehouse.toml +0 -0
  496. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/twilight.toml +0 -0
  497. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ubuntu.toml +0 -0
  498. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ultradark.toml +0 -0
  499. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/ultraviolent.toml +0 -0
  500. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/underthesea.toml +0 -0
  501. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/unikitty.toml +0 -0
  502. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/urple.toml +0 -0
  503. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/vaughn.toml +0 -0
  504. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/vesper.toml +0 -0
  505. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/vibrantink.toml +0 -0
  506. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/vimbones.toml +0 -0
  507. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/violet-dark.toml +0 -0
  508. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/violet-light.toml +0 -0
  509. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/warmneon.toml +0 -0
  510. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/wez.toml +0 -0
  511. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/whimsy.toml +0 -0
  512. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/wildcherry.toml +0 -0
  513. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/wilmersdorf.toml +0 -0
  514. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/wombat.toml +0 -0
  515. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/wryan.toml +0 -0
  516. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/xcodedark.toml +0 -0
  517. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/xcodedarkhc.toml +0 -0
  518. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/xcodelight.toml +0 -0
  519. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/xcodelighthc.toml +0 -0
  520. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/xcodewwdc.toml +0 -0
  521. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/zenbones-dark.toml +0 -0
  522. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/zenbones-light.toml +0 -0
  523. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/zenbones.toml +0 -0
  524. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/zenburn.toml +0 -0
  525. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/zenburned.toml +0 -0
  526. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/zenwritten-dark.toml +0 -0
  527. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/themes/zenwritten-light.toml +0 -0
  528. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/workflow/__init__.py +0 -0
  529. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/workflow/activities.py +0 -0
  530. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/src/flock/workflow/agent_activities.py +0 -0
  531. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/tests/core/test_flock_batch.py +0 -0
  532. {flock_core-0.4.0b26/tests → flock_core-0.4.0b28/tests/serialization}/__init__.py +0 -0
  533. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/tests/serialization/test_enhanced_serialization.py +0 -0
  534. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/tests/serialization/test_file_path_serialization.py +0 -0
  535. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/tests/serialization/test_nested_serialization.py +0 -0
  536. {flock_core-0.4.0b26 → flock_core-0.4.0b28}/tests/tools/test_zendesk_tools.py +0 -0
@@ -0,0 +1,4 @@
1
+ [submodule "examples"]
2
+ path = examples
3
+ url = https://github.com/whiteducksoftware/flock-showcase.git
4
+ branch = master
@@ -15,10 +15,10 @@
15
15
  "editor.smoothScrolling": true,
16
16
  "terminal.integrated.fontFamily": "'Jetbrains Mono', 'FiraCode Nerd Font', 'Hack Nerd Font', 'monospace'",
17
17
  "editor.renderWhitespace": "none",
18
- //"terminal.integrated.lineHeight": 1.5,
18
+ "terminal.integrated.lineHeight": 1.5,
19
19
  "editor.fontSize": 15.5,
20
20
  "editor.fontLigatures": true,
21
- //"editor.lineHeight": 1.5,
21
+ "editor.lineHeight": 1.5,
22
22
  "editor.minimap.enabled": true,
23
23
  "editor.tabSize": 2,
24
24
  "editor.semanticTokenColorCustomizations": {
@@ -29,15 +29,53 @@
29
29
  // prevent VSCode from modifying the terminal colors
30
30
  "terminal.integrated.minimumContrastRatio": 1,
31
31
  "cSpell.words": [
32
+ "asyncio",
33
+ "chromadb",
34
+ "cloudpickle",
32
35
  "deptry",
36
+ "docling",
37
+ "dotenv",
38
+ "dspy",
39
+ "duckduckgo",
40
+ "fastapi",
41
+ "fasthtml",
33
42
  "gradio",
43
+ "htmlcov",
44
+ "httpx",
45
+ "ipywidgets",
46
+ "isort",
47
+ "litellm",
48
+ "loguru",
49
+ "markdownify",
50
+ "matplotlib",
51
+ "minversion",
34
52
  "mkdocs",
53
+ "mkdocstrings",
54
+ "msgpack",
35
55
  "msgspec",
36
56
  "mypy",
57
+ "nltk",
37
58
  "packb",
59
+ "poethepoet",
60
+ "psutil",
61
+ "pycache",
62
+ "pycodestyle",
63
+ "pydantic",
64
+ "pydocstyle",
65
+ "pyflakes",
38
66
  "pyinstrument",
39
67
  "pytest",
40
- "unpackb"
68
+ "pyupgrade",
69
+ "pyyaml",
70
+ "Ratzenberger",
71
+ "respx",
72
+ "tavily",
73
+ "temporalio",
74
+ "testpaths",
75
+ "tiktoken",
76
+ "tqdm",
77
+ "unpackb",
78
+ "uvicorn"
41
79
  ],
42
80
  "yaml.schemas": {
43
81
  "https://squidfunk.github.io/mkdocs-material/schema.json": "mkdocs.yml"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flock-core
3
- Version: 0.4.0b26
3
+ Version: 0.4.0b28
4
4
  Summary: Declarative LLM Orchestration at Scale
5
5
  Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
6
6
  License-File: LICENSE
@@ -126,7 +126,7 @@ Flock's power comes from a few key ideas (Learn more in the [Full Documentation]
126
126
  6. **Tool Integration:** Equip agents with standard or custom Python functions (`@flock_tool`) registered via the `FlockRegistry`.
127
127
  7. **Registry:** A central place (`@flock_component`, `@flock_type`, `@flock_tool`) to register your custom classes, types, and functions, enabling robust serialization and dynamic loading.
128
128
 
129
- ## 💾 Installation
129
+ ## 💾 Installation - Use Flock in your project
130
130
 
131
131
  Get started with the core Flock library:
132
132
 
@@ -148,7 +148,27 @@ uv pip install flock-core[tools]
148
148
  uv pip install flock-core[all]
149
149
  ```
150
150
 
151
- Environment Setup:
151
+ ## 🔑 Installation - Develop Flock
152
+
153
+ ```bash
154
+ git clone https://github.com/whiteducksoftware/flock.git
155
+ cd flock
156
+
157
+ # One-liner dev setup after cloning
158
+ pip install poethepoet && poe install
159
+ ```
160
+
161
+ Additional provided `poe` tasks and commands:
162
+
163
+ ```bash
164
+ poe install # Install the project
165
+ poe build # Build the project
166
+ poe docs # Serve the docs
167
+ poe format # Format the code
168
+ poe lint # Lint the code
169
+ ```
170
+
171
+ ## 🔑 Environment Setup
152
172
 
153
173
  Flock uses environment variables (typically in a .env file) for configuration, especially API keys. Create a .env file in your project root:
154
174
 
@@ -173,7 +193,7 @@ DEFAULT_MODEL="openai/gpt-4o" # Default LLM if agent doesn't specify
173
193
  # VARS_PER_PAGE="20"
174
194
  ```
175
195
 
176
- Remember to add .env to your .gitignore!
196
+ Be sure that the .env file is added to your .gitignore!
177
197
 
178
198
  ## ⚡ Quick Start Syntax
179
199
 
@@ -216,13 +236,98 @@ if __name__ == "__main__":
216
236
 
217
237
  ## 🐤 New in Flock 0.4.0 `Magpie` 🐤
218
238
 
219
- ### REST API - Deploy Flock Agents as REST API Endpoints
239
+ Version 0.4.0 brings significant enhancements focused on usability, deployment, and robustness:
240
+
241
+
242
+ ### 🚀 REST API - Deploy Flock Agents as REST API Endpoints
243
+
244
+ Easily deploy your Flock agents as scalable REST API endpoints. Interact with your agent workflows via standard HTTP requests.
245
+
246
+ --------------------------------
247
+
248
+ ### 🖥️ Web UI - Test Flock Agents in the Browser
249
+
250
+ Test and interact with your Flock agents directly in your browser through an integrated web interface.
251
+
252
+ --------------------------------
253
+
254
+ ### ⌨️ CLI Tool - Manage Flock Agents via the Command Line
255
+
256
+ Manage Flock configurations, run agents, and inspect results directly from your command line.
257
+
258
+ --------------------------------
259
+
260
+ ### 💾 Enhanced Serialization - Share, Deploy, and Run Flock Agents by human readable yaml files
261
+
262
+ Define and share entire Flock configurations, including agents and components, using human-readable YAML files. Load flocks directly from these files for easy deployment and versioning.
220
263
 
221
- ### Web UI - Test Flock Agents in the Browser
264
+ --------------------------------
222
265
 
223
- ### CLI Tool - Manage Flock Agents via the Command Line
266
+ ### 💾 New execution flows
224
267
 
225
- ### Serialization - Share, Deploy, and Run Flock Agents by human readable yaml files
268
+ Run Flock in batch mode to process multiple inputs at once or in evaluation mode to test agents with different inputs.
269
+
270
+ --------------------------------
271
+
272
+ ### ⏱️ Robust Temporal Integration
273
+
274
+ Flock 0.4.0 introduces first-class support for Temporal.io, enabling you to build truly production-grade, reliable, and scalable agent workflows. Move beyond simple local execution and leverage Temporal's power for:
275
+
276
+ * **Fault Tolerance:** Workflows automatically resume from the last successful step after failures.
277
+ * **Retries:** Configure automatic retries for activities (like LLM calls or tool usage) with exponential backoff.
278
+ * **Scalability:** Distribute workflow and activity execution across multiple worker processes using Task Queues.
279
+ * **Observability:** Gain deep insights into workflow execution history via the Temporal UI.
280
+
281
+ Flock makes this easy with:
282
+
283
+ * **Declarative Configuration:** Define Temporal timeouts, retry policies, and task queues directly within your `Flock` and `FlockAgent` configurations (YAML or Python).
284
+ * **Correct Patterns:** Uses Temporal's recommended granular activity execution for better control and visibility.
285
+ * **Clear Worker Separation:** Provides guidance and flags for running dedicated Temporal workers, separating development convenience from production best practices.
286
+
287
+ Visit the [Temporal Documentation](https://learn.temporal.io/python/workflows/) for more information on how to use Temporal.
288
+
289
+ Or check out the [Flock Showcase](https://github.com/whiteducksoftware/flock-showcase) for a complete example of a Flock that uses Temporal or our [docs](https://whiteducksoftware.github.io/flock/guides/temporal-configuration/) for more information.
290
+
291
+ Here's an example of how to configure a Flock to use Temporal:
292
+
293
+ ```python
294
+ from flock.core import Flock, FlockFactory
295
+
296
+ from flock.workflow.temporal_config import (
297
+ TemporalActivityConfig,
298
+ TemporalRetryPolicyConfig,
299
+ TemporalWorkflowConfig,
300
+ )
301
+
302
+ # Flock-scoped temporal config
303
+ flock = Flock(
304
+ enable_temporal=True,
305
+ temporal_config=TemporalWorkflowConfig(
306
+ task_queue="flock-test-queue",
307
+ workflow_execution_timeout=timedelta(minutes=10),
308
+ default_activity_retry_policy=TemporalRetryPolicyConfig(
309
+ maximum_attempts=2
310
+ ),
311
+ ),
312
+ )
313
+
314
+ # Agent-scoped temporal config
315
+ content_agent = FlockFactory.create_default_agent(
316
+ name="content_agent",
317
+ input="funny_title, funny_slide_headers",
318
+ output="funny_slide_content",
319
+ temporal_activity_config=TemporalActivityConfig(
320
+ start_to_close_timeout=timedelta(minutes=1),
321
+ retry_policy=TemporalRetryPolicyConfig(
322
+ maximum_attempts=4,
323
+ initial_interval=timedelta(seconds=2),
324
+ non_retryable_error_types=["ValueError"],
325
+ ),
326
+ ),
327
+ )
328
+ ```
329
+
330
+ --------------------------------
226
331
 
227
332
  ### ✨ Utility: @flockclass Hydrator
228
333
 
@@ -255,6 +360,8 @@ async def create_character():
255
360
  # asyncio.run(create_character())
256
361
  ```
257
362
 
363
+ --------------------------------
364
+
258
365
  ## 📚 Examples & Tutorials
259
366
 
260
367
  For a comprehensive set of examples, ranging from basic usage to complex projects and advanced features, please visit our dedicated showcase repository:
@@ -65,7 +65,7 @@ Flock's power comes from a few key ideas (Learn more in the [Full Documentation]
65
65
  6. **Tool Integration:** Equip agents with standard or custom Python functions (`@flock_tool`) registered via the `FlockRegistry`.
66
66
  7. **Registry:** A central place (`@flock_component`, `@flock_type`, `@flock_tool`) to register your custom classes, types, and functions, enabling robust serialization and dynamic loading.
67
67
 
68
- ## 💾 Installation
68
+ ## 💾 Installation - Use Flock in your project
69
69
 
70
70
  Get started with the core Flock library:
71
71
 
@@ -87,7 +87,27 @@ uv pip install flock-core[tools]
87
87
  uv pip install flock-core[all]
88
88
  ```
89
89
 
90
- Environment Setup:
90
+ ## 🔑 Installation - Develop Flock
91
+
92
+ ```bash
93
+ git clone https://github.com/whiteducksoftware/flock.git
94
+ cd flock
95
+
96
+ # One-liner dev setup after cloning
97
+ pip install poethepoet && poe install
98
+ ```
99
+
100
+ Additional provided `poe` tasks and commands:
101
+
102
+ ```bash
103
+ poe install # Install the project
104
+ poe build # Build the project
105
+ poe docs # Serve the docs
106
+ poe format # Format the code
107
+ poe lint # Lint the code
108
+ ```
109
+
110
+ ## 🔑 Environment Setup
91
111
 
92
112
  Flock uses environment variables (typically in a .env file) for configuration, especially API keys. Create a .env file in your project root:
93
113
 
@@ -112,7 +132,7 @@ DEFAULT_MODEL="openai/gpt-4o" # Default LLM if agent doesn't specify
112
132
  # VARS_PER_PAGE="20"
113
133
  ```
114
134
 
115
- Remember to add .env to your .gitignore!
135
+ Be sure that the .env file is added to your .gitignore!
116
136
 
117
137
  ## ⚡ Quick Start Syntax
118
138
 
@@ -155,13 +175,98 @@ if __name__ == "__main__":
155
175
 
156
176
  ## 🐤 New in Flock 0.4.0 `Magpie` 🐤
157
177
 
158
- ### REST API - Deploy Flock Agents as REST API Endpoints
178
+ Version 0.4.0 brings significant enhancements focused on usability, deployment, and robustness:
179
+
180
+
181
+ ### 🚀 REST API - Deploy Flock Agents as REST API Endpoints
182
+
183
+ Easily deploy your Flock agents as scalable REST API endpoints. Interact with your agent workflows via standard HTTP requests.
184
+
185
+ --------------------------------
186
+
187
+ ### 🖥️ Web UI - Test Flock Agents in the Browser
188
+
189
+ Test and interact with your Flock agents directly in your browser through an integrated web interface.
190
+
191
+ --------------------------------
192
+
193
+ ### ⌨️ CLI Tool - Manage Flock Agents via the Command Line
194
+
195
+ Manage Flock configurations, run agents, and inspect results directly from your command line.
196
+
197
+ --------------------------------
198
+
199
+ ### 💾 Enhanced Serialization - Share, Deploy, and Run Flock Agents by human readable yaml files
200
+
201
+ Define and share entire Flock configurations, including agents and components, using human-readable YAML files. Load flocks directly from these files for easy deployment and versioning.
159
202
 
160
- ### Web UI - Test Flock Agents in the Browser
203
+ --------------------------------
161
204
 
162
- ### CLI Tool - Manage Flock Agents via the Command Line
205
+ ### 💾 New execution flows
163
206
 
164
- ### Serialization - Share, Deploy, and Run Flock Agents by human readable yaml files
207
+ Run Flock in batch mode to process multiple inputs at once or in evaluation mode to test agents with different inputs.
208
+
209
+ --------------------------------
210
+
211
+ ### ⏱️ Robust Temporal Integration
212
+
213
+ Flock 0.4.0 introduces first-class support for Temporal.io, enabling you to build truly production-grade, reliable, and scalable agent workflows. Move beyond simple local execution and leverage Temporal's power for:
214
+
215
+ * **Fault Tolerance:** Workflows automatically resume from the last successful step after failures.
216
+ * **Retries:** Configure automatic retries for activities (like LLM calls or tool usage) with exponential backoff.
217
+ * **Scalability:** Distribute workflow and activity execution across multiple worker processes using Task Queues.
218
+ * **Observability:** Gain deep insights into workflow execution history via the Temporal UI.
219
+
220
+ Flock makes this easy with:
221
+
222
+ * **Declarative Configuration:** Define Temporal timeouts, retry policies, and task queues directly within your `Flock` and `FlockAgent` configurations (YAML or Python).
223
+ * **Correct Patterns:** Uses Temporal's recommended granular activity execution for better control and visibility.
224
+ * **Clear Worker Separation:** Provides guidance and flags for running dedicated Temporal workers, separating development convenience from production best practices.
225
+
226
+ Visit the [Temporal Documentation](https://learn.temporal.io/python/workflows/) for more information on how to use Temporal.
227
+
228
+ Or check out the [Flock Showcase](https://github.com/whiteducksoftware/flock-showcase) for a complete example of a Flock that uses Temporal or our [docs](https://whiteducksoftware.github.io/flock/guides/temporal-configuration/) for more information.
229
+
230
+ Here's an example of how to configure a Flock to use Temporal:
231
+
232
+ ```python
233
+ from flock.core import Flock, FlockFactory
234
+
235
+ from flock.workflow.temporal_config import (
236
+ TemporalActivityConfig,
237
+ TemporalRetryPolicyConfig,
238
+ TemporalWorkflowConfig,
239
+ )
240
+
241
+ # Flock-scoped temporal config
242
+ flock = Flock(
243
+ enable_temporal=True,
244
+ temporal_config=TemporalWorkflowConfig(
245
+ task_queue="flock-test-queue",
246
+ workflow_execution_timeout=timedelta(minutes=10),
247
+ default_activity_retry_policy=TemporalRetryPolicyConfig(
248
+ maximum_attempts=2
249
+ ),
250
+ ),
251
+ )
252
+
253
+ # Agent-scoped temporal config
254
+ content_agent = FlockFactory.create_default_agent(
255
+ name="content_agent",
256
+ input="funny_title, funny_slide_headers",
257
+ output="funny_slide_content",
258
+ temporal_activity_config=TemporalActivityConfig(
259
+ start_to_close_timeout=timedelta(minutes=1),
260
+ retry_policy=TemporalRetryPolicyConfig(
261
+ maximum_attempts=4,
262
+ initial_interval=timedelta(seconds=2),
263
+ non_retryable_error_types=["ValueError"],
264
+ ),
265
+ ),
266
+ )
267
+ ```
268
+
269
+ --------------------------------
165
270
 
166
271
  ### ✨ Utility: @flockclass Hydrator
167
272
 
@@ -194,6 +299,8 @@ async def create_character():
194
299
  # asyncio.run(create_character())
195
300
  ```
196
301
 
302
+ --------------------------------
303
+
197
304
  ## 📚 Examples & Tutorials
198
305
 
199
306
  For a comprehensive set of examples, ranging from basic usage to complex projects and advanced features, please visit our dedicated showcase repository:
@@ -1,6 +1,6 @@
1
1
  <mxfile host="65bd71144e">
2
2
  <diagram id="iQ7YuHOuaVDECIdskFDT" name="Page-1">
3
- <mxGraphModel dx="88" dy="620" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#FFFFFF, #d8cfb1)" math="0" shadow="1">
3
+ <mxGraphModel dx="1089" dy="498" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#FFFFFF, #d8cfb1)" math="0" shadow="1">
4
4
  <root>
5
5
  <mxCell id="0"/>
6
6
  <mxCell id="1" parent="0"/>
@@ -11,18 +11,18 @@
11
11
  </mxGraphModel>
12
12
  </diagram>
13
13
  <diagram id="mQwFuZfSuTjpqv4SXbYC" name="Page-2">
14
- <mxGraphModel dx="354" dy="259" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#FFFFFF, #ffffde)" math="0" shadow="1">
14
+ <mxGraphModel dx="1089" dy="498" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#FFFFFF, #ffffde)" math="0" shadow="1">
15
15
  <root>
16
16
  <mxCell id="0"/>
17
17
  <mxCell id="1" parent="0"/>
18
- <mxCell id="gh-ZxXSGDDD0mwRwWCxR-1" value="graph TD&#xa; subgraph Client Application&#xa; client[Client Code]&#xa; end&#xa;&#xa; subgraph Flock Framework&#xa; orchestrator[Flock Orchestrator]&#xa; registry[Agent Registry]&#xa; context[Context Manager]&#xa; &#xa; subgraph Agents&#xa; base[FlockAgent Base]&#xa;&#xa; end&#xa; &#xa; subgraph Execution&#xa; local[Local Executor]&#xa; temporal[Temporal Executor]&#xa; end&#xa; &#xa; subgraph Core Services&#xa; logging[Logging System]&#xa; tools[Tool Registry]&#xa; formatter[Output Formatters]&#xa; end&#xa; end&#xa;&#xa; subgraph External Services&#xa; llm[Language Models]&#xa; temporal_server[Temporal Server]&#xa; end&#xa;&#xa; %% Client interactions&#xa; client --&gt; orchestrator&#xa; &#xa; %% Orchestrator relations&#xa; orchestrator --&gt; registry&#xa; orchestrator --&gt; context&#xa; orchestrator --&gt; local&#xa; orchestrator --&gt; temporal&#xa; &#xa; %% Agent relations&#xa; base --&gt; tools&#xa; base --&gt; logging&#xa; base --&gt; formatter&#xa;&#xa; &#xa; %% Execution relations&#xa; local --&gt; llm&#xa; temporal --&gt; temporal_server&#xa; temporal_server --&gt; llm&#xa; &#xa; %% Registry relations&#xa; registry --&gt; base&#xa; registry --&gt; tools&#xa;&#xa; %% Style&#xa; classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px;&#xa; classDef external fill:#e1f5fe,stroke:#0288d1,stroke-width:2px;&#xa; classDef core fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px;&#xa; &#xa; class llm,temporal_server external;&#xa; class orchestrator,registry,context,base,local,temporal core;" style="shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;" vertex="1" parent="1">
18
+ <mxCell id="gh-ZxXSGDDD0mwRwWCxR-1" value="graph TD&#xa; subgraph Client Application&#xa; client[Client Code]&#xa; end&#xa;&#xa; subgraph Flock Framework&#xa; orchestrator[Flock Orchestrator]&#xa; registry[Agent Registry]&#xa; context[Context Manager]&#xa; &#xa; subgraph Agents&#xa; base[FlockAgent Base]&#xa;&#xa; end&#xa; &#xa; subgraph Execution&#xa; local[Local Executor]&#xa; temporal[Temporal Executor]&#xa; end&#xa; &#xa; subgraph Core Services&#xa; logging[Logging System]&#xa; tools[Tool Registry]&#xa; formatter[Output Formatters]&#xa; end&#xa; end&#xa;&#xa; subgraph External Services&#xa; llm[Language Models]&#xa; temporal_server[Temporal Server]&#xa; end&#xa;&#xa; %% Client interactions&#xa; client --&gt; orchestrator&#xa; &#xa; %% Orchestrator relations&#xa; orchestrator --&gt; registry&#xa; orchestrator --&gt; context&#xa; orchestrator --&gt; local&#xa; orchestrator --&gt; temporal&#xa; &#xa; %% Agent relations&#xa; base --&gt; tools&#xa; base --&gt; logging&#xa; base --&gt; formatter&#xa;&#xa; &#xa; %% Execution relations&#xa; local --&gt; llm&#xa; temporal --&gt; temporal_server&#xa; temporal_server --&gt; llm&#xa; &#xa; %% Registry relations&#xa; registry --&gt; base&#xa; registry --&gt; tools&#xa;&#xa; %% Style&#xa; classDef default fill:#f9f9f9,stroke:#333,stroke-width:2px;&#xa; classDef external fill:#e1f5fe,stroke:#0288d1,stroke-width:2px;&#xa; classDef core fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px;&#xa; &#xa; class llm,temporal_server external;&#xa; class orchestrator,registry,context,base,local,temporal core;" style="shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;" parent="1" vertex="1">
19
19
  <mxGeometry x="274" y="325" width="300" height="300" as="geometry"/>
20
20
  </mxCell>
21
21
  </root>
22
22
  </mxGraphModel>
23
23
  </diagram>
24
24
  <diagram id="sh9ImpPZNdK_Mo0HMCRx" name="Page-3">
25
- <mxGraphModel dx="1237" dy="800" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#FFFFFF,#E8E8E8)" math="0" shadow="0">
25
+ <mxGraphModel dx="1489" dy="898" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#FFFFFF,#E8E8E8)" math="0" shadow="0">
26
26
  <root>
27
27
  <mxCell id="0"/>
28
28
  <mxCell id="1" parent="0"/>
@@ -0,0 +1,232 @@
1
+ ---
2
+ hide: # Optional: Hide table of contents on simple pages
3
+ - toc
4
+ ---
5
+
6
+ # ⛓️ Chaining Agents: Building Workflows with Routers
7
+
8
+ In Flock, individual agents are powerful, but the real magic happens when you connect them to form sophisticated workflows. Chaining allows the output of one agent to become the input for another, enabling complex tasks to be broken down into manageable, specialized steps.
9
+
10
+ The key to chaining lies in **Routers**. Every `FlockAgent` can have a `handoff_router` attached. After an agent successfully completes its `evaluate` step, its router is called to decide what happens next.
11
+
12
+ ## How Routers Work: The `HandOffRequest`
13
+
14
+ A `FlockRouter`'s primary job is to execute its `route` method. This method receives:
15
+
16
+ 1. `current_agent`: The agent instance that just finished.
17
+ 2. `result`: The dictionary output produced by the `current_agent`.
18
+ 3. `context`: The shared `FlockContext` object containing the overall workflow state and history.
19
+
20
+ Based on these inputs, the router returns a `HandOffRequest` object. This object tells the Flock workflow engine:
21
+
22
+ * `next_agent` (str): The `name` of the agent to execute next. If empty or `None`, the workflow typically terminates.
23
+ * `output_to_input_merge_strategy` (Literal["match", "add"]): How the `result` from the current agent should be incorporated into the context for the next agent.
24
+ * `"match"` (Default): Fields in the `result` update corresponding fields in the context.
25
+ * `"add"`: The entire `result` dictionary is added to the context, often under a specific key (useful for feedback or passing complex objects).
26
+ * Optional Overrides: The `HandOffRequest` can also potentially carry information to override aspects of the next agent's execution or update the context directly (though specific router implementations vary in how they use this).
27
+
28
+ Flock provides several built-in router types to handle different chaining scenarios:
29
+
30
+ ## 1. Static Chaining: `DefaultRouter`
31
+
32
+ The simplest way to chain agents. The `DefaultRouter` routes to a predetermined next agent specified in its configuration.
33
+
34
+ ```python
35
+ # --- In your agent definition ---
36
+ from flock.core import FlockFactory
37
+ from flock.routers.default import DefaultRouter, DefaultRouterConfig
38
+
39
+ # Agent A always hands off to Agent B
40
+ agent_a = FlockFactory.create_default_agent(
41
+ name="agent_a",
42
+ input="topic",
43
+ output="summary",
44
+ router=DefaultRouter(
45
+ config=DefaultRouterConfig(hand_off="agent_b") # Always go to agent_b
46
+ )
47
+ )
48
+
49
+ agent_b = FlockFactory.create_default_agent(
50
+ name="agent_b",
51
+ input="summary", # Expects output from agent_a
52
+ output="final_report"
53
+ )
54
+
55
+ flock.add_agent(agent_a)
56
+ flock.add_agent(agent_b)
57
+
58
+ # Run starting with agent_a
59
+ flock.run(start_agent=agent_a, input={"topic": "AI Agents"})
60
+ ```
61
+
62
+ The `hand_off` value in `DefaultRouterConfig` can also be a callable function that dynamically returns a `HandOffRequest` based on the context or result.
63
+
64
+ ## 2. Dynamic Chaining: Making Decisions
65
+
66
+ For more complex workflows, you need routers that can make decisions based on the current state.
67
+
68
+ ### LLM-Powered Routing: `LLMRouter` 🧠
69
+
70
+ This router leverages a Large Language Model (LLM) to decide the next best agent.
71
+
72
+ * **How it works:** It constructs a prompt containing the current agent's details, its output, and information about all other available agents (their names, descriptions, inputs/outputs). It asks the LLM to choose the most suitable next agent, provide a confidence score, and explain its reasoning.
73
+ * **Configuration:** You can set the LLM `model`, `temperature`, `max_tokens`, a `confidence_threshold` (to only proceed if the LLM is confident enough), and even provide a custom prompt template.
74
+ * **Use Case:** Ideal for workflows where the next step depends on nuanced understanding of the previous agent's output and the capabilities of potential next agents.
75
+
76
+ ```python
77
+ # --- Conceptual Example ---
78
+ from flock.routers.llm import LLMRouter, LLMRouterConfig
79
+
80
+ smart_router = LLMRouter(
81
+ config=LLMRouterConfig(
82
+ confidence_threshold=0.7, # Only route if LLM score is >= 0.7
83
+ temperature=0.1
84
+ )
85
+ )
86
+
87
+ agent_with_llm_routing = FlockFactory.create_default_agent(
88
+ name="decision_point_agent",
89
+ # ... inputs/outputs ...
90
+ router=smart_router
91
+ )
92
+ ```
93
+
94
+ ### Agent-Powered Routing: `AgentRouter` 🤖
95
+
96
+ This router delegates the routing decision to *another* specialized `FlockAgent` called the `HandoffAgent`.
97
+
98
+ * **How it works:** The `AgentRouter` gathers information about the current agent, its result, and the available next agents. It packages this information and feeds it to the internal `HandoffAgent`. The `HandoffAgent` (which typically uses a `DeclarativeEvaluator`) analyzes the situation and outputs its decision (next agent name, confidence, reasoning). The `AgentRouter` then uses this decision.
99
+ * **Configuration:** Includes a `confidence_threshold`.
100
+ * **Use Case:** Useful when the routing logic itself is complex enough to warrant its own dedicated agent. It allows the routing logic to be developed and potentially improved independently.
101
+
102
+ ```python
103
+ # --- Conceptual Example ---
104
+ from flock.routers.agent import AgentRouter, AgentRouterConfig
105
+
106
+ agent_powered_router = AgentRouter(
107
+ config=AgentRouterConfig(
108
+ confidence_threshold=0.6
109
+ )
110
+ )
111
+
112
+ agent_with_agent_routing = FlockFactory.create_default_agent(
113
+ name="complex_routing_agent",
114
+ # ... inputs/outputs ...
115
+ router=agent_powered_router
116
+ )
117
+ ```
118
+
119
+ ## 3. Conditional Routing & Retries
120
+
121
+ Sometimes, the workflow needs to branch or repeat based on specific conditions or feedback.
122
+
123
+ ### Condition-Based Branching: `ConditionalRouter` 🤔
124
+
125
+ This router evaluates a condition based on a value stored in the `FlockContext` and routes accordingly.
126
+
127
+ * **How it works:** You configure it to check a specific `condition_context_key`. It supports various checks:
128
+ * String comparison (equals, contains, regex, etc.)
129
+ * Number comparison (<, ==, >, etc.)
130
+ * List size checks (min/max items)
131
+ * Type checking (`isinstance`)
132
+ * Boolean checks
133
+ * Existence checks (does the key exist?)
134
+ * Custom logic via a registered callable function.
135
+ * **Routing Paths:** It routes to `success_agent` if the condition passes, or `failure_agent` if it fails.
136
+ * **Retry Logic:** Optionally, if the condition fails, it can route back to a `retry_agent` (often the *same* agent) up to `max_retries` times before finally giving up and going to the `failure_agent`. This is useful for self-correction loops.
137
+ * **Use Case:** Implementing if/else logic, validation checks, or simple retry loops within your workflow.
138
+
139
+ ```python
140
+ # --- Conceptual Example ---
141
+ from flock.routers.conditional import ConditionalRouter, ConditionalRouterConfig
142
+
143
+ # Assume an agent 'validator_agent' puts its result in context.state['validation_status']
144
+ conditional_router = ConditionalRouter(
145
+ config=ConditionalRouterConfig(
146
+ condition_context_key="validation_status", # Check this context variable
147
+ expected_string="PASS", # Condition: Does it equal "PASS"?
148
+ string_mode="equals",
149
+ ignore_case=True,
150
+ success_agent="publish_agent", # If "PASS", go to publish
151
+ failure_agent="human_review_agent" # If not "PASS", go to review
152
+ )
153
+ )
154
+
155
+ validator_agent = FlockFactory.create_default_agent(
156
+ name="validator_agent",
157
+ # ... inputs/outputs ...
158
+ # Assume it sets context.state['validation_status'] = "PASS" or "FAIL"
159
+ router=conditional_router
160
+ )
161
+ ```
162
+
163
+ ### Feedback-Driven Retries: `FeedbackRetryRouter` 🔁
164
+
165
+ This router is specifically designed to handle retries based on feedback, often generated by assertion modules.
166
+
167
+ * **How it works:** It checks a configured `feedback_context_key`. If feedback is present (indicating a failure or issue detected, perhaps by an `AssertionCheckerModule`), and `max_retries` hasn't been exceeded, it routes back to the *current agent*. Crucially, it uses `output_to_input_merge_strategy="add"` and `add_input_fields` to inject the feedback message (and potentially the previous result) into the context, making it available for the agent's next attempt. If retries are exhausted, it routes to a `fallback_agent` or stops.
168
+ * **Use Case:** Implementing self-correction loops where an agent attempts a task, an assertion module checks the result, and if issues are found, the agent retries with specific feedback on what went wrong.
169
+
170
+ ```python
171
+ # --- Conceptual Example ---
172
+ from flock.routers.feedback import FeedbackRetryRouter, FeedbackRetryRouterConfig
173
+ # Assume AssertionCheckerModule puts feedback in context.state['flock.assertion_feedback']
174
+
175
+ retry_router = FeedbackRetryRouter(
176
+ config=FeedbackRetryRouterConfig(
177
+ max_retries=2, # Allow 2 retries
178
+ feedback_context_key="flock.assertion_feedback", # Check this key
179
+ fallback_agent="error_handler_agent" # Go here if retries fail
180
+ )
181
+ )
182
+
183
+ # Agent that might fail assertions
184
+ correctable_agent = FlockFactory.create_default_agent(
185
+ name="correctable_agent",
186
+ input="task_description, flock.assertion_feedback | Optional feedback", # Agent needs to accept feedback
187
+ output="result_data",
188
+ # Assume AssertionCheckerModule runs after evaluate
189
+ router=retry_router
190
+ )
191
+ ```
192
+
193
+ ## 4. Iterative Generation: `IterativeListGeneratorRouter` 🔄
194
+
195
+ This router facilitates scenarios where an agent needs to be called repeatedly to build up a list of items.
196
+
197
+ * **How it works:** It routes back to the *same agent* multiple times. It manages the growing list of generated items and the current iteration count within the `FlockContext`. On each subsequent run, it provides the list of previously generated items back to the agent (via a configured `context_input_field`). It stops once `max_iterations` is reached.
198
+ * **Complexity:** This pattern can be complex because the agent ideally needs slightly different inputs (the growing list) and might only need to produce *one* new item per iteration, rather than the full final list. The router attempts to manage this state, but careful agent and signature design is required.
199
+ * **Use Case:** Generating list items one by one, like chapters for a book outline, steps in a plan, or ideas in a brainstorm, where each new item might depend on the previous ones.
200
+
201
+ ```python
202
+ # --- Conceptual Example ---
203
+ from flock.routers.list_generator import IterativeListGeneratorRouter, IterativeListGeneratorRouterConfig
204
+
205
+ list_router = IterativeListGeneratorRouter(
206
+ config=IterativeListGeneratorRouterConfig(
207
+ target_list_field="chapters", # The final list output name
208
+ item_output_field="chapter", # The output field for a single item
209
+ context_input_field="previous_chapters", # How the list is passed back
210
+ max_iterations=5 # Generate up to 5 chapters
211
+ )
212
+ )
213
+
214
+ chapter_agent = FlockFactory.create_default_agent(
215
+ name="chapter_agent",
216
+ input="book_topic, previous_chapters | List of previously generated chapters",
217
+ output="chapter | The next chapter details", # Agent generates one item
218
+ router=list_router
219
+ )
220
+ # Note: The final result containing the full 'chapters' list is typically
221
+ # assembled from the context after the iterations complete.
222
+ ```
223
+
224
+ ## Combining Routers
225
+
226
+ For truly advanced workflows, you might even chain routers themselves (though this requires careful design). For example, a `FeedbackRetryRouter` could handle immediate retries, and if no feedback is present (success), it could hand off to an `LLMRouter` to decide the *next different* agent.
227
+
228
+ Just create a new router which is calling both routers in sequence! And even more wild shenanigans are possible!
229
+
230
+ ---
231
+
232
+ By understanding and utilizing these different router types, you can move beyond simple linear sequences and build dynamic, intelligent, and robust agent workflows with Flock! 🚀