flock-core 0.2.4__tar.gz → 0.2.6__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 (454) hide show
  1. flock_core-0.2.6/.env_template +28 -0
  2. {flock_core-0.2.4 → flock_core-0.2.6}/.gitignore +1 -0
  3. {flock_core-0.2.4 → flock_core-0.2.6}/PKG-INFO +6 -2
  4. {flock_core-0.2.4 → flock_core-0.2.6}/README.md +3 -1
  5. flock_core-0.2.6/docs/architecture.drawio +24 -0
  6. flock_core-0.2.6/docs/img/component_diagramm.png +0 -0
  7. flock_core-0.2.6/docs/img/flock_cli.png +0 -0
  8. flock_core-0.2.6/docs/img/flow_diagramm.png +0 -0
  9. {flock_core-0.2.4 → flock_core-0.2.6}/examples/01_introduction/03_tool_and_code_agent.py +1 -1
  10. {flock_core-0.2.4 → flock_core-0.2.6}/examples/01_introduction/05_typed_output2.py +3 -1
  11. {flock_core-0.2.4 → flock_core-0.2.6}/pyproject.toml +6 -1
  12. {flock_core-0.2.4 → flock_core-0.2.6}/requirements.txt +16 -0
  13. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/__init__.py +3 -0
  14. flock_core-0.2.6/src/flock/config.py +47 -0
  15. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/flock.py +10 -1
  16. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/flock_agent.py +1 -1
  17. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/logging/formatters/pprint_formatter.py +4 -3
  18. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/logging/logging.py +18 -19
  19. flock_core-0.2.6/src/flock/core/logging/span_middleware/baggage_span_processor.py +31 -0
  20. flock_core-0.2.6/src/flock/core/logging/telemetry.py +137 -0
  21. flock_core-0.2.6/src/flock/core/logging/telemetry_exporter/base_exporter.py +38 -0
  22. flock_core-0.2.6/src/flock/core/logging/telemetry_exporter/file_exporter.py +85 -0
  23. flock_core-0.2.6/src/flock/core/logging/telemetry_exporter/sqlite_exporter.py +103 -0
  24. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/logging/trace_and_logged.py +5 -1
  25. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/mixin/dspy_integration.py +23 -10
  26. flock_core-0.2.6/src/flock/core/tools/basic_tools.py +197 -0
  27. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/tools/dev_tools/github.py +0 -33
  28. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/util/input_resolver.py +19 -0
  29. flock_core-0.2.6/src/flock/interpreter/python_interpreter.py +675 -0
  30. flock_core-0.2.6/src/flock/platform/docker_tools.py +49 -0
  31. flock_core-0.2.6/src/flock/platform/jaeger_install.py +86 -0
  32. {flock_core-0.2.4 → flock_core-0.2.6}/tests/integration/test_agent_integration.py +1 -1
  33. {flock_core-0.2.4 → flock_core-0.2.6}/uv.lock +220 -174
  34. flock_core-0.2.4/docs/architecture.md +0 -244
  35. flock_core-0.2.4/docs/img/flock_cli.png +0 -0
  36. flock_core-0.2.4/review/analysis.md +0 -134
  37. flock_core-0.2.4/src/flock/config.py +0 -29
  38. flock_core-0.2.4/src/flock/core/logging/telemetry.py +0 -109
  39. flock_core-0.2.4/src/flock/core/logging/telemetry_exporter/file_span.py +0 -37
  40. flock_core-0.2.4/src/flock/core/logging/telemetry_exporter/sqllite_span.py +0 -68
  41. flock_core-0.2.4/src/flock/core/tools/basic_tools.py +0 -296
  42. {flock_core-0.2.4 → flock_core-0.2.6}/.devcontainer/devcontainer.json +0 -0
  43. {flock_core-0.2.4 → flock_core-0.2.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  44. {flock_core-0.2.4 → flock_core-0.2.6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  45. {flock_core-0.2.4 → flock_core-0.2.6}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  46. {flock_core-0.2.4 → flock_core-0.2.6}/.github/workflows/.gitkeep +0 -0
  47. {flock_core-0.2.4 → flock_core-0.2.6}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
  48. {flock_core-0.2.4 → flock_core-0.2.6}/.vscode/launch.json +0 -0
  49. {flock_core-0.2.4 → flock_core-0.2.6}/.vscode/settings.json +0 -0
  50. {flock_core-0.2.4 → flock_core-0.2.6}/.vscode/tasks.json +0 -0
  51. {flock_core-0.2.4 → flock_core-0.2.6}/LICENSE +0 -0
  52. {flock_core-0.2.4 → flock_core-0.2.6}/docs/agent_mechanics.md +0 -0
  53. {flock_core-0.2.4 → flock_core-0.2.6}/docs/api/flock.md +0 -0
  54. {flock_core-0.2.4 → flock_core-0.2.6}/docs/api/flock_agents.md +0 -0
  55. {flock_core-0.2.4 → flock_core-0.2.6}/docs/api.md +0 -0
  56. {flock_core-0.2.4 → flock_core-0.2.6}/docs/examples/01_introduction/01_simple_example.md +0 -0
  57. {flock_core-0.2.4 → flock_core-0.2.6}/docs/examples/01_introduction/02_typed_output.md +0 -0
  58. {flock_core-0.2.4 → flock_core-0.2.6}/docs/examples/01_introduction/03_tool_and_code_agent.md +0 -0
  59. {flock_core-0.2.4 → flock_core-0.2.6}/docs/examples/01_introduction/04_descriptions.md +0 -0
  60. {flock_core-0.2.4 → flock_core-0.2.6}/docs/examples/01_introduction/05_typed_output2.md +0 -0
  61. {flock_core-0.2.4 → flock_core-0.2.6}/docs/examples/01_introduction/06_simple_hand_off.md +0 -0
  62. {flock_core-0.2.4 → flock_core-0.2.6}/docs/examples/02_cook_book_wip/flock_without_llms.md +0 -0
  63. {flock_core-0.2.4 → flock_core-0.2.6}/docs/examples/02_cook_book_wip/project_manager.md +0 -0
  64. {flock_core-0.2.4 → flock_core-0.2.6}/docs/examples.md +0 -0
  65. {flock_core-0.2.4 → flock_core-0.2.6}/docs/generate_examples_docs.py +0 -0
  66. {flock_core-0.2.4 → flock_core-0.2.6}/docs/generate_nav.py +0 -0
  67. {flock_core-0.2.4 → flock_core-0.2.6}/docs/img/cli_outputs/out.png +0 -0
  68. {flock_core-0.2.4 → flock_core-0.2.6}/docs/img/examples/01_01.png +0 -0
  69. {flock_core-0.2.4 → flock_core-0.2.6}/docs/img/examples/01_02.png +0 -0
  70. {flock_core-0.2.4 → flock_core-0.2.6}/docs/img/examples/01_03.png +0 -0
  71. {flock_core-0.2.4 → flock_core-0.2.6}/docs/img/examples/01_04.png +0 -0
  72. {flock_core-0.2.4 → flock_core-0.2.6}/docs/img/examples/01_05.png +0 -0
  73. {flock_core-0.2.4 → flock_core-0.2.6}/docs/img/examples/01_06.png +0 -0
  74. {flock_core-0.2.4 → flock_core-0.2.6}/docs/img/flock.png +0 -0
  75. {flock_core-0.2.4 → flock_core-0.2.6}/docs/index.md +0 -0
  76. {flock_core-0.2.4 → flock_core-0.2.6}/docs/installation.md +0 -0
  77. {flock_core-0.2.4 → flock_core-0.2.6}/docs/overrides/extra.css +0 -0
  78. {flock_core-0.2.4 → flock_core-0.2.6}/docs/overrides/extra.js +0 -0
  79. {flock_core-0.2.4 → flock_core-0.2.6}/examples/01_introduction/01_simple_example.py +0 -0
  80. {flock_core-0.2.4 → flock_core-0.2.6}/examples/01_introduction/02_typed_output.py +0 -0
  81. {flock_core-0.2.4 → flock_core-0.2.6}/examples/01_introduction/04_descriptions.py +0 -0
  82. {flock_core-0.2.4 → flock_core-0.2.6}/examples/01_introduction/06_simple_hand_off.py +0 -0
  83. {flock_core-0.2.4 → flock_core-0.2.6}/examples/02_cook_book/flock_without_llms.py +0 -0
  84. {flock_core-0.2.4 → flock_core-0.2.6}/examples/02_cook_book/long_research_no_handoff.py +0 -0
  85. {flock_core-0.2.4 → flock_core-0.2.6}/examples/02_cook_book/project_manager.py +0 -0
  86. {flock_core-0.2.4 → flock_core-0.2.6}/examples/02_cook_book/self_improvement.py +0 -0
  87. {flock_core-0.2.4 → flock_core-0.2.6}/examples/03_misc_wip/formatting/01_pretty_print.py +0 -0
  88. {flock_core-0.2.4 → flock_core-0.2.6}/examples/03_misc_wip/formatting/02_r/303/255ch_table.py" +0 -0
  89. {flock_core-0.2.4 → flock_core-0.2.6}/examples/03_misc_wip/formatting/03_themed_table.py +0 -0
  90. {flock_core-0.2.4 → flock_core-0.2.6}/examples/03_misc_wip/logging_examples/01_basic_logging.py +0 -0
  91. {flock_core-0.2.4 → flock_core-0.2.6}/examples/03_misc_wip/logging_examples/02_temporal_logging.py +0 -0
  92. {flock_core-0.2.4 → flock_core-0.2.6}/examples/README.md +0 -0
  93. {flock_core-0.2.4 → flock_core-0.2.6}/examples/notebooks_wip/Untitled-1.ipynb +0 -0
  94. {flock_core-0.2.4 → flock_core-0.2.6}/examples/notebooks_wip/my_agent.json +0 -0
  95. {flock_core-0.2.4 → flock_core-0.2.6}/mkdocs.yml +0 -0
  96. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/__init__.py +0 -0
  97. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/context/context.py +0 -0
  98. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/context/context_manager.py +0 -0
  99. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/context/context_vars.py +0 -0
  100. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/execution/local_executor.py +0 -0
  101. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/execution/temporal_executor.py +0 -0
  102. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/logging/__init__.py +0 -0
  103. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/logging/formatters/base_formatter.py +0 -0
  104. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/logging/formatters/formatter_factory.py +0 -0
  105. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/logging/formatters/rich_formatters.py +0 -0
  106. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/logging/formatters/theme_builder.py +0 -0
  107. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/logging/formatters/themed_formatter.py +0 -0
  108. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/mixin/prompt_parser.py +0 -0
  109. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/registry/agent_registry.py +0 -0
  110. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/util/cli_helper.py +0 -0
  111. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/core/util/serializable.py +0 -0
  112. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/3024-day.toml +0 -0
  113. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/3024-night.toml +0 -0
  114. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/aardvark-blue.toml +0 -0
  115. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/abernathy.toml +0 -0
  116. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/adventure.toml +0 -0
  117. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/adventuretime.toml +0 -0
  118. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/afterglow.toml +0 -0
  119. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/alabaster.toml +0 -0
  120. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/alienblood.toml +0 -0
  121. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/andromeda.toml +0 -0
  122. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/apple-classic.toml +0 -0
  123. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/apple-system-colors.toml +0 -0
  124. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/arcoiris.toml +0 -0
  125. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/argonaut copy.toml +0 -0
  126. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/argonaut.toml +0 -0
  127. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/arthur.toml +0 -0
  128. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ateliersulphurpool.toml +0 -0
  129. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/atom.toml +0 -0
  130. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/atom_test.toml +0 -0
  131. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/atomonelight.toml +0 -0
  132. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/aurora.toml +0 -0
  133. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ayu copy.toml +0 -0
  134. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ayu-light.toml +0 -0
  135. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ayu-mirage.toml +0 -0
  136. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ayu.toml +0 -0
  137. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/banana-blueberry.toml +0 -0
  138. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/batman.toml +0 -0
  139. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/belafonte-day.toml +0 -0
  140. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/belafonte-night.toml +0 -0
  141. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/birdsofparadise.toml +0 -0
  142. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/blazer.toml +0 -0
  143. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/blue-matrix.toml +0 -0
  144. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/blueberrypie.toml +0 -0
  145. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/bluedolphin.toml +0 -0
  146. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/blulocodark.toml +0 -0
  147. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/blulocolight.toml +0 -0
  148. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/borland.toml +0 -0
  149. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/breeze.toml +0 -0
  150. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/bright-lights.toml +0 -0
  151. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/broadcast.toml +0 -0
  152. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/brogrammer.toml +0 -0
  153. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/builtin-dark.toml +0 -0
  154. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/builtin-light.toml +0 -0
  155. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/builtin-pastel-dark.toml +0 -0
  156. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/builtin-solarized-dark.toml +0 -0
  157. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/builtin-solarized-light.toml +0 -0
  158. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/builtin-tango-dark.toml +0 -0
  159. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/builtin-tango-light.toml +0 -0
  160. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/c64.toml +0 -0
  161. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/calamity.toml +0 -0
  162. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/catppuccin-frappe.toml +0 -0
  163. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/catppuccin-latte.toml +0 -0
  164. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/catppuccin-macchiato.toml +0 -0
  165. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/catppuccin-mocha.toml +0 -0
  166. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/cga.toml +0 -0
  167. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/chalk.toml +0 -0
  168. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/chalkboard.toml +0 -0
  169. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/challengerdeep.toml +0 -0
  170. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/chester.toml +0 -0
  171. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ciapre.toml +0 -0
  172. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/clrs.toml +0 -0
  173. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/cobalt-neon.toml +0 -0
  174. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/cobalt2.toml +0 -0
  175. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/coffee-theme.toml +0 -0
  176. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/crayonponyfish.toml +0 -0
  177. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/cutiepro.toml +0 -0
  178. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/cyberdyne.toml +0 -0
  179. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/cyberpunk.toml +0 -0
  180. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
  181. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/dark+.toml +0 -0
  182. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/dark-pastel.toml +0 -0
  183. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/darkermatrix.toml +0 -0
  184. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/darkmatrix.toml +0 -0
  185. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/darkside.toml +0 -0
  186. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/dayfox.toml +0 -0
  187. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/deep.toml +0 -0
  188. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/desert.toml +0 -0
  189. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/dimidium.toml +0 -0
  190. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/dimmedmonokai.toml +0 -0
  191. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/django.toml +0 -0
  192. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/djangorebornagain.toml +0 -0
  193. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/djangosmooth.toml +0 -0
  194. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/doom-peacock.toml +0 -0
  195. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/doomone.toml +0 -0
  196. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/dotgov.toml +0 -0
  197. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/dracula+.toml +0 -0
  198. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/dracula.toml +0 -0
  199. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/duckbones.toml +0 -0
  200. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/duotone-dark.toml +0 -0
  201. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/earthsong.toml +0 -0
  202. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/elemental.toml +0 -0
  203. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/elementary.toml +0 -0
  204. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/encom.toml +0 -0
  205. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/espresso-libre.toml +0 -0
  206. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/espresso.toml +0 -0
  207. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/everblush.toml +0 -0
  208. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/fahrenheit.toml +0 -0
  209. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/fairyfloss.toml +0 -0
  210. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/farmhouse-dark.toml +0 -0
  211. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/farmhouse-light.toml +0 -0
  212. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/fideloper.toml +0 -0
  213. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/firefly-traditional.toml +0 -0
  214. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/firefoxdev.toml +0 -0
  215. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/firewatch.toml +0 -0
  216. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/fishtank.toml +0 -0
  217. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/flat.toml +0 -0
  218. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/flatland.toml +0 -0
  219. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/flexoki-dark.toml +0 -0
  220. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/flexoki-light.toml +0 -0
  221. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/floraverse.toml +0 -0
  222. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/forestblue.toml +0 -0
  223. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/framer.toml +0 -0
  224. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/frontenddelight.toml +0 -0
  225. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/funforrest.toml +0 -0
  226. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/galaxy.toml +0 -0
  227. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/galizur.toml +0 -0
  228. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/github-dark.toml +0 -0
  229. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/github.toml +0 -0
  230. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/glacier.toml +0 -0
  231. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/grape.toml +0 -0
  232. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/grass.toml +0 -0
  233. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/grey-green.toml +0 -0
  234. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/gruber-darker.toml +0 -0
  235. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/gruvboxdark.toml +0 -0
  236. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/gruvboxdarkhard.toml +0 -0
  237. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/gruvboxlight.toml +0 -0
  238. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/guezwhoz.toml +0 -0
  239. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hacktober.toml +0 -0
  240. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hardcore.toml +0 -0
  241. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/harper.toml +0 -0
  242. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hax0r-blue.toml +0 -0
  243. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hax0r-gr33n.toml +0 -0
  244. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hax0r-r3d.toml +0 -0
  245. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/highway.toml +0 -0
  246. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hipster-green.toml +0 -0
  247. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hivacruz.toml +0 -0
  248. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/homebrew.toml +0 -0
  249. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hopscotch.256.toml +0 -0
  250. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hopscotch.toml +0 -0
  251. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hurtado.toml +0 -0
  252. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/hybrid.toml +0 -0
  253. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ic-green-ppl.toml +0 -0
  254. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ic-orange-ppl.toml +0 -0
  255. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iceberg-dark.toml +0 -0
  256. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iceberg-light.toml +0 -0
  257. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/idea.toml +0 -0
  258. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/idletoes.toml +0 -0
  259. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ir-black.toml +0 -0
  260. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iterm2-dark-background.toml +0 -0
  261. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iterm2-default.toml +0 -0
  262. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iterm2-light-background.toml +0 -0
  263. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
  264. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iterm2-smoooooth.toml +0 -0
  265. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
  266. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iterm2-solarized-light.toml +0 -0
  267. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iterm2-tango-dark.toml +0 -0
  268. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/iterm2-tango-light.toml +0 -0
  269. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/jackie-brown.toml +0 -0
  270. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/japanesque.toml +0 -0
  271. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/jellybeans.toml +0 -0
  272. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/jetbrains-darcula.toml +0 -0
  273. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/jubi.toml +0 -0
  274. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/kanagawabones.toml +0 -0
  275. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/kibble.toml +0 -0
  276. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/kolorit.toml +0 -0
  277. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/konsolas.toml +0 -0
  278. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/kurokula.toml +0 -0
  279. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/lab-fox.toml +0 -0
  280. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/laser.toml +0 -0
  281. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/later-this-evening.toml +0 -0
  282. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/lavandula.toml +0 -0
  283. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/liquidcarbon.toml +0 -0
  284. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/liquidcarbontransparent.toml +0 -0
  285. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
  286. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/lovelace.toml +0 -0
  287. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/man-page.toml +0 -0
  288. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/mariana.toml +0 -0
  289. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/material.toml +0 -0
  290. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/materialdark.toml +0 -0
  291. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/materialdarker.toml +0 -0
  292. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/materialdesigncolors.toml +0 -0
  293. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/materialocean.toml +0 -0
  294. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/mathias.toml +0 -0
  295. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/matrix.toml +0 -0
  296. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/medallion.toml +0 -0
  297. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/mellifluous.toml +0 -0
  298. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/midnight-in-mojave.toml +0 -0
  299. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/mirage.toml +0 -0
  300. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/misterioso.toml +0 -0
  301. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/molokai.toml +0 -0
  302. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/monalisa.toml +0 -0
  303. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/monokai-remastered.toml +0 -0
  304. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/monokai-soda.toml +0 -0
  305. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/monokai-vivid.toml +0 -0
  306. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/n0tch2k.toml +0 -0
  307. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/neobones-dark.toml +0 -0
  308. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/neobones-light.toml +0 -0
  309. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/neon.toml +0 -0
  310. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/neopolitan.toml +0 -0
  311. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/neutron.toml +0 -0
  312. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/night-owlish-light.toml +0 -0
  313. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/nightfox.toml +0 -0
  314. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/nightlion-v1.toml +0 -0
  315. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/nightlion-v2.toml +0 -0
  316. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/niji.toml +0 -0
  317. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/nocturnal-winter.toml +0 -0
  318. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/nord-light.toml +0 -0
  319. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/nord.toml +0 -0
  320. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/novel.toml +0 -0
  321. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/nvimdark.toml +0 -0
  322. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/nvimlight.toml +0 -0
  323. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/obsidian.toml +0 -0
  324. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ocean.toml +0 -0
  325. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/oceanic-next.toml +0 -0
  326. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/oceanicmaterial.toml +0 -0
  327. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ollie.toml +0 -0
  328. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/onehalfdark.toml +0 -0
  329. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/onehalflight.toml +0 -0
  330. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/operator-mono-dark.toml +0 -0
  331. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/overnight-slumber.toml +0 -0
  332. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/oxocarbon.toml +0 -0
  333. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/palenighthc.toml +0 -0
  334. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/pandora.toml +0 -0
  335. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/paraiso-dark.toml +0 -0
  336. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/paulmillr.toml +0 -0
  337. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/pencildark.toml +0 -0
  338. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/pencillight.toml +0 -0
  339. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/peppermint.toml +0 -0
  340. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/piatto-light.toml +0 -0
  341. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/pnevma.toml +0 -0
  342. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/popping-and-locking.toml +0 -0
  343. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/primary.toml +0 -0
  344. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/pro-light.toml +0 -0
  345. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/pro.toml +0 -0
  346. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/purple-rain.toml +0 -0
  347. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/purplepeter.toml +0 -0
  348. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/rapture.toml +0 -0
  349. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/raycast-dark.toml +0 -0
  350. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/raycast-light.toml +0 -0
  351. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/rebecca.toml +0 -0
  352. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/red-alert.toml +0 -0
  353. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/red-planet.toml +0 -0
  354. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/red-sands.toml +0 -0
  355. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/relaxed.toml +0 -0
  356. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/retro.toml +0 -0
  357. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/rippedcasts.toml +0 -0
  358. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/rose-pine-dawn.toml +0 -0
  359. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/rose-pine-moon.toml +0 -0
  360. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/rose-pine.toml +0 -0
  361. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/rouge-2.toml +0 -0
  362. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/royal.toml +0 -0
  363. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ryuuko.toml +0 -0
  364. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/sakura.toml +0 -0
  365. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/scarlet-protocol.toml +0 -0
  366. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/seafoam-pastel.toml +0 -0
  367. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/seashells.toml +0 -0
  368. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/seoulbones-dark.toml +0 -0
  369. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/seoulbones-light.toml +0 -0
  370. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/seti.toml +0 -0
  371. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/shades-of-purple.toml +0 -0
  372. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/shaman.toml +0 -0
  373. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/slate.toml +0 -0
  374. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/sleepyhollow.toml +0 -0
  375. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/smyck.toml +0 -0
  376. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/snazzy.toml +0 -0
  377. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/softserver.toml +0 -0
  378. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/solarized-darcula.toml +0 -0
  379. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/solarized-dark---patched.toml +0 -0
  380. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
  381. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/spacedust.toml +0 -0
  382. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
  383. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/spacegray-eighties.toml +0 -0
  384. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/spacegray.toml +0 -0
  385. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/spiderman.toml +0 -0
  386. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/spring.toml +0 -0
  387. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/square.toml +0 -0
  388. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/sublette.toml +0 -0
  389. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/subliminal.toml +0 -0
  390. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/sugarplum.toml +0 -0
  391. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/sundried.toml +0 -0
  392. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/symfonic.toml +0 -0
  393. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/synthwave-everything.toml +0 -0
  394. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/synthwave.toml +0 -0
  395. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/synthwavealpha.toml +0 -0
  396. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tango-adapted.toml +0 -0
  397. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tango-half-adapted.toml +0 -0
  398. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/teerb.toml +0 -0
  399. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/terafox.toml +0 -0
  400. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/terminal-basic.toml +0 -0
  401. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/thayer-bright.toml +0 -0
  402. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/the-hulk.toml +0 -0
  403. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tinacious-design-(dark).toml +0 -0
  404. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tinacious-design-(light).toml +0 -0
  405. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tokyonight-day.toml +0 -0
  406. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tokyonight-storm.toml +0 -0
  407. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tokyonight.toml +0 -0
  408. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tomorrow-night-blue.toml +0 -0
  409. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tomorrow-night-bright.toml +0 -0
  410. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tomorrow-night-burns.toml +0 -0
  411. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
  412. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tomorrow-night.toml +0 -0
  413. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/tomorrow.toml +0 -0
  414. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/toychest.toml +0 -0
  415. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/treehouse.toml +0 -0
  416. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/twilight.toml +0 -0
  417. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ubuntu.toml +0 -0
  418. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ultradark.toml +0 -0
  419. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/ultraviolent.toml +0 -0
  420. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/underthesea.toml +0 -0
  421. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/unikitty.toml +0 -0
  422. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/urple.toml +0 -0
  423. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/vaughn.toml +0 -0
  424. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/vesper.toml +0 -0
  425. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/vibrantink.toml +0 -0
  426. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/vimbones.toml +0 -0
  427. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/violet-dark.toml +0 -0
  428. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/violet-light.toml +0 -0
  429. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/warmneon.toml +0 -0
  430. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/wez.toml +0 -0
  431. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/whimsy.toml +0 -0
  432. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/wildcherry.toml +0 -0
  433. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/wilmersdorf.toml +0 -0
  434. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/wombat.toml +0 -0
  435. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/wryan.toml +0 -0
  436. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/xcodedark.toml +0 -0
  437. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/xcodedarkhc.toml +0 -0
  438. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/xcodelight.toml +0 -0
  439. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/xcodelighthc.toml +0 -0
  440. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/xcodewwdc.toml +0 -0
  441. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/zenbones-dark.toml +0 -0
  442. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/zenbones-light.toml +0 -0
  443. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/zenbones.toml +0 -0
  444. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/zenburn.toml +0 -0
  445. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/zenburned.toml +0 -0
  446. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/zenwritten-dark.toml +0 -0
  447. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/themes/zenwritten-light.toml +0 -0
  448. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/workflow/__init__.py +0 -0
  449. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/workflow/activities.py +0 -0
  450. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/workflow/agent_activities.py +0 -0
  451. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/workflow/temporal_setup.py +0 -0
  452. {flock_core-0.2.4 → flock_core-0.2.6}/src/flock/workflow/workflow.py +0 -0
  453. {flock_core-0.2.4 → flock_core-0.2.6}/tests/unittests/test_flock.py +0 -0
  454. {flock_core-0.2.4 → flock_core-0.2.6}/tests/unittests/test_flock_agent.py +0 -0
@@ -0,0 +1,28 @@
1
+ # Main Config
2
+
3
+ # Your LLM Service Keys
4
+ OPENAI_API_KEY=sk-proj-...
5
+
6
+ # Logging/Telemetry
7
+
8
+ LOCAL_DEBUG = true
9
+ LOG_LEVEL = Debug
10
+
11
+ OTEL_SERVICE_NAME = "flock"
12
+ OTEL_JAEGER_ENDPOINT = "http://localhost:14268/api/traces"
13
+ OTEL_JAEGER_TRANSPORT = "http"
14
+ OTEL_SQL_PATH = "sqlite:///otel.db"
15
+ OTEL_FILE_PATH = "telemetry.json"
16
+ OTEL_ENABLE_SQL = false
17
+ OTEL_ENABLE_FILE = true
18
+ OTEL_ENABLE_JAEGER = false
19
+
20
+
21
+ # Tools
22
+
23
+ GITHUB_PAT=github_pat...
24
+ GITHUB_REPO=
25
+ GITHUB_USERNAME=
26
+
27
+ TAVILY_API_KEY=tvly-...
28
+ SERPER_API_KEY=
@@ -25,6 +25,7 @@ share/python-wheels/
25
25
  .installed.cfg
26
26
  *.egg
27
27
  MANIFEST
28
+ logs/
28
29
 
29
30
 
30
31
  # PyInstaller
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flock-core
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: Declarative LLM Orchestration at Scale
5
5
  Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
6
6
  License-File: LICENSE
@@ -11,6 +11,7 @@ Requires-Python: >=3.10
11
11
  Requires-Dist: cloudpickle>=3.1.1
12
12
  Requires-Dist: devtools>=0.12.2
13
13
  Requires-Dist: dspy==2.5.42
14
+ Requires-Dist: duckduckgo-search>=7.3.2
14
15
  Requires-Dist: httpx>=0.28.1
15
16
  Requires-Dist: loguru>=0.7.3
16
17
  Requires-Dist: msgpack>=1.1.0
@@ -22,6 +23,7 @@ Requires-Dist: opentelemetry-instrumentation-logging>=0.51b0
22
23
  Requires-Dist: opentelemetry-sdk>=1.30.0
23
24
  Requires-Dist: pydantic>=2.10.5
24
25
  Requires-Dist: python-box>=7.3.2
26
+ Requires-Dist: python-decouple>=3.8
25
27
  Requires-Dist: rich>=13.9.4
26
28
  Requires-Dist: temporalio>=1.9.0
27
29
  Requires-Dist: toml>=0.10.2
@@ -36,7 +38,9 @@ Description-Content-Type: text/markdown
36
38
 
37
39
  <p align="center">
38
40
  <img src="docs/img/flock.png" width="600"><br>
39
- <img alt="Dynamic TOML Badge" src="https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Fwhiteducksoftware%2Fflock%2Frefs%2Fheads%2Fbadges%2Fpyproject.toml%3Ftoken%3DGHSAT0AAAAAACVFDVNBU3S6HLJSC36P3YNQZ5LNPQQ&query=%24.project.version&style=for-the-badge&logo=pypi&logoSize=large&label=pip%20version&link=https%3A%2F%2Fpypi.org%2Fproject%2Fflock-core%2F">
41
+ <img alt="Dynamic TOML Badge" src="https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Fwhiteducksoftware%2Fflock%2Frefs%2Fheads%2Fmaster%2Fpyproject.toml&query=%24.project.version&style=for-the-badge&logo=pypi&label=pip%20version">
42
+ <img alt="X (formerly Twitter) Follow" src="https://img.shields.io/twitter/follow/whiteduck_gmbh?style=for-the-badge&logo=X">
43
+
40
44
 
41
45
 
42
46
 
@@ -1,6 +1,8 @@
1
1
  <p align="center">
2
2
  <img src="docs/img/flock.png" width="600"><br>
3
- <img alt="Dynamic TOML Badge" src="https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Fwhiteducksoftware%2Fflock%2Frefs%2Fheads%2Fbadges%2Fpyproject.toml%3Ftoken%3DGHSAT0AAAAAACVFDVNBU3S6HLJSC36P3YNQZ5LNPQQ&query=%24.project.version&style=for-the-badge&logo=pypi&logoSize=large&label=pip%20version&link=https%3A%2F%2Fpypi.org%2Fproject%2Fflock-core%2F">
3
+ <img alt="Dynamic TOML Badge" src="https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Fwhiteducksoftware%2Fflock%2Frefs%2Fheads%2Fmaster%2Fpyproject.toml&query=%24.project.version&style=for-the-badge&logo=pypi&label=pip%20version">
4
+ <img alt="X (formerly Twitter) Follow" src="https://img.shields.io/twitter/follow/whiteduck_gmbh?style=for-the-badge&logo=X">
5
+
4
6
 
5
7
 
6
8
 
@@ -0,0 +1,24 @@
1
+ <mxfile host="65bd71144e">
2
+ <diagram id="iQ7YuHOuaVDECIdskFDT" name="Page-1">
3
+ <mxGraphModel grid="0" page="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" pageScale="1" pageWidth="850" pageHeight="1100" background="light-dark(#FFFFFF, #d8cfb1)" math="0" shadow="1">
4
+ <root>
5
+ <mxCell id="0"/>
6
+ <mxCell id="1" parent="0"/>
7
+ <mxCell id="2" value="sequenceDiagram&#xa; participant Client&#xa; participant Flock&#xa; participant FlockAgent&#xa; participant Registry&#xa; participant Context&#xa; participant LLM&#xa; &#xa; Client-&gt;&gt;Flock: run_async(agent, input)&#xa; Flock-&gt;&gt;Registry: get_agent(name)&#xa; Registry--&gt;&gt;Flock: agent instance&#xa; &#xa; Flock-&gt;&gt;Context: initialize_context(agent, input)&#xa; &#xa; Flock-&gt;&gt;FlockAgent: run(inputs)&#xa; activate FlockAgent&#xa; &#xa; FlockAgent-&gt;&gt;FlockAgent: initialize(inputs)&#xa; FlockAgent-&gt;&gt;FlockAgent: _evaluate(inputs)&#xa; &#xa; FlockAgent-&gt;&gt;LLM: process with tools/prompts&#xa; LLM--&gt;&gt;FlockAgent: response&#xa; &#xa; FlockAgent-&gt;&gt;FlockAgent: terminate(inputs, result)&#xa; FlockAgent--&gt;&gt;Flock: result&#xa; deactivate FlockAgent&#xa; &#xa; Flock--&gt;&gt;Client: final result" style="shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;" vertex="1" parent="1">
8
+ <mxGeometry x="271" y="360" width="300" height="300" as="geometry"/>
9
+ </mxCell>
10
+ </root>
11
+ </mxGraphModel>
12
+ </diagram>
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">
15
+ <root>
16
+ <mxCell id="0"/>
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">
19
+ <mxGeometry x="274" y="325" width="300" height="300" as="geometry"/>
20
+ </mxCell>
21
+ </root>
22
+ </mxGraphModel>
23
+ </diagram>
24
+ </mxfile>
Binary file
@@ -52,7 +52,7 @@ async def main():
52
52
  name="my_celebrity_age_agent",
53
53
  input="a_person",
54
54
  output="persons_age_in_days",
55
- tools=[basic_tools.web_search_tavily, basic_tools.code_eval],
55
+ tools=[basic_tools.web_search_duckduckgo, basic_tools.code_eval],
56
56
  use_cache=True,
57
57
  )
58
58
  flock.add_agent(agent)
@@ -39,6 +39,8 @@ class RandomPerson:
39
39
  favorite_movie: str
40
40
  short_bio: str
41
41
 
42
+ RandomUserList = list[RandomPerson]
43
+
42
44
  async def main():
43
45
 
44
46
  flock = Flock(local_debug=True)
@@ -53,7 +55,7 @@ async def main():
53
55
  people_agent = FlockAgent(
54
56
  name="people_agent",
55
57
  input="amount_of_people",
56
- output="random_user_list: list[RandomPerson]",
58
+ output="random_user_list: RandomUserList",
57
59
  use_cache=True,
58
60
  )
59
61
  flock.add_agent(people_agent)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "flock-core"
3
- version = "0.2.4"
3
+ version = "0.2.6"
4
4
  description = "Declarative LLM Orchestration at Scale"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -16,6 +16,7 @@ dependencies = [
16
16
  "cloudpickle>=3.1.1",
17
17
  "devtools>=0.12.2",
18
18
  "dspy==2.5.42",
19
+ "duckduckgo-search>=7.3.2",
19
20
  "httpx>=0.28.1",
20
21
  "loguru>=0.7.3",
21
22
  "msgpack>=1.1.0",
@@ -27,6 +28,7 @@ dependencies = [
27
28
  "opentelemetry-sdk>=1.30.0",
28
29
  "pydantic>=2.10.5",
29
30
  "python-box>=7.3.2",
31
+ "python-decouple>=3.8",
30
32
  "rich>=13.9.4",
31
33
  "temporalio>=1.9.0",
32
34
  "toml>=0.10.2",
@@ -65,6 +67,9 @@ build-backend = "hatchling.build"
65
67
  [tool.hatch.build.targets.wheel]
66
68
  packages = ["src/flock"]
67
69
 
70
+ [project.scripts]
71
+ flock = "flock:main"
72
+
68
73
 
69
74
  [tool.ruff]
70
75
  cache-dir = ".cache/ruff"
@@ -6,16 +6,32 @@ devtools==0.12.2
6
6
  # via flock-core (./pyproject.toml)
7
7
  dspy==2.5.42
8
8
  # via flock-core (./pyproject.toml)
9
+ duckduckgo-search==7.3.2
10
+ # via flock-core (./pyproject.toml)
9
11
  httpx==0.28.1
10
12
  # via flock-core (./pyproject.toml)
11
13
  loguru==0.7.3
12
14
  # via flock-core (./pyproject.toml)
13
15
  msgpack==1.1.0
14
16
  # via flock-core (./pyproject.toml)
17
+ opentelemetry-api==1.30.0
18
+ # via flock-core (./pyproject.toml)
19
+ opentelemetry-exporter-jaeger==1.21.0
20
+ # via flock-core (./pyproject.toml)
21
+ opentelemetry-exporter-jaeger-proto-grpc==1.21.0
22
+ # via flock-core (./pyproject.toml)
23
+ opentelemetry-exporter-otlp==1.30.0
24
+ # via flock-core (./pyproject.toml)
25
+ opentelemetry-instrumentation-logging==0.51b0
26
+ # via flock-core (./pyproject.toml)
27
+ opentelemetry-sdk==1.30.0
28
+ # via flock-core (./pyproject.toml)
15
29
  pydantic==2.10.6
16
30
  # via flock-core (./pyproject.toml)
17
31
  python-box==7.3.2
18
32
  # via flock-core (./pyproject.toml)
33
+ python-decouple==3.8
34
+ # via flock-core (./pyproject.toml)
19
35
  rich==13.9.4
20
36
  # via flock-core (./pyproject.toml)
21
37
  temporalio==1.9.0
@@ -1,5 +1,8 @@
1
1
  """Flock package initialization."""
2
2
 
3
+ from opentelemetry import trace
4
+
3
5
  from flock.config import TELEMETRY
4
6
 
5
7
  tracer = TELEMETRY.setup_tracing()
8
+ tracer = trace.get_tracer(__name__)
@@ -0,0 +1,47 @@
1
+ # flock/config.py
2
+ from decouple import config
3
+
4
+ from flock.core.logging.telemetry import TelemetryConfig
5
+
6
+ # -- Connection and External Service Configurations --
7
+ TEMPORAL_SERVER_URL = config("TEMPORAL_SERVER_URL", "localhost:7233")
8
+ DEFAULT_MODEL = config("DEFAULT_MODEL", "openai/gpt-4o")
9
+
10
+
11
+ # API Keys and related settings
12
+ TAVILY_API_KEY = config("TAVILY_API_KEY", "")
13
+ GITHUB_PAT = config("GITHUB_PAT", "")
14
+ GITHUB_REPO = config("GITHUB_REPO", "")
15
+ GITHUB_USERNAME = config("GITHUB_USERNAME", "")
16
+
17
+ # -- Debugging and Logging Configurations --
18
+ LOCAL_DEBUG = config("LOCAL_DEBUG", True)
19
+ LOG_LEVEL = config("LOG_LEVEL", "DEBUG")
20
+ LOGGING_DIR = config("LOGGING_DIR", "logs")
21
+
22
+ OTEL_SERVICE_NAME = config("OTL_SERVICE_NAME", "otel-flock")
23
+ JAEGER_ENDPOINT = config(
24
+ "JAEGER_ENDPOINT", "http://localhost:14268/api/traces"
25
+ ) # Default gRPC endpoint for Jaeger
26
+ JAEGER_TRANSPORT = config(
27
+ "JAEGER_TRANSPORT", "http"
28
+ ).lower() # Options: "grpc" or "http"
29
+ OTEL_SQL_DATABASE_NAME = config("OTEL_SQL_DATABASE", "flock_events.db")
30
+ OTEL_FILE_NAME = config("OTEL_FILE_NAME", "flock_events.jsonl")
31
+ OTEL_ENABLE_SQL: bool = config("OTEL_ENABLE_SQL", True) == "True"
32
+ OTEL_ENABLE_FILE: bool = config("OTEL_ENABLE_FILE", True) == "True"
33
+ OTEL_ENABLE_JAEGER: bool = config("OTEL_ENABLE_JAEGER", True) == "True"
34
+
35
+
36
+ TELEMETRY = TelemetryConfig(
37
+ OTEL_SERVICE_NAME,
38
+ JAEGER_ENDPOINT,
39
+ JAEGER_TRANSPORT,
40
+ LOGGING_DIR,
41
+ OTEL_FILE_NAME,
42
+ OTEL_SQL_DATABASE_NAME,
43
+ OTEL_ENABLE_JAEGER,
44
+ OTEL_ENABLE_FILE,
45
+ OTEL_ENABLE_SQL,
46
+ )
47
+ TELEMETRY.setup_tracing()
@@ -5,7 +5,7 @@ import uuid
5
5
  from typing import TypeVar
6
6
 
7
7
  from opentelemetry import trace
8
- from rich.prompt import Prompt
8
+ from opentelemetry.baggage import get_baggage, set_baggage
9
9
 
10
10
  from flock.core.context.context import FlockContext
11
11
  from flock.core.context.context_manager import initialize_context
@@ -63,6 +63,11 @@ class Flock:
63
63
  enable_logging=enable_logging,
64
64
  )
65
65
  logger.enable_logging = enable_logging
66
+ session_id = get_baggage("session_id")
67
+ if not session_id:
68
+ session_id = str(uuid.uuid4())
69
+ set_baggage("session_id", session_id)
70
+ span.set_attribute("session_id", get_baggage("session_id"))
66
71
 
67
72
  display_banner()
68
73
 
@@ -193,12 +198,16 @@ class Flock:
193
198
  run_id = f"{start_agent.name}_{uuid.uuid4().hex[:4]}"
194
199
  logger.debug("Generated run ID", run_id=run_id)
195
200
 
201
+ set_baggage("run_id", run_id)
202
+
196
203
  # TODO - Add a check for required input keys
197
204
  input_keys = top_level_to_keys(start_agent.input)
198
205
  for key in input_keys:
199
206
  if key.startswith("flock."):
200
207
  key = key[6:] # Remove the "flock." prefix
201
208
  if key not in input:
209
+ from rich.prompt import Prompt
210
+
202
211
  input[key] = Prompt.ask(
203
212
  f"Please enter {key} for {start_agent.name}"
204
213
  )
@@ -151,7 +151,7 @@ class FlockAgent(BaseModel, ABC, PromptParserMixin, DSPyIntegrationMixin):
151
151
  ),
152
152
  )
153
153
 
154
- tools: list[Callable[..., Any]] | None = Field(
154
+ tools: list[Callable[..., Any] | Any] | None = Field(
155
155
  default=None,
156
156
  description="An optional list of callable tools that the agent can leverage during execution.",
157
157
  )
@@ -1,4 +1,3 @@
1
- import json
2
1
  from typing import Any
3
2
 
4
3
  from flock.core.logging.formatters.base_formatter import BaseFormatter
@@ -10,12 +9,14 @@ class PrettyPrintFormatter(BaseFormatter):
10
9
  ) -> None:
11
10
  """Print an agent's result using Rich formatting."""
12
11
  from rich.console import Console
13
- from rich.json import JSON
14
12
 
15
13
  console = Console()
16
14
 
17
15
  console.print(agent_name)
18
- console.print(JSON(json.dumps(result)))
16
+ console.print(str(result), markup=True)
17
+ # try:
18
+ # console.print(JSON(json.dumps(result)))
19
+ # except Exception:
19
20
 
20
21
  def display_data(self, data: dict[str, Any], **kwargs) -> None:
21
22
  """Print an agent's result using Rich formatting."""
@@ -1,6 +1,5 @@
1
1
  # File: src/flock/core/logging.py
2
- """A unified logging module for Flock that works both in local/worker contexts
3
- and inside Temporal workflows.
2
+ """A unified logging module for Flock that works both in local/worker contexts and inside Temporal workflows.
4
3
 
5
4
  Key points:
6
5
  - We always have Temporal imported, so we cannot decide based on import.
@@ -24,6 +23,7 @@ with workflow.unsafe.imports_passed_through():
24
23
 
25
24
  def in_workflow_context() -> bool:
26
25
  """Returns True if this code is running inside a Temporal workflow context.
26
+
27
27
  It does this by attempting to call workflow.info() and returning True
28
28
  if successful. Otherwise, it returns False.
29
29
  """
@@ -31,10 +31,7 @@ def in_workflow_context() -> bool:
31
31
  workflow.logger.debug("Checking if in workflow context...")
32
32
  # loguru_logger.debug("Checking if in workflow context...")
33
33
  # This call will succeed only if we're in a workflow context.
34
- if hasattr(workflow.info(), "is_replaying"):
35
- return True
36
- else:
37
- return False
34
+ return bool(hasattr(workflow.info(), "is_replaying"))
38
35
  except Exception:
39
36
  return False
40
37
 
@@ -67,22 +64,24 @@ loguru_logger.add(
67
64
 
68
65
  # Define a dummy logger that does nothing
69
66
  class DummyLogger:
70
- def debug(self, *args, **kwargs):
67
+ """A dummy logger that does nothing when called."""
68
+
69
+ def debug(self, *args, **kwargs): # noqa: D102
71
70
  pass
72
71
 
73
- def info(self, *args, **kwargs):
72
+ def info(self, *args, **kwargs): # noqa: D102
74
73
  pass
75
74
 
76
- def warning(self, *args, **kwargs):
75
+ def warning(self, *args, **kwargs): # noqa: D102
77
76
  pass
78
77
 
79
- def error(self, *args, **kwargs):
78
+ def error(self, *args, **kwargs): # noqa: D102
80
79
  pass
81
80
 
82
- def exception(self, *args, **kwargs):
81
+ def exception(self, *args, **kwargs): # noqa: D102
83
82
  pass
84
83
 
85
- def success(self, *args, **kwargs):
84
+ def success(self, *args, **kwargs): # noqa: D102
86
85
  pass
87
86
 
88
87
 
@@ -92,7 +91,7 @@ dummy_logger = DummyLogger()
92
91
  class FlockLogger:
93
92
  """A unified logger that selects the appropriate logging mechanism based on context.
94
93
 
95
- - If running in a workflow context, it uses Temporal's builtin logger.
94
+ - If running in a workflow context, it uses Temporal's built-in logger.
96
95
  Additionally, if workflow.info().is_replaying is True, it suppresses debug/info/warning logs.
97
96
  - Otherwise, it uses Loguru.
98
97
  """
@@ -114,22 +113,22 @@ class FlockLogger:
114
113
  trace_id=get_current_trace_id(),
115
114
  )
116
115
 
117
- def debug(self, message: str, *args, **kwargs):
116
+ def debug(self, message: str, *args, **kwargs): # noqa: D102
118
117
  self._get_logger().debug(message, *args, **kwargs)
119
118
 
120
- def info(self, message: str, *args, **kwargs):
119
+ def info(self, message: str, *args, **kwargs): # noqa: D102
121
120
  self._get_logger().info(message, *args, **kwargs)
122
121
 
123
- def warning(self, message: str, *args, **kwargs):
122
+ def warning(self, message: str, *args, **kwargs): # noqa: D102
124
123
  self._get_logger().warning(message, *args, **kwargs)
125
124
 
126
- def error(self, message: str, *args, **kwargs):
125
+ def error(self, message: str, *args, **kwargs): # noqa: D102
127
126
  self._get_logger().error(message, *args, **kwargs)
128
127
 
129
- def exception(self, message: str, *args, **kwargs):
128
+ def exception(self, message: str, *args, **kwargs): # noqa: D102
130
129
  self._get_logger().exception(message, *args, **kwargs)
131
130
 
132
- def success(self, message: str, *args, **kwargs):
131
+ def success(self, message: str, *args, **kwargs): # noqa: D102
133
132
  self._get_logger().success(message, *args, **kwargs)
134
133
 
135
134
 
@@ -0,0 +1,31 @@
1
+ from opentelemetry.baggage import get_baggage
2
+ from opentelemetry.sdk.trace import SpanProcessor
3
+
4
+
5
+ class BaggageAttributeSpanProcessor(SpanProcessor):
6
+ """A custom span processor that, on span start, inspects the baggage items from the parent context
7
+ and attaches specified baggage keys as attributes on the span.
8
+ """
9
+
10
+ def __init__(self, baggage_keys=None):
11
+ # baggage_keys: list of baggage keys to attach to spans (e.g. ["session_id", "run_id"])
12
+ if baggage_keys is None:
13
+ baggage_keys = []
14
+ self.baggage_keys = baggage_keys
15
+
16
+ def on_start(self, span, parent_context):
17
+ # For each desired key, look up its value in the parent context baggage and set it as an attribute.
18
+ for key in self.baggage_keys:
19
+ value = get_baggage(key, context=parent_context)
20
+ if value is not None:
21
+ span.set_attribute(key, value)
22
+
23
+ def on_end(self, span):
24
+ # No action required on span end for this processor.
25
+ pass
26
+
27
+ def shutdown(self):
28
+ pass
29
+
30
+ def force_flush(self, timeout_millis: int = 30000):
31
+ pass
@@ -0,0 +1,137 @@
1
+ """This module sets up OpenTelemetry tracing for a service."""
2
+
3
+ import sys
4
+
5
+ from opentelemetry import trace
6
+ from opentelemetry.sdk.resources import Resource
7
+ from opentelemetry.sdk.trace import TracerProvider
8
+ from opentelemetry.sdk.trace.export import SimpleSpanProcessor
9
+ from temporalio import workflow
10
+
11
+ from flock.core.logging.span_middleware.baggage_span_processor import (
12
+ BaggageAttributeSpanProcessor,
13
+ )
14
+
15
+ with workflow.unsafe.imports_passed_through():
16
+ from flock.core.logging.telemetry_exporter.file_exporter import (
17
+ FileSpanExporter,
18
+ )
19
+ from flock.core.logging.telemetry_exporter.sqlite_exporter import (
20
+ SqliteTelemetryExporter,
21
+ )
22
+
23
+
24
+ class TelemetryConfig:
25
+ """This configuration class sets up OpenTelemetry tracing.
26
+
27
+ - Export spans to a Jaeger collector using gRPC.
28
+ - Write spans to a file.
29
+ - Save spans in a SQLite database.
30
+
31
+ Only exporters with a non-None configuration will be activated.
32
+ """
33
+
34
+ def __init__(
35
+ self,
36
+ service_name: str,
37
+ jaeger_endpoint: str | None = None,
38
+ jaeger_transport: str = "grpc",
39
+ local_logging_dir: str | None = None,
40
+ file_export_name: str | None = None,
41
+ sqlite_db_name: str | None = None,
42
+ enable_jaeger: bool = True,
43
+ enable_file: bool = True,
44
+ enable_sql: bool = True,
45
+ batch_processor_options: dict | None = None,
46
+ ):
47
+ """:param service_name: Name of your service.
48
+
49
+ :param jaeger_endpoint: The Jaeger collector gRPC endpoint (e.g., "localhost:14250").
50
+ :param file_export_path: If provided, spans will be written to this file.
51
+ :param sqlite_db_path: If provided, spans will be stored in this SQLite DB.
52
+ :param batch_processor_options: Dict of options for BatchSpanProcessor (e.g., {"max_export_batch_size": 10}).
53
+ """
54
+ self.service_name = service_name
55
+ self.jaeger_endpoint = jaeger_endpoint
56
+ self.jaeger_transport = jaeger_transport
57
+ self.file_export_name = file_export_name
58
+ self.sqlite_db_name = sqlite_db_name
59
+ self.local_logging_dir = local_logging_dir
60
+ self.batch_processor_options = batch_processor_options or {}
61
+ self.enable_jaeger = enable_jaeger
62
+ self.enable_file = enable_file
63
+ self.enable_sql = enable_sql
64
+
65
+ def setup_tracing(self):
66
+ """Set up OpenTelemetry tracing with the specified exporters."""
67
+ # Create a Resource with the service name.
68
+ resource = Resource(attributes={"service.name": self.service_name})
69
+ provider = TracerProvider(resource=resource)
70
+ trace.set_tracer_provider(provider)
71
+
72
+ # List to collect our span processors.
73
+ span_processors = []
74
+
75
+ # If a Jaeger endpoint is specified, add the Jaeger exporter.
76
+ if self.jaeger_endpoint and self.enable_jaeger:
77
+ if self.jaeger_transport == "grpc":
78
+ from opentelemetry.exporter.jaeger.proto.grpc import (
79
+ JaegerExporter,
80
+ )
81
+
82
+ jaeger_exporter = JaegerExporter(
83
+ endpoint=self.jaeger_endpoint,
84
+ insecure=True,
85
+ )
86
+ elif self.jaeger_transport == "http":
87
+ from opentelemetry.exporter.jaeger.thrift import JaegerExporter
88
+
89
+ jaeger_exporter = JaegerExporter(
90
+ collector_endpoint=self.jaeger_endpoint,
91
+ )
92
+ else:
93
+ raise ValueError(
94
+ "Invalid JAEGER_TRANSPORT specified. Use 'grpc' or 'http'."
95
+ )
96
+
97
+ span_processors.append(SimpleSpanProcessor(jaeger_exporter))
98
+
99
+ # If a file path is provided, add the custom file exporter.
100
+ if self.file_export_name and self.enable_file:
101
+ file_exporter = FileSpanExporter(
102
+ self.local_logging_dir, self.file_export_name
103
+ )
104
+ span_processors.append(SimpleSpanProcessor(file_exporter))
105
+
106
+ # If a SQLite database path is provided, ensure the DB exists and add the SQLite exporter.
107
+ if self.sqlite_db_name and self.enable_sql:
108
+ sqlite_exporter = SqliteTelemetryExporter(
109
+ self.local_logging_dir, self.sqlite_db_name
110
+ )
111
+ span_processors.append(SimpleSpanProcessor(sqlite_exporter))
112
+
113
+ # Register all span processors with the provider.
114
+ for processor in span_processors:
115
+ provider.add_span_processor(processor)
116
+
117
+ provider.add_span_processor(
118
+ BaggageAttributeSpanProcessor(baggage_keys=["session_id", "run_id"])
119
+ )
120
+
121
+ sys.excepthook = self.log_exception_to_otel
122
+
123
+ def log_exception_to_otel(self, exc_type, exc_value, exc_traceback):
124
+ """Log unhandled exceptions to OpenTelemetry."""
125
+ if issubclass(exc_type, KeyboardInterrupt):
126
+ # Allow normal handling of KeyboardInterrupt
127
+ sys.__excepthook__(exc_type, exc_value, exc_traceback)
128
+ return
129
+
130
+ # Use OpenTelemetry to record the exception
131
+ with self.global_tracer.start_as_current_span(
132
+ "UnhandledException"
133
+ ) as span:
134
+ span.record_exception(exc_value)
135
+ span.set_status(
136
+ trace.Status(trace.StatusCode.ERROR, str(exc_value))
137
+ )
@@ -0,0 +1,38 @@
1
+ """Base class for custom OpenTelemetry exporters."""
2
+
3
+ from abc import ABC, abstractmethod
4
+
5
+ from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
6
+
7
+
8
+ class TelemetryExporter(SpanExporter, ABC):
9
+ """Base class for custom OpenTelemetry exporters."""
10
+
11
+ def __init__(self):
12
+ """Base class for custom OpenTelemetry exporters."""
13
+ super().__init__()
14
+
15
+ def _export(self, spans):
16
+ """Forward spans to the Jaeger exporter."""
17
+ try:
18
+ result = self.export(spans)
19
+ if result is None:
20
+ return SpanExportResult.SUCCESS
21
+ return result
22
+ except Exception:
23
+ return SpanExportResult.FAILURE
24
+ finally:
25
+ self.shutdown()
26
+
27
+ @abstractmethod
28
+ def export(self, spans) -> SpanExportResult | None:
29
+ """Export spans to the configured backend.
30
+
31
+ To be implemented by subclasses.
32
+ """
33
+ raise NotImplementedError("Subclasses must implement the export method")
34
+
35
+ @abstractmethod
36
+ def shutdown(self):
37
+ """Cleanup resources, if any. Optional for subclasses."""
38
+ pass