flock-core 0.4.543__py3-none-any.whl → 0.5.0__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 (501) hide show
  1. flock/__init__.py +12 -217
  2. flock/agent.py +1079 -0
  3. flock/api/themes.py +71 -0
  4. flock/artifacts.py +86 -0
  5. flock/cli.py +147 -0
  6. flock/components.py +189 -0
  7. flock/dashboard/__init__.py +30 -0
  8. flock/dashboard/collector.py +559 -0
  9. flock/dashboard/events.py +188 -0
  10. flock/dashboard/graph_builder.py +563 -0
  11. flock/dashboard/launcher.py +235 -0
  12. flock/dashboard/models/graph.py +156 -0
  13. flock/dashboard/service.py +991 -0
  14. flock/dashboard/static_v2/assets/index-DFRnI_mt.js +111 -0
  15. flock/dashboard/static_v2/assets/index-fPLNdmp1.css +1 -0
  16. flock/dashboard/static_v2/index.html +13 -0
  17. flock/dashboard/websocket.py +246 -0
  18. flock/engines/__init__.py +6 -0
  19. flock/engines/dspy_engine.py +932 -0
  20. flock/examples.py +131 -0
  21. flock/frontend/README.md +778 -0
  22. flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
  23. flock/frontend/index.html +12 -0
  24. flock/frontend/package-lock.json +4337 -0
  25. flock/frontend/package.json +48 -0
  26. flock/frontend/src/App.tsx +139 -0
  27. flock/frontend/src/__tests__/integration/graph-snapshot.test.tsx +647 -0
  28. flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
  29. flock/frontend/src/components/common/BuildInfo.tsx +39 -0
  30. flock/frontend/src/components/common/EmptyState.module.css +115 -0
  31. flock/frontend/src/components/common/EmptyState.tsx +128 -0
  32. flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
  33. flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
  34. flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
  35. flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
  36. flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
  37. flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
  38. flock/frontend/src/components/controls/PublishControl.css +547 -0
  39. flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
  40. flock/frontend/src/components/controls/PublishControl.tsx +432 -0
  41. flock/frontend/src/components/details/DetailWindowContainer.tsx +58 -0
  42. flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
  43. flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
  44. flock/frontend/src/components/details/MessageDetailWindow.tsx +439 -0
  45. flock/frontend/src/components/details/MessageHistoryTab.tsx +374 -0
  46. flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
  47. flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
  48. flock/frontend/src/components/details/RunStatusTab.tsx +348 -0
  49. flock/frontend/src/components/details/tabs.test.tsx +1015 -0
  50. flock/frontend/src/components/filters/ArtifactTypeFilter.tsx +21 -0
  51. flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
  52. flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
  53. flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
  54. flock/frontend/src/components/filters/FilterFlyout.module.css +104 -0
  55. flock/frontend/src/components/filters/FilterFlyout.tsx +80 -0
  56. flock/frontend/src/components/filters/FilterPills.module.css +220 -0
  57. flock/frontend/src/components/filters/FilterPills.test.tsx +189 -0
  58. flock/frontend/src/components/filters/FilterPills.tsx +143 -0
  59. flock/frontend/src/components/filters/ProducerFilter.tsx +21 -0
  60. flock/frontend/src/components/filters/SavedFiltersControl.module.css +60 -0
  61. flock/frontend/src/components/filters/SavedFiltersControl.test.tsx +158 -0
  62. flock/frontend/src/components/filters/SavedFiltersControl.tsx +159 -0
  63. flock/frontend/src/components/filters/TagFilter.tsx +21 -0
  64. flock/frontend/src/components/filters/TimeRangeFilter.module.css +115 -0
  65. flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
  66. flock/frontend/src/components/filters/TimeRangeFilter.tsx +110 -0
  67. flock/frontend/src/components/filters/VisibilityFilter.tsx +21 -0
  68. flock/frontend/src/components/graph/AgentNode.test.tsx +77 -0
  69. flock/frontend/src/components/graph/AgentNode.tsx +324 -0
  70. flock/frontend/src/components/graph/GraphCanvas.tsx +613 -0
  71. flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
  72. flock/frontend/src/components/graph/MessageNode.test.tsx +64 -0
  73. flock/frontend/src/components/graph/MessageNode.tsx +129 -0
  74. flock/frontend/src/components/graph/MiniMap.tsx +47 -0
  75. flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
  76. flock/frontend/src/components/layout/DashboardLayout.css +420 -0
  77. flock/frontend/src/components/layout/DashboardLayout.tsx +287 -0
  78. flock/frontend/src/components/layout/Header.module.css +88 -0
  79. flock/frontend/src/components/layout/Header.tsx +52 -0
  80. flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css +288 -0
  81. flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx +450 -0
  82. flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx +13 -0
  83. flock/frontend/src/components/modules/JsonAttributeRenderer.tsx +140 -0
  84. flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
  85. flock/frontend/src/components/modules/ModuleRegistry.ts +93 -0
  86. flock/frontend/src/components/modules/ModuleWindow.tsx +223 -0
  87. flock/frontend/src/components/modules/TraceModuleJaeger.tsx +1971 -0
  88. flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx +13 -0
  89. flock/frontend/src/components/modules/registerModules.ts +29 -0
  90. flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
  91. flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
  92. flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
  93. flock/frontend/src/components/settings/MultiSelect.tsx +235 -0
  94. flock/frontend/src/components/settings/SettingsPanel.css +327 -0
  95. flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
  96. flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
  97. flock/frontend/src/components/settings/TracingSettings.tsx +404 -0
  98. flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
  99. flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
  100. flock/frontend/src/hooks/useModulePersistence.ts +154 -0
  101. flock/frontend/src/hooks/useModules.ts +157 -0
  102. flock/frontend/src/hooks/usePersistence.ts +141 -0
  103. flock/frontend/src/main.tsx +13 -0
  104. flock/frontend/src/services/api.ts +337 -0
  105. flock/frontend/src/services/graphService.test.ts +330 -0
  106. flock/frontend/src/services/graphService.ts +75 -0
  107. flock/frontend/src/services/indexeddb.test.ts +793 -0
  108. flock/frontend/src/services/indexeddb.ts +848 -0
  109. flock/frontend/src/services/layout.test.ts +437 -0
  110. flock/frontend/src/services/layout.ts +357 -0
  111. flock/frontend/src/services/themeApplicator.ts +140 -0
  112. flock/frontend/src/services/themeService.ts +77 -0
  113. flock/frontend/src/services/websocket.ts +650 -0
  114. flock/frontend/src/store/filterStore.test.ts +250 -0
  115. flock/frontend/src/store/filterStore.ts +272 -0
  116. flock/frontend/src/store/graphStore.test.ts +570 -0
  117. flock/frontend/src/store/graphStore.ts +462 -0
  118. flock/frontend/src/store/moduleStore.test.ts +253 -0
  119. flock/frontend/src/store/moduleStore.ts +75 -0
  120. flock/frontend/src/store/settingsStore.ts +188 -0
  121. flock/frontend/src/store/streamStore.ts +68 -0
  122. flock/frontend/src/store/uiStore.test.ts +54 -0
  123. flock/frontend/src/store/uiStore.ts +122 -0
  124. flock/frontend/src/store/wsStore.ts +34 -0
  125. flock/frontend/src/styles/index.css +15 -0
  126. flock/frontend/src/styles/scrollbar.css +47 -0
  127. flock/frontend/src/styles/variables.css +488 -0
  128. flock/frontend/src/test/setup.ts +1 -0
  129. flock/frontend/src/types/filters.ts +47 -0
  130. flock/frontend/src/types/graph.ts +95 -0
  131. flock/frontend/src/types/modules.ts +10 -0
  132. flock/frontend/src/types/theme.ts +55 -0
  133. flock/frontend/src/utils/artifacts.ts +24 -0
  134. flock/frontend/src/utils/mockData.ts +98 -0
  135. flock/frontend/src/utils/performance.ts +16 -0
  136. flock/frontend/src/vite-env.d.ts +17 -0
  137. flock/frontend/tsconfig.json +27 -0
  138. flock/frontend/tsconfig.node.json +11 -0
  139. flock/frontend/vite.config.ts +25 -0
  140. flock/frontend/vitest.config.ts +11 -0
  141. flock/{core/util → helper}/cli_helper.py +9 -5
  142. flock/{core/logging → logging}/__init__.py +2 -3
  143. flock/logging/auto_trace.py +159 -0
  144. flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
  145. flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
  146. flock/{core/logging → logging}/formatters/themed_formatter.py +69 -107
  147. flock/{core/logging → logging}/logging.py +78 -61
  148. flock/{core/logging → logging}/telemetry.py +66 -26
  149. flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
  150. flock/logging/telemetry_exporter/duckdb_exporter.py +216 -0
  151. flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +13 -10
  152. flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
  153. flock/logging/trace_and_logged.py +304 -0
  154. flock/mcp/__init__.py +91 -0
  155. flock/{core/mcp/mcp_client.py → mcp/client.py} +131 -158
  156. flock/{core/mcp/mcp_config.py → mcp/config.py} +86 -132
  157. flock/mcp/manager.py +286 -0
  158. flock/mcp/servers/sse/__init__.py +1 -1
  159. flock/mcp/servers/sse/flock_sse_server.py +16 -58
  160. flock/mcp/servers/stdio/__init__.py +1 -1
  161. flock/mcp/servers/stdio/flock_stdio_server.py +13 -53
  162. flock/mcp/servers/streamable_http/flock_streamable_http_server.py +22 -67
  163. flock/mcp/servers/websockets/flock_websocket_server.py +12 -45
  164. flock/{core/mcp/flock_mcp_tool_base.py → mcp/tool.py} +24 -78
  165. flock/mcp/types/__init__.py +42 -0
  166. flock/{core/mcp → mcp}/types/callbacks.py +12 -15
  167. flock/{core/mcp → mcp}/types/factories.py +7 -6
  168. flock/{core/mcp → mcp}/types/handlers.py +13 -18
  169. flock/{core/mcp → mcp}/types/types.py +70 -74
  170. flock/{core/mcp → mcp}/util/helpers.py +3 -3
  171. flock/orchestrator.py +970 -0
  172. flock/registry.py +148 -0
  173. flock/runtime.py +262 -0
  174. flock/service.py +277 -0
  175. flock/store.py +1214 -0
  176. flock/subscription.py +111 -0
  177. flock/themes/andromeda.toml +1 -1
  178. flock/themes/apple-system-colors.toml +1 -1
  179. flock/themes/arcoiris.toml +1 -1
  180. flock/themes/atomonelight.toml +1 -1
  181. flock/themes/ayu copy.toml +1 -1
  182. flock/themes/ayu-light.toml +1 -1
  183. flock/themes/belafonte-day.toml +1 -1
  184. flock/themes/belafonte-night.toml +1 -1
  185. flock/themes/blulocodark.toml +1 -1
  186. flock/themes/breeze.toml +1 -1
  187. flock/themes/broadcast.toml +1 -1
  188. flock/themes/brogrammer.toml +1 -1
  189. flock/themes/builtin-dark.toml +1 -1
  190. flock/themes/builtin-pastel-dark.toml +1 -1
  191. flock/themes/catppuccin-latte.toml +1 -1
  192. flock/themes/catppuccin-macchiato.toml +1 -1
  193. flock/themes/catppuccin-mocha.toml +1 -1
  194. flock/themes/cga.toml +1 -1
  195. flock/themes/chalk.toml +1 -1
  196. flock/themes/ciapre.toml +1 -1
  197. flock/themes/coffee-theme.toml +1 -1
  198. flock/themes/cyberpunkscarletprotocol.toml +1 -1
  199. flock/themes/dark+.toml +1 -1
  200. flock/themes/darkermatrix.toml +1 -1
  201. flock/themes/darkmatrix.toml +2 -2
  202. flock/themes/darkside.toml +1 -1
  203. flock/themes/deep.toml +2 -2
  204. flock/themes/desert.toml +1 -1
  205. flock/themes/django.toml +1 -1
  206. flock/themes/djangosmooth.toml +1 -1
  207. flock/themes/doomone.toml +1 -1
  208. flock/themes/dotgov.toml +1 -1
  209. flock/themes/dracula+.toml +1 -1
  210. flock/themes/duckbones.toml +1 -1
  211. flock/themes/encom.toml +1 -1
  212. flock/themes/espresso.toml +1 -1
  213. flock/themes/everblush.toml +1 -1
  214. flock/themes/fairyfloss.toml +1 -1
  215. flock/themes/fideloper.toml +1 -1
  216. flock/themes/fishtank.toml +1 -1
  217. flock/themes/flexoki-light.toml +1 -1
  218. flock/themes/floraverse.toml +1 -1
  219. flock/themes/framer.toml +1 -1
  220. flock/themes/galizur.toml +1 -1
  221. flock/themes/github.toml +1 -1
  222. flock/themes/grass.toml +1 -1
  223. flock/themes/grey-green.toml +1 -1
  224. flock/themes/gruvboxlight.toml +1 -1
  225. flock/themes/guezwhoz.toml +1 -1
  226. flock/themes/harper.toml +1 -1
  227. flock/themes/hax0r-blue.toml +1 -1
  228. flock/themes/hopscotch.256.toml +1 -1
  229. flock/themes/ic-green-ppl.toml +1 -1
  230. flock/themes/iceberg-dark.toml +1 -1
  231. flock/themes/japanesque.toml +1 -1
  232. flock/themes/jubi.toml +1 -1
  233. flock/themes/kibble.toml +1 -1
  234. flock/themes/kolorit.toml +1 -1
  235. flock/themes/kurokula.toml +1 -1
  236. flock/themes/materialdesigncolors.toml +1 -1
  237. flock/themes/matrix.toml +1 -1
  238. flock/themes/mellifluous.toml +1 -1
  239. flock/themes/midnight-in-mojave.toml +1 -1
  240. flock/themes/monokai-remastered.toml +1 -1
  241. flock/themes/monokai-soda.toml +1 -1
  242. flock/themes/neon.toml +1 -1
  243. flock/themes/neopolitan.toml +5 -5
  244. flock/themes/nord-light.toml +1 -1
  245. flock/themes/ocean.toml +1 -1
  246. flock/themes/onehalfdark.toml +1 -1
  247. flock/themes/onehalflight.toml +1 -1
  248. flock/themes/palenighthc.toml +1 -1
  249. flock/themes/paulmillr.toml +1 -1
  250. flock/themes/pencildark.toml +1 -1
  251. flock/themes/pnevma.toml +1 -1
  252. flock/themes/purple-rain.toml +1 -1
  253. flock/themes/purplepeter.toml +1 -1
  254. flock/themes/raycast-dark.toml +1 -1
  255. flock/themes/red-sands.toml +1 -1
  256. flock/themes/relaxed.toml +1 -1
  257. flock/themes/retro.toml +1 -1
  258. flock/themes/rose-pine.toml +1 -1
  259. flock/themes/royal.toml +1 -1
  260. flock/themes/ryuuko.toml +1 -1
  261. flock/themes/sakura.toml +1 -1
  262. flock/themes/scarlet-protocol.toml +1 -1
  263. flock/themes/seoulbones-dark.toml +1 -1
  264. flock/themes/shades-of-purple.toml +1 -1
  265. flock/themes/smyck.toml +1 -1
  266. flock/themes/softserver.toml +1 -1
  267. flock/themes/solarized-darcula.toml +1 -1
  268. flock/themes/square.toml +1 -1
  269. flock/themes/sugarplum.toml +1 -1
  270. flock/themes/thayer-bright.toml +1 -1
  271. flock/themes/tokyonight.toml +1 -1
  272. flock/themes/tomorrow.toml +1 -1
  273. flock/themes/ubuntu.toml +1 -1
  274. flock/themes/ultradark.toml +1 -1
  275. flock/themes/ultraviolent.toml +1 -1
  276. flock/themes/unikitty.toml +1 -1
  277. flock/themes/urple.toml +1 -1
  278. flock/themes/vesper.toml +1 -1
  279. flock/themes/vimbones.toml +1 -1
  280. flock/themes/wildcherry.toml +1 -1
  281. flock/themes/wilmersdorf.toml +1 -1
  282. flock/themes/wryan.toml +1 -1
  283. flock/themes/xcodedarkhc.toml +1 -1
  284. flock/themes/xcodelight.toml +1 -1
  285. flock/themes/zenbones-light.toml +1 -1
  286. flock/themes/zenwritten-dark.toml +1 -1
  287. flock/utilities.py +301 -0
  288. flock/utility/output_utility_component.py +226 -0
  289. flock/visibility.py +107 -0
  290. flock_core-0.5.0.dist-info/METADATA +964 -0
  291. flock_core-0.5.0.dist-info/RECORD +525 -0
  292. flock_core-0.5.0.dist-info/entry_points.txt +2 -0
  293. {flock_core-0.4.543.dist-info → flock_core-0.5.0.dist-info}/licenses/LICENSE +1 -1
  294. flock/adapter/__init__.py +0 -14
  295. flock/adapter/azure_adapter.py +0 -68
  296. flock/adapter/chroma_adapter.py +0 -73
  297. flock/adapter/faiss_adapter.py +0 -97
  298. flock/adapter/pinecone_adapter.py +0 -51
  299. flock/adapter/vector_base.py +0 -47
  300. flock/cli/assets/release_notes.md +0 -140
  301. flock/cli/config.py +0 -8
  302. flock/cli/constants.py +0 -36
  303. flock/cli/create_agent.py +0 -1
  304. flock/cli/create_flock.py +0 -280
  305. flock/cli/execute_flock.py +0 -620
  306. flock/cli/load_agent.py +0 -1
  307. flock/cli/load_examples.py +0 -1
  308. flock/cli/load_flock.py +0 -192
  309. flock/cli/load_release_notes.py +0 -20
  310. flock/cli/loaded_flock_cli.py +0 -254
  311. flock/cli/manage_agents.py +0 -459
  312. flock/cli/registry_management.py +0 -889
  313. flock/cli/runner.py +0 -41
  314. flock/cli/settings.py +0 -857
  315. flock/cli/utils.py +0 -135
  316. flock/cli/view_results.py +0 -29
  317. flock/cli/yaml_editor.py +0 -396
  318. flock/config.py +0 -56
  319. flock/core/__init__.py +0 -44
  320. flock/core/api/__init__.py +0 -10
  321. flock/core/api/custom_endpoint.py +0 -45
  322. flock/core/api/endpoints.py +0 -262
  323. flock/core/api/main.py +0 -162
  324. flock/core/api/models.py +0 -101
  325. flock/core/api/run_store.py +0 -224
  326. flock/core/api/runner.py +0 -44
  327. flock/core/api/service.py +0 -214
  328. flock/core/config/flock_agent_config.py +0 -11
  329. flock/core/config/scheduled_agent_config.py +0 -40
  330. flock/core/context/context.py +0 -214
  331. flock/core/context/context_manager.py +0 -40
  332. flock/core/context/context_vars.py +0 -11
  333. flock/core/evaluation/utils.py +0 -395
  334. flock/core/execution/batch_executor.py +0 -369
  335. flock/core/execution/evaluation_executor.py +0 -438
  336. flock/core/execution/local_executor.py +0 -31
  337. flock/core/execution/opik_executor.py +0 -103
  338. flock/core/execution/temporal_executor.py +0 -166
  339. flock/core/flock.py +0 -1003
  340. flock/core/flock_agent.py +0 -1258
  341. flock/core/flock_evaluator.py +0 -60
  342. flock/core/flock_factory.py +0 -513
  343. flock/core/flock_module.py +0 -207
  344. flock/core/flock_registry.py +0 -702
  345. flock/core/flock_router.py +0 -83
  346. flock/core/flock_scheduler.py +0 -166
  347. flock/core/flock_server_manager.py +0 -136
  348. flock/core/interpreter/python_interpreter.py +0 -689
  349. flock/core/logging/live_capture.py +0 -137
  350. flock/core/logging/trace_and_logged.py +0 -59
  351. flock/core/mcp/__init__.py +0 -1
  352. flock/core/mcp/flock_mcp_server.py +0 -640
  353. flock/core/mcp/mcp_client_manager.py +0 -201
  354. flock/core/mcp/types/__init__.py +0 -1
  355. flock/core/mixin/dspy_integration.py +0 -445
  356. flock/core/mixin/prompt_parser.py +0 -125
  357. flock/core/serialization/__init__.py +0 -13
  358. flock/core/serialization/callable_registry.py +0 -52
  359. flock/core/serialization/flock_serializer.py +0 -854
  360. flock/core/serialization/json_encoder.py +0 -41
  361. flock/core/serialization/secure_serializer.py +0 -175
  362. flock/core/serialization/serializable.py +0 -342
  363. flock/core/serialization/serialization_utils.py +0 -409
  364. flock/core/util/file_path_utils.py +0 -223
  365. flock/core/util/hydrator.py +0 -309
  366. flock/core/util/input_resolver.py +0 -141
  367. flock/core/util/loader.py +0 -59
  368. flock/core/util/splitter.py +0 -219
  369. flock/di.py +0 -41
  370. flock/evaluators/__init__.py +0 -1
  371. flock/evaluators/declarative/__init__.py +0 -1
  372. flock/evaluators/declarative/declarative_evaluator.py +0 -217
  373. flock/evaluators/memory/memory_evaluator.py +0 -90
  374. flock/evaluators/test/test_case_evaluator.py +0 -38
  375. flock/evaluators/zep/zep_evaluator.py +0 -59
  376. flock/modules/__init__.py +0 -1
  377. flock/modules/assertion/__init__.py +0 -1
  378. flock/modules/assertion/assertion_module.py +0 -286
  379. flock/modules/callback/__init__.py +0 -1
  380. flock/modules/callback/callback_module.py +0 -91
  381. flock/modules/enterprise_memory/README.md +0 -99
  382. flock/modules/enterprise_memory/enterprise_memory_module.py +0 -526
  383. flock/modules/mem0/__init__.py +0 -1
  384. flock/modules/mem0/mem0_module.py +0 -126
  385. flock/modules/mem0_async/__init__.py +0 -1
  386. flock/modules/mem0_async/async_mem0_module.py +0 -126
  387. flock/modules/memory/__init__.py +0 -1
  388. flock/modules/memory/memory_module.py +0 -429
  389. flock/modules/memory/memory_parser.py +0 -125
  390. flock/modules/memory/memory_storage.py +0 -736
  391. flock/modules/output/__init__.py +0 -1
  392. flock/modules/output/output_module.py +0 -196
  393. flock/modules/performance/__init__.py +0 -1
  394. flock/modules/performance/metrics_module.py +0 -678
  395. flock/modules/zep/__init__.py +0 -1
  396. flock/modules/zep/zep_module.py +0 -192
  397. flock/platform/docker_tools.py +0 -49
  398. flock/platform/jaeger_install.py +0 -86
  399. flock/routers/__init__.py +0 -1
  400. flock/routers/agent/__init__.py +0 -1
  401. flock/routers/agent/agent_router.py +0 -236
  402. flock/routers/agent/handoff_agent.py +0 -58
  403. flock/routers/conditional/conditional_router.py +0 -486
  404. flock/routers/default/__init__.py +0 -1
  405. flock/routers/default/default_router.py +0 -80
  406. flock/routers/feedback/feedback_router.py +0 -114
  407. flock/routers/list_generator/list_generator_router.py +0 -166
  408. flock/routers/llm/__init__.py +0 -1
  409. flock/routers/llm/llm_router.py +0 -365
  410. flock/tools/__init__.py +0 -0
  411. flock/tools/azure_tools.py +0 -781
  412. flock/tools/code_tools.py +0 -167
  413. flock/tools/file_tools.py +0 -149
  414. flock/tools/github_tools.py +0 -157
  415. flock/tools/markdown_tools.py +0 -205
  416. flock/tools/system_tools.py +0 -9
  417. flock/tools/text_tools.py +0 -810
  418. flock/tools/web_tools.py +0 -92
  419. flock/tools/zendesk_tools.py +0 -501
  420. flock/webapp/__init__.py +0 -1
  421. flock/webapp/app/__init__.py +0 -0
  422. flock/webapp/app/api/__init__.py +0 -0
  423. flock/webapp/app/api/agent_management.py +0 -237
  424. flock/webapp/app/api/execution.py +0 -503
  425. flock/webapp/app/api/flock_management.py +0 -125
  426. flock/webapp/app/api/registry_viewer.py +0 -29
  427. flock/webapp/app/chat.py +0 -662
  428. flock/webapp/app/config.py +0 -104
  429. flock/webapp/app/dependencies.py +0 -117
  430. flock/webapp/app/main.py +0 -1086
  431. flock/webapp/app/middleware.py +0 -113
  432. flock/webapp/app/models_ui.py +0 -7
  433. flock/webapp/app/services/__init__.py +0 -0
  434. flock/webapp/app/services/feedback_file_service.py +0 -363
  435. flock/webapp/app/services/flock_service.py +0 -345
  436. flock/webapp/app/services/sharing_models.py +0 -81
  437. flock/webapp/app/services/sharing_store.py +0 -597
  438. flock/webapp/app/templates/theme_mapper.html +0 -326
  439. flock/webapp/app/theme_mapper.py +0 -811
  440. flock/webapp/app/utils.py +0 -85
  441. flock/webapp/run.py +0 -219
  442. flock/webapp/static/css/chat.css +0 -301
  443. flock/webapp/static/css/components.css +0 -167
  444. flock/webapp/static/css/header.css +0 -39
  445. flock/webapp/static/css/layout.css +0 -281
  446. flock/webapp/static/css/sidebar.css +0 -127
  447. flock/webapp/static/css/two-pane.css +0 -48
  448. flock/webapp/templates/base.html +0 -389
  449. flock/webapp/templates/chat.html +0 -152
  450. flock/webapp/templates/chat_settings.html +0 -19
  451. flock/webapp/templates/flock_editor.html +0 -16
  452. flock/webapp/templates/index.html +0 -12
  453. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  454. flock/webapp/templates/partials/_agent_list.html +0 -18
  455. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  456. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  457. flock/webapp/templates/partials/_chat_container.html +0 -15
  458. flock/webapp/templates/partials/_chat_messages.html +0 -57
  459. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  460. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  461. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  462. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  463. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  464. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  465. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  466. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  467. flock/webapp/templates/partials/_execution_form.html +0 -127
  468. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  469. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  470. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  471. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  472. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  473. flock/webapp/templates/partials/_live_logs.html +0 -13
  474. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  475. flock/webapp/templates/partials/_registry_table.html +0 -25
  476. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  477. flock/webapp/templates/partials/_results_display.html +0 -78
  478. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  479. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  480. flock/webapp/templates/partials/_settings_view.html +0 -36
  481. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  482. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  483. flock/webapp/templates/partials/_sidebar.html +0 -74
  484. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  485. flock/webapp/templates/partials/_theme_preview.html +0 -36
  486. flock/webapp/templates/registry_viewer.html +0 -84
  487. flock/webapp/templates/shared_run_page.html +0 -140
  488. flock/workflow/__init__.py +0 -0
  489. flock/workflow/activities.py +0 -237
  490. flock/workflow/agent_activities.py +0 -24
  491. flock/workflow/agent_execution_activity.py +0 -240
  492. flock/workflow/flock_workflow.py +0 -225
  493. flock/workflow/temporal_config.py +0 -96
  494. flock/workflow/temporal_setup.py +0 -60
  495. flock_core-0.4.543.dist-info/METADATA +0 -676
  496. flock_core-0.4.543.dist-info/RECORD +0 -572
  497. flock_core-0.4.543.dist-info/entry_points.txt +0 -2
  498. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  499. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  500. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  501. {flock_core-0.4.543.dist-info → flock_core-0.5.0.dist-info}/WHEEL +0 -0
@@ -13,22 +13,21 @@ 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 FlockMCPServerBase
18
- from flock.core.mcp.mcp_client import FlockMCPClientBase
19
- from flock.core.mcp.mcp_client_manager import FlockMCPClientManagerBase
20
- from flock.core.mcp.mcp_config import (
21
- FlockMCPConfigurationBase,
22
- FlockMCPConnectionConfigurationBase,
16
+ from flock.logging.logging import get_logger
17
+ from flock.mcp.client import FlockMCPClient
18
+ from flock.mcp.config import (
19
+ FlockMCPConfiguration,
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__)
28
27
 
29
28
 
30
29
  # Optional to provide type hints.
31
- class FlockWSConnectionConfig(FlockMCPConnectionConfigurationBase):
30
+ class FlockWSConnectionConfig(FlockMCPConnectionConfiguration):
32
31
  """Concrete ConnectionConfig for a WS Client."""
33
32
 
34
33
  # Only thing we need to override here is the concrete transport_type
@@ -44,7 +43,7 @@ class FlockWSConnectionConfig(FlockMCPConnectionConfigurationBase):
44
43
 
45
44
 
46
45
  # Optional to provide type hints.
47
- class FlockWSConfig(FlockMCPConfigurationBase):
46
+ class FlockWSConfig(FlockMCPConfiguration):
48
47
  """Configuration for Websocket clients."""
49
48
 
50
49
  # The only thing we need to override here is the concrete
@@ -56,10 +55,10 @@ class FlockWSConfig(FlockMCPConfigurationBase):
56
55
  )
57
56
 
58
57
 
59
- class FlockWSClient(FlockMCPClientBase):
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(FlockMCPClientBase):
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(FlockMCPClientManagerBase):
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(FlockMCPServerBase):
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
@@ -3,17 +3,20 @@
3
3
  from typing import Any, TypeVar
4
4
 
5
5
  from dspy import Tool as DSPyTool
6
+ from dspy.adapters.types.tool import convert_input_schema_to_tool_args
6
7
  from mcp import Tool
7
8
  from mcp.types import CallToolResult, TextContent, ToolAnnotations
8
9
  from opentelemetry import trace
9
10
  from pydantic import BaseModel, Field
11
+ from typing_extensions import Self
12
+
13
+ from flock.logging.logging import get_logger
10
14
 
11
- from flock.core.logging.logging import get_logger
12
15
 
13
16
  logger = get_logger("mcp.tool")
14
17
  tracer = trace.get_tracer(__name__)
15
18
 
16
- T = TypeVar("T", bound="FlockMCPToolBase")
19
+ T = TypeVar("T", bound="FlockMCPTool")
17
20
 
18
21
  TYPE_MAPPING = {
19
22
  "string": str,
@@ -25,22 +28,16 @@ TYPE_MAPPING = {
25
28
  }
26
29
 
27
30
 
28
- class FlockMCPToolBase(BaseModel):
31
+ class FlockMCPTool(BaseModel):
29
32
  """Base Class for MCP Tools for Flock."""
30
33
 
31
34
  name: str = Field(..., description="Name of the tool")
32
35
 
33
- agent_id: str = Field(
34
- ..., description="Associated agent_id. Used for internal tracking."
35
- )
36
+ agent_id: str = Field(..., description="Associated agent_id. Used for internal tracking.")
36
37
 
37
- run_id: str = Field(
38
- ..., description="Associated run_id. Used for internal tracking."
39
- )
38
+ run_id: str = Field(..., description="Associated run_id. Used for internal tracking.")
40
39
 
41
- description: str | None = Field(
42
- ..., description="A human-readable description of the tool"
43
- )
40
+ description: str | None = Field(..., description="A human-readable description of the tool")
44
41
 
45
42
  input_schema: dict[str, Any] = Field(
46
43
  ...,
@@ -52,9 +49,7 @@ class FlockMCPToolBase(BaseModel):
52
49
  )
53
50
 
54
51
  @classmethod
55
- def from_mcp_tool(
56
- cls: type[T], tool: Tool, agent_id: str, run_id: str
57
- ) -> T:
52
+ def from_mcp_tool(cls, tool: Tool, agent_id: str, run_id: str) -> Self:
58
53
  """Convert MCP Tool to Flock Tool."""
59
54
  return cls(
60
55
  name=tool.name,
@@ -66,7 +61,7 @@ class FlockMCPToolBase(BaseModel):
66
61
  )
67
62
 
68
63
  @classmethod
69
- def to_mcp_tool(cls: type[T], instance: T) -> Tool | None:
64
+ def to_mcp_tool(cls, instance: Self) -> Tool | None:
70
65
  """Convert a flock mcp tool into a mcp tool."""
71
66
  return Tool(
72
67
  name=instance.name,
@@ -75,63 +70,18 @@ class FlockMCPToolBase(BaseModel):
75
70
  annotations=instance.annotations,
76
71
  )
77
72
 
78
- def resolve_json_schema_reference(self, schema: dict) -> dict:
79
- """Recursively resolve json model schema, expanding all references."""
80
- if "$defs" not in schema and "definitions" not in schema:
81
- return schema
82
-
83
- def resolve_refs(obj: Any) -> Any:
84
- if not isinstance(obj, dict[list, list]):
85
- return obj
86
- if isinstance(obj, dict) and "$ref" in obj:
87
- # ref_path = obj["$ref"].split("/")[-1]
88
- return {resolve_refs(v) for k, v in obj.items()}
89
-
90
- return [resolve_refs(item) for item in obj]
91
-
92
- resolved_schema = resolve_refs(schema)
93
-
94
- resolved_schema.pop("$defs", None)
95
- return resolved_schema
96
-
73
+ # Use DSPy's converter for JSON Schema → Tool args to stay aligned with DSPy.
97
74
  def _convert_input_schema_to_tool_args(
98
75
  self, input_schema: dict[str, Any]
99
- ) -> tuple[dict[str, Any], dict[str, type], dict[str, str]]:
100
- """Convert an input schema to tool arguments compatible with Dspy Tool.
101
-
102
- Args:
103
- schema: an input schema describing the tool's input parameters
104
-
105
- Returns:
106
- A tuple of (args, arg_types, arg_desc) for Dspy Tool definition
107
- """
108
- args, arg_types, arg_desc = {}, {}, {}
109
- properties = input_schema.get("properties")
110
- if properties is None:
111
- return args, arg_types, arg_desc
112
-
113
- required = input_schema.get("required", [])
114
-
115
- defs = input_schema.get("$defs", {})
116
-
117
- for name, prop in properties.items():
118
- if len(defs) > 0:
119
- prop = self.resolve_json_schema_reference(
120
- {"$defs": defs, **prop}
121
- )
122
-
123
- args[name] = prop
124
-
125
- arg_types[name] = TYPE_MAPPING.get(prop.get("type"), Any)
126
- arg_desc[name] = prop.get("description", "No description provided")
127
- if name in required:
128
- arg_desc[name] += " (Required)"
129
-
130
- return args, arg_types, arg_desc
131
-
132
- def _convert_mcp_tool_result(
133
- self, call_tool_result: CallToolResult
134
- ) -> str | list[Any]:
76
+ ) -> tuple[dict[str, Any], dict[str, Any], dict[str, str]]:
77
+ try:
78
+ return convert_input_schema_to_tool_args(input_schema)
79
+ except Exception as e: # pragma: no cover - defensive
80
+ logger.exception("Failed to convert MCP tool schema to DSPy tool args: %s", e)
81
+ # Fallback to empty definitions to avoid breaking execution
82
+ return {}, {}, {}
83
+
84
+ def _convert_mcp_tool_result(self, call_tool_result: CallToolResult) -> str | list[Any]:
135
85
  text_contents: list[TextContent] = []
136
86
  non_text_contents = []
137
87
 
@@ -158,9 +108,7 @@ class FlockMCPToolBase(BaseModel):
158
108
 
159
109
  def as_dspy_tool(self, server: Any) -> DSPyTool:
160
110
  """Wrap this tool as a DSPyTool for downstream."""
161
- args, arg_type, args_desc = self._convert_input_schema_to_tool_args(
162
- self.input_schema
163
- )
111
+ args, arg_type, args_desc = self._convert_input_schema_to_tool_args(self.input_schema)
164
112
 
165
113
  async def func(*args, **kwargs):
166
114
  with tracer.start_as_current_span(f"tool.{self.name}.call") as span:
@@ -172,9 +120,7 @@ class FlockMCPToolBase(BaseModel):
172
120
  logger.debug(
173
121
  f"Tool: {self.name}: got client for server '{server_name}' for agent {self.agent_id} on run {self.run_id}"
174
122
  )
175
- logger.debug(
176
- f"Tool: {self.name}: calling server '{server_name}'"
177
- )
123
+ logger.debug(f"Tool: {self.name}: calling server '{server_name}'")
178
124
  result = await server.call_tool(
179
125
  agent_id=self.agent_id,
180
126
  run_id=self.run_id,
@@ -186,7 +132,7 @@ class FlockMCPToolBase(BaseModel):
186
132
  )
187
133
  return self._convert_mcp_tool_result(result)
188
134
  except Exception as e:
189
- logger.error(
135
+ logger.exception(
190
136
  f"Tool: Exception ocurred when calling tool '{self.name}': {e}"
191
137
  )
192
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,12 @@ 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
+ # Use lock-free version to avoid deadlock during initialization
68
+ # when the lock is already held by _connect()
69
+ current_roots = associated_client._get_roots_no_lock()
70
+ logger.debug(f"Server requested list/roots. Sending: {current_roots}")
69
71
  return ListRootsResult(roots=current_roots)
70
- else:
71
- return ErrorData(
72
- code=INVALID_REQUEST, message="List roots not supported."
73
- )
72
+ return ErrorData(code=INVALID_REQUEST, message="List roots not supported.")
74
73
 
75
74
 
76
75
  async def default_logging_callback(
@@ -79,6 +78,4 @@ async def default_logging_callback(
79
78
  server_name: str,
80
79
  ) -> None:
81
80
  """Default Logging Handling Callback."""
82
- await handle_logging_message(
83
- params=params, logger=logger, server_name=server_name
84
- )
81
+ 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
 
@@ -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