flock-core 0.5.0b27__py3-none-any.whl → 0.5.0b50__py3-none-any.whl

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 (357) hide show
  1. flock/__init__.py +12 -217
  2. flock/agent.py +678 -0
  3. flock/api/themes.py +71 -0
  4. flock/artifacts.py +79 -0
  5. flock/cli.py +75 -0
  6. flock/components.py +173 -0
  7. flock/dashboard/__init__.py +28 -0
  8. flock/dashboard/collector.py +283 -0
  9. flock/dashboard/events.py +182 -0
  10. flock/dashboard/launcher.py +230 -0
  11. flock/dashboard/service.py +537 -0
  12. flock/dashboard/websocket.py +235 -0
  13. flock/engines/__init__.py +6 -0
  14. flock/engines/dspy_engine.py +856 -0
  15. flock/examples.py +128 -0
  16. flock/{core/util → helper}/cli_helper.py +4 -3
  17. flock/{core/logging → logging}/__init__.py +2 -3
  18. flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
  19. flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
  20. flock/{core/logging → logging}/formatters/themed_formatter.py +69 -115
  21. flock/{core/logging → logging}/logging.py +77 -61
  22. flock/{core/logging → logging}/telemetry.py +20 -26
  23. flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
  24. flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +6 -9
  25. flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
  26. flock/{core/logging → logging}/trace_and_logged.py +20 -24
  27. flock/mcp/__init__.py +91 -0
  28. flock/{core/mcp/mcp_client.py → mcp/client.py} +103 -154
  29. flock/{core/mcp/mcp_config.py → mcp/config.py} +62 -117
  30. flock/mcp/manager.py +255 -0
  31. flock/mcp/servers/sse/__init__.py +1 -1
  32. flock/mcp/servers/sse/flock_sse_server.py +11 -53
  33. flock/mcp/servers/stdio/__init__.py +1 -1
  34. flock/mcp/servers/stdio/flock_stdio_server.py +8 -48
  35. flock/mcp/servers/streamable_http/flock_streamable_http_server.py +17 -62
  36. flock/mcp/servers/websockets/flock_websocket_server.py +7 -40
  37. flock/{core/mcp/flock_mcp_tool.py → mcp/tool.py} +16 -26
  38. flock/mcp/types/__init__.py +42 -0
  39. flock/{core/mcp → mcp}/types/callbacks.py +9 -15
  40. flock/{core/mcp → mcp}/types/factories.py +7 -6
  41. flock/{core/mcp → mcp}/types/handlers.py +13 -18
  42. flock/{core/mcp → mcp}/types/types.py +70 -74
  43. flock/{core/mcp → mcp}/util/helpers.py +1 -1
  44. flock/orchestrator.py +645 -0
  45. flock/registry.py +148 -0
  46. flock/runtime.py +262 -0
  47. flock/service.py +140 -0
  48. flock/store.py +69 -0
  49. flock/subscription.py +111 -0
  50. flock/themes/andromeda.toml +1 -1
  51. flock/themes/apple-system-colors.toml +1 -1
  52. flock/themes/arcoiris.toml +1 -1
  53. flock/themes/atomonelight.toml +1 -1
  54. flock/themes/ayu copy.toml +1 -1
  55. flock/themes/ayu-light.toml +1 -1
  56. flock/themes/belafonte-day.toml +1 -1
  57. flock/themes/belafonte-night.toml +1 -1
  58. flock/themes/blulocodark.toml +1 -1
  59. flock/themes/breeze.toml +1 -1
  60. flock/themes/broadcast.toml +1 -1
  61. flock/themes/brogrammer.toml +1 -1
  62. flock/themes/builtin-dark.toml +1 -1
  63. flock/themes/builtin-pastel-dark.toml +1 -1
  64. flock/themes/catppuccin-latte.toml +1 -1
  65. flock/themes/catppuccin-macchiato.toml +1 -1
  66. flock/themes/catppuccin-mocha.toml +1 -1
  67. flock/themes/cga.toml +1 -1
  68. flock/themes/chalk.toml +1 -1
  69. flock/themes/ciapre.toml +1 -1
  70. flock/themes/coffee-theme.toml +1 -1
  71. flock/themes/cyberpunkscarletprotocol.toml +1 -1
  72. flock/themes/dark+.toml +1 -1
  73. flock/themes/darkermatrix.toml +1 -1
  74. flock/themes/darkside.toml +1 -1
  75. flock/themes/desert.toml +1 -1
  76. flock/themes/django.toml +1 -1
  77. flock/themes/djangosmooth.toml +1 -1
  78. flock/themes/doomone.toml +1 -1
  79. flock/themes/dotgov.toml +1 -1
  80. flock/themes/dracula+.toml +1 -1
  81. flock/themes/duckbones.toml +1 -1
  82. flock/themes/encom.toml +1 -1
  83. flock/themes/espresso.toml +1 -1
  84. flock/themes/everblush.toml +1 -1
  85. flock/themes/fairyfloss.toml +1 -1
  86. flock/themes/fideloper.toml +1 -1
  87. flock/themes/fishtank.toml +1 -1
  88. flock/themes/flexoki-light.toml +1 -1
  89. flock/themes/floraverse.toml +1 -1
  90. flock/themes/framer.toml +1 -1
  91. flock/themes/galizur.toml +1 -1
  92. flock/themes/github.toml +1 -1
  93. flock/themes/grass.toml +1 -1
  94. flock/themes/grey-green.toml +1 -1
  95. flock/themes/gruvboxlight.toml +1 -1
  96. flock/themes/guezwhoz.toml +1 -1
  97. flock/themes/harper.toml +1 -1
  98. flock/themes/hax0r-blue.toml +1 -1
  99. flock/themes/hopscotch.256.toml +1 -1
  100. flock/themes/ic-green-ppl.toml +1 -1
  101. flock/themes/iceberg-dark.toml +1 -1
  102. flock/themes/japanesque.toml +1 -1
  103. flock/themes/jubi.toml +1 -1
  104. flock/themes/kibble.toml +1 -1
  105. flock/themes/kolorit.toml +1 -1
  106. flock/themes/kurokula.toml +1 -1
  107. flock/themes/materialdesigncolors.toml +1 -1
  108. flock/themes/matrix.toml +1 -1
  109. flock/themes/mellifluous.toml +1 -1
  110. flock/themes/midnight-in-mojave.toml +1 -1
  111. flock/themes/monokai-remastered.toml +1 -1
  112. flock/themes/monokai-soda.toml +1 -1
  113. flock/themes/neon.toml +1 -1
  114. flock/themes/neopolitan.toml +1 -1
  115. flock/themes/nord-light.toml +1 -1
  116. flock/themes/ocean.toml +1 -1
  117. flock/themes/onehalfdark.toml +1 -1
  118. flock/themes/onehalflight.toml +1 -1
  119. flock/themes/palenighthc.toml +1 -1
  120. flock/themes/paulmillr.toml +1 -1
  121. flock/themes/pencildark.toml +1 -1
  122. flock/themes/pnevma.toml +1 -1
  123. flock/themes/purple-rain.toml +1 -1
  124. flock/themes/purplepeter.toml +1 -1
  125. flock/themes/raycast-dark.toml +1 -1
  126. flock/themes/red-sands.toml +1 -1
  127. flock/themes/relaxed.toml +1 -1
  128. flock/themes/retro.toml +1 -1
  129. flock/themes/rose-pine.toml +1 -1
  130. flock/themes/royal.toml +1 -1
  131. flock/themes/ryuuko.toml +1 -1
  132. flock/themes/sakura.toml +1 -1
  133. flock/themes/scarlet-protocol.toml +1 -1
  134. flock/themes/seoulbones-dark.toml +1 -1
  135. flock/themes/shades-of-purple.toml +1 -1
  136. flock/themes/smyck.toml +1 -1
  137. flock/themes/softserver.toml +1 -1
  138. flock/themes/solarized-darcula.toml +1 -1
  139. flock/themes/square.toml +1 -1
  140. flock/themes/sugarplum.toml +1 -1
  141. flock/themes/thayer-bright.toml +1 -1
  142. flock/themes/tokyonight.toml +1 -1
  143. flock/themes/tomorrow.toml +1 -1
  144. flock/themes/ubuntu.toml +1 -1
  145. flock/themes/ultradark.toml +1 -1
  146. flock/themes/ultraviolent.toml +1 -1
  147. flock/themes/unikitty.toml +1 -1
  148. flock/themes/urple.toml +1 -1
  149. flock/themes/vesper.toml +1 -1
  150. flock/themes/vimbones.toml +1 -1
  151. flock/themes/wildcherry.toml +1 -1
  152. flock/themes/wilmersdorf.toml +1 -1
  153. flock/themes/wryan.toml +1 -1
  154. flock/themes/xcodedarkhc.toml +1 -1
  155. flock/themes/xcodelight.toml +1 -1
  156. flock/themes/zenbones-light.toml +1 -1
  157. flock/themes/zenwritten-dark.toml +1 -1
  158. flock/utilities.py +301 -0
  159. flock/{components/utility → utility}/output_utility_component.py +68 -53
  160. flock/visibility.py +107 -0
  161. flock_core-0.5.0b50.dist-info/METADATA +747 -0
  162. flock_core-0.5.0b50.dist-info/RECORD +398 -0
  163. flock_core-0.5.0b50.dist-info/entry_points.txt +2 -0
  164. {flock_core-0.5.0b27.dist-info → flock_core-0.5.0b50.dist-info}/licenses/LICENSE +1 -1
  165. flock/adapter/__init__.py +0 -14
  166. flock/adapter/azure_adapter.py +0 -68
  167. flock/adapter/chroma_adapter.py +0 -73
  168. flock/adapter/faiss_adapter.py +0 -97
  169. flock/adapter/pinecone_adapter.py +0 -51
  170. flock/adapter/vector_base.py +0 -47
  171. flock/cli/assets/release_notes.md +0 -140
  172. flock/cli/config.py +0 -8
  173. flock/cli/constants.py +0 -36
  174. flock/cli/create_agent.py +0 -1
  175. flock/cli/create_flock.py +0 -280
  176. flock/cli/execute_flock.py +0 -620
  177. flock/cli/load_agent.py +0 -1
  178. flock/cli/load_examples.py +0 -1
  179. flock/cli/load_flock.py +0 -192
  180. flock/cli/load_release_notes.py +0 -20
  181. flock/cli/loaded_flock_cli.py +0 -254
  182. flock/cli/manage_agents.py +0 -459
  183. flock/cli/registry_management.py +0 -889
  184. flock/cli/runner.py +0 -41
  185. flock/cli/settings.py +0 -857
  186. flock/cli/utils.py +0 -135
  187. flock/cli/view_results.py +0 -29
  188. flock/cli/yaml_editor.py +0 -396
  189. flock/components/__init__.py +0 -30
  190. flock/components/evaluation/__init__.py +0 -9
  191. flock/components/evaluation/declarative_evaluation_component.py +0 -606
  192. flock/components/routing/__init__.py +0 -15
  193. flock/components/routing/conditional_routing_component.py +0 -494
  194. flock/components/routing/default_routing_component.py +0 -103
  195. flock/components/routing/llm_routing_component.py +0 -206
  196. flock/components/utility/__init__.py +0 -15
  197. flock/components/utility/memory_utility_component.py +0 -550
  198. flock/components/utility/metrics_utility_component.py +0 -700
  199. flock/config.py +0 -61
  200. flock/core/__init__.py +0 -110
  201. flock/core/agent/__init__.py +0 -16
  202. flock/core/agent/default_agent.py +0 -180
  203. flock/core/agent/flock_agent_components.py +0 -104
  204. flock/core/agent/flock_agent_execution.py +0 -101
  205. flock/core/agent/flock_agent_integration.py +0 -260
  206. flock/core/agent/flock_agent_lifecycle.py +0 -186
  207. flock/core/agent/flock_agent_serialization.py +0 -381
  208. flock/core/api/__init__.py +0 -10
  209. flock/core/api/custom_endpoint.py +0 -45
  210. flock/core/api/endpoints.py +0 -254
  211. flock/core/api/main.py +0 -162
  212. flock/core/api/models.py +0 -97
  213. flock/core/api/run_store.py +0 -224
  214. flock/core/api/runner.py +0 -44
  215. flock/core/api/service.py +0 -214
  216. flock/core/component/__init__.py +0 -15
  217. flock/core/component/agent_component_base.py +0 -309
  218. flock/core/component/evaluation_component.py +0 -62
  219. flock/core/component/routing_component.py +0 -74
  220. flock/core/component/utility_component.py +0 -69
  221. flock/core/config/flock_agent_config.py +0 -58
  222. flock/core/config/scheduled_agent_config.py +0 -40
  223. flock/core/context/context.py +0 -213
  224. flock/core/context/context_manager.py +0 -37
  225. flock/core/context/context_vars.py +0 -10
  226. flock/core/evaluation/utils.py +0 -396
  227. flock/core/execution/batch_executor.py +0 -369
  228. flock/core/execution/evaluation_executor.py +0 -438
  229. flock/core/execution/local_executor.py +0 -31
  230. flock/core/execution/opik_executor.py +0 -103
  231. flock/core/execution/temporal_executor.py +0 -164
  232. flock/core/flock.py +0 -634
  233. flock/core/flock_agent.py +0 -336
  234. flock/core/flock_factory.py +0 -551
  235. flock/core/flock_scheduler.py +0 -166
  236. flock/core/flock_server_manager.py +0 -136
  237. flock/core/interpreter/python_interpreter.py +0 -689
  238. flock/core/mcp/__init__.py +0 -1
  239. flock/core/mcp/flock_mcp_server.py +0 -680
  240. flock/core/mcp/mcp_client_manager.py +0 -201
  241. flock/core/mcp/types/__init__.py +0 -1
  242. flock/core/mixin/dspy_integration.py +0 -403
  243. flock/core/mixin/prompt_parser.py +0 -125
  244. flock/core/orchestration/__init__.py +0 -15
  245. flock/core/orchestration/flock_batch_processor.py +0 -94
  246. flock/core/orchestration/flock_evaluator.py +0 -113
  247. flock/core/orchestration/flock_execution.py +0 -295
  248. flock/core/orchestration/flock_initialization.py +0 -149
  249. flock/core/orchestration/flock_server_manager.py +0 -67
  250. flock/core/orchestration/flock_web_server.py +0 -117
  251. flock/core/registry/__init__.py +0 -45
  252. flock/core/registry/agent_registry.py +0 -69
  253. flock/core/registry/callable_registry.py +0 -139
  254. flock/core/registry/component_discovery.py +0 -142
  255. flock/core/registry/component_registry.py +0 -64
  256. flock/core/registry/config_mapping.py +0 -64
  257. flock/core/registry/decorators.py +0 -137
  258. flock/core/registry/registry_hub.py +0 -205
  259. flock/core/registry/server_registry.py +0 -57
  260. flock/core/registry/type_registry.py +0 -86
  261. flock/core/serialization/__init__.py +0 -13
  262. flock/core/serialization/callable_registry.py +0 -52
  263. flock/core/serialization/flock_serializer.py +0 -832
  264. flock/core/serialization/json_encoder.py +0 -41
  265. flock/core/serialization/secure_serializer.py +0 -175
  266. flock/core/serialization/serializable.py +0 -342
  267. flock/core/serialization/serialization_utils.py +0 -412
  268. flock/core/util/file_path_utils.py +0 -223
  269. flock/core/util/hydrator.py +0 -309
  270. flock/core/util/input_resolver.py +0 -164
  271. flock/core/util/loader.py +0 -59
  272. flock/core/util/splitter.py +0 -219
  273. flock/di.py +0 -27
  274. flock/platform/docker_tools.py +0 -49
  275. flock/platform/jaeger_install.py +0 -86
  276. flock/webapp/__init__.py +0 -1
  277. flock/webapp/app/__init__.py +0 -0
  278. flock/webapp/app/api/__init__.py +0 -0
  279. flock/webapp/app/api/agent_management.py +0 -241
  280. flock/webapp/app/api/execution.py +0 -709
  281. flock/webapp/app/api/flock_management.py +0 -129
  282. flock/webapp/app/api/registry_viewer.py +0 -30
  283. flock/webapp/app/chat.py +0 -665
  284. flock/webapp/app/config.py +0 -104
  285. flock/webapp/app/dependencies.py +0 -117
  286. flock/webapp/app/main.py +0 -1070
  287. flock/webapp/app/middleware.py +0 -113
  288. flock/webapp/app/models_ui.py +0 -7
  289. flock/webapp/app/services/__init__.py +0 -0
  290. flock/webapp/app/services/feedback_file_service.py +0 -363
  291. flock/webapp/app/services/flock_service.py +0 -337
  292. flock/webapp/app/services/sharing_models.py +0 -81
  293. flock/webapp/app/services/sharing_store.py +0 -598
  294. flock/webapp/app/templates/theme_mapper.html +0 -326
  295. flock/webapp/app/theme_mapper.py +0 -812
  296. flock/webapp/app/utils.py +0 -85
  297. flock/webapp/run.py +0 -215
  298. flock/webapp/static/css/chat.css +0 -301
  299. flock/webapp/static/css/components.css +0 -167
  300. flock/webapp/static/css/header.css +0 -39
  301. flock/webapp/static/css/layout.css +0 -46
  302. flock/webapp/static/css/sidebar.css +0 -127
  303. flock/webapp/static/css/two-pane.css +0 -48
  304. flock/webapp/templates/base.html +0 -200
  305. flock/webapp/templates/chat.html +0 -152
  306. flock/webapp/templates/chat_settings.html +0 -19
  307. flock/webapp/templates/flock_editor.html +0 -16
  308. flock/webapp/templates/index.html +0 -12
  309. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  310. flock/webapp/templates/partials/_agent_list.html +0 -18
  311. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  312. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  313. flock/webapp/templates/partials/_chat_container.html +0 -15
  314. flock/webapp/templates/partials/_chat_messages.html +0 -57
  315. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  316. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  317. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  318. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  319. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  320. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  321. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  322. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  323. flock/webapp/templates/partials/_execution_form.html +0 -118
  324. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  325. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  326. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  327. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  328. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  329. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  330. flock/webapp/templates/partials/_registry_table.html +0 -25
  331. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  332. flock/webapp/templates/partials/_results_display.html +0 -78
  333. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  334. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  335. flock/webapp/templates/partials/_settings_view.html +0 -36
  336. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  337. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  338. flock/webapp/templates/partials/_sidebar.html +0 -74
  339. flock/webapp/templates/partials/_streaming_results_container.html +0 -195
  340. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  341. flock/webapp/templates/partials/_theme_preview.html +0 -36
  342. flock/webapp/templates/registry_viewer.html +0 -84
  343. flock/webapp/templates/shared_run_page.html +0 -140
  344. flock/workflow/__init__.py +0 -0
  345. flock/workflow/activities.py +0 -196
  346. flock/workflow/agent_activities.py +0 -24
  347. flock/workflow/agent_execution_activity.py +0 -202
  348. flock/workflow/flock_workflow.py +0 -214
  349. flock/workflow/temporal_config.py +0 -96
  350. flock/workflow/temporal_setup.py +0 -68
  351. flock_core-0.5.0b27.dist-info/METADATA +0 -274
  352. flock_core-0.5.0b27.dist-info/RECORD +0 -559
  353. flock_core-0.5.0b27.dist-info/entry_points.txt +0 -2
  354. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  355. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  356. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  357. {flock_core-0.5.0b27.dist-info → flock_core-0.5.0b50.dist-info}/WHEEL +0 -0
@@ -14,15 +14,14 @@ from mcp.shared.message import SessionMessage
14
14
  from opentelemetry import trace
15
15
  from pydantic import Field
16
16
 
17
- from flock.core.logging.logging import get_logger
18
- from flock.core.mcp.flock_mcp_server import FlockMCPServer
19
- from flock.core.mcp.mcp_client import FlockMCPClient
20
- from flock.core.mcp.mcp_client_manager import FlockMCPClientManager
21
- from flock.core.mcp.mcp_config import (
17
+ from flock.logging.logging import get_logger
18
+ from flock.mcp.client import FlockMCPClient
19
+ from flock.mcp.config import (
22
20
  FlockMCPConfiguration,
23
21
  FlockMCPConnectionConfiguration,
24
22
  )
25
- from flock.core.mcp.types.types import SseServerParameters
23
+ from flock.mcp.types import SseServerParameters
24
+
26
25
 
27
26
  logger = get_logger("mcp.sse.server")
28
27
  tracer = trace.get_tracer(__name__)
@@ -33,9 +32,7 @@ class FlockSSEConnectionConfig(FlockMCPConnectionConfiguration):
33
32
 
34
33
  # Only thing we need to override here is the concrete transport_type
35
34
  # and connection_parameters fields.
36
- transport_type: Literal["sse"] = Field(
37
- default="sse", description="Use the sse transport type."
38
- )
35
+ transport_type: Literal["sse"] = Field(default="sse", description="Use the sse transport type.")
39
36
 
40
37
  connection_parameters: SseServerParameters = Field(
41
38
  ..., description="SSE Server Connection Parameters."
@@ -56,7 +53,7 @@ class FlockSSEConfig(FlockMCPConfiguration):
56
53
  class FlockSSEClient(FlockMCPClient):
57
54
  """Client for SSE Servers."""
58
55
 
59
- config: FlockSSEConfig = Field(..., description="Client configuration.")
56
+ config: FlockMCPConfiguration = Field(..., description="Client configuration.")
60
57
 
61
58
  async def create_transport(
62
59
  self,
@@ -73,22 +70,14 @@ class FlockSSEClient(FlockMCPClient):
73
70
  param_copy = copy.deepcopy(params)
74
71
 
75
72
  if additional_params:
76
- override_headers = bool(
77
- additional_params.get("override_headers", False)
78
- )
73
+ override_headers = bool(additional_params.get("override_headers", False))
79
74
  if "headers" in additional_params:
80
75
  if override_headers:
81
- param_copy.headers = additional_params.get(
82
- "headers", params.headers
83
- )
76
+ param_copy.headers = additional_params.get("headers", params.headers)
84
77
  else:
85
- param_copy.headers.update(
86
- additional_params.get("headers", {})
87
- )
78
+ param_copy.headers.update(additional_params.get("headers", {}))
88
79
  if "read_timeout_seconds" in additional_params:
89
- param_copy.timeout = additional_params.get(
90
- "read_timeout_seconds", params.timeout
91
- )
80
+ param_copy.timeout = additional_params.get("read_timeout_seconds", params.timeout)
92
81
 
93
82
  if "sse_read_timeout" in additional_params:
94
83
  param_copy.sse_read_timeout = additional_params.get(
@@ -113,34 +102,3 @@ class FlockSSEClient(FlockMCPClient):
113
102
  timeout=float(param_copy.timeout),
114
103
  sse_read_timeout=float(param_copy.sse_read_timeout),
115
104
  )
116
-
117
-
118
- class FlockSSEClientManager(FlockMCPClientManager):
119
- """Manager for handling SSE Clients."""
120
-
121
- client_config: FlockSSEConfig = Field(
122
- ..., description="Configuration for clients."
123
- )
124
-
125
- async def make_client(
126
- self, additional_params: dict[str, Any]
127
- ) -> FlockSSEClient:
128
- """Create a new client instance."""
129
- new_client = FlockSSEClient(
130
- config=self.client_config, additional_params=additional_params
131
- )
132
- return new_client
133
-
134
-
135
- class FlockSSEServer(FlockMCPServer):
136
- """Class which represents a MCP Server using the SSE Transport type."""
137
-
138
- config: FlockSSEConfig = Field(..., description="Config for the server.")
139
-
140
- async def initialize(self) -> FlockSSEClientManager:
141
- """Called when initializing the server."""
142
- client_manager = FlockSSEClientManager(
143
- client_config=self.config,
144
- )
145
-
146
- return client_manager
@@ -1 +1 @@
1
- """Default Stdio Server Implementation for Flock."""
1
+ """Default Stdio Server Implementation for flock."""
@@ -13,15 +13,14 @@ from mcp.types import JSONRPCMessage
13
13
  from opentelemetry import trace
14
14
  from pydantic import Field
15
15
 
16
- from flock.core.logging.logging import get_logger
17
- from flock.core.mcp.flock_mcp_server import FlockMCPServer
18
- from flock.core.mcp.mcp_client import FlockMCPClient
19
- from flock.core.mcp.mcp_client_manager import FlockMCPClientManager
20
- from flock.core.mcp.mcp_config import (
16
+ from flock.logging.logging import get_logger
17
+ from flock.mcp.client import FlockMCPClient
18
+ from flock.mcp.config import (
21
19
  FlockMCPConfiguration,
22
20
  FlockMCPConnectionConfiguration,
23
21
  )
24
- from flock.core.mcp.types.types import StdioServerParameters
22
+ from flock.mcp.types import StdioServerParameters
23
+
25
24
 
26
25
  logger = get_logger("mcp.stdio.server")
27
26
  tracer = trace.get_tracer(__name__)
@@ -56,7 +55,7 @@ class FlockStdioConfig(FlockMCPConfiguration):
56
55
  class FlockStdioClient(FlockMCPClient):
57
56
  """Client for Stdio Servers."""
58
57
 
59
- config: FlockStdioConfig = Field(..., description="Client Configuration.")
58
+ config: FlockMCPConfiguration = Field(..., description="Client Configuration.")
60
59
 
61
60
  async def create_transport(
62
61
  self,
@@ -78,9 +77,7 @@ class FlockStdioClient(FlockMCPClient):
78
77
  if additional_params:
79
78
  # If it is present, then modify server parameters based on certain keys.
80
79
  if "command" in additional_params:
81
- param_copy.command = additional_params.get(
82
- "command", params.command
83
- )
80
+ param_copy.command = additional_params.get("command", params.command)
84
81
  if "args" in additional_params:
85
82
  param_copy.args = additional_params.get("args", params.command)
86
83
  if "env" in additional_params:
@@ -90,9 +87,7 @@ class FlockStdioClient(FlockMCPClient):
90
87
  param_copy.cwd = additional_params.get("cwd", params.env)
91
88
 
92
89
  if "encoding" in additional_params:
93
- param_copy.encoding = additional_params.get(
94
- "encoding", params.encoding
95
- )
90
+ param_copy.encoding = additional_params.get("encoding", params.encoding)
96
91
 
97
92
  if "encoding_error_handler" in additional_params:
98
93
  param_copy.encoding_error_handler = additional_params.get(
@@ -101,38 +96,3 @@ class FlockStdioClient(FlockMCPClient):
101
96
 
102
97
  # stdio_client already is an AsyncContextManager
103
98
  return stdio_client(server=param_copy)
104
-
105
-
106
- # Not really needed but kept here as an example.
107
- class FlockStdioClientManager(FlockMCPClientManager):
108
- """Manager for handling Stdio Clients."""
109
-
110
- client_config: FlockStdioConfig = Field(
111
- ..., description="Configuration for clients."
112
- )
113
-
114
- async def make_client(
115
- self, additional_params: dict[str, Any] | None = None
116
- ):
117
- """Create a new client instance with any additional parameters."""
118
- new_client = FlockStdioClient(
119
- config=self.client_config,
120
- additional_params=additional_params,
121
- )
122
- return new_client
123
-
124
-
125
- class FlockMCPStdioServer(FlockMCPServer):
126
- """Class which represents a MCP Server using the Stdio Transport type.
127
-
128
- This means (most likely) that the server is a locally
129
- executed script.
130
- """
131
-
132
- config: FlockStdioConfig = Field(..., description="Config for the server.")
133
-
134
- async def initialize(self) -> FlockStdioClientManager:
135
- """Called when initializing the server."""
136
- client_manager = FlockStdioClientManager(client_config=self.config)
137
-
138
- return client_manager
@@ -16,18 +16,17 @@ from mcp.shared.message import SessionMessage
16
16
  from opentelemetry import trace
17
17
  from pydantic import Field
18
18
 
19
- from flock.core.logging.logging import get_logger
20
- from flock.core.mcp.flock_mcp_server import FlockMCPServer
21
- from flock.core.mcp.mcp_client import FlockMCPClient
22
- from flock.core.mcp.mcp_client_manager import FlockMCPClientManager
23
- from flock.core.mcp.mcp_config import (
19
+ from flock.logging.logging import get_logger
20
+ from flock.mcp.client import FlockMCPClient
21
+ from flock.mcp.config import (
24
22
  FlockMCPConfiguration,
25
23
  FlockMCPConnectionConfiguration,
26
24
  )
27
- from flock.core.mcp.types.types import (
25
+ from flock.mcp.types import (
28
26
  StreamableHttpServerParameters,
29
27
  )
30
28
 
29
+
31
30
  logger = get_logger("mcp.streamable_http.server")
32
31
  tracer = trace.get_tracer(__name__)
33
32
 
@@ -63,48 +62,38 @@ class FlockStreamableHttpConfig(FlockMCPConfiguration):
63
62
  class FlockStreamableHttpClient(FlockMCPClient):
64
63
  """Client for StreamableHttpServers."""
65
64
 
66
- config: FlockStreamableHttpConfig = Field(
67
- ..., description="Client configuration."
68
- )
65
+ config: FlockMCPConfiguration = Field(..., description="Client configuration.")
69
66
 
70
67
  async def create_transport(
71
68
  self,
72
69
  params: StreamableHttpServerParameters,
73
70
  additional_params: dict[str, Any] | None = None,
74
71
  ) -> AbstractAsyncContextManager[
75
- tuple[
76
- MemoryObjectReceiveStream[SessionMessage | Exception],
77
- MemoryObjectSendStream[SessionMessage],
78
- GetSessionIdCallback,
79
- ],
80
- None,
81
- ]:
72
+ tuple[
73
+ MemoryObjectReceiveStream[SessionMessage | Exception],
74
+ MemoryObjectSendStream[SessionMessage],
75
+ GetSessionIdCallback,
76
+ ],
77
+ None,
78
+ ]:
82
79
  """Return an async context manager whose __aenter__ method yields (read_stream, send_stream)."""
83
80
  param_copy = copy.deepcopy(params)
84
81
 
85
82
  if additional_params:
86
- override_headers = bool(
87
- additional_params.get("override_headers", False)
88
- )
83
+ override_headers = bool(additional_params.get("override_headers", False))
89
84
 
90
85
  if "headers" in additional_params:
91
86
  if override_headers:
92
- param_copy.headers = additional_params.get(
93
- "headers", params.headers
94
- )
87
+ param_copy.headers = additional_params.get("headers", params.headers)
95
88
  else:
96
- param_copy.headers.update(
97
- additional_params.get("headers", {})
98
- )
89
+ param_copy.headers.update(additional_params.get("headers", {}))
99
90
  if "auth" in additional_params and isinstance(
100
91
  additional_params.get("auth"), httpx.Auth
101
92
  ):
102
93
  param_copy.auth = additional_params.get("auth", param_copy.auth)
103
94
 
104
95
  if "read_timeout_seconds" in additional_params:
105
- param_copy.timeout = additional_params.get(
106
- "read_timeout_seconds", params.timeout
107
- )
96
+ param_copy.timeout = additional_params.get("read_timeout_seconds", params.timeout)
108
97
 
109
98
  if "sse_read_timeout" in additional_params:
110
99
  param_copy.sse_read_timeout = additional_params.get(
@@ -133,37 +122,3 @@ class FlockStreamableHttpClient(FlockMCPClient):
133
122
  terminate_on_close=param_copy.terminate_on_close,
134
123
  auth=param_copy.auth,
135
124
  )
136
-
137
-
138
- class FlockStreamableHttpClientManager(FlockMCPClientManager):
139
- """Manager for handling StreamableHttpClients."""
140
-
141
- client_config: FlockStreamableHttpConfig = Field(
142
- ..., description="Configuration for clients."
143
- )
144
-
145
- async def make_client(
146
- self, additional_params: dict[str, Any] | None = None
147
- ) -> FlockStreamableHttpClient:
148
- """Create a new client instance."""
149
- new_client = FlockStreamableHttpClient(
150
- config=self.client_config,
151
- additional_params=additional_params,
152
- )
153
- return new_client
154
-
155
-
156
- class FlockStreamableHttpServer(FlockMCPServer):
157
- """Class which represents a MCP Server using the streamable Http Transport type."""
158
-
159
- config: FlockStreamableHttpConfig = Field(
160
- ..., description="Config for the server."
161
- )
162
-
163
- async def initialize(self) -> FlockStreamableHttpClientManager:
164
- """Called when initializing the server."""
165
- client_manager = FlockStreamableHttpClientManager(
166
- client_config=self.config
167
- )
168
-
169
- return client_manager
@@ -13,15 +13,14 @@ from mcp.shared.message import SessionMessage
13
13
  from opentelemetry import trace
14
14
  from pydantic import Field
15
15
 
16
- from flock.core.logging.logging import get_logger
17
- from flock.core.mcp.flock_mcp_server import FlockMCPServer
18
- from flock.core.mcp.mcp_client import FlockMCPClient
19
- from flock.core.mcp.mcp_client_manager import FlockMCPClientManager
20
- from flock.core.mcp.mcp_config import (
16
+ from flock.logging.logging import get_logger
17
+ from flock.mcp.client import FlockMCPClient
18
+ from flock.mcp.config import (
21
19
  FlockMCPConfiguration,
22
20
  FlockMCPConnectionConfiguration,
23
21
  )
24
- from flock.core.mcp.types.types import WebsocketServerParameters
22
+ from flock.mcp.types import WebsocketServerParameters
23
+
25
24
 
26
25
  logger = get_logger("mcp.ws.server")
27
26
  tracer = trace.get_tracer(__name__)
@@ -59,7 +58,7 @@ class FlockWSConfig(FlockMCPConfiguration):
59
58
  class FlockWSClient(FlockMCPClient):
60
59
  """Client for Websocket servers."""
61
60
 
62
- config: FlockWSConfig = Field(..., description="Client Configuration")
61
+ config: FlockMCPConfiguration = Field(..., description="Client Configuration")
63
62
 
64
63
  # This one we HAVE to specify. This tells Flock
65
64
  # how to create the underlying connection.
@@ -84,36 +83,4 @@ class FlockWSClient(FlockMCPClient):
84
83
  # If present, then apply the changes in "url" to the create_transport logic.
85
84
  param_copy.url = additional_params.get("url", params.url)
86
85
 
87
- return websocket_client(
88
- url=param_copy.url
89
- ) # return the async context manager
90
-
91
-
92
- # not really needed, but kept for type hints and as an example.
93
- class FlockWSClientManager(FlockMCPClientManager):
94
- """Manager for handling websocket clients."""
95
-
96
- client_config: FlockWSConfig = Field(
97
- ..., description="Configuration for clients."
98
- )
99
-
100
- async def make_client(self, additional_params=None):
101
- """Create a new client instance."""
102
- new_client = FlockWSClient(
103
- config=self.client_config,
104
- additional_params=additional_params,
105
- )
106
- return new_client
107
-
108
-
109
- class FlockWSServer(FlockMCPServer):
110
- """Class which represents an MCP Server using the websocket transport type."""
111
-
112
- config: FlockWSConfig = Field(..., description="Config for the server.")
113
-
114
- # Specify the concrete type for the server.
115
- async def initialize(self) -> FlockWSClientManager:
116
- """Called when initializing the server."""
117
- client_manager = FlockWSClientManager(client_config=self.config)
118
-
119
- return client_manager
86
+ return websocket_client(url=param_copy.url) # return the async context manager
@@ -8,8 +8,10 @@ from mcp import Tool
8
8
  from mcp.types import CallToolResult, TextContent, ToolAnnotations
9
9
  from opentelemetry import trace
10
10
  from pydantic import BaseModel, Field
11
+ from typing_extensions import Self
12
+
13
+ from flock.logging.logging import get_logger
11
14
 
12
- from flock.core.logging.logging import get_logger
13
15
 
14
16
  logger = get_logger("mcp.tool")
15
17
  tracer = trace.get_tracer(__name__)
@@ -31,17 +33,11 @@ class FlockMCPTool(BaseModel):
31
33
 
32
34
  name: str = Field(..., description="Name of the tool")
33
35
 
34
- agent_id: str = Field(
35
- ..., description="Associated agent_id. Used for internal tracking."
36
- )
36
+ agent_id: str = Field(..., description="Associated agent_id. Used for internal tracking.")
37
37
 
38
- run_id: str = Field(
39
- ..., description="Associated run_id. Used for internal tracking."
40
- )
38
+ run_id: str = Field(..., description="Associated run_id. Used for internal tracking.")
41
39
 
42
- description: str | None = Field(
43
- ..., description="A human-readable description of the tool"
44
- )
40
+ description: str | None = Field(..., description="A human-readable description of the tool")
45
41
 
46
42
  input_schema: dict[str, Any] = Field(
47
43
  ...,
@@ -53,9 +49,7 @@ class FlockMCPTool(BaseModel):
53
49
  )
54
50
 
55
51
  @classmethod
56
- def from_mcp_tool(
57
- cls: type[T], tool: Tool, agent_id: str, run_id: str
58
- ) -> T:
52
+ def from_mcp_tool(cls, tool: Tool, agent_id: str, run_id: str) -> Self:
59
53
  """Convert MCP Tool to Flock Tool."""
60
54
  return cls(
61
55
  name=tool.name,
@@ -67,7 +61,7 @@ class FlockMCPTool(BaseModel):
67
61
  )
68
62
 
69
63
  @classmethod
70
- def to_mcp_tool(cls: type[T], instance: T) -> Tool | None:
64
+ def to_mcp_tool(cls, instance: Self) -> Tool | None:
71
65
  """Convert a flock mcp tool into a mcp tool."""
72
66
  return Tool(
73
67
  name=instance.name,
@@ -77,17 +71,17 @@ class FlockMCPTool(BaseModel):
77
71
  )
78
72
 
79
73
  # Use DSPy's converter for JSON Schema → Tool args to stay aligned with DSPy.
80
- def _convert_input_schema_to_tool_args(self, input_schema: dict[str, Any]) -> tuple[dict[str, Any], dict[str, Any], dict[str, str]]:
74
+ def _convert_input_schema_to_tool_args(
75
+ self, input_schema: dict[str, Any]
76
+ ) -> tuple[dict[str, Any], dict[str, Any], dict[str, str]]:
81
77
  try:
82
78
  return convert_input_schema_to_tool_args(input_schema)
83
79
  except Exception as e: # pragma: no cover - defensive
84
- logger.error("Failed to convert MCP tool schema to DSPy tool args: %s", e)
80
+ logger.exception("Failed to convert MCP tool schema to DSPy tool args: %s", e)
85
81
  # Fallback to empty definitions to avoid breaking execution
86
82
  return {}, {}, {}
87
83
 
88
- def _convert_mcp_tool_result(
89
- self, call_tool_result: CallToolResult
90
- ) -> str | list[Any]:
84
+ def _convert_mcp_tool_result(self, call_tool_result: CallToolResult) -> str | list[Any]:
91
85
  text_contents: list[TextContent] = []
92
86
  non_text_contents = []
93
87
 
@@ -114,9 +108,7 @@ class FlockMCPTool(BaseModel):
114
108
 
115
109
  def as_dspy_tool(self, server: Any) -> DSPyTool:
116
110
  """Wrap this tool as a DSPyTool for downstream."""
117
- args, arg_type, args_desc = self._convert_input_schema_to_tool_args(
118
- self.input_schema
119
- )
111
+ args, arg_type, args_desc = self._convert_input_schema_to_tool_args(self.input_schema)
120
112
 
121
113
  async def func(*args, **kwargs):
122
114
  with tracer.start_as_current_span(f"tool.{self.name}.call") as span:
@@ -128,9 +120,7 @@ class FlockMCPTool(BaseModel):
128
120
  logger.debug(
129
121
  f"Tool: {self.name}: got client for server '{server_name}' for agent {self.agent_id} on run {self.run_id}"
130
122
  )
131
- logger.debug(
132
- f"Tool: {self.name}: calling server '{server_name}'"
133
- )
123
+ logger.debug(f"Tool: {self.name}: calling server '{server_name}'")
134
124
  result = await server.call_tool(
135
125
  agent_id=self.agent_id,
136
126
  run_id=self.run_id,
@@ -142,7 +132,7 @@ class FlockMCPTool(BaseModel):
142
132
  )
143
133
  return self._convert_mcp_tool_result(result)
144
134
  except Exception as e:
145
- logger.error(
135
+ logger.exception(
146
136
  f"Tool: Exception ocurred when calling tool '{self.name}': {e}"
147
137
  )
148
138
  span.record_exception(e)
@@ -0,0 +1,42 @@
1
+ """MCP Type Definitions for Flock-Flow."""
2
+
3
+ from flock.mcp.types.factories import (
4
+ default_flock_mcp_list_roots_callback_factory,
5
+ default_flock_mcp_logging_callback_factory,
6
+ default_flock_mcp_message_handler_callback_factory,
7
+ default_flock_mcp_sampling_callback_factory,
8
+ )
9
+ from flock.mcp.types.types import (
10
+ FlockListRootsMCPCallback,
11
+ FlockLoggingMCPCallback,
12
+ FlockLoggingMessageNotificationParams,
13
+ FlockMessageHandlerMCPCallback,
14
+ FlockSamplingMCPCallback,
15
+ MCPRoot,
16
+ ServerNotification,
17
+ ServerParameters,
18
+ SseServerParameters,
19
+ StdioServerParameters,
20
+ StreamableHttpServerParameters,
21
+ WebsocketServerParameters,
22
+ )
23
+
24
+
25
+ __all__ = [
26
+ "FlockListRootsMCPCallback",
27
+ "FlockLoggingMCPCallback",
28
+ "FlockLoggingMessageNotificationParams",
29
+ "FlockMessageHandlerMCPCallback",
30
+ "FlockSamplingMCPCallback",
31
+ "MCPRoot",
32
+ "ServerNotification",
33
+ "ServerParameters",
34
+ "SseServerParameters",
35
+ "StdioServerParameters",
36
+ "StreamableHttpServerParameters",
37
+ "WebsocketServerParameters",
38
+ "default_flock_mcp_list_roots_callback_factory",
39
+ "default_flock_mcp_logging_callback_factory",
40
+ "default_flock_mcp_message_handler_callback_factory",
41
+ "default_flock_mcp_sampling_callback_factory",
42
+ ]
@@ -1,5 +1,7 @@
1
1
  """MCP Callbacks."""
2
2
 
3
+ from typing import Any
4
+
3
5
  from mcp.shared.context import RequestContext
4
6
  from mcp.shared.session import RequestResponder
5
7
  from mcp.types import (
@@ -13,9 +15,8 @@ from mcp.types import (
13
15
  ServerRequest,
14
16
  )
15
17
 
16
- from flock.core.logging.logging import FlockLogger
17
- from flock.core.mcp.mcp_client import Any
18
- from flock.core.mcp.types.handlers import (
18
+ from flock.logging.logging import FlockLogger
19
+ from flock.mcp.types.handlers import (
19
20
  handle_incoming_exception,
20
21
  handle_incoming_request,
21
22
  handle_incoming_server_notification,
@@ -27,14 +28,12 @@ async def default_sampling_callback(
27
28
  ctx: RequestContext, params: CreateMessageRequestParams, logger: FlockLogger
28
29
  ) -> ErrorData:
29
30
  """Default Callback for Sampling."""
30
- logger.info(f"Rejecting Sampling Request.")
31
+ logger.info("Rejecting Sampling Request.")
31
32
  return ErrorData(code=INVALID_REQUEST, message="Sampling not supported.")
32
33
 
33
34
 
34
35
  async def default_message_handler(
35
- req: RequestResponder[ServerRequest, ClientResult]
36
- | ServerNotification
37
- | Exception,
36
+ req: RequestResponder[ServerRequest, ClientResult] | ServerNotification | Exception,
38
37
  logger: FlockLogger,
39
38
  associated_client: Any,
40
39
  ) -> None:
@@ -65,12 +64,9 @@ async def default_list_roots_callback(
65
64
  ) -> ListRootsResult | ErrorData:
66
65
  """Default List Roots Callback."""
67
66
  if associated_client.config.feature_config.roots_enabled:
68
- current_roots = await associated_client.get_current_roots()
67
+ current_roots = await associated_client.get_roots()
69
68
  return ListRootsResult(roots=current_roots)
70
- else:
71
- return ErrorData(
72
- code=INVALID_REQUEST, message="List roots not supported."
73
- )
69
+ return ErrorData(code=INVALID_REQUEST, message="List roots not supported.")
74
70
 
75
71
 
76
72
  async def default_logging_callback(
@@ -79,6 +75,4 @@ async def default_logging_callback(
79
75
  server_name: str,
80
76
  ) -> None:
81
77
  """Default Logging Handling Callback."""
82
- await handle_logging_message(
83
- params=params, logger=logger, server_name=server_name
84
- )
78
+ await handle_logging_message(params=params, logger=logger, server_name=server_name)
@@ -7,14 +7,14 @@ from mcp.types import (
7
7
  CreateMessageRequestParams,
8
8
  )
9
9
 
10
- from flock.core.logging.logging import FlockLogger, get_logger
11
- from flock.core.mcp.types.callbacks import (
10
+ from flock.logging.logging import FlockLogger, get_logger
11
+ from flock.mcp.types.callbacks import (
12
12
  default_list_roots_callback,
13
13
  default_logging_callback,
14
14
  default_message_handler,
15
15
  default_sampling_callback,
16
16
  )
17
- from flock.core.mcp.types.types import (
17
+ from flock.mcp.types.types import (
18
18
  FlockListRootsMCPCallback,
19
19
  FlockLoggingMCPCallback,
20
20
  FlockLoggingMessageNotificationParams,
@@ -23,6 +23,7 @@ from flock.core.mcp.types.types import (
23
23
  ServerNotification,
24
24
  )
25
25
 
26
+
26
27
  default_logging_callback_logger = get_logger("mcp.callback.logging")
27
28
  default_sampling_callback_logger = get_logger("mcp.callback.sampling")
28
29
  default_list_roots_callback_logger = get_logger("mcp.callback.roots")
@@ -45,6 +46,8 @@ def default_flock_mcp_logging_callback_factory(
45
46
  server_name=associated_client.config.name,
46
47
  )
47
48
 
49
+ return _method
50
+
48
51
 
49
52
  def default_flock_mcp_sampling_callback_factory(
50
53
  associated_client: Any,
@@ -60,9 +63,7 @@ def default_flock_mcp_sampling_callback_factory(
60
63
  logger_to_use.info(
61
64
  f"SAMPLING_REQUEST: server '{associated_client.config.name}' sent a sampling request: {params}"
62
65
  )
63
- await default_sampling_callback(
64
- ctx=ctx, params=params, logger=logger_to_use
65
- )
66
+ await default_sampling_callback(ctx=ctx, params=params, logger=logger_to_use)
66
67
 
67
68
  return _method
68
69