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
@@ -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}"