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
@@ -1,6 +1,6 @@
1
1
  """Handler functions."""
2
2
 
3
- from collections.abc import Callable
3
+ from typing import Any
4
4
 
5
5
  from mcp import CreateMessageRequest
6
6
  from mcp.client.session import ClientResponse
@@ -22,8 +22,7 @@ from mcp.types import (
22
22
  ToolListChangedNotification,
23
23
  )
24
24
 
25
- from flock.core.logging.logging import FlockLogger
26
- from flock.core.mcp.mcp_client import Any
25
+ from flock.logging.logging import FlockLogger
27
26
 
28
27
 
29
28
  async def handle_incoming_exception(
@@ -50,7 +49,7 @@ async def handle_progress_notification(
50
49
  progress = params.progress
51
50
  total = params.total or "Unknown"
52
51
  progress_token = params.progressToken
53
- metadata = params.meta or {}
52
+ metadata: dict[str, Any] = params.meta or {} # type: ignore[assignment]
54
53
 
55
54
  message = f"PROGRESS_NOTIFICATION: Server '{server_name}' reports Progress: {progress}/{total}. (Token: {progress_token}) (Meta Data: {metadata})"
56
55
 
@@ -66,7 +65,7 @@ async def handle_cancellation_notification(
66
65
  params = n.params
67
66
  request_id_to_cancel = params.requestId
68
67
  reason = params.reason or "no reason given"
69
- metadata = params.meta or {}
68
+ metadata: dict[str, Any] = params.meta or {} # type: ignore[assignment]
70
69
 
71
70
  message = f"CANCELLATION_REQUEST: Server '{server_name}' requests to cancel request with id: {request_id_to_cancel}. Reason: {reason}. (Metadata: {metadata})"
72
71
 
@@ -83,7 +82,7 @@ async def handle_resource_update_notification(
83
82
  # its resource_contents_cache
84
83
 
85
84
  params = n.params
86
- metadata = params.meta or {}
85
+ metadata: dict[str, Any] = params.meta or {} # type: ignore[assignment]
87
86
  uri = params.uri
88
87
 
89
88
  message = f"RESOURCE_UPDATE: Server '{associated_client.config.name}' reports change on resoure at: {uri}. (Meta Data: {metadata})"
@@ -102,8 +101,8 @@ async def handle_resource_list_changed_notification(
102
101
  # This also means that the associated client needs to invalidate
103
102
  # its resource_contents_cache
104
103
 
105
- params = n.params or {}
106
- metadata = params.meta or {}
104
+ params: Any = n.params or {}
105
+ metadata: dict[str, Any] = params.meta or {}
107
106
 
108
107
  message = f"TOOLS_LIST_CHANGED: Server '{associated_client.config.name}' reports a change in their tools list: {metadata}. Resetting Tools Cache for associated clients."
109
108
 
@@ -117,8 +116,8 @@ async def handle_tool_list_changed_notification(
117
116
  associated_client: Any,
118
117
  ) -> None:
119
118
  """Handle an incoming ToolListChangedNotification."""
120
- params = n.params or {}
121
- metadata = params.meta or {}
119
+ params: Any = n.params or {}
120
+ metadata: dict[str, Any] = params.meta or {}
122
121
 
123
122
  message = f"TOOLS_LIST_CHANGED: Server '{associated_client.config.name}' reports a change in their tools list: {metadata}. Resetting Tools Cache for associated clients."
124
123
 
@@ -126,7 +125,7 @@ async def handle_tool_list_changed_notification(
126
125
  await associated_client.invalidate_tool_cache()
127
126
 
128
127
 
129
- _SERVER_NOTIFICATION_MAP: dict[type[ServerNotification], Callable] = {
128
+ _SERVER_NOTIFICATION_MAP: Any = {
130
129
  ResourceListChangedNotification: handle_resource_list_changed_notification,
131
130
  ResourceUpdatedNotification: handle_resource_update_notification,
132
131
  LoggingMessageNotification: lambda n, log, client: handle_logging_message(
@@ -159,7 +158,7 @@ async def handle_logging_message(
159
158
  level = params.level
160
159
  method = logger.debug
161
160
  logger_name = params.logger if params.logger else "unknown_remote_logger"
162
- metadata = params.meta or {}
161
+ metadata: dict[str, Any] = params.meta or {} # type: ignore[assignment]
163
162
 
164
163
  str_level = "DEBUG"
165
164
  prefix = f"Message from Remote MCP Logger '{logger_name}' for server '{server_name}': "
@@ -206,7 +205,6 @@ async def handle_incoming_request(
206
205
  case CreateMessageRequest(params=req.request.root.params):
207
206
  with req:
208
207
  # invoke user's sampling callback
209
- # type: ignore
210
208
  response = await associated_client.sampling_callback(
211
209
  ctx, req.request.root.params
212
210
  )
@@ -214,7 +212,6 @@ async def handle_incoming_request(
214
212
  await req.respond(client_resp)
215
213
  case ListRootsRequest():
216
214
  with req:
217
- # type: ignore
218
215
  response = await associated_client.list_roots_callback(ctx)
219
216
  client_resp = ClientResponse.validate_python(response)
220
217
  await req.respond(client_resp)
@@ -223,15 +220,13 @@ async def handle_incoming_request(
223
220
  return
224
221
  except Exception as e:
225
222
  # 1) Log the error and stacktrace
226
- logger_to_use.error(
223
+ logger_to_use.exception(
227
224
  f"Error in fallback handle_incoming_request (id={req.request_id}): {e}"
228
225
  )
229
226
  # 2) If the request wasn't already completed, send a JSON-RPC error back
230
227
  if not getattr(req, "_completed", False):
231
228
  with req:
232
- err = ErrorData(
233
- code=INTERNAL_ERROR, message=f"Client-side error: {e}"
234
- )
229
+ err = ErrorData(code=INTERNAL_ERROR, message=f"Client-side error: {e}")
235
230
  client_err = ClientResponse.validate_python(err)
236
231
  await req.respond(client_err)
237
232
  return
@@ -15,32 +15,53 @@ from anyio.streams.memory import (
15
15
  from mcp import (
16
16
  ClientSession,
17
17
  CreateMessageResult,
18
+ )
19
+ from mcp import (
18
20
  StdioServerParameters as _MCPStdioServerParameters,
19
21
  )
20
22
  from mcp.shared.context import RequestContext
21
23
  from mcp.shared.session import RequestResponder
22
24
  from mcp.types import (
23
25
  CancelledNotification as _MCPCancelledNotification,
26
+ )
27
+ from mcp.types import (
24
28
  ClientResult,
25
29
  CreateMessageRequestParams,
26
30
  ErrorData,
27
31
  JSONRPCMessage,
28
32
  ListRootsResult,
33
+ ServerRequest,
34
+ )
35
+ from mcp.types import (
29
36
  LoggingMessageNotification as _MCPLoggingMessageNotification,
37
+ )
38
+ from mcp.types import (
30
39
  LoggingMessageNotificationParams as _MCPLoggingMessageNotificationParams,
40
+ )
41
+ from mcp.types import (
31
42
  ProgressNotification as _MCPProgressNotification,
43
+ )
44
+ from mcp.types import (
32
45
  PromptListChangedNotification as _MCPPromptListChangedNotification,
46
+ )
47
+ from mcp.types import (
33
48
  ResourceListChangedNotification as _MCPResourceListChangedNotification,
49
+ )
50
+ from mcp.types import (
34
51
  ResourceUpdatedNotification as _MCPResourceUpdateNotification,
52
+ )
53
+ from mcp.types import (
35
54
  Root as _MCPRoot,
55
+ )
56
+ from mcp.types import (
36
57
  ServerNotification as _MCPServerNotification,
37
- ServerRequest,
58
+ )
59
+ from mcp.types import (
38
60
  ToolListChangedNotification as _MCPToolListChangedNotification,
39
61
  )
40
62
  from pydantic import AnyUrl, BaseModel, ConfigDict, Field
41
63
 
42
- from flock.core.mcp.util.helpers import get_default_env
43
- from flock.core.serialization.serializable import Serializable
64
+ from flock.mcp.util.helpers import get_default_env
44
65
 
45
66
 
46
67
  class ServerNotification(_MCPServerNotification):
@@ -75,9 +96,7 @@ class PromptListChangedNotification(_MCPPromptListChangedNotification):
75
96
  """A notification message sent by the server side informing a client about a change in the list of offered Prompts."""
76
97
 
77
98
 
78
- class FlockLoggingMessageNotificationParams(
79
- _MCPLoggingMessageNotificationParams
80
- ):
99
+ class FlockLoggingMessageNotificationParams(_MCPLoggingMessageNotificationParams):
81
100
  """Parameters contained within a Logging Message Notification."""
82
101
 
83
102
 
@@ -85,7 +104,7 @@ class MCPRoot(_MCPRoot):
85
104
  """Wrapper for mcp.types.Root."""
86
105
 
87
106
 
88
- class ServerParameters(BaseModel, Serializable):
107
+ class ServerParameters(BaseModel):
89
108
  """Base Type for server parameters."""
90
109
 
91
110
  model_config = ConfigDict(
@@ -93,17 +112,12 @@ class ServerParameters(BaseModel, Serializable):
93
112
  )
94
113
 
95
114
  transport_type: Literal["stdio", "websockets", "sse", "streamable_http"] = Field(
96
- ...,
97
- description="which type of transport these connection params are used for."
115
+ ..., description="which type of transport these connection params are used for."
98
116
  )
99
117
 
100
118
  def to_dict(self, path_type: str = "relative"):
101
119
  """Serialize."""
102
- return self.model_dump(
103
- exclude_defaults=False,
104
- exclude_none=True,
105
- mode="json"
106
- )
120
+ return self.model_dump(exclude_defaults=False, exclude_none=True, mode="json")
107
121
 
108
122
  @classmethod
109
123
  def from_dict(cls, data: dict[str, Any]):
@@ -114,10 +128,7 @@ class ServerParameters(BaseModel, Serializable):
114
128
  class StdioServerParameters(_MCPStdioServerParameters, ServerParameters):
115
129
  """Base Type for Stdio Server parameters."""
116
130
 
117
- transport_type: Literal["stdio"] = Field(
118
- default="stdio",
119
- description="Use stdio params."
120
- )
131
+ transport_type: Literal["stdio"] = Field(default="stdio", description="Use stdio params.")
121
132
 
122
133
  env: dict[str, str] | None = Field(
123
134
  default_factory=get_default_env,
@@ -129,28 +140,23 @@ class WebsocketServerParameters(ServerParameters):
129
140
  """Base Type for Websocket Server params."""
130
141
 
131
142
  transport_type: Literal["websockets"] = Field(
132
- default="websockets",
133
- description="Use websocket params."
143
+ default="websockets", description="Use websocket params."
134
144
  )
135
145
 
136
146
  url: str | AnyUrl = Field(..., description="Url the server listens at.")
137
147
 
148
+
138
149
  class StreamableHttpServerParameters(ServerParameters):
139
150
  """Base Type for StreamableHttp params."""
140
151
 
141
152
  transport_type: Literal["streamable_http"] = Field(
142
- default="streamable_http",
143
- description="Use streamable http params."
153
+ default="streamable_http", description="Use streamable http params."
144
154
  )
145
155
 
146
- url: str | AnyUrl = Field(
147
- ...,
148
- description="The url the server listens at."
149
- )
156
+ url: str | AnyUrl = Field(..., description="The url the server listens at.")
150
157
 
151
158
  headers: dict[str, Any] | None = Field(
152
- default=None,
153
- description="Additional headers to pass to the client."
159
+ default=None, description="Additional headers to pass to the client."
154
160
  )
155
161
 
156
162
  timeout: float | int = Field(
@@ -159,19 +165,13 @@ class StreamableHttpServerParameters(ServerParameters):
159
165
  )
160
166
 
161
167
  sse_read_timeout: float | int = Field(
162
- default=60*5,
163
- description="How long the client will wait before disconnecting from the server."
168
+ default=60 * 5,
169
+ description="How long the client will wait before disconnecting from the server.",
164
170
  )
165
171
 
166
- terminate_on_close: bool = Field(
167
- default=True,
168
- description="Terminate connection on close"
169
- )
172
+ terminate_on_close: bool = Field(default=True, description="Terminate connection on close")
170
173
 
171
- auth: httpx.Auth | None = Field(
172
- default=None,
173
- description="Httpx Auth Scheme"
174
- )
174
+ auth: httpx.Auth | None = Field(default=None, description="Httpx Auth Scheme")
175
175
 
176
176
  @classmethod
177
177
  def from_dict(cls, data: dict[str, Any]):
@@ -188,7 +188,7 @@ class StreamableHttpServerParameters(ServerParameters):
188
188
  mod = importlib.import_module(impl["module_path"])
189
189
  real_cls = getattr(mod, impl["classname"])
190
190
  if params:
191
- auth_obj = real_cls(**{k: v for k, v in params.items()})
191
+ auth_obj = real_cls(**dict(params.items()))
192
192
  else:
193
193
  # assume that the implementation handles it.
194
194
  auth_obj = real_cls()
@@ -196,9 +196,9 @@ class StreamableHttpServerParameters(ServerParameters):
196
196
  raise ValueError("No concrete implementation for auth provided.")
197
197
 
198
198
  data["auth"] = auth_obj
199
- return cls(**{k: v for k, v in data.items()})
199
+ return cls(**dict(data.items()))
200
200
 
201
- def to_dict(self, path_type = "relative"):
201
+ def to_dict(self, path_type="relative"):
202
202
  """Serialize the object."""
203
203
  exclude = ["auth"]
204
204
 
@@ -224,24 +224,24 @@ class StreamableHttpServerParameters(ServerParameters):
224
224
  except Exception:
225
225
  params = None
226
226
 
227
- data["auth"] = {
228
- "implementation": {
229
- "class_name": type(self.auth).__name__,
230
- "module_path": type(self.auth).__module__,
231
- "file_path": file_path,
232
- },
233
- "params": params,
234
- }
227
+ data["auth"] = {
228
+ "implementation": {
229
+ "class_name": type(self.auth).__name__,
230
+ "module_path": type(self.auth).__module__,
231
+ "file_path": file_path,
232
+ },
233
+ "params": params,
234
+ }
235
+ else:
236
+ data["auth"] = None
235
237
 
236
238
  return data
237
239
 
240
+
238
241
  class SseServerParameters(ServerParameters):
239
242
  """Base Type for SSE Server params."""
240
243
 
241
- transport_type: Literal["sse"] = Field(
242
- default="sse",
243
- description="Use sse server params."
244
- )
244
+ transport_type: Literal["sse"] = Field(default="sse", description="Use sse server params.")
245
245
 
246
246
  url: str | AnyUrl = Field(..., description="The url the server listens at.")
247
247
 
@@ -256,10 +256,7 @@ class SseServerParameters(ServerParameters):
256
256
  description="How long the client will wait before disconnecting from the server.",
257
257
  )
258
258
 
259
- auth: httpx.Auth | None = Field(
260
- default=None,
261
- description="Httpx Auth Scheme."
262
- )
259
+ auth: httpx.Auth | None = Field(default=None, description="Httpx Auth Scheme.")
263
260
 
264
261
  @classmethod
265
262
  def from_dict(cls, data: dict[str, Any]):
@@ -267,7 +264,7 @@ class SseServerParameters(ServerParameters):
267
264
  # find and import the concrete implementation for
268
265
  # the auth object.
269
266
  auth_obj: httpx.Auth | None = None
270
- auth_impl = data.pop("auth", None) # get the specs for the auth class
267
+ auth_impl = data.pop("auth", None) # get the specs for the auth class
271
268
  if auth_impl:
272
269
  # find the concrete implementation
273
270
  impl = auth_impl.pop("implementation", None)
@@ -276,7 +273,7 @@ class SseServerParameters(ServerParameters):
276
273
  mod = importlib.import_module(impl["module_path"])
277
274
  real_cls = getattr(mod, impl["class_name"])
278
275
  if params:
279
- auth_obj = real_cls(**{k: v for k, v in params.items()})
276
+ auth_obj = real_cls(**dict(params.items()))
280
277
  else:
281
278
  # assume that implementation handles it
282
279
  auth_obj = real_cls()
@@ -284,9 +281,9 @@ class SseServerParameters(ServerParameters):
284
281
  raise ValueError("No concrete implementation for auth provided.")
285
282
 
286
283
  data["auth"] = auth_obj
287
- return cls(**{k: v for k, v in data.items()})
284
+ return cls(**dict(data.items()))
288
285
 
289
- def to_dict(self, path_type = "relative"):
286
+ def to_dict(self, path_type="relative"):
290
287
  """Serialize the object."""
291
288
  exclude = ["auth"]
292
289
 
@@ -312,17 +309,20 @@ class SseServerParameters(ServerParameters):
312
309
  except Exception:
313
310
  params = None
314
311
 
315
- data["auth"] = {
316
- "implementation": {
317
- "class_name": type(self.auth).__name__,
318
- "module_path": type(self.auth).__module__,
319
- "file_path": file_path,
320
- },
321
- "params": params,
322
- }
312
+ data["auth"] = {
313
+ "implementation": {
314
+ "class_name": type(self.auth).__name__,
315
+ "module_path": type(self.auth).__module__,
316
+ "file_path": file_path,
317
+ },
318
+ "params": params,
319
+ }
320
+ else:
321
+ data["auth"] = None
323
322
 
324
323
  return data
325
324
 
325
+
326
326
  MCPCLientInitFunction = Callable[
327
327
  ...,
328
328
  AbstractAsyncContextManager[
@@ -351,10 +351,6 @@ FlockLoggingMCPCallback = Callable[
351
351
  ]
352
352
 
353
353
  FlockMessageHandlerMCPCallback = Callable[
354
- [
355
- RequestResponder[ServerRequest, ClientResult]
356
- | ServerNotification
357
- | Exception
358
- ],
354
+ [RequestResponder[ServerRequest, ClientResult] | ServerNotification | Exception],
359
355
  Awaitable[None],
360
356
  ]
@@ -18,6 +18,6 @@ def get_default_env() -> dict[str, str]:
18
18
  def cache_key_generator(agent_id: str, run_id: str, *args, **kwargs) -> str:
19
19
  """Helper function to generate cache keys for Flock MCP caches."""
20
20
  args_digest = hashlib.md5(
21
- json.dumps(kwargs, sort_keys=True).encode()
21
+ json.dumps(kwargs, sort_keys=True).encode(), usedforsecurity=False
22
22
  ).hexdigest()
23
23
  return f"{agent_id}:{run_id}:{args_digest}"