flock-core 0.5.9__tar.gz → 0.5.10__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 (793) hide show
  1. {flock_core-0.5.9 → flock_core-0.5.10}/AGENTS.md +285 -2
  2. {flock_core-0.5.9 → flock_core-0.5.10}/PKG-INFO +132 -2
  3. {flock_core-0.5.9 → flock_core-0.5.10}/README.md +131 -1
  4. flock_core-0.5.10/docs/guides/context-providers.md +1515 -0
  5. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/visibility.md +95 -2
  6. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/002-ui-optimization-migration/PLAN.md +1 -1
  7. flock_core-0.5.10/docs/specs/007-context-provider-security-fix/PLAN.md +470 -0
  8. flock_core-0.5.10/docs/specs/007-context-provider-security-fix/PRD.md +146 -0
  9. {flock_core-0.5.9 → flock_core-0.5.10}/examples/00-patterns/02-multi_publish.py +10 -3
  10. {flock_core-0.5.9 → flock_core-0.5.10}/examples/00-patterns/03-multi-artifact-multi-publish.py +12 -3
  11. {flock_core-0.5.9 → flock_core-0.5.10}/examples/00-patterns/04-fan-out.py +3 -2
  12. {flock_core-0.5.9 → flock_core-0.5.10}/examples/00-patterns/05-multi-fan-out.py +10 -3
  13. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/01_declarative_pizza.py +3 -1
  14. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/04_input_and_output.py +3 -1
  15. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/06_mcp_roots.py +14 -14
  16. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/09_debate_club.py +2 -1
  17. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/10_news_agency.py +2 -2
  18. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/11_tracing_detective.py +4 -1
  19. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/01_declarative_pizza.py +2 -1
  20. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/04_input_and_output.py +3 -1
  21. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/06_mcp_roots.py +11 -13
  22. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/09_debate_club.py +2 -1
  23. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/13_medical_diagnostics_joinspec.py +15 -6
  24. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/16_news_batching.py +2 -2
  25. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_03_web_detective.py +10 -2
  26. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_05_tracing_detective.py +3 -1
  27. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_07_news_agency.py +4 -4
  28. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_08_the_matchmaker.py +3 -1
  29. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_11_performance_monitor.py +7 -5
  30. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_12_confidence_booster.py +26 -9
  31. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_13_regex_matcher.py +12 -6
  32. {flock_core-0.5.9 → flock_core-0.5.10}/examples/04-misc/01_persistent_pizza.py +9 -3
  33. {flock_core-0.5.9 → flock_core-0.5.10}/examples/04-misc/04_persistent_pizza_dashboard.py +3 -1
  34. {flock_core-0.5.9 → flock_core-0.5.10}/examples/05-engines/emoji_mood_engine.py +12 -4
  35. {flock_core-0.5.9 → flock_core-0.5.10}/examples/05-engines/potion_batch_engine.py +40 -25
  36. {flock_core-0.5.9 → flock_core-0.5.10}/examples/06-agent-components/cheer_meter_component.py +3 -1
  37. {flock_core-0.5.9 → flock_core-0.5.10}/examples/06-agent-components/plot_twist_component.py +3 -1
  38. {flock_core-0.5.9 → flock_core-0.5.10}/examples/07-orchestrator-components/kitchen_monitor_component.py +13 -15
  39. {flock_core-0.5.9 → flock_core-0.5.10}/examples/07-orchestrator-components/quest_tracker_component.py +15 -3
  40. flock_core-0.5.10/examples/08-context-provider/01_basic_visibility.py +144 -0
  41. flock_core-0.5.10/examples/08-context-provider/02_global_provider.py +192 -0
  42. flock_core-0.5.10/examples/08-context-provider/02_simple_global_provider.py +49 -0
  43. flock_core-0.5.10/examples/08-context-provider/03_per_agent_provider.py +233 -0
  44. flock_core-0.5.10/examples/08-context-provider/04_custom_filtering.py +247 -0
  45. flock_core-0.5.10/examples/08-context-provider/05_password_redactor.py +435 -0
  46. flock_core-0.5.10/examples/08-context-provider/README.md +502 -0
  47. {flock_core-0.5.9 → flock_core-0.5.10}/pyproject.toml +42 -3
  48. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/agent.py +149 -62
  49. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/api/themes.py +6 -2
  50. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/artifact_collector.py +6 -3
  51. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/batch_accumulator.py +3 -1
  52. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/cli.py +3 -1
  53. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/components.py +45 -56
  54. flock_core-0.5.10/src/flock/context_provider.py +531 -0
  55. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/correlation_engine.py +8 -4
  56. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/collector.py +48 -29
  57. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/events.py +10 -4
  58. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/launcher.py +3 -1
  59. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/models/graph.py +9 -3
  60. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/service.py +143 -72
  61. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/websocket.py +17 -4
  62. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/engines/dspy_engine.py +174 -98
  63. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/engines/examples/simple_batch_engine.py +9 -3
  64. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/examples.py +6 -2
  65. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/services/indexeddb.test.ts +4 -4
  66. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/services/indexeddb.ts +1 -1
  67. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/helper/cli_helper.py +14 -1
  68. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/auto_trace.py +6 -1
  69. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/formatters/enum_builder.py +3 -1
  70. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/formatters/theme_builder.py +32 -17
  71. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/formatters/themed_formatter.py +38 -22
  72. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/logging.py +21 -7
  73. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/telemetry.py +9 -3
  74. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/telemetry_exporter/duckdb_exporter.py +27 -25
  75. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/trace_and_logged.py +14 -5
  76. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/__init__.py +3 -6
  77. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/client.py +49 -19
  78. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/config.py +12 -6
  79. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/manager.py +6 -2
  80. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/servers/sse/flock_sse_server.py +9 -3
  81. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/servers/streamable_http/flock_streamable_http_server.py +6 -2
  82. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/tool.py +18 -6
  83. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/types/handlers.py +3 -1
  84. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/types/types.py +9 -3
  85. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/orchestrator.py +204 -50
  86. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/orchestrator_component.py +15 -5
  87. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/patches/dspy_streaming_patch.py +12 -4
  88. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/registry.py +9 -3
  89. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/runtime.py +69 -18
  90. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/service.py +19 -6
  91. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/store.py +29 -10
  92. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/subscription.py +6 -4
  93. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/utilities.py +41 -13
  94. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/utility/output_utility_component.py +31 -11
  95. {flock_core-0.5.9 → flock_core-0.5.10}/tests/e2e/test_critical_scenarios.py +2 -2
  96. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_components.py +121 -195
  97. flock_core-0.5.10/tests/test_context_provider.py +1266 -0
  98. flock_core-0.5.10/tests/test_context_security.py +325 -0
  99. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_dspy_engine.py +51 -41
  100. flock_core-0.5.10/tests/test_engine_context.py +283 -0
  101. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_engines.py +3 -2
  102. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_orchestrator_batchspec.py +2 -2
  103. flock_core-0.5.10/tests/test_orchestrator_context_injection.py +578 -0
  104. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_runtime.py +17 -17
  105. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_subscription.py +1 -1
  106. {flock_core-0.5.9 → flock_core-0.5.10}/uv.lock +232 -233
  107. {flock_core-0.5.9 → flock_core-0.5.10}/.devcontainer/devcontainer.json +0 -0
  108. {flock_core-0.5.9 → flock_core-0.5.10}/.envtemplate +0 -0
  109. {flock_core-0.5.9 → flock_core-0.5.10}/.github/workflows/deploy-documentation.yml +0 -0
  110. {flock_core-0.5.9 → flock_core-0.5.10}/.github/workflows/deploy-whiteduck-pypi.yml +0 -0
  111. {flock_core-0.5.9 → flock_core-0.5.10}/.github/workflows/quality.yml +0 -0
  112. {flock_core-0.5.9 → flock_core-0.5.10}/.gitignore +0 -0
  113. {flock_core-0.5.9 → flock_core-0.5.10}/.pre-commit-config.yaml +0 -0
  114. {flock_core-0.5.9 → flock_core-0.5.10}/.python-version +0 -0
  115. {flock_core-0.5.9 → flock_core-0.5.10}/.vscode/settings.json +0 -0
  116. {flock_core-0.5.9 → flock_core-0.5.10}/AUTO_TRACING.md +0 -0
  117. {flock_core-0.5.9 → flock_core-0.5.10}/CONTRIBUTING.md +0 -0
  118. {flock_core-0.5.9 → flock_core-0.5.10}/ID_AUDIT_REPORT.md +0 -0
  119. {flock_core-0.5.9 → flock_core-0.5.10}/LICENSE +0 -0
  120. {flock_core-0.5.9 → flock_core-0.5.10}/ROADMAP.md +0 -0
  121. {flock_core-0.5.9 → flock_core-0.5.10}/USECASES.md +0 -0
  122. {flock_core-0.5.9 → flock_core-0.5.10}/docs/about/changelog.md +0 -0
  123. {flock_core-0.5.9 → flock_core-0.5.10}/docs/about/contributing.md +0 -0
  124. {flock_core-0.5.9 → flock_core-0.5.10}/docs/about/roadmap.md +0 -0
  125. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/batch.png +0 -0
  126. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/bug_diagnosis.png +0 -0
  127. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/flock.png +0 -0
  128. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/flock_ui_1.png +0 -0
  129. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/flock_ui_agent_view.png +0 -0
  130. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/flock_ui_blackboard_view.png +0 -0
  131. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/join.png +0 -0
  132. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/pattern2.png +0 -0
  133. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/pizza.png +0 -0
  134. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/trace_1.png +0 -0
  135. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/trace_2.png +0 -0
  136. {flock_core-0.5.9 → flock_core-0.5.10}/docs/assets/images/trace_3.png +0 -0
  137. {flock_core-0.5.9 → flock_core-0.5.10}/docs/bugfixes/websocket-streaming-deadlock-fix.md +0 -0
  138. {flock_core-0.5.9 → flock_core-0.5.10}/docs/community/index.md +0 -0
  139. {flock_core-0.5.9 → flock_core-0.5.10}/docs/examples/index.md +0 -0
  140. {flock_core-0.5.9 → flock_core-0.5.10}/docs/getting-started/concepts.md +0 -0
  141. {flock_core-0.5.9 → flock_core-0.5.10}/docs/getting-started/index.md +0 -0
  142. {flock_core-0.5.9 → flock_core-0.5.10}/docs/getting-started/installation.md +0 -0
  143. {flock_core-0.5.9 → flock_core-0.5.10}/docs/getting-started/quick-start.md +0 -0
  144. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/agents.md +0 -0
  145. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/batch-processing.md +0 -0
  146. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/blackboard.md +0 -0
  147. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/components.md +0 -0
  148. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/dashboard.md +0 -0
  149. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/dspy-engine.md +0 -0
  150. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/fan-out.md +0 -0
  151. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/index.md +0 -0
  152. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/join-operations.md +0 -0
  153. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/mcp-roots.md +0 -0
  154. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/orchestrator-components.md +0 -0
  155. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/patterns.md +0 -0
  156. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/persistent-blackboard.md +0 -0
  157. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/predicates.md +0 -0
  158. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/testing.md +0 -0
  159. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/tracing/auto-tracing.md +0 -0
  160. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/tracing/how_to_use_tracing_effectively.md +0 -0
  161. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/tracing/index.md +0 -0
  162. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/tracing/trace-module.md +0 -0
  163. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/tracing/tracing-production.md +0 -0
  164. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/tracing/tracing-quickstart.md +0 -0
  165. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/tracing/unified-tracing.md +0 -0
  166. {flock_core-0.5.9 → flock_core-0.5.10}/docs/guides/use-cases.md +0 -0
  167. {flock_core-0.5.9 → flock_core-0.5.10}/docs/index.md +0 -0
  168. {flock_core-0.5.9 → flock_core-0.5.10}/docs/javascripts/extra.js +0 -0
  169. {flock_core-0.5.9 → flock_core-0.5.10}/docs/reference/api.md +0 -0
  170. {flock_core-0.5.9 → flock_core-0.5.10}/docs/reference/configuration.md +0 -0
  171. {flock_core-0.5.9 → flock_core-0.5.10}/docs/reference/index.md +0 -0
  172. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/001-sqlite-blackboard-store/PLAN.md +0 -0
  173. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/001-sqlite-blackboard-store/PRD.md +0 -0
  174. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/002-ui-optimization-migration/PHASE_4.1_AFTERMATH_AUDIT.md +0 -0
  175. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/002-ui-optimization-migration/PHASE_4.1_TASK_LIST.md +0 -0
  176. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/002-ui-optimization-migration/PRD.md +0 -0
  177. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/003-logic-operations/PLAN.md +0 -0
  178. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/004-logic-operations-ux/PLAN.md +0 -0
  179. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/004-logic-operations-ux/PRD.md +0 -0
  180. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/004-orchestrator-component/LOGGING_GUIDE.md +0 -0
  181. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/004-orchestrator-component/PLAN.md +0 -0
  182. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/004-orchestrator-component/PRD.md +0 -0
  183. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/004-orchestrator-component/README.md +0 -0
  184. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/004-orchestrator-component/UNIFIED_IMPLEMENTATION_PLAN.md +0 -0
  185. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/005-multi-publishes-fan-out/CHANGES_SUMMARY.md +0 -0
  186. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/005-multi-publishes-fan-out/CONCURRENCY_FIX.md +0 -0
  187. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/005-multi-publishes-fan-out/PHASE4_ARCHITECTURAL_PIVOT.md +0 -0
  188. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/005-multi-publishes-fan-out/PLAN.md +0 -0
  189. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/005-multi-publishes-fan-out/PRD.md +0 -0
  190. {flock_core-0.5.9 → flock_core-0.5.10}/docs/specs/006-dspy-engine-refactor/PLAN.md +0 -0
  191. {flock_core-0.5.9 → flock_core-0.5.10}/docs/stylesheets/extra.css +0 -0
  192. {flock_core-0.5.9 → flock_core-0.5.10}/docs/tags.md +0 -0
  193. {flock_core-0.5.9 → flock_core-0.5.10}/docs/troubleshooting/streaming-freeze-fix.md +0 -0
  194. {flock_core-0.5.9 → flock_core-0.5.10}/docs/troubleshooting/streaming-freeze-with-dashboard-fix.md +0 -0
  195. {flock_core-0.5.9 → flock_core-0.5.10}/docs/tutorials/advanced-patterns.md +0 -0
  196. {flock_core-0.5.9 → flock_core-0.5.10}/docs/tutorials/conditional-routing.md +0 -0
  197. {flock_core-0.5.9 → flock_core-0.5.10}/docs/tutorials/connect_with_ollama.md +0 -0
  198. {flock_core-0.5.9 → flock_core-0.5.10}/docs/tutorials/custom-agent-components.md +0 -0
  199. {flock_core-0.5.9 → flock_core-0.5.10}/docs/tutorials/custom-engines.md +0 -0
  200. {flock_core-0.5.9 → flock_core-0.5.10}/docs/tutorials/index.md +0 -0
  201. {flock_core-0.5.9 → flock_core-0.5.10}/docs/tutorials/multi-agent-workflow.md +0 -0
  202. {flock_core-0.5.9 → flock_core-0.5.10}/docs/tutorials/your-first-agent.md +0 -0
  203. {flock_core-0.5.9 → flock_core-0.5.10}/docs/whiteducksoftware/versions.json +0 -0
  204. {flock_core-0.5.9 → flock_core-0.5.10}/examples/00-patterns/01-single_publish.py +0 -0
  205. {flock_core-0.5.9 → flock_core-0.5.10}/examples/00-patterns/README.md +0 -0
  206. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/02_input_and_output.py +0 -0
  207. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/03_code_detective.py +0 -0
  208. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/05_mcp_and_tools.py +0 -0
  209. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/07_web_detective.py +0 -0
  210. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/08_band_formation.py +0 -0
  211. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/12_secret_agents.py +0 -0
  212. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/13_medical_diagnostics_joinspec.py +0 -0
  213. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/14_ecommerce_batch_processing.py +0 -0
  214. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/15_iot_sensor_batching.py +0 -0
  215. {flock_core-0.5.9 → flock_core-0.5.10}/examples/01-cli/README.md +0 -0
  216. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/02_input_and_output.py +0 -0
  217. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/03_code_detective.py +0 -0
  218. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/05_mcp_and_tools.py +0 -0
  219. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/07_web_detective.py +0 -0
  220. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/08_band_formation.py +0 -0
  221. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/10_news_agency.py +0 -0
  222. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/11_tracing_detective.py +0 -0
  223. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/12_secret_agents.py +0 -0
  224. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/14_ecommerce_batch_processing.py +0 -0
  225. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/15_iot_sensor_batching.py +0 -0
  226. {flock_core-0.5.9 → flock_core-0.5.10}/examples/02-dashboard/README.md +0 -0
  227. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/README.md +0 -0
  228. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_01_code_detective.py +0 -0
  229. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_02_band_formation.py +0 -0
  230. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_04_debate_club.py +0 -0
  231. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_06_secret_agents.py +0 -0
  232. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_09_the_batch_optimizer.py +0 -0
  233. {flock_core-0.5.9 → flock_core-0.5.10}/examples/03-claudes-workshop/lesson_10_the_smart_factory.py +0 -0
  234. {flock_core-0.5.9 → flock_core-0.5.10}/examples/04-misc/02-dashboard-edge-cases.py +0 -0
  235. {flock_core-0.5.9 → flock_core-0.5.10}/examples/04-misc/03-scale-test-100-agents.py +0 -0
  236. {flock_core-0.5.9 → flock_core-0.5.10}/examples/04-misc/05_lm_studio.py +0 -0
  237. {flock_core-0.5.9 → flock_core-0.5.10}/examples/04-misc/README.md +0 -0
  238. {flock_core-0.5.9 → flock_core-0.5.10}/examples/05-engines/README.md +0 -0
  239. {flock_core-0.5.9 → flock_core-0.5.10}/examples/06-agent-components/README.md +0 -0
  240. {flock_core-0.5.9 → flock_core-0.5.10}/examples/07-orchestrator-components/README.md +0 -0
  241. {flock_core-0.5.9 → flock_core-0.5.10}/examples/README.md +0 -0
  242. {flock_core-0.5.9 → flock_core-0.5.10}/mkdocs.yml +0 -0
  243. {flock_core-0.5.9 → flock_core-0.5.10}/requirements.txt +0 -0
  244. {flock_core-0.5.9 → flock_core-0.5.10}/scripts/build_dashboard.py +0 -0
  245. {flock_core-0.5.9 → flock_core-0.5.10}/scripts/bump_version.py +0 -0
  246. {flock_core-0.5.9 → flock_core-0.5.10}/scripts/check_version_bump.py +0 -0
  247. {flock_core-0.5.9 → flock_core-0.5.10}/scripts/ensure_uv.py +0 -0
  248. {flock_core-0.5.9 → flock_core-0.5.10}/scripts/gen_ref_pages.py +0 -0
  249. {flock_core-0.5.9 → flock_core-0.5.10}/scripts/generate_llm_codebase.py +0 -0
  250. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/__init__.py +0 -0
  251. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/artifacts.py +0 -0
  252. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/__init__.py +0 -0
  253. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/graph_builder.py +0 -0
  254. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/models/__init__.py +0 -0
  255. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/static_v2/assets/index-DFRnI_mt.js +0 -0
  256. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/static_v2/assets/index-fPLNdmp1.css +0 -0
  257. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/dashboard/static_v2/index.html +0 -0
  258. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/engines/__init__.py +0 -0
  259. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/engines/examples/__init__.py +0 -0
  260. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/README.md +0 -0
  261. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/docs/DESIGN_SYSTEM.md +0 -0
  262. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/index.html +0 -0
  263. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/package-lock.json +0 -0
  264. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/package.json +0 -0
  265. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/App.tsx +0 -0
  266. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/__tests__/integration/graph-snapshot.test.tsx +0 -0
  267. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +0 -0
  268. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/common/BuildInfo.tsx +0 -0
  269. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/common/EmptyState.module.css +0 -0
  270. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/common/EmptyState.tsx +0 -0
  271. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/common/ErrorBoundary.module.css +0 -0
  272. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/common/ErrorBoundary.tsx +0 -0
  273. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/common/KeyboardShortcutsDialog.css +0 -0
  274. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +0 -0
  275. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/common/LoadingSpinner.module.css +0 -0
  276. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/common/LoadingSpinner.tsx +0 -0
  277. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/controls/PublishControl.css +0 -0
  278. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/controls/PublishControl.test.tsx +0 -0
  279. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/controls/PublishControl.tsx +0 -0
  280. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/details/DetailWindowContainer.tsx +0 -0
  281. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/details/LiveOutputTab.test.tsx +0 -0
  282. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/details/LiveOutputTab.tsx +0 -0
  283. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/details/MessageDetailWindow.tsx +0 -0
  284. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/details/MessageHistoryTab.tsx +0 -0
  285. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/details/NodeDetailWindow.test.tsx +0 -0
  286. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/details/NodeDetailWindow.tsx +0 -0
  287. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/details/RunStatusTab.tsx +0 -0
  288. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/details/tabs.test.tsx +0 -0
  289. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/ArtifactTypeFilter.tsx +0 -0
  290. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/CorrelationIDFilter.module.css +0 -0
  291. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +0 -0
  292. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/CorrelationIDFilter.tsx +0 -0
  293. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/FilterFlyout.module.css +0 -0
  294. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/FilterFlyout.tsx +0 -0
  295. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/FilterPills.module.css +0 -0
  296. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/FilterPills.test.tsx +0 -0
  297. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/FilterPills.tsx +0 -0
  298. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/ProducerFilter.tsx +0 -0
  299. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/SavedFiltersControl.module.css +0 -0
  300. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/SavedFiltersControl.test.tsx +0 -0
  301. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/SavedFiltersControl.tsx +0 -0
  302. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/TagFilter.tsx +0 -0
  303. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/TimeRangeFilter.module.css +0 -0
  304. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +0 -0
  305. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/TimeRangeFilter.tsx +0 -0
  306. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/filters/VisibilityFilter.tsx +0 -0
  307. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/AgentNode.test.tsx +0 -0
  308. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/AgentNode.tsx +0 -0
  309. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/GraphCanvas.tsx +0 -0
  310. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/LogicOperationsDisplay.tsx +0 -0
  311. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/MessageFlowEdge.tsx +0 -0
  312. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/MessageNode.test.tsx +0 -0
  313. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/MessageNode.tsx +0 -0
  314. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/MiniMap.tsx +0 -0
  315. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/PendingBatchEdge.tsx +0 -0
  316. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/PendingJoinEdge.tsx +0 -0
  317. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/graph/TransformEdge.tsx +0 -0
  318. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/layout/DashboardLayout.css +0 -0
  319. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/layout/DashboardLayout.tsx +0 -0
  320. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/layout/Header.module.css +0 -0
  321. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/layout/Header.tsx +0 -0
  322. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css +0 -0
  323. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx +0 -0
  324. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx +0 -0
  325. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/modules/JsonAttributeRenderer.tsx +0 -0
  326. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/modules/ModuleRegistry.test.ts +0 -0
  327. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/modules/ModuleRegistry.ts +0 -0
  328. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/modules/ModuleWindow.tsx +0 -0
  329. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/modules/TraceModuleJaeger.tsx +0 -0
  330. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx +0 -0
  331. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/modules/registerModules.ts +0 -0
  332. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/settings/AdvancedSettings.tsx +0 -0
  333. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/settings/AppearanceSettings.tsx +0 -0
  334. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/settings/GraphSettings.tsx +0 -0
  335. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/settings/MultiSelect.tsx +0 -0
  336. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/settings/SettingsPanel.css +0 -0
  337. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/settings/SettingsPanel.tsx +0 -0
  338. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/settings/ThemeSelector.tsx +0 -0
  339. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/components/settings/TracingSettings.tsx +0 -0
  340. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/hooks/useKeyboardShortcuts.ts +0 -0
  341. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/hooks/useModulePersistence.test.ts +0 -0
  342. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/hooks/useModulePersistence.ts +0 -0
  343. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/hooks/useModules.ts +0 -0
  344. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/hooks/usePersistence.ts +0 -0
  345. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/main.tsx +0 -0
  346. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/services/api.ts +0 -0
  347. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/services/graphService.test.ts +0 -0
  348. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/services/graphService.ts +0 -0
  349. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/services/layout.test.ts +0 -0
  350. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/services/layout.ts +0 -0
  351. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/services/themeApplicator.ts +0 -0
  352. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/services/themeService.ts +0 -0
  353. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/services/websocket.ts +0 -0
  354. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/filterStore.test.ts +0 -0
  355. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/filterStore.ts +0 -0
  356. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/graphStore.test.ts +0 -0
  357. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/graphStore.ts +0 -0
  358. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/moduleStore.test.ts +0 -0
  359. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/moduleStore.ts +0 -0
  360. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/settingsStore.ts +0 -0
  361. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/streamStore.ts +0 -0
  362. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/uiStore.test.ts +0 -0
  363. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/uiStore.ts +0 -0
  364. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/store/wsStore.ts +0 -0
  365. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/styles/index.css +0 -0
  366. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/styles/scrollbar.css +0 -0
  367. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/styles/variables.css +0 -0
  368. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/test/setup.ts +0 -0
  369. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/types/filters.ts +0 -0
  370. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/types/graph.ts +0 -0
  371. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/types/modules.ts +0 -0
  372. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/types/theme.ts +0 -0
  373. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/utils/artifacts.ts +0 -0
  374. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/utils/mockData.ts +0 -0
  375. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/utils/performance.ts +0 -0
  376. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/src/vite-env.d.ts +0 -0
  377. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/tsconfig.json +0 -0
  378. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/tsconfig.node.json +0 -0
  379. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/vite.config.ts +0 -0
  380. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/frontend/vitest.config.ts +0 -0
  381. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/__init__.py +0 -0
  382. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/formatters/themes.py +0 -0
  383. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/span_middleware/baggage_span_processor.py +0 -0
  384. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/telemetry_exporter/base_exporter.py +0 -0
  385. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/telemetry_exporter/file_exporter.py +0 -0
  386. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/logging/telemetry_exporter/sqlite_exporter.py +0 -0
  387. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/servers/sse/__init__.py +0 -0
  388. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/servers/stdio/__init__.py +0 -0
  389. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/servers/stdio/flock_stdio_server.py +0 -0
  390. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/servers/streamable_http/__init__.py +0 -0
  391. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/servers/websockets/__init__.py +0 -0
  392. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/servers/websockets/flock_websocket_server.py +0 -0
  393. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/types/__init__.py +0 -0
  394. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/types/callbacks.py +0 -0
  395. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/types/factories.py +0 -0
  396. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/util/__init__.py +0 -0
  397. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/mcp/util/helpers.py +0 -0
  398. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/patches/__init__.py +0 -0
  399. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/3024-day.toml +0 -0
  400. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/3024-night.toml +0 -0
  401. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/aardvark-blue.toml +0 -0
  402. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/abernathy.toml +0 -0
  403. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/adventure.toml +0 -0
  404. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/adventuretime.toml +0 -0
  405. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/afterglow.toml +0 -0
  406. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/alabaster.toml +0 -0
  407. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/alienblood.toml +0 -0
  408. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/andromeda.toml +0 -0
  409. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/apple-classic.toml +0 -0
  410. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/apple-system-colors.toml +0 -0
  411. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/arcoiris.toml +0 -0
  412. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/argonaut copy.toml +0 -0
  413. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/argonaut.toml +0 -0
  414. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/arthur.toml +0 -0
  415. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ateliersulphurpool.toml +0 -0
  416. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/atom.toml +0 -0
  417. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/atom_test.toml +0 -0
  418. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/atomonelight.toml +0 -0
  419. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/aurora.toml +0 -0
  420. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ayu copy.toml +0 -0
  421. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ayu-light.toml +0 -0
  422. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ayu-mirage.toml +0 -0
  423. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ayu.toml +0 -0
  424. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/banana-blueberry.toml +0 -0
  425. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/batman.toml +0 -0
  426. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/belafonte-day.toml +0 -0
  427. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/belafonte-night.toml +0 -0
  428. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/birdsofparadise.toml +0 -0
  429. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/blazer.toml +0 -0
  430. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/blue-matrix.toml +0 -0
  431. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/blueberrypie.toml +0 -0
  432. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/bluedolphin.toml +0 -0
  433. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/blulocodark.toml +0 -0
  434. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/blulocolight.toml +0 -0
  435. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/borland.toml +0 -0
  436. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/breeze.toml +0 -0
  437. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/bright-lights.toml +0 -0
  438. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/broadcast.toml +0 -0
  439. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/brogrammer.toml +0 -0
  440. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/builtin-dark.toml +0 -0
  441. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/builtin-light.toml +0 -0
  442. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/builtin-pastel-dark.toml +0 -0
  443. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/builtin-solarized-dark.toml +0 -0
  444. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/builtin-solarized-light.toml +0 -0
  445. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/builtin-tango-dark.toml +0 -0
  446. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/builtin-tango-light.toml +0 -0
  447. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/c64.toml +0 -0
  448. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/calamity.toml +0 -0
  449. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/catppuccin-frappe.toml +0 -0
  450. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/catppuccin-latte.toml +0 -0
  451. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/catppuccin-macchiato.toml +0 -0
  452. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/catppuccin-mocha.toml +0 -0
  453. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/cga.toml +0 -0
  454. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/chalk.toml +0 -0
  455. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/chalkboard.toml +0 -0
  456. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/challengerdeep.toml +0 -0
  457. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/chester.toml +0 -0
  458. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ciapre.toml +0 -0
  459. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/clrs.toml +0 -0
  460. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/cobalt-neon.toml +0 -0
  461. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/cobalt2.toml +0 -0
  462. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/coffee-theme.toml +0 -0
  463. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/crayonponyfish.toml +0 -0
  464. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/cutiepro.toml +0 -0
  465. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/cyberdyne.toml +0 -0
  466. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/cyberpunk.toml +0 -0
  467. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/cyberpunkscarletprotocol.toml +0 -0
  468. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/dark+.toml +0 -0
  469. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/dark-pastel.toml +0 -0
  470. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/darkermatrix.toml +0 -0
  471. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/darkmatrix.toml +0 -0
  472. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/darkside.toml +0 -0
  473. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/dayfox.toml +0 -0
  474. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/deep.toml +0 -0
  475. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/desert.toml +0 -0
  476. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/dimidium.toml +0 -0
  477. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/dimmedmonokai.toml +0 -0
  478. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/django.toml +0 -0
  479. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/djangorebornagain.toml +0 -0
  480. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/djangosmooth.toml +0 -0
  481. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/doom-peacock.toml +0 -0
  482. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/doomone.toml +0 -0
  483. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/dotgov.toml +0 -0
  484. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/dracula+.toml +0 -0
  485. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/dracula.toml +0 -0
  486. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/duckbones.toml +0 -0
  487. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/duotone-dark.toml +0 -0
  488. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/earthsong.toml +0 -0
  489. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/elemental.toml +0 -0
  490. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/elementary.toml +0 -0
  491. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/encom.toml +0 -0
  492. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/espresso-libre.toml +0 -0
  493. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/espresso.toml +0 -0
  494. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/everblush.toml +0 -0
  495. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/fahrenheit.toml +0 -0
  496. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/fairyfloss.toml +0 -0
  497. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/farmhouse-dark.toml +0 -0
  498. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/farmhouse-light.toml +0 -0
  499. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/fideloper.toml +0 -0
  500. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/firefly-traditional.toml +0 -0
  501. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/firefoxdev.toml +0 -0
  502. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/firewatch.toml +0 -0
  503. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/fishtank.toml +0 -0
  504. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/flat.toml +0 -0
  505. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/flatland.toml +0 -0
  506. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/flexoki-dark.toml +0 -0
  507. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/flexoki-light.toml +0 -0
  508. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/floraverse.toml +0 -0
  509. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/forestblue.toml +0 -0
  510. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/framer.toml +0 -0
  511. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/frontenddelight.toml +0 -0
  512. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/funforrest.toml +0 -0
  513. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/galaxy.toml +0 -0
  514. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/galizur.toml +0 -0
  515. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/github-dark.toml +0 -0
  516. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/github.toml +0 -0
  517. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/glacier.toml +0 -0
  518. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/grape.toml +0 -0
  519. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/grass.toml +0 -0
  520. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/grey-green.toml +0 -0
  521. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/gruber-darker.toml +0 -0
  522. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/gruvboxdark.toml +0 -0
  523. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/gruvboxdarkhard.toml +0 -0
  524. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/gruvboxlight.toml +0 -0
  525. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/guezwhoz.toml +0 -0
  526. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hacktober.toml +0 -0
  527. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hardcore.toml +0 -0
  528. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/harper.toml +0 -0
  529. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hax0r-blue.toml +0 -0
  530. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hax0r-gr33n.toml +0 -0
  531. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hax0r-r3d.toml +0 -0
  532. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/highway.toml +0 -0
  533. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hipster-green.toml +0 -0
  534. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hivacruz.toml +0 -0
  535. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/homebrew.toml +0 -0
  536. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hopscotch.256.toml +0 -0
  537. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hopscotch.toml +0 -0
  538. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hurtado.toml +0 -0
  539. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/hybrid.toml +0 -0
  540. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ic-green-ppl.toml +0 -0
  541. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ic-orange-ppl.toml +0 -0
  542. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iceberg-dark.toml +0 -0
  543. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iceberg-light.toml +0 -0
  544. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/idea.toml +0 -0
  545. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/idletoes.toml +0 -0
  546. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ir-black.toml +0 -0
  547. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iterm2-dark-background.toml +0 -0
  548. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iterm2-default.toml +0 -0
  549. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iterm2-light-background.toml +0 -0
  550. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iterm2-pastel-dark-background.toml +0 -0
  551. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iterm2-smoooooth.toml +0 -0
  552. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iterm2-solarized-dark.toml +0 -0
  553. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iterm2-solarized-light.toml +0 -0
  554. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iterm2-tango-dark.toml +0 -0
  555. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/iterm2-tango-light.toml +0 -0
  556. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/jackie-brown.toml +0 -0
  557. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/japanesque.toml +0 -0
  558. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/jellybeans.toml +0 -0
  559. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/jetbrains-darcula.toml +0 -0
  560. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/jubi.toml +0 -0
  561. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/kanagawabones.toml +0 -0
  562. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/kibble.toml +0 -0
  563. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/kolorit.toml +0 -0
  564. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/konsolas.toml +0 -0
  565. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/kurokula.toml +0 -0
  566. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/lab-fox.toml +0 -0
  567. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/laser.toml +0 -0
  568. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/later-this-evening.toml +0 -0
  569. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/lavandula.toml +0 -0
  570. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/liquidcarbon.toml +0 -0
  571. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/liquidcarbontransparent.toml +0 -0
  572. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/liquidcarbontransparentinverse.toml +0 -0
  573. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/lovelace.toml +0 -0
  574. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/man-page.toml +0 -0
  575. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/mariana.toml +0 -0
  576. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/material.toml +0 -0
  577. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/materialdark.toml +0 -0
  578. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/materialdarker.toml +0 -0
  579. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/materialdesigncolors.toml +0 -0
  580. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/materialocean.toml +0 -0
  581. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/mathias.toml +0 -0
  582. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/matrix.toml +0 -0
  583. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/medallion.toml +0 -0
  584. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/mellifluous.toml +0 -0
  585. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/midnight-in-mojave.toml +0 -0
  586. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/mirage.toml +0 -0
  587. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/misterioso.toml +0 -0
  588. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/molokai.toml +0 -0
  589. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/monalisa.toml +0 -0
  590. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/monokai-remastered.toml +0 -0
  591. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/monokai-soda.toml +0 -0
  592. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/monokai-vivid.toml +0 -0
  593. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/n0tch2k.toml +0 -0
  594. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/neobones-dark.toml +0 -0
  595. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/neobones-light.toml +0 -0
  596. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/neon.toml +0 -0
  597. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/neopolitan.toml +0 -0
  598. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/neutron.toml +0 -0
  599. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/night-owlish-light.toml +0 -0
  600. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/nightfox.toml +0 -0
  601. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/nightlion-v1.toml +0 -0
  602. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/nightlion-v2.toml +0 -0
  603. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/niji.toml +0 -0
  604. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/nocturnal-winter.toml +0 -0
  605. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/nord-light.toml +0 -0
  606. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/nord.toml +0 -0
  607. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/novel.toml +0 -0
  608. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/nvimdark.toml +0 -0
  609. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/nvimlight.toml +0 -0
  610. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/obsidian.toml +0 -0
  611. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ocean.toml +0 -0
  612. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/oceanic-next.toml +0 -0
  613. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/oceanicmaterial.toml +0 -0
  614. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ollie.toml +0 -0
  615. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/onehalfdark.toml +0 -0
  616. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/onehalflight.toml +0 -0
  617. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/operator-mono-dark.toml +0 -0
  618. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/overnight-slumber.toml +0 -0
  619. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/oxocarbon.toml +0 -0
  620. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/palenighthc.toml +0 -0
  621. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/pandora.toml +0 -0
  622. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/paraiso-dark.toml +0 -0
  623. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/paulmillr.toml +0 -0
  624. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/pencildark.toml +0 -0
  625. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/pencillight.toml +0 -0
  626. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/peppermint.toml +0 -0
  627. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/piatto-light.toml +0 -0
  628. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/pnevma.toml +0 -0
  629. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/popping-and-locking.toml +0 -0
  630. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/primary.toml +0 -0
  631. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/pro-light.toml +0 -0
  632. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/pro.toml +0 -0
  633. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/purple-rain.toml +0 -0
  634. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/purplepeter.toml +0 -0
  635. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/rapture.toml +0 -0
  636. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/raycast-dark.toml +0 -0
  637. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/raycast-light.toml +0 -0
  638. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/rebecca.toml +0 -0
  639. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/red-alert.toml +0 -0
  640. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/red-planet.toml +0 -0
  641. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/red-sands.toml +0 -0
  642. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/relaxed.toml +0 -0
  643. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/retro.toml +0 -0
  644. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/rippedcasts.toml +0 -0
  645. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/rose-pine-dawn.toml +0 -0
  646. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/rose-pine-moon.toml +0 -0
  647. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/rose-pine.toml +0 -0
  648. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/rouge-2.toml +0 -0
  649. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/royal.toml +0 -0
  650. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ryuuko.toml +0 -0
  651. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/sakura.toml +0 -0
  652. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/scarlet-protocol.toml +0 -0
  653. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/seafoam-pastel.toml +0 -0
  654. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/seashells.toml +0 -0
  655. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/seoulbones-dark.toml +0 -0
  656. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/seoulbones-light.toml +0 -0
  657. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/seti.toml +0 -0
  658. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/shades-of-purple.toml +0 -0
  659. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/shaman.toml +0 -0
  660. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/slate.toml +0 -0
  661. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/sleepyhollow.toml +0 -0
  662. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/smyck.toml +0 -0
  663. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/snazzy.toml +0 -0
  664. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/softserver.toml +0 -0
  665. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/solarized-darcula.toml +0 -0
  666. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/solarized-dark---patched.toml +0 -0
  667. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/solarized-dark-higher-contrast.toml +0 -0
  668. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/spacedust.toml +0 -0
  669. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/spacegray-eighties-dull.toml +0 -0
  670. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/spacegray-eighties.toml +0 -0
  671. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/spacegray.toml +0 -0
  672. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/spiderman.toml +0 -0
  673. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/spring.toml +0 -0
  674. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/square.toml +0 -0
  675. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/sublette.toml +0 -0
  676. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/subliminal.toml +0 -0
  677. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/sugarplum.toml +0 -0
  678. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/sundried.toml +0 -0
  679. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/symfonic.toml +0 -0
  680. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/synthwave-everything.toml +0 -0
  681. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/synthwave.toml +0 -0
  682. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/synthwavealpha.toml +0 -0
  683. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tango-adapted.toml +0 -0
  684. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tango-half-adapted.toml +0 -0
  685. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/teerb.toml +0 -0
  686. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/terafox.toml +0 -0
  687. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/terminal-basic.toml +0 -0
  688. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/thayer-bright.toml +0 -0
  689. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/the-hulk.toml +0 -0
  690. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tinacious-design-(dark).toml +0 -0
  691. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tinacious-design-(light).toml +0 -0
  692. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tokyonight-day.toml +0 -0
  693. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tokyonight-storm.toml +0 -0
  694. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tokyonight.toml +0 -0
  695. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tomorrow-night-blue.toml +0 -0
  696. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tomorrow-night-bright.toml +0 -0
  697. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tomorrow-night-burns.toml +0 -0
  698. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tomorrow-night-eighties.toml +0 -0
  699. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tomorrow-night.toml +0 -0
  700. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/tomorrow.toml +0 -0
  701. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/toychest.toml +0 -0
  702. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/treehouse.toml +0 -0
  703. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/twilight.toml +0 -0
  704. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ubuntu.toml +0 -0
  705. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ultradark.toml +0 -0
  706. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/ultraviolent.toml +0 -0
  707. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/underthesea.toml +0 -0
  708. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/unikitty.toml +0 -0
  709. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/urple.toml +0 -0
  710. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/vaughn.toml +0 -0
  711. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/vesper.toml +0 -0
  712. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/vibrantink.toml +0 -0
  713. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/vimbones.toml +0 -0
  714. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/violet-dark.toml +0 -0
  715. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/violet-light.toml +0 -0
  716. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/warmneon.toml +0 -0
  717. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/wez.toml +0 -0
  718. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/whimsy.toml +0 -0
  719. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/wildcherry.toml +0 -0
  720. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/wilmersdorf.toml +0 -0
  721. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/wombat.toml +0 -0
  722. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/wryan.toml +0 -0
  723. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/xcodedark.toml +0 -0
  724. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/xcodedarkhc.toml +0 -0
  725. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/xcodelight.toml +0 -0
  726. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/xcodelighthc.toml +0 -0
  727. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/xcodewwdc.toml +0 -0
  728. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/zenbones-dark.toml +0 -0
  729. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/zenbones-light.toml +0 -0
  730. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/zenbones.toml +0 -0
  731. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/zenburn.toml +0 -0
  732. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/zenburned.toml +0 -0
  733. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/zenwritten-dark.toml +0 -0
  734. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/themes/zenwritten-light.toml +0 -0
  735. {flock_core-0.5.9 → flock_core-0.5.10}/src/flock/visibility.py +0 -0
  736. {flock_core-0.5.9 → flock_core-0.5.10}/tests/PHASE2_TEST_SUMMARY.md +0 -0
  737. {flock_core-0.5.9 → flock_core-0.5.10}/tests/PHASE3_TEST_SUMMARY.md +0 -0
  738. {flock_core-0.5.9 → flock_core-0.5.10}/tests/TEST_COVERAGE_PHASE2.md +0 -0
  739. {flock_core-0.5.9 → flock_core-0.5.10}/tests/conftest.py +0 -0
  740. {flock_core-0.5.9 → flock_core-0.5.10}/tests/contract/test_agent_payload_selection_contract.py +0 -0
  741. {flock_core-0.5.9 → flock_core-0.5.10}/tests/contract/test_artifact_storage_contract.py +0 -0
  742. {flock_core-0.5.9 → flock_core-0.5.10}/tests/contract/test_type_normalization_contract.py +0 -0
  743. {flock_core-0.5.9 → flock_core-0.5.10}/tests/dashboard/test_logic_operations_api.py +0 -0
  744. {flock_core-0.5.9 → flock_core-0.5.10}/tests/dashboard/test_logic_operations_events.py +0 -0
  745. {flock_core-0.5.9 → flock_core-0.5.10}/tests/e2e/README.md +0 -0
  746. {flock_core-0.5.9 → flock_core-0.5.10}/tests/e2e/TESTING_SUMMARY.md +0 -0
  747. {flock_core-0.5.9 → flock_core-0.5.10}/tests/integration/test_collector_orchestrator.py +0 -0
  748. {flock_core-0.5.9 → flock_core-0.5.10}/tests/integration/test_orchestrator_dashboard.py +0 -0
  749. {flock_core-0.5.9 → flock_core-0.5.10}/tests/integration/test_sqlite_store_integration.py +0 -0
  750. {flock_core-0.5.9 → flock_core-0.5.10}/tests/integration/test_websocket_protocol.py +0 -0
  751. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_agent.py +0 -0
  752. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_agent_builder.py +0 -0
  753. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_agent_mcp.py +0 -0
  754. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_agent_server_specific_mounts.py +0 -0
  755. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_artifacts.py +0 -0
  756. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_cli.py +0 -0
  757. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_cli_helper.py +0 -0
  758. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_dashboard_api.py +0 -0
  759. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_dashboard_collector.py +0 -0
  760. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_dashboard_graph.py +0 -0
  761. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_dashboard_launcher.py +0 -0
  762. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_dashboard_service.py +0 -0
  763. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_dspy_engine_mcp.py +0 -0
  764. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_dspy_engine_multioutput.py +0 -0
  765. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_dspy_streaming_events.py +0 -0
  766. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_filtering_validation.py +0 -0
  767. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_logging_config.py +0 -0
  768. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_mcp_client.py +0 -0
  769. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_mcp_config.py +0 -0
  770. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_mcp_coverage_summary.md +0 -0
  771. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_mcp_imports.py +0 -0
  772. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_mcp_manager.py +0 -0
  773. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_mcp_server_config_typeddict.py +0 -0
  774. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_mcp_tool_handlers.py +0 -0
  775. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_orchestrator.py +0 -0
  776. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_orchestrator_and_gate.py +0 -0
  777. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_orchestrator_combined.py +0 -0
  778. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_orchestrator_component.py +0 -0
  779. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_orchestrator_joinspec.py +0 -0
  780. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_orchestrator_mcp.py +0 -0
  781. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_output_groups.py +0 -0
  782. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_registry.py +0 -0
  783. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_service.py +0 -0
  784. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_service_extended.py +0 -0
  785. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_store.py +0 -0
  786. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_store_graph.py +0 -0
  787. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_telemetry.py +0 -0
  788. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_trace_clearing.py +0 -0
  789. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_unified_tracing.py +0 -0
  790. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_utilities.py +0 -0
  791. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_version_endpoint.py +0 -0
  792. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_visibility.py +0 -0
  793. {flock_core-0.5.9 → flock_core-0.5.10}/tests/test_websocket_manager.py +0 -0
@@ -53,7 +53,7 @@ A blackboard architecture framework where specialized AI agents collaborate thro
53
53
 
54
54
  ### Prerequisites
55
55
 
56
- - **Python 3.10+** (we use modern async features)
56
+ - **Python 3.12+** (we use modern async features)
57
57
  - **UV package manager** (faster than pip, handles virtual envs)
58
58
  - **Node.js 18+** (22+ recommended) for dashboard frontend
59
59
  - **OpenAI API key** (for running examples)
@@ -107,6 +107,7 @@ For deep dives into specific topics, see:
107
107
  **Core Architecture:**
108
108
  - **[Architecture & Blackboard](docs/guides/blackboard.md)** - Core pattern, structure, and behavior
109
109
  - **[Agent Guide](docs/guides/agents.md)** - Complete agent development reference
110
+ - **[Context Providers](docs/guides/context-providers.md)** - Smart filtering & security boundaries for agent context ⭐ **NEW in 0.5**
110
111
 
111
112
  **Components & Extensibility:**
112
113
  - **[Agent Components](docs/guides/components.md)** - Extend agent behavior with lifecycle hooks
@@ -296,6 +297,288 @@ Kick the tyres with `examples/02-the-blackboard/01_persistent_pizza.py`, then la
296
297
 
297
298
  ---
298
299
 
300
+ ### 🔐 Context Providers - Smart Filtering & Security Boundaries
301
+
302
+ **Context Providers are the intelligent filter layer between agents and the blackboard—controlling what each agent sees, reducing token costs by 90%+, and automatically redacting sensitive data.**
303
+
304
+ #### Why Context Providers Matter
305
+
306
+ **The Problem:**
307
+ - Agents seeing ALL artifacts wastes tokens (costs)
308
+ - No way to filter sensitive data before agents see it
309
+ - Performance degrades as blackboard grows
310
+ - Security vulnerabilities if agents bypass visibility
311
+
312
+ **The Solution:**
313
+ Context Providers enforce a security boundary that:
314
+ - ✅ **Reduces token costs** - Agents see only relevant artifacts (90%+ savings)
315
+ - ✅ **Protects sensitive data** - Auto-redact passwords, API keys, credit cards
316
+ - ✅ **Improves performance** - Less context = faster agent execution
317
+ - ✅ **Enforces security** - Agents cannot bypass provider filtering
318
+
319
+ **Understanding the Three-Layer Model:**
320
+
321
+ Flock uses three complementary filtering layers:
322
+
323
+ 1. **Visibility** (security boundary) - Controls BOTH which agents trigger AND which artifacts they see in context
324
+ 2. **Subscription Filters** (routing logic) - Controls WHEN agents trigger (e.g., `.consumes(Task, tags={"urgent"})`)
325
+ 3. **Context Providers** (context shaping) - Controls WHAT agents see in their historical context
326
+
327
+ These layers work together to provide fine-grained control over agent execution and data access. Context Providers are the third layer—they filter what agents see in context but do NOT control triggering.
328
+
329
+ #### Quick Start: Global Filtering
330
+
331
+ **Filter all agents to see only urgent items:**
332
+
333
+ ```python
334
+ from flock import Flock
335
+ from flock.context_provider import FilteredContextProvider
336
+ from flock.store import FilterConfig
337
+
338
+ # Create provider that filters by tags
339
+ urgent_only = FilteredContextProvider(
340
+ FilterConfig(tags={"urgent", "high"}),
341
+ limit=50 # Max 50 artifacts
342
+ )
343
+
344
+ # Apply to ALL agents
345
+ flock = Flock("openai/gpt-4.1", context_provider=urgent_only)
346
+
347
+ # Publish with tags
348
+ await flock.publish(Task(...), tags={"urgent"}) # ✅ Agents see this
349
+ await flock.publish(Task(...), tags={"low"}) # ❌ Agents don't see this
350
+ ```
351
+
352
+ #### Per-Agent Filtering (Role-Based)
353
+
354
+ **Different agents see different context:**
355
+
356
+ ```python
357
+ # Global: Errors only
358
+ error_provider = FilteredContextProvider(FilterConfig(tags={"ERROR"}))
359
+ flock = Flock("openai/gpt-4.1", context_provider=error_provider)
360
+
361
+ # Junior engineer: Errors only (uses global)
362
+ junior = flock.agent("junior").consumes(LogEntry).publishes(Report).agent
363
+
364
+ # Senior engineer: Errors + Warnings (override global)
365
+ warn_provider = FilteredContextProvider(FilterConfig(tags={"ERROR", "WARN"}))
366
+ senior = flock.agent("senior").consumes(LogEntry).publishes(Analysis).agent
367
+ senior.context_provider = warn_provider # 🎯 Per-agent override!
368
+
369
+ # Platform team: Everything (override global)
370
+ all_provider = FilteredContextProvider(FilterConfig(tags={"DEBUG", "INFO", "WARN", "ERROR"}))
371
+ platform = flock.agent("platform").consumes(LogEntry).publishes(Report).agent
372
+ platform.context_provider = all_provider
373
+ ```
374
+
375
+ **Provider Priority:**
376
+ ```
377
+ Per-Agent Provider > Global Provider > DefaultContextProvider
378
+ (highest) (medium) (fallback)
379
+ ```
380
+
381
+ #### Production-Ready: Password Redaction
382
+
383
+ **Automatically redact sensitive data from agent context:**
384
+
385
+ ```python
386
+ from examples.context_provider import PasswordRedactorProvider
387
+
388
+ # Create provider with built-in patterns
389
+ provider = PasswordRedactorProvider(
390
+ redaction_text="[REDACTED]",
391
+ redact_emails=True,
392
+ log_redactions=True # Audit trail
393
+ )
394
+
395
+ flock = Flock("openai/gpt-4.1", context_provider=provider)
396
+
397
+ # Publish data with secrets
398
+ await flock.publish(UserData(
399
+ password="MySecret123", # → [REDACTED]
400
+ api_key="sk-1234567890abcdef", # → [REDACTED]
401
+ email="user@example.com" # → [REDACTED]
402
+ ))
403
+
404
+ # Agents see redacted version automatically!
405
+ ```
406
+
407
+ **What gets redacted:**
408
+ - 🔒 Passwords and secrets
409
+ - 🔑 API keys (OpenAI, AWS, GitHub, GitLab, Stripe, Google)
410
+ - 🎫 Bearer tokens and JWT
411
+ - 💳 Credit card numbers (Visa, MC, Amex, Discover)
412
+ - 🆔 Social Security Numbers
413
+ - 🔐 Private keys (RSA, EC, OpenSSH)
414
+ - 📧 Email addresses (optional)
415
+
416
+ #### FilterConfig API Reference
417
+
418
+ **Declarative filtering with multiple criteria:**
419
+
420
+ ```python
421
+ from flock.store import FilterConfig
422
+
423
+ # Combine multiple filters (AND logic)
424
+ config = FilterConfig(
425
+ tags={"ERROR", "CRITICAL"}, # OR logic: any of these tags
426
+ type_names={"SystemEvent", "Alert"}, # OR logic: any of these types
427
+ produced_by=["monitor", "watchdog"], # OR logic: from any of these agents
428
+ correlation_id="incident-123" # Exact match
429
+ )
430
+
431
+ provider = FilteredContextProvider(config, limit=100)
432
+ ```
433
+
434
+ **Criteria are combined with AND logic:**
435
+ - Must have (ERROR OR CRITICAL) tag
436
+ - AND must be (SystemEvent OR Alert) type
437
+ - AND must be from (monitor OR watchdog) agent
438
+ - AND must have correlation_id "incident-123"
439
+
440
+ #### Custom Context Providers
441
+
442
+ **Build your own filtering logic:**
443
+
444
+ ```python
445
+ from flock.context_provider import BaseContextProvider, ContextRequest
446
+ from flock.artifacts import Artifact
447
+
448
+ class TimeBoundProvider(BaseContextProvider):
449
+ """Only show artifacts from last 1 hour.
450
+
451
+ Security is enforced automatically by BaseContextProvider!
452
+ """
453
+
454
+ async def get_artifacts(self, request: ContextRequest) -> list[Artifact]:
455
+ cutoff = datetime.now() - timedelta(hours=1)
456
+
457
+ # Query all artifacts
458
+ artifacts, _ = await request.store.query_artifacts(limit=1000)
459
+
460
+ # Apply time-based filtering
461
+ recent = [a for a in artifacts if a.created_at >= cutoff]
462
+
463
+ return recent
464
+
465
+ # ✨ BaseContextProvider automatically:
466
+ # - Filters by visibility (MANDATORY, cannot bypass!)
467
+ # - Excludes requested IDs
468
+ # - Serializes to standard format
469
+
470
+ # Usage
471
+ provider = TimeBoundProvider()
472
+ flock = Flock("openai/gpt-4.1", context_provider=provider)
473
+ ```
474
+
475
+ **Why this is better:**
476
+ - ✅ **75% less code** - 5 lines vs 20+ lines
477
+ - ✅ **Impossible to bypass security** - visibility enforced by base class
478
+ - ✅ **Consistent serialization** - automatic standard format
479
+ - ✅ **Focus on business logic** - not infrastructure
480
+
481
+ #### Real-World Use Cases
482
+
483
+ **Healthcare (HIPAA Compliance):**
484
+ ```python
485
+ # Redact PHI (Protected Health Information)
486
+ from examples.context_provider import PasswordRedactorProvider
487
+
488
+ phi_provider = PasswordRedactorProvider(
489
+ custom_patterns={
490
+ "ssn": r"\b\d{3}-\d{2}-\d{4}\b",
491
+ "mrn": r"MRN[:\s]*\d{6,10}",
492
+ "dob": r"\b\d{2}/\d{2}/\d{4}\b",
493
+ }
494
+ )
495
+
496
+ flock = Flock("openai/gpt-4.1", context_provider=phi_provider)
497
+ ```
498
+
499
+ **DevOps (Log Filtering):**
500
+ ```python
501
+ # Error engineers see only errors
502
+ error_provider = FilteredContextProvider(FilterConfig(tags={"ERROR", "CRITICAL"}))
503
+ error_agent.context_provider = error_provider
504
+
505
+ # Platform team sees everything
506
+ all_provider = FilteredContextProvider(FilterConfig(tags={"DEBUG", "INFO", "WARN", "ERROR"}))
507
+ platform_agent.context_provider = all_provider
508
+ ```
509
+
510
+ **Multi-Tenant SaaS (Customer Isolation):**
511
+ ```python
512
+ # Each tenant gets isolated context
513
+ tenant_a_provider = FilteredContextProvider(FilterConfig(correlation_id=f"tenant_{customer_a.id}"))
514
+ tenant_a_agent.context_provider = tenant_a_provider
515
+
516
+ tenant_b_provider = FilteredContextProvider(FilterConfig(correlation_id=f"tenant_{customer_b.id}"))
517
+ tenant_b_agent.context_provider = tenant_b_provider
518
+ ```
519
+
520
+ #### Performance Impact
521
+
522
+ **Token Cost Reduction:**
523
+
524
+ ```python
525
+ # ❌ Before (no filtering): Agent sees 1000 artifacts = 200,000 tokens
526
+ # Cost: $0.006 per agent call
527
+
528
+ # ✅ After (smart filtering): Agent sees 10 relevant artifacts = 2,000 tokens
529
+ # Cost: $0.00006 per agent call
530
+
531
+ # 💰 99% cost reduction!
532
+
533
+ provider = FilteredContextProvider(FilterConfig(tags={"urgent"}), limit=10)
534
+ ```
535
+
536
+ #### Security Best Practices
537
+
538
+ **✅ DO:**
539
+ - Always enforce visibility (NEVER skip)
540
+ - Use `FilteredContextProvider` for common patterns
541
+ - Test redaction patterns with real data
542
+ - Log security events for audit trails
543
+ - Limit by default (start restrictive)
544
+
545
+ **❌ DON'T:**
546
+ - Don't skip visibility filtering (security boundary!)
547
+ - Don't leak sensitive data in nested objects
548
+ - Don't cache redacted data without re-applying redaction
549
+ - Don't trust agent input (agents are untrusted)
550
+ - Don't expose infrastructure details
551
+
552
+ #### Learn More
553
+
554
+ **📚 Complete Guide:** [docs/guides/context-providers.md](docs/guides/context-providers.md) - Architecture, security model, advanced patterns
555
+
556
+ **💡 Examples:** [examples/08-context-provider/](examples/08-context-provider/) - 5 progressive examples from beginner to expert
557
+
558
+ **🎁 Production Code:** [examples/08-context-provider/05_password_redactor.py](examples/08-context-provider/05_password_redactor.py) - Copy-paste ready password filtering
559
+
560
+ #### Quick Reference
561
+
562
+ ```python
563
+ # Global filtering
564
+ flock = Flock("openai/gpt-4.1", context_provider=FilteredContextProvider(FilterConfig(tags={"urgent"})))
565
+
566
+ # Per-agent override
567
+ agent.context_provider = FilteredContextProvider(FilterConfig(tags={"ERROR", "WARN"}))
568
+
569
+ # Password redaction
570
+ from examples.context_provider import PasswordRedactorProvider
571
+ flock = Flock("openai/gpt-4.1", context_provider=PasswordRedactorProvider())
572
+
573
+ # Custom provider
574
+ class MyProvider(ContextProvider):
575
+ async def __call__(self, request: ContextRequest) -> list[dict[str, Any]]:
576
+ # Query + filter by visibility (MANDATORY) + your logic
577
+ pass
578
+ ```
579
+
580
+ ---
581
+
299
582
  ### 🔒 Test Isolation and Mock Cleanup - The Contamination Trap
300
583
 
301
584
  **We fixed 32 failing tests caused by test contamination - here's what we learned:**
@@ -1335,7 +1618,7 @@ Add to existing test file if relevant, or create new file following naming conve
1335
1618
 
1336
1619
  ### Q: What Python version features can I use?
1337
1620
 
1338
- Python 3.10+, so you can use:
1621
+ Python 3.12+, so you can use:
1339
1622
  - `match`/`case` statements
1340
1623
  - `TaskGroup` for parallel execution
1341
1624
  - Improved type hints (`list[str]` not `List[str]`)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: flock-core
3
- Version: 0.5.9
3
+ Version: 0.5.10
4
4
  Summary: Flock: A declrative framework for building and orchestrating AI agents.
5
5
  Author-email: Andre Ratzenberger <andre.ratzenberger@whiteduck.de>
6
6
  License: MIT
@@ -37,7 +37,7 @@ Description-Content-Type: text/markdown
37
37
  <p align="center">
38
38
  <a href="https://whiteducksoftware.github.io/flock/" target="_blank"><img alt="Documentation" src="https://img.shields.io/badge/docs-online-blue?style=for-the-badge&logo=readthedocs"></a>
39
39
  <a href="https://pypi.org/project/flock-core/" target="_blank"><img alt="PyPI Version" src="https://img.shields.io/pypi/v/flock-core?style=for-the-badge&logo=pypi&label=pip%20version"></a>
40
- <img alt="Python Version" src="https://img.shields.io/badge/python-3.10%2B-blue?style=for-the-badge&logo=python">
40
+ <img alt="Python Version" src="https://img.shields.io/badge/python-3.12%2B-blue?style=for-the-badge&logo=python">
41
41
  <a href="LICENSE" target="_blank"><img alt="License" src="https://img.shields.io/github/license/whiteducksoftware/flock?style=for-the-badge"></a>
42
42
  <a href="https://whiteduck.de" target="_blank"><img alt="Built by white duck" src="https://img.shields.io/badge/Built%20by-white%20duck%20GmbH-white?style=for-the-badge&labelColor=black"></a>
43
43
  <a href="https://codecov.io/gh/whiteducksoftware/flock" target="_blank"><img alt="Test Coverage" src="https://codecov.io/gh/whiteducksoftware/flock/branch/main/graph/badge.svg?token=YOUR_TOKEN_HERE&style=for-the-badge"></a>
@@ -287,6 +287,39 @@ asyncio.run(main())
287
287
 
288
288
  ---
289
289
 
290
+ ## Context Provider Primer (Security + Cost)
291
+
292
+ Context Providers are the security and efficiency layer between agents and the blackboard. They decide what each agent sees in its historical context and always enforce visibility rules.
293
+
294
+ Why use them
295
+ - Enforce access control (visibility is applied before engines see data)
296
+ - Cut context size (often 90%+) by filtering to what matters
297
+ - Specialize per agent or set a global default
298
+
299
+ Copy/paste examples
300
+ ```python
301
+ from flock import Flock
302
+ from flock.context_provider import FilteredContextProvider
303
+ from flock.store import FilterConfig
304
+
305
+ # Global: show only urgent items (limit context size)
306
+ flock = Flock(
307
+ "openai/gpt-4.1",
308
+ context_provider=FilteredContextProvider(FilterConfig(tags={"urgent"}), limit=50)
309
+ )
310
+
311
+ # Per-agent: override global for a specific role
312
+ senior = flock.agent("senior").consumes(LogEntry).publishes(Analysis)
313
+ senior.context_provider = FilteredContextProvider(
314
+ FilterConfig(tags={"ERROR", "WARN"}),
315
+ limit=200
316
+ )
317
+ ```
318
+
319
+ Learn more: docs/guides/context-providers.md
320
+
321
+ ---
322
+
290
323
  ## Persistent Blackboard History
291
324
 
292
325
  The in-memory store is still great for local tinkering, but production teams now have a durable option. Plugging in `SQLiteBlackboardStore` turns the blackboard into a persistent event log with first-class ergonomics:
@@ -541,8 +574,105 @@ artifact.visibility = AfterVisibility(ttl=timedelta(hours=24), then=PublicVisibi
541
574
  agent.publishes(PublicReport, visibility=PublicVisibility())
542
575
  ```
543
576
 
577
+ **Visibility has a dual purpose:** It controls both which agents can be **triggered** by an artifact AND which artifacts agents can **see** in their context. This ensures consistent security across agent execution and data access—agents cannot bypass visibility controls through subscription filters or context providers.
578
+
544
579
  **Why this matters:** Financial services, healthcare, defense, SaaS platforms all need this for compliance. Other frameworks make you build it yourself.
545
580
 
581
+ ---
582
+
583
+ ### 🔒 Architecturally Impossible to Bypass Security
584
+
585
+ **Here's what makes Flock different:** In most frameworks, security is something you remember to add. In Flock, **it's architecturally impossible to forget.**
586
+
587
+ Every context provider in Flock inherits from `BaseContextProvider`, which enforces visibility filtering **automatically**. You literally cannot create a provider that forgets to check permissions—the security logic is baked into the base class and executes before your custom code even runs.
588
+
589
+ **What this means in practice:**
590
+
591
+ ```python
592
+ # ❌ Other frameworks: Security is your responsibility (easy to forget!)
593
+ class MyProvider:
594
+ async def get_context(self, agent):
595
+ artifacts = store.get_all() # OOPS! Forgot to check visibility!
596
+ return artifacts # 🔥 Security vulnerability
597
+
598
+ # ✅ Flock: Security is enforced automatically (impossible to bypass!)
599
+ class MyProvider(BaseContextProvider):
600
+ async def get_artifacts(self, request):
601
+ artifacts = await store.query_artifacts(...)
602
+ return artifacts # ✨ Visibility filtering happens automatically!
603
+ # BaseContextProvider calls .visibility.allows() for you
604
+ # You CANNOT bypass this - it's enforced by the architecture
605
+ ```
606
+
607
+ **Built-in providers (all inherit BaseContextProvider):**
608
+ - `DefaultContextProvider` - Full blackboard access (visibility-filtered)
609
+ - `CorrelatedContextProvider` - Workflow isolation (visibility-filtered)
610
+ - `RecentContextProvider` - Token cost control (visibility-filtered)
611
+ - `TimeWindowContextProvider` - Time-based filtering (visibility-filtered)
612
+ - `EmptyContextProvider` - Stateless agents (zero context)
613
+ - `FilteredContextProvider` - Custom filtering (visibility-filtered)
614
+
615
+ **Every single one enforces visibility automatically. Zero chance of accidentally leaking data.**
616
+
617
+ This isn't just convenient—it's **security by design**. When you're building HIPAA-compliant healthcare systems or SOC2-certified SaaS platforms, "impossible to bypass even by accident" is the only acceptable standard.
618
+
619
+ ---
620
+
621
+ ### Context Providers (The Smart Filter)
622
+
623
+ **Control what agents see with custom Context Providers:**
624
+
625
+ ```python
626
+ from flock.context_provider import FilteredContextProvider, PasswordRedactorProvider
627
+ from flock.store import FilterConfig
628
+
629
+ # Global filtering - all agents see only urgent items
630
+ flock = Flock(
631
+ "openai/gpt-4.1",
632
+ context_provider=FilteredContextProvider(FilterConfig(tags={"urgent"}))
633
+ )
634
+
635
+ # Per-agent overrides - specialized context per agent
636
+ error_agent = flock.agent("errors").consumes(Log).publishes(Alert)
637
+ error_agent.context_provider = FilteredContextProvider(FilterConfig(tags={"ERROR"}))
638
+
639
+ # Production-ready password filtering
640
+ from examples.context_provider import PasswordRedactorProvider
641
+ flock = Flock(
642
+ "openai/gpt-4.1",
643
+ context_provider=PasswordRedactorProvider() # Auto-redacts sensitive data!
644
+ )
645
+ ```
646
+
647
+ **What just happened:**
648
+ - ✅ **Filtered context** - Agents see only relevant artifacts (save tokens, improve performance)
649
+ - ✅ **Security boundary** - Visibility enforcement + custom filtering (mandatory, cannot bypass)
650
+ - ✅ **Sensitive data protection** - Auto-redact passwords, API keys, credit cards, SSN, JWT tokens
651
+ - ✅ **Per-agent specialization** - Different agents, different context rules
652
+
653
+ **Production patterns:**
654
+ ```python
655
+ # Password/secret redaction (copy-paste ready!)
656
+ provider = PasswordRedactorProvider(
657
+ custom_patterns={"internal_id": r"ID-\d{6}"},
658
+ redaction_text="[REDACTED]"
659
+ )
660
+
661
+ # Role-based access control
662
+ junior_agent.context_provider = FilteredContextProvider(FilterConfig(tags={"ERROR"}))
663
+ senior_agent.context_provider = FilteredContextProvider(FilterConfig(tags={"ERROR", "WARN"}))
664
+ admin_agent.context_provider = None # See everything (uses default)
665
+
666
+ # Multi-tenant isolation
667
+ agent.context_provider = FilteredContextProvider(
668
+ FilterConfig(tags={"tenant:customer_123"})
669
+ )
670
+ ```
671
+
672
+ **Why this matters:** Reduce token costs (90%+ with smart filtering), protect sensitive data (auto-redact secrets), improve performance (agents see only what they need).
673
+
674
+ **📖 [Learn more: Context Providers Guide](https://whiteducksoftware.github.io/flock/guides/context-providers/) | [Steal production code →](examples/08-context-provider/)**
675
+
546
676
  ### Batching Pattern: Parallel Execution Control
547
677
 
548
678
  **A key differentiator:** The separation of `publish()` and `run_until_idle()` enables parallel execution.
@@ -4,7 +4,7 @@
4
4
  <p align="center">
5
5
  <a href="https://whiteducksoftware.github.io/flock/" target="_blank"><img alt="Documentation" src="https://img.shields.io/badge/docs-online-blue?style=for-the-badge&logo=readthedocs"></a>
6
6
  <a href="https://pypi.org/project/flock-core/" target="_blank"><img alt="PyPI Version" src="https://img.shields.io/pypi/v/flock-core?style=for-the-badge&logo=pypi&label=pip%20version"></a>
7
- <img alt="Python Version" src="https://img.shields.io/badge/python-3.10%2B-blue?style=for-the-badge&logo=python">
7
+ <img alt="Python Version" src="https://img.shields.io/badge/python-3.12%2B-blue?style=for-the-badge&logo=python">
8
8
  <a href="LICENSE" target="_blank"><img alt="License" src="https://img.shields.io/github/license/whiteducksoftware/flock?style=for-the-badge"></a>
9
9
  <a href="https://whiteduck.de" target="_blank"><img alt="Built by white duck" src="https://img.shields.io/badge/Built%20by-white%20duck%20GmbH-white?style=for-the-badge&labelColor=black"></a>
10
10
  <a href="https://codecov.io/gh/whiteducksoftware/flock" target="_blank"><img alt="Test Coverage" src="https://codecov.io/gh/whiteducksoftware/flock/branch/main/graph/badge.svg?token=YOUR_TOKEN_HERE&style=for-the-badge"></a>
@@ -254,6 +254,39 @@ asyncio.run(main())
254
254
 
255
255
  ---
256
256
 
257
+ ## Context Provider Primer (Security + Cost)
258
+
259
+ Context Providers are the security and efficiency layer between agents and the blackboard. They decide what each agent sees in its historical context and always enforce visibility rules.
260
+
261
+ Why use them
262
+ - Enforce access control (visibility is applied before engines see data)
263
+ - Cut context size (often 90%+) by filtering to what matters
264
+ - Specialize per agent or set a global default
265
+
266
+ Copy/paste examples
267
+ ```python
268
+ from flock import Flock
269
+ from flock.context_provider import FilteredContextProvider
270
+ from flock.store import FilterConfig
271
+
272
+ # Global: show only urgent items (limit context size)
273
+ flock = Flock(
274
+ "openai/gpt-4.1",
275
+ context_provider=FilteredContextProvider(FilterConfig(tags={"urgent"}), limit=50)
276
+ )
277
+
278
+ # Per-agent: override global for a specific role
279
+ senior = flock.agent("senior").consumes(LogEntry).publishes(Analysis)
280
+ senior.context_provider = FilteredContextProvider(
281
+ FilterConfig(tags={"ERROR", "WARN"}),
282
+ limit=200
283
+ )
284
+ ```
285
+
286
+ Learn more: docs/guides/context-providers.md
287
+
288
+ ---
289
+
257
290
  ## Persistent Blackboard History
258
291
 
259
292
  The in-memory store is still great for local tinkering, but production teams now have a durable option. Plugging in `SQLiteBlackboardStore` turns the blackboard into a persistent event log with first-class ergonomics:
@@ -508,8 +541,105 @@ artifact.visibility = AfterVisibility(ttl=timedelta(hours=24), then=PublicVisibi
508
541
  agent.publishes(PublicReport, visibility=PublicVisibility())
509
542
  ```
510
543
 
544
+ **Visibility has a dual purpose:** It controls both which agents can be **triggered** by an artifact AND which artifacts agents can **see** in their context. This ensures consistent security across agent execution and data access—agents cannot bypass visibility controls through subscription filters or context providers.
545
+
511
546
  **Why this matters:** Financial services, healthcare, defense, SaaS platforms all need this for compliance. Other frameworks make you build it yourself.
512
547
 
548
+ ---
549
+
550
+ ### 🔒 Architecturally Impossible to Bypass Security
551
+
552
+ **Here's what makes Flock different:** In most frameworks, security is something you remember to add. In Flock, **it's architecturally impossible to forget.**
553
+
554
+ Every context provider in Flock inherits from `BaseContextProvider`, which enforces visibility filtering **automatically**. You literally cannot create a provider that forgets to check permissions—the security logic is baked into the base class and executes before your custom code even runs.
555
+
556
+ **What this means in practice:**
557
+
558
+ ```python
559
+ # ❌ Other frameworks: Security is your responsibility (easy to forget!)
560
+ class MyProvider:
561
+ async def get_context(self, agent):
562
+ artifacts = store.get_all() # OOPS! Forgot to check visibility!
563
+ return artifacts # 🔥 Security vulnerability
564
+
565
+ # ✅ Flock: Security is enforced automatically (impossible to bypass!)
566
+ class MyProvider(BaseContextProvider):
567
+ async def get_artifacts(self, request):
568
+ artifacts = await store.query_artifacts(...)
569
+ return artifacts # ✨ Visibility filtering happens automatically!
570
+ # BaseContextProvider calls .visibility.allows() for you
571
+ # You CANNOT bypass this - it's enforced by the architecture
572
+ ```
573
+
574
+ **Built-in providers (all inherit BaseContextProvider):**
575
+ - `DefaultContextProvider` - Full blackboard access (visibility-filtered)
576
+ - `CorrelatedContextProvider` - Workflow isolation (visibility-filtered)
577
+ - `RecentContextProvider` - Token cost control (visibility-filtered)
578
+ - `TimeWindowContextProvider` - Time-based filtering (visibility-filtered)
579
+ - `EmptyContextProvider` - Stateless agents (zero context)
580
+ - `FilteredContextProvider` - Custom filtering (visibility-filtered)
581
+
582
+ **Every single one enforces visibility automatically. Zero chance of accidentally leaking data.**
583
+
584
+ This isn't just convenient—it's **security by design**. When you're building HIPAA-compliant healthcare systems or SOC2-certified SaaS platforms, "impossible to bypass even by accident" is the only acceptable standard.
585
+
586
+ ---
587
+
588
+ ### Context Providers (The Smart Filter)
589
+
590
+ **Control what agents see with custom Context Providers:**
591
+
592
+ ```python
593
+ from flock.context_provider import FilteredContextProvider, PasswordRedactorProvider
594
+ from flock.store import FilterConfig
595
+
596
+ # Global filtering - all agents see only urgent items
597
+ flock = Flock(
598
+ "openai/gpt-4.1",
599
+ context_provider=FilteredContextProvider(FilterConfig(tags={"urgent"}))
600
+ )
601
+
602
+ # Per-agent overrides - specialized context per agent
603
+ error_agent = flock.agent("errors").consumes(Log).publishes(Alert)
604
+ error_agent.context_provider = FilteredContextProvider(FilterConfig(tags={"ERROR"}))
605
+
606
+ # Production-ready password filtering
607
+ from examples.context_provider import PasswordRedactorProvider
608
+ flock = Flock(
609
+ "openai/gpt-4.1",
610
+ context_provider=PasswordRedactorProvider() # Auto-redacts sensitive data!
611
+ )
612
+ ```
613
+
614
+ **What just happened:**
615
+ - ✅ **Filtered context** - Agents see only relevant artifacts (save tokens, improve performance)
616
+ - ✅ **Security boundary** - Visibility enforcement + custom filtering (mandatory, cannot bypass)
617
+ - ✅ **Sensitive data protection** - Auto-redact passwords, API keys, credit cards, SSN, JWT tokens
618
+ - ✅ **Per-agent specialization** - Different agents, different context rules
619
+
620
+ **Production patterns:**
621
+ ```python
622
+ # Password/secret redaction (copy-paste ready!)
623
+ provider = PasswordRedactorProvider(
624
+ custom_patterns={"internal_id": r"ID-\d{6}"},
625
+ redaction_text="[REDACTED]"
626
+ )
627
+
628
+ # Role-based access control
629
+ junior_agent.context_provider = FilteredContextProvider(FilterConfig(tags={"ERROR"}))
630
+ senior_agent.context_provider = FilteredContextProvider(FilterConfig(tags={"ERROR", "WARN"}))
631
+ admin_agent.context_provider = None # See everything (uses default)
632
+
633
+ # Multi-tenant isolation
634
+ agent.context_provider = FilteredContextProvider(
635
+ FilterConfig(tags={"tenant:customer_123"})
636
+ )
637
+ ```
638
+
639
+ **Why this matters:** Reduce token costs (90%+ with smart filtering), protect sensitive data (auto-redact secrets), improve performance (agents see only what they need).
640
+
641
+ **📖 [Learn more: Context Providers Guide](https://whiteducksoftware.github.io/flock/guides/context-providers/) | [Steal production code →](examples/08-context-provider/)**
642
+
513
643
  ### Batching Pattern: Parallel Execution Control
514
644
 
515
645
  **A key differentiator:** The separation of `publish()` and `run_until_idle()` enables parallel execution.