flock-core 0.5.0b28__py3-none-any.whl → 0.5.0b51__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 (469) 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/frontend/README.md +678 -0
  17. flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
  18. flock/frontend/index.html +12 -0
  19. flock/frontend/package-lock.json +4347 -0
  20. flock/frontend/package.json +48 -0
  21. flock/frontend/src/App.tsx +79 -0
  22. flock/frontend/src/__tests__/e2e/critical-scenarios.test.tsx +587 -0
  23. flock/frontend/src/__tests__/integration/filtering-e2e.test.tsx +387 -0
  24. flock/frontend/src/__tests__/integration/graph-rendering.test.tsx +640 -0
  25. flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
  26. flock/frontend/src/components/common/BuildInfo.tsx +39 -0
  27. flock/frontend/src/components/common/EmptyState.module.css +115 -0
  28. flock/frontend/src/components/common/EmptyState.tsx +128 -0
  29. flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
  30. flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
  31. flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
  32. flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
  33. flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
  34. flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
  35. flock/frontend/src/components/controls/PublishControl.css +547 -0
  36. flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
  37. flock/frontend/src/components/controls/PublishControl.tsx +432 -0
  38. flock/frontend/src/components/details/DetailWindowContainer.tsx +62 -0
  39. flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
  40. flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
  41. flock/frontend/src/components/details/MessageHistoryTab.tsx +299 -0
  42. flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
  43. flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
  44. flock/frontend/src/components/details/RunStatusTab.tsx +307 -0
  45. flock/frontend/src/components/details/tabs.test.tsx +1015 -0
  46. flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
  47. flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
  48. flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
  49. flock/frontend/src/components/filters/FilterBar.module.css +29 -0
  50. flock/frontend/src/components/filters/FilterBar.test.tsx +133 -0
  51. flock/frontend/src/components/filters/FilterBar.tsx +33 -0
  52. flock/frontend/src/components/filters/FilterPills.module.css +79 -0
  53. flock/frontend/src/components/filters/FilterPills.test.tsx +173 -0
  54. flock/frontend/src/components/filters/FilterPills.tsx +67 -0
  55. flock/frontend/src/components/filters/TimeRangeFilter.module.css +91 -0
  56. flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
  57. flock/frontend/src/components/filters/TimeRangeFilter.tsx +105 -0
  58. flock/frontend/src/components/graph/AgentNode.test.tsx +75 -0
  59. flock/frontend/src/components/graph/AgentNode.tsx +322 -0
  60. flock/frontend/src/components/graph/GraphCanvas.tsx +406 -0
  61. flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
  62. flock/frontend/src/components/graph/MessageNode.test.tsx +62 -0
  63. flock/frontend/src/components/graph/MessageNode.tsx +116 -0
  64. flock/frontend/src/components/graph/MiniMap.tsx +47 -0
  65. flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
  66. flock/frontend/src/components/layout/DashboardLayout.css +407 -0
  67. flock/frontend/src/components/layout/DashboardLayout.tsx +300 -0
  68. flock/frontend/src/components/layout/Header.module.css +88 -0
  69. flock/frontend/src/components/layout/Header.tsx +52 -0
  70. flock/frontend/src/components/modules/EventLogModule.test.tsx +401 -0
  71. flock/frontend/src/components/modules/EventLogModule.tsx +396 -0
  72. flock/frontend/src/components/modules/EventLogModuleWrapper.tsx +17 -0
  73. flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
  74. flock/frontend/src/components/modules/ModuleRegistry.ts +85 -0
  75. flock/frontend/src/components/modules/ModuleWindow.tsx +155 -0
  76. flock/frontend/src/components/modules/registerModules.ts +20 -0
  77. flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
  78. flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
  79. flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
  80. flock/frontend/src/components/settings/SettingsPanel.css +327 -0
  81. flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
  82. flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
  83. flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
  84. flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
  85. flock/frontend/src/hooks/useModulePersistence.ts +154 -0
  86. flock/frontend/src/hooks/useModules.ts +139 -0
  87. flock/frontend/src/hooks/usePersistence.ts +139 -0
  88. flock/frontend/src/main.tsx +13 -0
  89. flock/frontend/src/services/api.ts +213 -0
  90. flock/frontend/src/services/indexeddb.test.ts +793 -0
  91. flock/frontend/src/services/indexeddb.ts +794 -0
  92. flock/frontend/src/services/layout.test.ts +437 -0
  93. flock/frontend/src/services/layout.ts +146 -0
  94. flock/frontend/src/services/themeApplicator.ts +140 -0
  95. flock/frontend/src/services/themeService.ts +77 -0
  96. flock/frontend/src/services/websocket.test.ts +595 -0
  97. flock/frontend/src/services/websocket.ts +685 -0
  98. flock/frontend/src/store/filterStore.test.ts +242 -0
  99. flock/frontend/src/store/filterStore.ts +103 -0
  100. flock/frontend/src/store/graphStore.test.ts +186 -0
  101. flock/frontend/src/store/graphStore.ts +414 -0
  102. flock/frontend/src/store/moduleStore.test.ts +253 -0
  103. flock/frontend/src/store/moduleStore.ts +57 -0
  104. flock/frontend/src/store/settingsStore.ts +188 -0
  105. flock/frontend/src/store/streamStore.ts +68 -0
  106. flock/frontend/src/store/uiStore.test.ts +54 -0
  107. flock/frontend/src/store/uiStore.ts +110 -0
  108. flock/frontend/src/store/wsStore.ts +34 -0
  109. flock/frontend/src/styles/index.css +15 -0
  110. flock/frontend/src/styles/scrollbar.css +47 -0
  111. flock/frontend/src/styles/variables.css +488 -0
  112. flock/frontend/src/test/setup.ts +1 -0
  113. flock/frontend/src/types/filters.ts +14 -0
  114. flock/frontend/src/types/graph.ts +55 -0
  115. flock/frontend/src/types/modules.ts +7 -0
  116. flock/frontend/src/types/theme.ts +55 -0
  117. flock/frontend/src/utils/mockData.ts +85 -0
  118. flock/frontend/src/utils/performance.ts +16 -0
  119. flock/frontend/src/utils/transforms.test.ts +860 -0
  120. flock/frontend/src/utils/transforms.ts +323 -0
  121. flock/frontend/src/vite-env.d.ts +17 -0
  122. flock/frontend/tsconfig.json +27 -0
  123. flock/frontend/tsconfig.node.json +11 -0
  124. flock/frontend/vite.config.ts +25 -0
  125. flock/frontend/vitest.config.ts +11 -0
  126. flock/{core/util → helper}/cli_helper.py +4 -3
  127. flock/{core/logging → logging}/__init__.py +2 -3
  128. flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
  129. flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
  130. flock/{core/logging → logging}/formatters/themed_formatter.py +69 -115
  131. flock/{core/logging → logging}/logging.py +77 -61
  132. flock/{core/logging → logging}/telemetry.py +20 -26
  133. flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
  134. flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +6 -9
  135. flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
  136. flock/{core/logging → logging}/trace_and_logged.py +20 -24
  137. flock/mcp/__init__.py +91 -0
  138. flock/{core/mcp/mcp_client.py → mcp/client.py} +103 -154
  139. flock/{core/mcp/mcp_config.py → mcp/config.py} +62 -117
  140. flock/mcp/manager.py +255 -0
  141. flock/mcp/servers/sse/__init__.py +1 -1
  142. flock/mcp/servers/sse/flock_sse_server.py +11 -53
  143. flock/mcp/servers/stdio/__init__.py +1 -1
  144. flock/mcp/servers/stdio/flock_stdio_server.py +8 -48
  145. flock/mcp/servers/streamable_http/flock_streamable_http_server.py +17 -62
  146. flock/mcp/servers/websockets/flock_websocket_server.py +7 -40
  147. flock/{core/mcp/flock_mcp_tool.py → mcp/tool.py} +16 -26
  148. flock/mcp/types/__init__.py +42 -0
  149. flock/{core/mcp → mcp}/types/callbacks.py +9 -15
  150. flock/{core/mcp → mcp}/types/factories.py +7 -6
  151. flock/{core/mcp → mcp}/types/handlers.py +13 -18
  152. flock/{core/mcp → mcp}/types/types.py +70 -74
  153. flock/{core/mcp → mcp}/util/helpers.py +1 -1
  154. flock/orchestrator.py +645 -0
  155. flock/registry.py +148 -0
  156. flock/runtime.py +262 -0
  157. flock/service.py +140 -0
  158. flock/store.py +69 -0
  159. flock/subscription.py +111 -0
  160. flock/themes/andromeda.toml +1 -1
  161. flock/themes/apple-system-colors.toml +1 -1
  162. flock/themes/arcoiris.toml +1 -1
  163. flock/themes/atomonelight.toml +1 -1
  164. flock/themes/ayu copy.toml +1 -1
  165. flock/themes/ayu-light.toml +1 -1
  166. flock/themes/belafonte-day.toml +1 -1
  167. flock/themes/belafonte-night.toml +1 -1
  168. flock/themes/blulocodark.toml +1 -1
  169. flock/themes/breeze.toml +1 -1
  170. flock/themes/broadcast.toml +1 -1
  171. flock/themes/brogrammer.toml +1 -1
  172. flock/themes/builtin-dark.toml +1 -1
  173. flock/themes/builtin-pastel-dark.toml +1 -1
  174. flock/themes/catppuccin-latte.toml +1 -1
  175. flock/themes/catppuccin-macchiato.toml +1 -1
  176. flock/themes/catppuccin-mocha.toml +1 -1
  177. flock/themes/cga.toml +1 -1
  178. flock/themes/chalk.toml +1 -1
  179. flock/themes/ciapre.toml +1 -1
  180. flock/themes/coffee-theme.toml +1 -1
  181. flock/themes/cyberpunkscarletprotocol.toml +1 -1
  182. flock/themes/dark+.toml +1 -1
  183. flock/themes/darkermatrix.toml +1 -1
  184. flock/themes/darkside.toml +1 -1
  185. flock/themes/desert.toml +1 -1
  186. flock/themes/django.toml +1 -1
  187. flock/themes/djangosmooth.toml +1 -1
  188. flock/themes/doomone.toml +1 -1
  189. flock/themes/dotgov.toml +1 -1
  190. flock/themes/dracula+.toml +1 -1
  191. flock/themes/duckbones.toml +1 -1
  192. flock/themes/encom.toml +1 -1
  193. flock/themes/espresso.toml +1 -1
  194. flock/themes/everblush.toml +1 -1
  195. flock/themes/fairyfloss.toml +1 -1
  196. flock/themes/fideloper.toml +1 -1
  197. flock/themes/fishtank.toml +1 -1
  198. flock/themes/flexoki-light.toml +1 -1
  199. flock/themes/floraverse.toml +1 -1
  200. flock/themes/framer.toml +1 -1
  201. flock/themes/galizur.toml +1 -1
  202. flock/themes/github.toml +1 -1
  203. flock/themes/grass.toml +1 -1
  204. flock/themes/grey-green.toml +1 -1
  205. flock/themes/gruvboxlight.toml +1 -1
  206. flock/themes/guezwhoz.toml +1 -1
  207. flock/themes/harper.toml +1 -1
  208. flock/themes/hax0r-blue.toml +1 -1
  209. flock/themes/hopscotch.256.toml +1 -1
  210. flock/themes/ic-green-ppl.toml +1 -1
  211. flock/themes/iceberg-dark.toml +1 -1
  212. flock/themes/japanesque.toml +1 -1
  213. flock/themes/jubi.toml +1 -1
  214. flock/themes/kibble.toml +1 -1
  215. flock/themes/kolorit.toml +1 -1
  216. flock/themes/kurokula.toml +1 -1
  217. flock/themes/materialdesigncolors.toml +1 -1
  218. flock/themes/matrix.toml +1 -1
  219. flock/themes/mellifluous.toml +1 -1
  220. flock/themes/midnight-in-mojave.toml +1 -1
  221. flock/themes/monokai-remastered.toml +1 -1
  222. flock/themes/monokai-soda.toml +1 -1
  223. flock/themes/neon.toml +1 -1
  224. flock/themes/neopolitan.toml +1 -1
  225. flock/themes/nord-light.toml +1 -1
  226. flock/themes/ocean.toml +1 -1
  227. flock/themes/onehalfdark.toml +1 -1
  228. flock/themes/onehalflight.toml +1 -1
  229. flock/themes/palenighthc.toml +1 -1
  230. flock/themes/paulmillr.toml +1 -1
  231. flock/themes/pencildark.toml +1 -1
  232. flock/themes/pnevma.toml +1 -1
  233. flock/themes/purple-rain.toml +1 -1
  234. flock/themes/purplepeter.toml +1 -1
  235. flock/themes/raycast-dark.toml +1 -1
  236. flock/themes/red-sands.toml +1 -1
  237. flock/themes/relaxed.toml +1 -1
  238. flock/themes/retro.toml +1 -1
  239. flock/themes/rose-pine.toml +1 -1
  240. flock/themes/royal.toml +1 -1
  241. flock/themes/ryuuko.toml +1 -1
  242. flock/themes/sakura.toml +1 -1
  243. flock/themes/scarlet-protocol.toml +1 -1
  244. flock/themes/seoulbones-dark.toml +1 -1
  245. flock/themes/shades-of-purple.toml +1 -1
  246. flock/themes/smyck.toml +1 -1
  247. flock/themes/softserver.toml +1 -1
  248. flock/themes/solarized-darcula.toml +1 -1
  249. flock/themes/square.toml +1 -1
  250. flock/themes/sugarplum.toml +1 -1
  251. flock/themes/thayer-bright.toml +1 -1
  252. flock/themes/tokyonight.toml +1 -1
  253. flock/themes/tomorrow.toml +1 -1
  254. flock/themes/ubuntu.toml +1 -1
  255. flock/themes/ultradark.toml +1 -1
  256. flock/themes/ultraviolent.toml +1 -1
  257. flock/themes/unikitty.toml +1 -1
  258. flock/themes/urple.toml +1 -1
  259. flock/themes/vesper.toml +1 -1
  260. flock/themes/vimbones.toml +1 -1
  261. flock/themes/wildcherry.toml +1 -1
  262. flock/themes/wilmersdorf.toml +1 -1
  263. flock/themes/wryan.toml +1 -1
  264. flock/themes/xcodedarkhc.toml +1 -1
  265. flock/themes/xcodelight.toml +1 -1
  266. flock/themes/zenbones-light.toml +1 -1
  267. flock/themes/zenwritten-dark.toml +1 -1
  268. flock/utilities.py +301 -0
  269. flock/{components/utility → utility}/output_utility_component.py +68 -53
  270. flock/visibility.py +107 -0
  271. flock_core-0.5.0b51.dist-info/METADATA +747 -0
  272. flock_core-0.5.0b51.dist-info/RECORD +508 -0
  273. flock_core-0.5.0b51.dist-info/entry_points.txt +2 -0
  274. {flock_core-0.5.0b28.dist-info → flock_core-0.5.0b51.dist-info}/licenses/LICENSE +1 -1
  275. flock/adapter/__init__.py +0 -14
  276. flock/adapter/azure_adapter.py +0 -68
  277. flock/adapter/chroma_adapter.py +0 -73
  278. flock/adapter/faiss_adapter.py +0 -97
  279. flock/adapter/pinecone_adapter.py +0 -51
  280. flock/adapter/vector_base.py +0 -47
  281. flock/cli/assets/release_notes.md +0 -140
  282. flock/cli/config.py +0 -8
  283. flock/cli/constants.py +0 -36
  284. flock/cli/create_agent.py +0 -1
  285. flock/cli/create_flock.py +0 -280
  286. flock/cli/execute_flock.py +0 -620
  287. flock/cli/load_agent.py +0 -1
  288. flock/cli/load_examples.py +0 -1
  289. flock/cli/load_flock.py +0 -192
  290. flock/cli/load_release_notes.py +0 -20
  291. flock/cli/loaded_flock_cli.py +0 -254
  292. flock/cli/manage_agents.py +0 -459
  293. flock/cli/registry_management.py +0 -889
  294. flock/cli/runner.py +0 -41
  295. flock/cli/settings.py +0 -857
  296. flock/cli/utils.py +0 -135
  297. flock/cli/view_results.py +0 -29
  298. flock/cli/yaml_editor.py +0 -396
  299. flock/components/__init__.py +0 -30
  300. flock/components/evaluation/__init__.py +0 -9
  301. flock/components/evaluation/declarative_evaluation_component.py +0 -606
  302. flock/components/routing/__init__.py +0 -15
  303. flock/components/routing/conditional_routing_component.py +0 -494
  304. flock/components/routing/default_routing_component.py +0 -103
  305. flock/components/routing/llm_routing_component.py +0 -206
  306. flock/components/utility/__init__.py +0 -22
  307. flock/components/utility/example_utility_component.py +0 -250
  308. flock/components/utility/feedback_utility_component.py +0 -206
  309. flock/components/utility/memory_utility_component.py +0 -550
  310. flock/components/utility/metrics_utility_component.py +0 -700
  311. flock/config.py +0 -61
  312. flock/core/__init__.py +0 -110
  313. flock/core/agent/__init__.py +0 -16
  314. flock/core/agent/default_agent.py +0 -216
  315. flock/core/agent/flock_agent_components.py +0 -104
  316. flock/core/agent/flock_agent_execution.py +0 -101
  317. flock/core/agent/flock_agent_integration.py +0 -260
  318. flock/core/agent/flock_agent_lifecycle.py +0 -186
  319. flock/core/agent/flock_agent_serialization.py +0 -381
  320. flock/core/api/__init__.py +0 -10
  321. flock/core/api/custom_endpoint.py +0 -45
  322. flock/core/api/endpoints.py +0 -254
  323. flock/core/api/main.py +0 -162
  324. flock/core/api/models.py +0 -97
  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/component/__init__.py +0 -15
  329. flock/core/component/agent_component_base.py +0 -309
  330. flock/core/component/evaluation_component.py +0 -62
  331. flock/core/component/routing_component.py +0 -74
  332. flock/core/component/utility_component.py +0 -69
  333. flock/core/config/flock_agent_config.py +0 -58
  334. flock/core/config/scheduled_agent_config.py +0 -40
  335. flock/core/context/context.py +0 -213
  336. flock/core/context/context_manager.py +0 -37
  337. flock/core/context/context_vars.py +0 -10
  338. flock/core/evaluation/utils.py +0 -396
  339. flock/core/execution/batch_executor.py +0 -369
  340. flock/core/execution/evaluation_executor.py +0 -438
  341. flock/core/execution/local_executor.py +0 -31
  342. flock/core/execution/opik_executor.py +0 -103
  343. flock/core/execution/temporal_executor.py +0 -164
  344. flock/core/flock.py +0 -634
  345. flock/core/flock_agent.py +0 -336
  346. flock/core/flock_factory.py +0 -613
  347. flock/core/flock_scheduler.py +0 -166
  348. flock/core/flock_server_manager.py +0 -136
  349. flock/core/interpreter/python_interpreter.py +0 -689
  350. flock/core/mcp/__init__.py +0 -1
  351. flock/core/mcp/flock_mcp_server.py +0 -680
  352. flock/core/mcp/mcp_client_manager.py +0 -201
  353. flock/core/mcp/types/__init__.py +0 -1
  354. flock/core/mixin/dspy_integration.py +0 -403
  355. flock/core/mixin/prompt_parser.py +0 -125
  356. flock/core/orchestration/__init__.py +0 -15
  357. flock/core/orchestration/flock_batch_processor.py +0 -94
  358. flock/core/orchestration/flock_evaluator.py +0 -113
  359. flock/core/orchestration/flock_execution.py +0 -295
  360. flock/core/orchestration/flock_initialization.py +0 -149
  361. flock/core/orchestration/flock_server_manager.py +0 -67
  362. flock/core/orchestration/flock_web_server.py +0 -117
  363. flock/core/registry/__init__.py +0 -45
  364. flock/core/registry/agent_registry.py +0 -69
  365. flock/core/registry/callable_registry.py +0 -139
  366. flock/core/registry/component_discovery.py +0 -142
  367. flock/core/registry/component_registry.py +0 -64
  368. flock/core/registry/config_mapping.py +0 -64
  369. flock/core/registry/decorators.py +0 -137
  370. flock/core/registry/registry_hub.py +0 -205
  371. flock/core/registry/server_registry.py +0 -57
  372. flock/core/registry/type_registry.py +0 -86
  373. flock/core/serialization/__init__.py +0 -13
  374. flock/core/serialization/callable_registry.py +0 -52
  375. flock/core/serialization/flock_serializer.py +0 -832
  376. flock/core/serialization/json_encoder.py +0 -41
  377. flock/core/serialization/secure_serializer.py +0 -175
  378. flock/core/serialization/serializable.py +0 -342
  379. flock/core/serialization/serialization_utils.py +0 -412
  380. flock/core/util/file_path_utils.py +0 -223
  381. flock/core/util/hydrator.py +0 -309
  382. flock/core/util/input_resolver.py +0 -164
  383. flock/core/util/loader.py +0 -59
  384. flock/core/util/splitter.py +0 -219
  385. flock/di.py +0 -27
  386. flock/platform/docker_tools.py +0 -49
  387. flock/platform/jaeger_install.py +0 -86
  388. flock/webapp/__init__.py +0 -1
  389. flock/webapp/app/__init__.py +0 -0
  390. flock/webapp/app/api/__init__.py +0 -0
  391. flock/webapp/app/api/agent_management.py +0 -241
  392. flock/webapp/app/api/execution.py +0 -709
  393. flock/webapp/app/api/flock_management.py +0 -129
  394. flock/webapp/app/api/registry_viewer.py +0 -30
  395. flock/webapp/app/chat.py +0 -665
  396. flock/webapp/app/config.py +0 -104
  397. flock/webapp/app/dependencies.py +0 -117
  398. flock/webapp/app/main.py +0 -1070
  399. flock/webapp/app/middleware.py +0 -113
  400. flock/webapp/app/models_ui.py +0 -7
  401. flock/webapp/app/services/__init__.py +0 -0
  402. flock/webapp/app/services/feedback_file_service.py +0 -363
  403. flock/webapp/app/services/flock_service.py +0 -337
  404. flock/webapp/app/services/sharing_models.py +0 -81
  405. flock/webapp/app/services/sharing_store.py +0 -762
  406. flock/webapp/app/templates/theme_mapper.html +0 -326
  407. flock/webapp/app/theme_mapper.py +0 -812
  408. flock/webapp/app/utils.py +0 -85
  409. flock/webapp/run.py +0 -215
  410. flock/webapp/static/css/chat.css +0 -301
  411. flock/webapp/static/css/components.css +0 -167
  412. flock/webapp/static/css/header.css +0 -39
  413. flock/webapp/static/css/layout.css +0 -46
  414. flock/webapp/static/css/sidebar.css +0 -127
  415. flock/webapp/static/css/two-pane.css +0 -48
  416. flock/webapp/templates/base.html +0 -200
  417. flock/webapp/templates/chat.html +0 -152
  418. flock/webapp/templates/chat_settings.html +0 -19
  419. flock/webapp/templates/flock_editor.html +0 -16
  420. flock/webapp/templates/index.html +0 -12
  421. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  422. flock/webapp/templates/partials/_agent_list.html +0 -18
  423. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  424. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  425. flock/webapp/templates/partials/_chat_container.html +0 -15
  426. flock/webapp/templates/partials/_chat_messages.html +0 -57
  427. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  428. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  429. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  430. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  431. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  432. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  433. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  434. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  435. flock/webapp/templates/partials/_execution_form.html +0 -118
  436. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  437. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  438. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  439. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  440. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  441. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  442. flock/webapp/templates/partials/_registry_table.html +0 -25
  443. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  444. flock/webapp/templates/partials/_results_display.html +0 -78
  445. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  446. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  447. flock/webapp/templates/partials/_settings_view.html +0 -36
  448. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  449. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  450. flock/webapp/templates/partials/_sidebar.html +0 -74
  451. flock/webapp/templates/partials/_streaming_results_container.html +0 -195
  452. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  453. flock/webapp/templates/partials/_theme_preview.html +0 -36
  454. flock/webapp/templates/registry_viewer.html +0 -84
  455. flock/webapp/templates/shared_run_page.html +0 -140
  456. flock/workflow/__init__.py +0 -0
  457. flock/workflow/activities.py +0 -196
  458. flock/workflow/agent_activities.py +0 -24
  459. flock/workflow/agent_execution_activity.py +0 -202
  460. flock/workflow/flock_workflow.py +0 -214
  461. flock/workflow/temporal_config.py +0 -96
  462. flock/workflow/temporal_setup.py +0 -68
  463. flock_core-0.5.0b28.dist-info/METADATA +0 -274
  464. flock_core-0.5.0b28.dist-info/RECORD +0 -561
  465. flock_core-0.5.0b28.dist-info/entry_points.txt +0 -2
  466. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  467. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  468. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  469. {flock_core-0.5.0b28.dist-info → flock_core-0.5.0b51.dist-info}/WHEEL +0 -0
@@ -5,21 +5,21 @@ import random
5
5
  import re
6
6
  from typing import Any
7
7
 
8
- from temporalio import workflow
9
-
10
- from flock.core.logging.formatters.themes import OutputTheme
8
+ import toml # install with: pip install toml
9
+ from pydantic import BaseModel
11
10
 
12
- with workflow.unsafe.imports_passed_through():
13
- from pygments.style import Style
14
- from pygments.token import Token
15
- from rich import box
16
- from rich.console import Console, Group
17
- from rich.panel import Panel
18
- from rich.syntax import PygmentsSyntaxTheme, Syntax
19
- from rich.table import Table
20
- from rich.theme import Theme
11
+ # with workflow.unsafe.imports_passed_through():
12
+ from pygments.style import Style
13
+ from pygments.token import Token
14
+ from rich import box
15
+ from rich.console import Console, Group
16
+ from rich.panel import Panel
17
+ from rich.syntax import PygmentsSyntaxTheme, Syntax
18
+ from rich.table import Table
19
+ from rich.theme import Theme
21
20
 
22
- import toml # install with: pip install toml
21
+ # from temporalio import workflow
22
+ from flock.logging.formatters.themes import OutputTheme
23
23
 
24
24
 
25
25
  def resolve_style_string(style_str: str, theme: dict) -> str:
@@ -76,18 +76,10 @@ def generate_default_rich_block(theme: dict | None = None) -> dict[str, Any]:
76
76
  cursor_cursor = theme["colors"]["cursor"].get("cursor", "#d0d0d0")
77
77
  cursor_text = theme["colors"]["cursor"].get("text", "#151515")
78
78
 
79
- primary_background = theme["colors"]["primary"].get(
80
- "background", "#161719"
81
- )
82
- primary_foreground = theme["colors"]["primary"].get(
83
- "foreground", "#c5c8c6"
84
- )
85
- selection_background = theme["colors"]["selection"].get(
86
- "background", "#444444"
87
- )
88
- selection_text = theme["colors"]["selection"].get(
89
- "text", primary_foreground
90
- )
79
+ primary_background = theme["colors"]["primary"].get("background", "#161719")
80
+ primary_foreground = theme["colors"]["primary"].get("foreground", "#c5c8c6")
81
+ selection_background = theme["colors"]["selection"].get("background", "#444444")
82
+ selection_text = theme["colors"]["selection"].get("text", primary_foreground)
91
83
  else:
92
84
  bright_black = "black"
93
85
  bright_blue = "blue"
@@ -155,9 +147,7 @@ def generate_default_rich_block(theme: dict | None = None) -> dict[str, Any]:
155
147
  "panel_padding": random.choice([[1, 2], [1, 1], [2, 2], [0, 2]]),
156
148
  "panel_title_align": random.choice(["left", "center", "right"]),
157
149
  # Add table_row_styles property.
158
- "table_row_styles": random.choice(
159
- [["", "dim"], ["", "italic"], ["", "underline"]]
160
- ),
150
+ "table_row_styles": random.choice([["", "dim"], ["", "italic"], ["", "underline"]]),
161
151
  }
162
152
  # Extra table layout properties (non content properties).
163
153
  default_extra_table_props = {
@@ -178,13 +168,12 @@ def generate_default_rich_block(theme: dict | None = None) -> dict[str, Any]:
178
168
  "table_highlight": False,
179
169
  }
180
170
  # Combine all defaults.
181
- defaults = {
171
+ return {
182
172
  **default_color_props,
183
173
  **extra_color_props,
184
174
  **default_non_color_props,
185
175
  **default_extra_table_props,
186
176
  }
187
- return defaults
188
177
 
189
178
 
190
179
  def load_theme_from_file(filepath: str) -> dict:
@@ -221,9 +210,7 @@ def get_default_styles(theme: dict | None) -> dict[str, Any]:
221
210
  else:
222
211
  defaults = generate_default_rich_block(theme)
223
212
  rich_props = theme.get("rich", {})
224
- final_styles = {
225
- key: rich_props.get(key, defaults[key]) for key in defaults
226
- }
213
+ final_styles = {key: rich_props.get(key, defaults[key]) for key in defaults}
227
214
 
228
215
  # Ensure that panel_padding and table_padding are tuples.
229
216
  final_styles["panel_padding"] = tuple(final_styles["panel_padding"])
@@ -256,14 +243,6 @@ def create_rich_renderable(
256
243
  if styles is None:
257
244
  styles = get_default_styles(theme)
258
245
 
259
- # Convert Pydantic BaseModel instances to dicts for rendering
260
- try:
261
- from pydantic import BaseModel
262
- if isinstance(value, BaseModel):
263
- value = value.model_dump()
264
- except ImportError:
265
- pass
266
-
267
246
  # If the value is a dictionary, render it as a table.
268
247
  if isinstance(value, dict):
269
248
  # Convert table_box string into an actual box style.
@@ -309,41 +288,31 @@ def create_rich_renderable(
309
288
  return table
310
289
 
311
290
  # If the value is a list or tuple, render each item.
312
- elif isinstance(value, list | tuple):
291
+ if isinstance(value, list | tuple):
313
292
  if all(isinstance(item, dict) for item in value):
314
293
  sub_tables = []
315
294
  for i, item in enumerate(value):
316
295
  sub_tables.append(f"[bold]Item {i + 1}[/bold]")
317
296
  sub_tables.append(
318
- create_rich_renderable(
319
- item, level + 1, theme, styles, max_length=max_length
320
- )
297
+ create_rich_renderable(item, level + 1, theme, styles, max_length=max_length)
321
298
  )
322
299
  return Group(*sub_tables)
323
- else:
324
- rendered_items = [
325
- create_rich_renderable(
326
- item, level + 1, theme, styles, max_length=max_length
327
- )
328
- for item in value
329
- ]
330
- if all(isinstance(item, str) for item in rendered_items):
331
- return "\n".join(rendered_items)
332
- else:
333
- return Group(*rendered_items)
300
+ rendered_items = [
301
+ create_rich_renderable(item, level + 1, theme, styles, max_length=max_length)
302
+ for item in value
303
+ ]
304
+ if all(isinstance(item, str) for item in rendered_items):
305
+ return "\n".join(rendered_items)
306
+ return Group(*rendered_items)
334
307
 
335
308
  # Otherwise, return a string representation.
336
- else:
337
- s = str(value).strip()
338
- if max_length > 0 and len(s) > max_length:
339
- omitted = len(s) - max_length
340
- s = (
341
- s[:max_length]
342
- + f"[bold bright_yellow]...(+{omitted}chars)[/bold bright_yellow]"
343
- )
344
- if isinstance(value, str) and "\n" in value:
345
- return f"\n{s}\n"
346
- return s
309
+ s = str(value).strip()
310
+ if max_length > 0 and len(s) > max_length:
311
+ omitted = len(s) - max_length
312
+ s = s[:max_length] + f"[bold bright_yellow]...(+{omitted}chars)[/bold bright_yellow]"
313
+ if isinstance(value, str) and "\n" in value:
314
+ return f"\n{s}\n"
315
+ return s
347
316
 
348
317
 
349
318
  def load_syntax_theme_from_file(filepath: str) -> dict:
@@ -352,12 +321,10 @@ def load_syntax_theme_from_file(filepath: str) -> dict:
352
321
  theme = toml.load(f)
353
322
 
354
323
  if "colors" not in theme:
355
- raise ValueError(
356
- f"Theme file {filepath} does not contain a 'colors' section."
357
- )
324
+ raise ValueError(f"Theme file {filepath} does not contain a 'colors' section.")
358
325
 
359
326
  # Map theme colors to syntax categories
360
- syntax_theme = {
327
+ return {
361
328
  "background": theme["colors"]["primary"].get("background", "#161719"),
362
329
  "text": theme["colors"]["primary"].get("foreground", "#c5c8c6"),
363
330
  "comment": theme["colors"]["normal"].get("black", "#666666"),
@@ -371,8 +338,6 @@ def load_syntax_theme_from_file(filepath: str) -> dict:
371
338
  "error": theme["colors"]["bright"].get("red", "#ff5555"),
372
339
  }
373
340
 
374
- return syntax_theme
375
-
376
341
 
377
342
  def create_rich_syntax_theme(syntax_theme: dict) -> Theme:
378
343
  """Convert a syntax theme dict to a Rich-compatible Theme."""
@@ -476,6 +441,7 @@ class ThemedAgentResultFormatter:
476
441
  table = Table(**table_kwargs)
477
442
  table.add_column("Output", style=styles["column_output"])
478
443
  table.add_column("Value", style=styles["column_value"])
444
+
479
445
  for key, value in result.items():
480
446
  rich_renderable = create_rich_renderable(
481
447
  value,
@@ -497,58 +463,46 @@ class ThemedAgentResultFormatter:
497
463
  padding=styles["panel_padding"],
498
464
  style=styles["panel_style"],
499
465
  )
500
- else:
501
- syntax = Syntax(
502
- s, # The formatted string
503
- "python", # Highlight as Python (change this for other formats)
504
- theme=self.syntax_style, # Choose a Rich theme (matches your color setup)
505
- line_numbers=False,
506
- )
507
- return Panel(
508
- syntax,
509
- title=agent_name,
510
- title_align=styles["panel_title_align"],
511
- border_style=styles["panel_border_style"],
512
- padding=styles["panel_padding"],
513
- style=styles["panel_style"],
514
- )
466
+ syntax = Syntax(
467
+ s, # The formatted string
468
+ "python", # Highlight as Python (change this for other formats)
469
+ theme=self.syntax_style, # Choose a Rich theme (matches your color setup)
470
+ line_numbers=False,
471
+ )
472
+ return Panel(
473
+ syntax,
474
+ title=agent_name,
475
+ title_align=styles["panel_title_align"],
476
+ border_style=styles["panel_border_style"],
477
+ padding=styles["panel_padding"],
478
+ style=styles["panel_style"],
479
+ )
515
480
 
516
- def display_result(self, result: dict[str, Any], agent_name: str) -> None:
481
+ def display_result(self, result: list[BaseModel], agent_name: str) -> None:
517
482
  """Print an agent's result using Rich formatting."""
518
483
  theme = self.theme
519
- themes_dir = (
520
- pathlib.Path(__file__).parent.parent.parent.parent / "themes"
521
- )
484
+ themes_dir = pathlib.Path(__file__).parent.parent.parent / "themes"
522
485
  all_themes = list(themes_dir.glob("*.toml"))
523
- theme = (
524
- theme.value + ".toml"
525
- if not theme.value.endswith(".toml")
526
- else theme.value
527
- )
528
- theme = (
529
- pathlib.Path(__file__).parent.parent.parent.parent
530
- / "themes"
531
- / theme
532
- )
486
+ theme = theme.value + ".toml" if not theme.value.endswith(".toml") else theme.value
487
+ theme = pathlib.Path(__file__).parent.parent.parent / "themes" / theme
533
488
 
534
489
  if pathlib.Path(theme) not in all_themes:
535
- raise ValueError(
536
- f"Invalid theme: {theme}\nAvailable themes: {all_themes}"
537
- )
490
+ raise ValueError(f"Invalid theme: {theme}\nAvailable themes: {all_themes}")
538
491
 
539
492
  theme_dict = load_theme_from_file(theme)
540
493
 
541
494
  styles = get_default_styles(theme_dict)
542
495
  self.styles = styles
543
- self.syntax_style = create_pygments_syntax_theme(
544
- load_syntax_theme_from_file(theme)
545
- )
496
+ self.syntax_style = create_pygments_syntax_theme(load_syntax_theme_from_file(theme))
546
497
 
547
498
  console = Console()
548
- panel = self.format_result(
549
- result=result,
550
- agent_name=agent_name,
551
- theme=theme_dict,
552
- styles=styles,
553
- )
554
- console.print(panel)
499
+ for item in result:
500
+ # basemodel to dict
501
+ item = item.model_dump()
502
+ panel = self.format_result(
503
+ result=item,
504
+ agent_name=agent_name,
505
+ theme=theme_dict,
506
+ styles=styles,
507
+ )
508
+ console.print(panel)
@@ -14,13 +14,12 @@ import logging
14
14
  import sys
15
15
  from typing import Literal
16
16
 
17
- from opentelemetry import trace
18
-
19
17
  # Always import Temporal workflow (since it's part of the project)
20
- from temporalio import workflow
18
+ # from temporalio import workflow
19
+ # with workflow.unsafe.imports_passed_through():
20
+ from loguru import logger as loguru_logger
21
+ from opentelemetry import trace
21
22
 
22
- with workflow.unsafe.imports_passed_through():
23
- from loguru import logger as loguru_logger
24
23
 
25
24
  # ENABLED_FLOCK_LOGGER_LEVELS constant removed
26
25
 
@@ -42,13 +41,14 @@ def in_workflow_context() -> bool:
42
41
  It does this by attempting to call workflow.info() and returning True
43
42
  if successful. Otherwise, it returns False.
44
43
  """
45
- try:
46
- workflow.logger.debug("Checking if in workflow context...")
47
- # loguru_logger.debug("Checking if in workflow context...")
48
- # This call will succeed only if we're in a workflow context.
49
- return bool(hasattr(workflow.info(), "is_replaying"))
50
- except Exception:
51
- return False
44
+ return False
45
+ # try:
46
+ # workflow.logger.debug("Checking if in workflow context...")
47
+ # # loguru_logger.debug("Checking if in workflow context...")
48
+ # # This call will succeed only if we're in a workflow context.
49
+ # return bool(hasattr(workflow.info(), "is_replaying"))
50
+ # except Exception:
51
+ # return False
52
52
 
53
53
 
54
54
  def get_current_trace_id() -> str:
@@ -108,7 +108,7 @@ COLOR_MAP = {
108
108
 
109
109
  LOGGERS = [
110
110
  "flock", # Core Flock orchestration
111
- "flock.api", # Flock API specific logs
111
+ "flock.api", # Flock API specific logs
112
112
  "agent", # General agent operations
113
113
  "context", # Context management
114
114
  "registry", # Unified registry operations (new)
@@ -177,9 +177,7 @@ def custom_format(record):
177
177
  # MAX_LENGTH = 500 # Example value
178
178
  if len(message) > MAX_LENGTH:
179
179
  truncated_chars = len(message) - MAX_LENGTH
180
- message = (
181
- message[:MAX_LENGTH] + f"<yellow>...+({truncated_chars} chars)</yellow>"
182
- )
180
+ message = message[:MAX_LENGTH] + f"<yellow>...+({truncated_chars} chars)</yellow>"
183
181
 
184
182
  # Determine if category needs bolding (can refine this logic)
185
183
  needs_bold = category in BOLD_CATEGORIES
@@ -247,7 +245,6 @@ class PrintAndFlushSink:
247
245
 
248
246
  Already flushed on every write call.
249
247
  """
250
- pass
251
248
 
252
249
 
253
250
  # Configure Loguru for non-workflow (local/worker) contexts.
@@ -264,7 +261,9 @@ logging.basicConfig(level=LOG_LEVELS["ERROR"]) # Default to ERROR level for fal
264
261
  # loguru_logger.add("logs/flock.log", rotation="100 MB", retention="30 days", level="DEBUG")
265
262
 
266
263
 
267
- def get_default_severity(level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "NO_LOGS", "SUCCESS"] | int) -> int:
264
+ def get_default_severity(
265
+ level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "NO_LOGS", "SUCCESS"] | int,
266
+ ) -> int:
268
267
  """Get the default severity for a given level."""
269
268
  if isinstance(level, str):
270
269
  level_str = level.upper()
@@ -272,9 +271,17 @@ def get_default_severity(level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CR
272
271
  return level
273
272
 
274
273
 
275
- def configure_logging(flock_level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "NO_LOGS", "SUCCESS"] | int,
276
- external_level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "NO_LOGS", "SUCCESS"] | int,
277
- specific_levels: dict[str, Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "NO_LOGS", "SUCCESS"] | int] | None = None) -> None:
274
+ def configure_logging(
275
+ flock_level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "NO_LOGS", "SUCCESS"]
276
+ | int,
277
+ external_level: Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "NO_LOGS", "SUCCESS"]
278
+ | int,
279
+ specific_levels: dict[
280
+ str,
281
+ Literal["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL", "NO_LOGS", "SUCCESS"] | int,
282
+ ]
283
+ | None = None,
284
+ ) -> None:
278
285
  """Configure both external and internal Flock logging systems.
279
286
 
280
287
  Args:
@@ -283,19 +290,21 @@ def configure_logging(flock_level: Literal["DEBUG", "INFO", "WARNING", "ERROR",
283
290
  specific_levels (dict[str, str | int] | None, optional): A dictionary mapping
284
291
  logger names to their specific logging levels. Defaults to None.
285
292
  """
286
- # Get default severity
293
+ global _DEFAULT_FLOCK_SEVERITY, _SPECIFIC_SEVERITIES
287
294
 
295
+ # Get default severity
288
296
  external_severity = get_default_severity(external_level)
289
297
  logging.basicConfig(level=external_severity)
290
298
 
291
-
292
299
  flock_severity = get_default_severity(flock_level)
300
+ _DEFAULT_FLOCK_SEVERITY = flock_severity # Store for future loggers
293
301
 
294
302
  specific_severities = {}
295
303
  if specific_levels:
296
304
  for name, logger_level in specific_levels.items():
297
305
  severity = get_default_severity(logger_level)
298
306
  specific_severities[name] = severity
307
+ _SPECIFIC_SEVERITIES[name] = severity # Store for future loggers
299
308
 
300
309
  # Apply to all cached loggers
301
310
  for logger_name, log_instance in _LOGGER_CACHE.items():
@@ -306,28 +315,26 @@ def configure_logging(flock_level: Literal["DEBUG", "INFO", "WARNING", "ERROR",
306
315
  log_instance.min_level_severity = target_severity
307
316
 
308
317
 
309
-
310
-
311
318
  # Define a dummy logger that does nothing
312
319
  class DummyLogger:
313
320
  """A dummy logger that does nothing when called."""
314
321
 
315
- def debug(self, *args, **kwargs): # noqa: D102
322
+ def debug(self, *args, **kwargs):
316
323
  pass
317
324
 
318
- def info(self, *args, **kwargs): # noqa: D102
325
+ def info(self, *args, **kwargs):
319
326
  pass
320
327
 
321
- def warning(self, *args, **kwargs): # noqa: D102
328
+ def warning(self, *args, **kwargs):
322
329
  pass
323
330
 
324
- def error(self, *args, **kwargs): # noqa: D102
331
+ def error(self, *args, **kwargs):
325
332
  pass
326
333
 
327
- def exception(self, *args, **kwargs): # noqa: D102
334
+ def exception(self, *args, **kwargs):
328
335
  pass
329
336
 
330
- def success(self, *args, **kwargs): # noqa: D102
337
+ def success(self, *args, **kwargs):
331
338
  pass
332
339
 
333
340
 
@@ -357,9 +364,9 @@ class FlockLogger:
357
364
  self.min_level_severity = initial_min_level_severity
358
365
 
359
366
  def _get_logger(self):
360
- if in_workflow_context():
361
- # Use Temporal's workflow.logger inside a workflow context.
362
- return workflow.logger
367
+ # if in_workflow_context():
368
+ # # Use Temporal's workflow.logger inside a workflow context.
369
+ # return workflow.logger
363
370
  # Bind our logger with category and trace_id
364
371
  return loguru_logger.bind(
365
372
  name=self.name,
@@ -371,9 +378,7 @@ class FlockLogger:
371
378
  """Truncate a message if it exceeds max_length and add truncation indicator."""
372
379
  if len(message) > max_length:
373
380
  truncated_chars = len(message) - max_length
374
- return (
375
- message[:max_length] + f"...<yellow>+({truncated_chars} chars)</yellow>"
376
- )
381
+ return message[:max_length] + f"...<yellow>+({truncated_chars} chars)</yellow>"
377
382
  return message
378
383
 
379
384
  def debug(
@@ -385,8 +390,10 @@ class FlockLogger:
385
390
  **kwargs,
386
391
  ) -> None:
387
392
  current_method_severity = LOG_LEVELS["DEBUG"]
388
- if self.min_level_severity == LOG_LEVELS["NO_LOGS"] or \
389
- current_method_severity < self.min_level_severity:
393
+ if (
394
+ self.min_level_severity == LOG_LEVELS["NO_LOGS"]
395
+ or current_method_severity < self.min_level_severity
396
+ ):
390
397
  return
391
398
  """Debug a message.
392
399
 
@@ -407,8 +414,10 @@ class FlockLogger:
407
414
  **kwargs,
408
415
  ) -> None:
409
416
  current_method_severity = LOG_LEVELS["INFO"]
410
- if self.min_level_severity == LOG_LEVELS["NO_LOGS"] or \
411
- current_method_severity < self.min_level_severity:
417
+ if (
418
+ self.min_level_severity == LOG_LEVELS["NO_LOGS"]
419
+ or current_method_severity < self.min_level_severity
420
+ ):
412
421
  return
413
422
  """Info a message.
414
423
 
@@ -429,8 +438,10 @@ class FlockLogger:
429
438
  **kwargs,
430
439
  ) -> None:
431
440
  current_method_severity = LOG_LEVELS["WARNING"]
432
- if self.min_level_severity == LOG_LEVELS["NO_LOGS"] or \
433
- current_method_severity < self.min_level_severity:
441
+ if (
442
+ self.min_level_severity == LOG_LEVELS["NO_LOGS"]
443
+ or current_method_severity < self.min_level_severity
444
+ ):
434
445
  return
435
446
  """Warning a message.
436
447
 
@@ -451,8 +462,10 @@ class FlockLogger:
451
462
  **kwargs,
452
463
  ) -> None:
453
464
  current_method_severity = LOG_LEVELS["ERROR"]
454
- if self.min_level_severity == LOG_LEVELS["NO_LOGS"] or \
455
- current_method_severity < self.min_level_severity:
465
+ if (
466
+ self.min_level_severity == LOG_LEVELS["NO_LOGS"]
467
+ or current_method_severity < self.min_level_severity
468
+ ):
456
469
  return
457
470
  """Error a message.
458
471
 
@@ -472,9 +485,11 @@ class FlockLogger:
472
485
  max_length: int = MAX_LENGTH,
473
486
  **kwargs,
474
487
  ) -> None:
475
- current_method_severity = LOG_LEVELS["ERROR"] # Exception implies ERROR level
476
- if self.min_level_severity == LOG_LEVELS["NO_LOGS"] or \
477
- current_method_severity < self.min_level_severity:
488
+ current_method_severity = LOG_LEVELS["ERROR"] # Exception implies ERROR level
489
+ if (
490
+ self.min_level_severity == LOG_LEVELS["NO_LOGS"]
491
+ or current_method_severity < self.min_level_severity
492
+ ):
478
493
  return
479
494
  """Exception a message.
480
495
 
@@ -495,8 +510,10 @@ class FlockLogger:
495
510
  **kwargs,
496
511
  ) -> None:
497
512
  current_method_severity = LOG_LEVELS["SUCCESS"]
498
- if self.min_level_severity == LOG_LEVELS["NO_LOGS"] or \
499
- current_method_severity < self.min_level_severity:
513
+ if (
514
+ self.min_level_severity == LOG_LEVELS["NO_LOGS"]
515
+ or current_method_severity < self.min_level_severity
516
+ ):
500
517
  return
501
518
  """Success a message.
502
519
 
@@ -510,21 +527,22 @@ class FlockLogger:
510
527
 
511
528
 
512
529
  _LOGGER_CACHE: dict[str, FlockLogger] = {}
530
+ _DEFAULT_FLOCK_SEVERITY: int = LOG_LEVELS["ERROR"]
531
+ _SPECIFIC_SEVERITIES: dict[str, int] = {}
513
532
 
514
533
 
515
534
  def get_logger(name: str = "flock") -> FlockLogger:
516
535
  """Return a cached FlockLogger instance for the given name.
517
536
 
518
- If the logger doesn't exist, it is created with 'enable_logging' set to False
519
- by default (i.e., errors-only mode). Its state can then be changed by calling
520
- the `configure_logging()` function.
537
+ If the logger doesn't exist, it is created using the configured severity level
538
+ from configure_logging() (default: ERROR). Respects specific_levels if configured.
521
539
  If a logger with the given name already exists in the cache, its 'min_level_severity'
522
540
  state is NOT modified by this function; it's simply returned.
523
541
  """
524
542
  if name not in _LOGGER_CACHE:
525
- # New loggers default to errors-only (min_level_severity = ERROR_SEVERITY)
526
- # until explicitly configured by configure_logging()
527
- _LOGGER_CACHE[name] = FlockLogger(name, LOG_LEVELS["ERROR"])
543
+ # Check if there's a specific severity configured for this logger
544
+ severity = _SPECIFIC_SEVERITIES.get(name, _DEFAULT_FLOCK_SEVERITY)
545
+ _LOGGER_CACHE[name] = FlockLogger(name, severity)
528
546
  # The min_level_severity state of existing or newly created loggers
529
547
  # should be managed by the configure_logging() function.
530
548
  return _LOGGER_CACHE[name]
@@ -544,15 +562,13 @@ def truncate_for_logging(obj, max_item_length=100, max_items=10):
544
562
  """Truncate large data structures for logging purposes."""
545
563
  if isinstance(obj, str) and len(obj) > max_item_length:
546
564
  return obj[:max_item_length] + f"... ({len(obj) - max_item_length} more chars)"
547
- elif isinstance(obj, dict):
565
+ if isinstance(obj, dict):
548
566
  if len(obj) > max_items:
549
567
  return {
550
- k: truncate_for_logging(v)
551
- for i, (k, v) in enumerate(obj.items())
552
- if i < max_items
568
+ k: truncate_for_logging(v) for i, (k, v) in enumerate(obj.items()) if i < max_items
553
569
  }
554
570
  return {k: truncate_for_logging(v) for k, v in obj.items()}
555
- elif isinstance(obj, list):
571
+ if isinstance(obj, list):
556
572
  if len(obj) > max_items:
557
573
  return [truncate_for_logging(item) for item in obj[:max_items]] + [
558
574
  f"... ({len(obj) - max_items} more items)"