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
@@ -1,620 +0,0 @@
1
- """Execute a Flock instance with a selected agent.
2
-
3
- This module provides functionality to execute a Flock instance with
4
- a selected agent and input configuration, including batch processing.
5
- """
6
-
7
- import json
8
- import os
9
-
10
- import questionary
11
- from rich.console import Console
12
- from rich.panel import Panel
13
-
14
- from flock.core.flock import Flock
15
- from flock.core.logging.logging import configure_logging
16
- from flock.core.util.cli_helper import init_console
17
-
18
- # Create console instance
19
- console = Console()
20
-
21
- # Try importing pandas for DataFrame support
22
- try:
23
- import pandas as pd
24
-
25
- PANDAS_AVAILABLE = True
26
- except ImportError:
27
- pd = None
28
- PANDAS_AVAILABLE = False
29
-
30
-
31
- def execute_flock(flock: Flock):
32
- """Execute a Flock instance.
33
-
34
- Args:
35
- flock: The Flock instance to execute
36
- """
37
- if not flock:
38
- console.print("[bold red]Error: No Flock instance provided.[/]")
39
- return
40
-
41
- agent_names = list(flock._agents.keys())
42
-
43
- if not agent_names:
44
- console.print("[yellow]No agents in this Flock to execute.[/]")
45
- return
46
-
47
- init_console()
48
- console.print(Panel("[bold green]Execute Flock[/]"), justify="center")
49
-
50
- # Step 1: Select start agent
51
- console.print("\n[bold]Step 1: Select Start Agent[/]")
52
-
53
- start_agent_name = questionary.select(
54
- "Select an agent to start with:",
55
- choices=agent_names,
56
- ).ask()
57
-
58
- if not start_agent_name:
59
- return
60
-
61
- start_agent = flock._agents[start_agent_name]
62
-
63
- # Step 2: Configure input
64
- console.print("\n[bold]Step 2: Configure Input[/]")
65
-
66
- # Parse input schema
67
- input_fields = _parse_input_schema(start_agent.input)
68
-
69
- # If we couldn't parse any fields, ask for generic input
70
- if not input_fields:
71
- raw_input = questionary.text(
72
- "Enter input (JSON format):",
73
- default="{}",
74
- ).ask()
75
-
76
- try:
77
- input_data = json.loads(raw_input)
78
- except json.JSONDecodeError:
79
- console.print("[bold red]Error: Invalid JSON input.[/]")
80
- return
81
- else:
82
- # Otherwise, ask for each field
83
- input_data = {}
84
-
85
- for field, info in input_fields.items():
86
- field_type = info.get("type", "str")
87
- description = info.get("description", "")
88
- prompt = f"Enter value for '{field}'"
89
-
90
- if description:
91
- prompt += f" ({description})"
92
-
93
- prompt += ":"
94
-
95
- value = questionary.text(prompt).ask()
96
-
97
- # Convert value to appropriate type
98
- if field_type == "int":
99
- try:
100
- value = int(value)
101
- except ValueError:
102
- console.print(
103
- f"[yellow]Warning: Could not convert value to int, using as string.[/]"
104
- )
105
-
106
- input_data[field] = value
107
-
108
- # Step 3: Run Options
109
- console.print("\n[bold]Step 3: Run Options[/]")
110
-
111
- # Logging options
112
- enable_logging = questionary.confirm(
113
- "Enable logging?",
114
- default=False,
115
- ).ask()
116
- if enable_logging:
117
- log_level = questionary.select(
118
- "Minimum log level:",
119
- choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
120
- default="ERROR",
121
- ).ask()
122
- configure_logging(flock_level=log_level, external_level=log_level)
123
-
124
- # Preview input
125
- console.print("\n[bold]Input Preview:[/]")
126
- console.print(json.dumps(input_data, indent=2))
127
-
128
- # Confirm execution
129
- confirm = questionary.confirm(
130
- "Execute Flock with this configuration?",
131
- default=True,
132
- ).ask()
133
-
134
- if not confirm:
135
- return
136
-
137
- # Execute the Flock
138
- console.print("\n[bold]Executing Flock...[/]")
139
-
140
- try:
141
- # Logging was configured earlier if enabled
142
-
143
- # Run the Flock
144
- result = flock.run(
145
- agent=start_agent_name,
146
- input=input_data,
147
- )
148
-
149
- # Display result
150
- console.print("\n[bold green]Execution Complete![/]")
151
-
152
- if result and enable_logging:
153
- console.print("\n[bold]Result:[/]")
154
- if isinstance(result, dict):
155
- # Display as formatted JSON
156
- console.print(json.dumps(result, indent=2))
157
- else:
158
- # Display as plain text
159
- console.print(str(result))
160
-
161
- except Exception as e:
162
- console.print(f"\n[bold red]Error during execution:[/] {e!s}")
163
-
164
-
165
- def _parse_input_schema(input_schema: str) -> dict[str, dict[str, str]]:
166
- """Parse the input schema string into a field dictionary.
167
-
168
- Args:
169
- input_schema: The input schema string (e.g., "query: str | The search query")
170
-
171
- Returns:
172
- A dictionary mapping field names to field info (type, description)
173
- """
174
- if not input_schema:
175
- return {}
176
-
177
- fields = {}
178
-
179
- try:
180
- # Split by comma for multiple fields
181
- for field_def in input_schema.split(","):
182
- field_def = field_def.strip()
183
-
184
- # Check for type hint with colon
185
- if ":" in field_def:
186
- field_name, rest = field_def.split(":", 1)
187
- field_name = field_name.strip()
188
- rest = rest.strip()
189
-
190
- # Check for description with pipe
191
- if "|" in rest:
192
- field_type, description = rest.split("|", 1)
193
- fields[field_name] = {
194
- "type": field_type.strip(),
195
- "description": description.strip(),
196
- }
197
- else:
198
- fields[field_name] = {"type": rest.strip()}
199
- else:
200
- # Just a field name without type hint
201
- if "|" in field_def:
202
- field_name, description = field_def.split("|", 1)
203
- fields[field_name.strip()] = {
204
- "description": description.strip()
205
- }
206
- else:
207
- fields[field_def.strip()] = {}
208
-
209
- except Exception as e:
210
- console.print(
211
- f"[yellow]Warning: Could not parse input schema: {e!s}[/]"
212
- )
213
- return {}
214
-
215
- return fields
216
-
217
-
218
- def execute_flock_batch(flock: Flock):
219
- """Execute a Flock instance in batch mode.
220
-
221
- Args:
222
- flock: The Flock instance to execute
223
- """
224
- if not flock:
225
- console.print("[bold red]Error: No Flock instance provided.[/]")
226
- return
227
-
228
- agent_names = list(flock._agents.keys())
229
-
230
- if not agent_names:
231
- console.print("[yellow]No agents in this Flock to execute.[/]")
232
- return
233
-
234
- init_console()
235
- console.print(
236
- Panel("[bold green]Execute Flock - Batch Mode[/]"), justify="center"
237
- )
238
-
239
- # Step 1: Select start agent
240
- console.print("\n[bold]Step 1: Select Start Agent[/]")
241
-
242
- start_agent_name = questionary.select(
243
- "Select an agent to start with:",
244
- choices=agent_names,
245
- ).ask()
246
-
247
- if not start_agent_name:
248
- return
249
-
250
- start_agent = flock._agents[start_agent_name]
251
-
252
- # Step 2: Configure batch input source
253
- console.print("\n[bold]Step 2: Select Batch Input Source[/]")
254
-
255
- if not PANDAS_AVAILABLE:
256
- console.print(
257
- "[yellow]Warning: pandas not available. CSV input/output functionality will be limited.[/]"
258
- )
259
-
260
- input_source_choices = ["Enter batch items manually"]
261
-
262
- if PANDAS_AVAILABLE:
263
- input_source_choices.insert(0, "Load from CSV file")
264
-
265
- input_source = questionary.select(
266
- "How would you like to provide batch inputs?",
267
- choices=input_source_choices,
268
- ).ask()
269
-
270
- if not input_source:
271
- return
272
-
273
- batch_inputs = []
274
- input_mapping = {}
275
-
276
- if input_source == "Load from CSV file" and PANDAS_AVAILABLE:
277
- # Ask for CSV file path
278
- csv_path = questionary.path(
279
- "Enter path to CSV file:",
280
- ).ask()
281
-
282
- if not csv_path:
283
- return
284
-
285
- try:
286
- # Validate path exists
287
- if not os.path.exists(csv_path):
288
- console.print(
289
- f"[bold red]Error: File '{csv_path}' does not exist.[/]"
290
- )
291
- return
292
-
293
- # Preview CSV
294
- df = pd.read_csv(csv_path)
295
- console.print("\n[bold]CSV Preview (first 5 rows):[/]")
296
- console.print(df.head().to_string())
297
-
298
- # Configure column mapping
299
- console.print("\n[bold]Configure Column Mapping:[/]")
300
-
301
- # Parse input schema (if available)
302
- input_fields = _parse_input_schema(start_agent.input)
303
-
304
- # If we have input fields, map CSV columns to them
305
- if input_fields:
306
- columns = df.columns.tolist()
307
-
308
- for field in input_fields.keys():
309
- field_desc = input_fields[field].get("description", "")
310
- prompt = f"Select column for '{field}'"
311
-
312
- if field_desc:
313
- prompt += f" ({field_desc})"
314
-
315
- selected_col = questionary.select(
316
- prompt,
317
- choices=["(Skip this field)"] + columns,
318
- ).ask()
319
-
320
- if selected_col and selected_col != "(Skip this field)":
321
- input_mapping[selected_col] = field
322
- else:
323
- # No schema, ask user to map columns manually
324
- columns = df.columns.tolist()
325
-
326
- for col in columns:
327
- mapping = questionary.text(
328
- f"Map column '{col}' to input field (leave empty to ignore):",
329
- ).ask()
330
-
331
- if mapping:
332
- input_mapping[col] = mapping
333
-
334
- if not input_mapping:
335
- console.print("[yellow]Warning: No column mapping defined.[/]")
336
- if not questionary.confirm(
337
- "Continue without mapping?", default=False
338
- ).ask():
339
- return
340
-
341
- # Use the CSV file path directly
342
- batch_inputs = csv_path
343
-
344
- except Exception as e:
345
- console.print(f"[bold red]Error loading CSV: {e}[/]")
346
- return
347
-
348
- elif input_source == "Enter batch items manually":
349
- # Parse input schema
350
- input_fields = _parse_input_schema(start_agent.input)
351
-
352
- if not input_fields:
353
- console.print(
354
- "[yellow]No input schema available. Using JSON input.[/]"
355
- )
356
-
357
- while True:
358
- raw_input = questionary.text(
359
- "Enter batch item as JSON (empty to finish):",
360
- default="{}",
361
- ).ask()
362
-
363
- if not raw_input:
364
- break
365
-
366
- try:
367
- item_data = json.loads(raw_input)
368
- batch_inputs.append(item_data)
369
- console.print(f"[green]Added item {len(batch_inputs)}[/]")
370
- except json.JSONDecodeError:
371
- console.print("[bold red]Error: Invalid JSON input.[/]")
372
-
373
- else:
374
- # We have input fields, ask for each field for each item
375
- item_count = 1
376
-
377
- while True:
378
- console.print(f"\n[bold]Batch Item {item_count}[/]")
379
-
380
- item_data = {}
381
- for field, info in input_fields.items():
382
- field_type = info.get("type", "str")
383
- description = info.get("description", "")
384
- prompt = f"Enter value for '{field}'"
385
-
386
- if description:
387
- prompt += f" ({description})"
388
-
389
- prompt += " (empty to skip):"
390
-
391
- value = questionary.text(prompt).ask()
392
-
393
- if not value:
394
- continue
395
-
396
- # Convert value to appropriate type
397
- if field_type == "int":
398
- try:
399
- value = int(value)
400
- except ValueError:
401
- console.print(
402
- f"[yellow]Warning: Could not convert value to int, using as string.[/]"
403
- )
404
-
405
- item_data[field] = value
406
-
407
- if item_data:
408
- batch_inputs.append(item_data)
409
- console.print(f"[green]Added item {len(batch_inputs)}[/]")
410
-
411
- if not questionary.confirm(
412
- "Add another batch item?",
413
- default=len(batch_inputs)
414
- < 2, # Default to yes if we have less than 2 items
415
- ).ask():
416
- break
417
-
418
- item_count += 1
419
-
420
- if isinstance(batch_inputs, list) and not batch_inputs:
421
- console.print("[yellow]No batch items defined. Exiting.[/]")
422
- return
423
-
424
- # Step 3: Configure static inputs (if needed)
425
- static_inputs = {}
426
-
427
- if questionary.confirm(
428
- "Would you like to add static inputs (common to all batch items)?",
429
- default=False,
430
- ).ask():
431
- console.print("\n[bold]Configure Static Inputs[/]")
432
-
433
- raw_static = questionary.text(
434
- "Enter static inputs as JSON:",
435
- default="{}",
436
- ).ask()
437
-
438
- try:
439
- static_inputs = json.loads(raw_static)
440
- except json.JSONDecodeError:
441
- console.print(
442
- "[bold red]Error: Invalid JSON for static inputs. Proceeding without static inputs.[/]"
443
- )
444
- static_inputs = {}
445
-
446
- # Step 4: Configure batch execution options
447
- console.print("\n[bold]Step 4: Configure Batch Execution Options[/]")
448
-
449
- # Determine if we should use Temporal
450
- use_temporal = False
451
- # if questionary.confirm(
452
- # f"Override Temporal setting? (Current: {flock.enable_temporal})",
453
- # default=False,
454
- # ).ask():
455
- # use_temporal = questionary.confirm(
456
- # "Use Temporal for batch execution?",
457
- # default=flock.enable_temporal,
458
- # ).ask()
459
-
460
- # Configure parallelism
461
- parallel = True
462
- max_workers = 5
463
-
464
- if not flock.enable_temporal if use_temporal is None else not use_temporal:
465
- parallel = questionary.confirm(
466
- "Run batch items in parallel?",
467
- default=True,
468
- ).ask()
469
-
470
- if parallel:
471
- max_workers_input = questionary.text(
472
- "Maximum number of parallel workers:",
473
- default="5",
474
- ).ask()
475
-
476
- try:
477
- max_workers = int(max_workers_input)
478
- except ValueError:
479
- console.print(
480
- "[yellow]Invalid worker count. Using default (5).[/]"
481
- )
482
- max_workers = 5
483
-
484
- # Configure output options
485
- silent_mode = questionary.confirm(
486
- "Use silent mode with progress bar? (Recommended for large batches)",
487
- default=True,
488
- ).ask()
489
-
490
- write_to_csv = None
491
- if (
492
- PANDAS_AVAILABLE
493
- and questionary.confirm(
494
- "Write results to CSV file?",
495
- default=True,
496
- ).ask()
497
- ):
498
- write_to_csv = questionary.text(
499
- "CSV output path:",
500
- default="batch_results.csv",
501
- ).ask()
502
-
503
- hide_columns = questionary.text(
504
- "Hide columns (comma-separated - leave blank for hiding no columns):",
505
- default="",
506
- ).ask()
507
-
508
- hide_columns = hide_columns.split(",") if hide_columns else []
509
-
510
- delimiter = questionary.text(
511
- "Delimiter (default is comma):",
512
- default=",",
513
- ).ask()
514
-
515
- # Logging options
516
- enable_logging = questionary.confirm(
517
- "Enable logging?",
518
- default=False,
519
- ).ask()
520
- if enable_logging:
521
- log_level = questionary.select(
522
- "Minimum log level:",
523
- choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
524
- default="ERROR",
525
- ).ask()
526
- configure_logging(log_level)
527
-
528
- # Preview configuration
529
- console.print("\n[bold]Batch Configuration Preview:[/]")
530
- console.print(f"Agent: {start_agent_name}")
531
-
532
- if isinstance(batch_inputs, str):
533
- console.print(f"Input Source: CSV file ({batch_inputs})")
534
- console.print(f"Column Mapping: {input_mapping}")
535
- else:
536
- console.print(f"Input Source: Manual entry ({len(batch_inputs)} items)")
537
-
538
- if static_inputs:
539
- console.print(f"Static Inputs: {json.dumps(static_inputs, indent=2)}")
540
-
541
- # temporal_status = (
542
- # "Default" if use_temporal is None else ("Yes" if use_temporal else "No")
543
- # )
544
- # console.print(f"Use Temporal: {temporal_status}")
545
-
546
- if not (flock.enable_temporal if use_temporal is None else use_temporal):
547
- console.print(f"Parallel Execution: {parallel}")
548
- if parallel:
549
- console.print(f"Max Workers: {max_workers}")
550
-
551
- console.print(f"Silent Mode: {silent_mode}")
552
-
553
- if write_to_csv:
554
- console.print(f"Write Results to: {write_to_csv}")
555
-
556
- # Confirm execution
557
- confirm = questionary.confirm(
558
- "Execute batch with this configuration?",
559
- default=True,
560
- ).ask()
561
-
562
- if not confirm:
563
- return
564
-
565
- # Execute the batch
566
- console.print("\n[bold]Executing Batch...[/]")
567
-
568
- try:
569
- # Logging was already configured above if enabled
570
-
571
- # Run the batch
572
- results = flock.run_batch(
573
- start_agent=start_agent_name,
574
- batch_inputs=batch_inputs,
575
- input_mapping=input_mapping or None,
576
- static_inputs=static_inputs or None,
577
- parallel=parallel,
578
- max_workers=max_workers,
579
- use_temporal=use_temporal,
580
- box_results=True,
581
- return_errors=True,
582
- silent_mode=silent_mode,
583
- write_to_csv=write_to_csv,
584
- hide_columns=hide_columns,
585
- delimiter=delimiter,
586
- )
587
-
588
- # Display results summary
589
- console.print("\n[bold green]Batch Execution Complete![/]")
590
-
591
- success_count = sum(1 for r in results if not isinstance(r, Exception))
592
- error_count = sum(1 for r in results if isinstance(r, Exception))
593
-
594
- console.print(f"Total Items: {len(results)}")
595
- console.print(f"Successful: {success_count}")
596
-
597
- if error_count > 0:
598
- console.print(f"[bold red]Errors: {error_count}[/]")
599
-
600
- # Ask if user wants to see detailed results
601
- if questionary.confirm(
602
- "View detailed results?",
603
- default=False,
604
- ).ask():
605
- for i, result in enumerate(results):
606
- console.print(f"\n[bold]Item {i + 1}:[/]")
607
- if isinstance(result, Exception):
608
- console.print(f"[bold red]Error: {result}[/]")
609
- else:
610
- # Display as formatted JSON
611
- try:
612
- console.print(json.dumps(result, indent=2))
613
- except:
614
- console.print(str(result))
615
-
616
- if write_to_csv:
617
- console.print(f"\n[green]Results written to: {write_to_csv}[/]")
618
-
619
- except Exception as e:
620
- console.print(f"\n[bold red]Error during batch execution:[/] {e!s}")
flock/cli/load_agent.py DELETED
@@ -1 +0,0 @@
1
- # TODO
@@ -1 +0,0 @@
1
- # TODO