flock-core 0.5.0b28__py3-none-any.whl → 0.5.56b0__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 (359) 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.56b0.dist-info/METADATA +747 -0
  162. flock_core-0.5.56b0.dist-info/RECORD +398 -0
  163. flock_core-0.5.56b0.dist-info/entry_points.txt +2 -0
  164. {flock_core-0.5.0b28.dist-info → flock_core-0.5.56b0.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 -22
  197. flock/components/utility/example_utility_component.py +0 -250
  198. flock/components/utility/feedback_utility_component.py +0 -206
  199. flock/components/utility/memory_utility_component.py +0 -550
  200. flock/components/utility/metrics_utility_component.py +0 -700
  201. flock/config.py +0 -61
  202. flock/core/__init__.py +0 -110
  203. flock/core/agent/__init__.py +0 -16
  204. flock/core/agent/default_agent.py +0 -216
  205. flock/core/agent/flock_agent_components.py +0 -104
  206. flock/core/agent/flock_agent_execution.py +0 -101
  207. flock/core/agent/flock_agent_integration.py +0 -260
  208. flock/core/agent/flock_agent_lifecycle.py +0 -186
  209. flock/core/agent/flock_agent_serialization.py +0 -381
  210. flock/core/api/__init__.py +0 -10
  211. flock/core/api/custom_endpoint.py +0 -45
  212. flock/core/api/endpoints.py +0 -254
  213. flock/core/api/main.py +0 -162
  214. flock/core/api/models.py +0 -97
  215. flock/core/api/run_store.py +0 -224
  216. flock/core/api/runner.py +0 -44
  217. flock/core/api/service.py +0 -214
  218. flock/core/component/__init__.py +0 -15
  219. flock/core/component/agent_component_base.py +0 -309
  220. flock/core/component/evaluation_component.py +0 -62
  221. flock/core/component/routing_component.py +0 -74
  222. flock/core/component/utility_component.py +0 -69
  223. flock/core/config/flock_agent_config.py +0 -58
  224. flock/core/config/scheduled_agent_config.py +0 -40
  225. flock/core/context/context.py +0 -213
  226. flock/core/context/context_manager.py +0 -37
  227. flock/core/context/context_vars.py +0 -10
  228. flock/core/evaluation/utils.py +0 -396
  229. flock/core/execution/batch_executor.py +0 -369
  230. flock/core/execution/evaluation_executor.py +0 -438
  231. flock/core/execution/local_executor.py +0 -31
  232. flock/core/execution/opik_executor.py +0 -103
  233. flock/core/execution/temporal_executor.py +0 -164
  234. flock/core/flock.py +0 -634
  235. flock/core/flock_agent.py +0 -336
  236. flock/core/flock_factory.py +0 -613
  237. flock/core/flock_scheduler.py +0 -166
  238. flock/core/flock_server_manager.py +0 -136
  239. flock/core/interpreter/python_interpreter.py +0 -689
  240. flock/core/mcp/__init__.py +0 -1
  241. flock/core/mcp/flock_mcp_server.py +0 -680
  242. flock/core/mcp/mcp_client_manager.py +0 -201
  243. flock/core/mcp/types/__init__.py +0 -1
  244. flock/core/mixin/dspy_integration.py +0 -403
  245. flock/core/mixin/prompt_parser.py +0 -125
  246. flock/core/orchestration/__init__.py +0 -15
  247. flock/core/orchestration/flock_batch_processor.py +0 -94
  248. flock/core/orchestration/flock_evaluator.py +0 -113
  249. flock/core/orchestration/flock_execution.py +0 -295
  250. flock/core/orchestration/flock_initialization.py +0 -149
  251. flock/core/orchestration/flock_server_manager.py +0 -67
  252. flock/core/orchestration/flock_web_server.py +0 -117
  253. flock/core/registry/__init__.py +0 -45
  254. flock/core/registry/agent_registry.py +0 -69
  255. flock/core/registry/callable_registry.py +0 -139
  256. flock/core/registry/component_discovery.py +0 -142
  257. flock/core/registry/component_registry.py +0 -64
  258. flock/core/registry/config_mapping.py +0 -64
  259. flock/core/registry/decorators.py +0 -137
  260. flock/core/registry/registry_hub.py +0 -205
  261. flock/core/registry/server_registry.py +0 -57
  262. flock/core/registry/type_registry.py +0 -86
  263. flock/core/serialization/__init__.py +0 -13
  264. flock/core/serialization/callable_registry.py +0 -52
  265. flock/core/serialization/flock_serializer.py +0 -832
  266. flock/core/serialization/json_encoder.py +0 -41
  267. flock/core/serialization/secure_serializer.py +0 -175
  268. flock/core/serialization/serializable.py +0 -342
  269. flock/core/serialization/serialization_utils.py +0 -412
  270. flock/core/util/file_path_utils.py +0 -223
  271. flock/core/util/hydrator.py +0 -309
  272. flock/core/util/input_resolver.py +0 -164
  273. flock/core/util/loader.py +0 -59
  274. flock/core/util/splitter.py +0 -219
  275. flock/di.py +0 -27
  276. flock/platform/docker_tools.py +0 -49
  277. flock/platform/jaeger_install.py +0 -86
  278. flock/webapp/__init__.py +0 -1
  279. flock/webapp/app/__init__.py +0 -0
  280. flock/webapp/app/api/__init__.py +0 -0
  281. flock/webapp/app/api/agent_management.py +0 -241
  282. flock/webapp/app/api/execution.py +0 -709
  283. flock/webapp/app/api/flock_management.py +0 -129
  284. flock/webapp/app/api/registry_viewer.py +0 -30
  285. flock/webapp/app/chat.py +0 -665
  286. flock/webapp/app/config.py +0 -104
  287. flock/webapp/app/dependencies.py +0 -117
  288. flock/webapp/app/main.py +0 -1070
  289. flock/webapp/app/middleware.py +0 -113
  290. flock/webapp/app/models_ui.py +0 -7
  291. flock/webapp/app/services/__init__.py +0 -0
  292. flock/webapp/app/services/feedback_file_service.py +0 -363
  293. flock/webapp/app/services/flock_service.py +0 -337
  294. flock/webapp/app/services/sharing_models.py +0 -81
  295. flock/webapp/app/services/sharing_store.py +0 -762
  296. flock/webapp/app/templates/theme_mapper.html +0 -326
  297. flock/webapp/app/theme_mapper.py +0 -812
  298. flock/webapp/app/utils.py +0 -85
  299. flock/webapp/run.py +0 -215
  300. flock/webapp/static/css/chat.css +0 -301
  301. flock/webapp/static/css/components.css +0 -167
  302. flock/webapp/static/css/header.css +0 -39
  303. flock/webapp/static/css/layout.css +0 -46
  304. flock/webapp/static/css/sidebar.css +0 -127
  305. flock/webapp/static/css/two-pane.css +0 -48
  306. flock/webapp/templates/base.html +0 -200
  307. flock/webapp/templates/chat.html +0 -152
  308. flock/webapp/templates/chat_settings.html +0 -19
  309. flock/webapp/templates/flock_editor.html +0 -16
  310. flock/webapp/templates/index.html +0 -12
  311. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  312. flock/webapp/templates/partials/_agent_list.html +0 -18
  313. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  314. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  315. flock/webapp/templates/partials/_chat_container.html +0 -15
  316. flock/webapp/templates/partials/_chat_messages.html +0 -57
  317. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  318. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  319. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  320. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  321. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  322. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  323. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  324. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  325. flock/webapp/templates/partials/_execution_form.html +0 -118
  326. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  327. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  328. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  329. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  330. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  331. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  332. flock/webapp/templates/partials/_registry_table.html +0 -25
  333. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  334. flock/webapp/templates/partials/_results_display.html +0 -78
  335. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  336. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  337. flock/webapp/templates/partials/_settings_view.html +0 -36
  338. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  339. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  340. flock/webapp/templates/partials/_sidebar.html +0 -74
  341. flock/webapp/templates/partials/_streaming_results_container.html +0 -195
  342. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  343. flock/webapp/templates/partials/_theme_preview.html +0 -36
  344. flock/webapp/templates/registry_viewer.html +0 -84
  345. flock/webapp/templates/shared_run_page.html +0 -140
  346. flock/workflow/__init__.py +0 -0
  347. flock/workflow/activities.py +0 -196
  348. flock/workflow/agent_activities.py +0 -24
  349. flock/workflow/agent_execution_activity.py +0 -202
  350. flock/workflow/flock_workflow.py +0 -214
  351. flock/workflow/temporal_config.py +0 -96
  352. flock/workflow/temporal_setup.py +0 -68
  353. flock_core-0.5.0b28.dist-info/METADATA +0 -274
  354. flock_core-0.5.0b28.dist-info/RECORD +0 -561
  355. flock_core-0.5.0b28.dist-info/entry_points.txt +0 -2
  356. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  357. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  358. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  359. {flock_core-0.5.0b28.dist-info → flock_core-0.5.56b0.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