flock-core 0.5.0b27__py3-none-any.whl → 0.5.0b50__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of flock-core might be problematic. Click here for more details.

Files changed (357) hide show
  1. flock/__init__.py +12 -217
  2. flock/agent.py +678 -0
  3. flock/api/themes.py +71 -0
  4. flock/artifacts.py +79 -0
  5. flock/cli.py +75 -0
  6. flock/components.py +173 -0
  7. flock/dashboard/__init__.py +28 -0
  8. flock/dashboard/collector.py +283 -0
  9. flock/dashboard/events.py +182 -0
  10. flock/dashboard/launcher.py +230 -0
  11. flock/dashboard/service.py +537 -0
  12. flock/dashboard/websocket.py +235 -0
  13. flock/engines/__init__.py +6 -0
  14. flock/engines/dspy_engine.py +856 -0
  15. flock/examples.py +128 -0
  16. flock/{core/util → helper}/cli_helper.py +4 -3
  17. flock/{core/logging → logging}/__init__.py +2 -3
  18. flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
  19. flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
  20. flock/{core/logging → logging}/formatters/themed_formatter.py +69 -115
  21. flock/{core/logging → logging}/logging.py +77 -61
  22. flock/{core/logging → logging}/telemetry.py +20 -26
  23. flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
  24. flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +6 -9
  25. flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
  26. flock/{core/logging → logging}/trace_and_logged.py +20 -24
  27. flock/mcp/__init__.py +91 -0
  28. flock/{core/mcp/mcp_client.py → mcp/client.py} +103 -154
  29. flock/{core/mcp/mcp_config.py → mcp/config.py} +62 -117
  30. flock/mcp/manager.py +255 -0
  31. flock/mcp/servers/sse/__init__.py +1 -1
  32. flock/mcp/servers/sse/flock_sse_server.py +11 -53
  33. flock/mcp/servers/stdio/__init__.py +1 -1
  34. flock/mcp/servers/stdio/flock_stdio_server.py +8 -48
  35. flock/mcp/servers/streamable_http/flock_streamable_http_server.py +17 -62
  36. flock/mcp/servers/websockets/flock_websocket_server.py +7 -40
  37. flock/{core/mcp/flock_mcp_tool.py → mcp/tool.py} +16 -26
  38. flock/mcp/types/__init__.py +42 -0
  39. flock/{core/mcp → mcp}/types/callbacks.py +9 -15
  40. flock/{core/mcp → mcp}/types/factories.py +7 -6
  41. flock/{core/mcp → mcp}/types/handlers.py +13 -18
  42. flock/{core/mcp → mcp}/types/types.py +70 -74
  43. flock/{core/mcp → mcp}/util/helpers.py +1 -1
  44. flock/orchestrator.py +645 -0
  45. flock/registry.py +148 -0
  46. flock/runtime.py +262 -0
  47. flock/service.py +140 -0
  48. flock/store.py +69 -0
  49. flock/subscription.py +111 -0
  50. flock/themes/andromeda.toml +1 -1
  51. flock/themes/apple-system-colors.toml +1 -1
  52. flock/themes/arcoiris.toml +1 -1
  53. flock/themes/atomonelight.toml +1 -1
  54. flock/themes/ayu copy.toml +1 -1
  55. flock/themes/ayu-light.toml +1 -1
  56. flock/themes/belafonte-day.toml +1 -1
  57. flock/themes/belafonte-night.toml +1 -1
  58. flock/themes/blulocodark.toml +1 -1
  59. flock/themes/breeze.toml +1 -1
  60. flock/themes/broadcast.toml +1 -1
  61. flock/themes/brogrammer.toml +1 -1
  62. flock/themes/builtin-dark.toml +1 -1
  63. flock/themes/builtin-pastel-dark.toml +1 -1
  64. flock/themes/catppuccin-latte.toml +1 -1
  65. flock/themes/catppuccin-macchiato.toml +1 -1
  66. flock/themes/catppuccin-mocha.toml +1 -1
  67. flock/themes/cga.toml +1 -1
  68. flock/themes/chalk.toml +1 -1
  69. flock/themes/ciapre.toml +1 -1
  70. flock/themes/coffee-theme.toml +1 -1
  71. flock/themes/cyberpunkscarletprotocol.toml +1 -1
  72. flock/themes/dark+.toml +1 -1
  73. flock/themes/darkermatrix.toml +1 -1
  74. flock/themes/darkside.toml +1 -1
  75. flock/themes/desert.toml +1 -1
  76. flock/themes/django.toml +1 -1
  77. flock/themes/djangosmooth.toml +1 -1
  78. flock/themes/doomone.toml +1 -1
  79. flock/themes/dotgov.toml +1 -1
  80. flock/themes/dracula+.toml +1 -1
  81. flock/themes/duckbones.toml +1 -1
  82. flock/themes/encom.toml +1 -1
  83. flock/themes/espresso.toml +1 -1
  84. flock/themes/everblush.toml +1 -1
  85. flock/themes/fairyfloss.toml +1 -1
  86. flock/themes/fideloper.toml +1 -1
  87. flock/themes/fishtank.toml +1 -1
  88. flock/themes/flexoki-light.toml +1 -1
  89. flock/themes/floraverse.toml +1 -1
  90. flock/themes/framer.toml +1 -1
  91. flock/themes/galizur.toml +1 -1
  92. flock/themes/github.toml +1 -1
  93. flock/themes/grass.toml +1 -1
  94. flock/themes/grey-green.toml +1 -1
  95. flock/themes/gruvboxlight.toml +1 -1
  96. flock/themes/guezwhoz.toml +1 -1
  97. flock/themes/harper.toml +1 -1
  98. flock/themes/hax0r-blue.toml +1 -1
  99. flock/themes/hopscotch.256.toml +1 -1
  100. flock/themes/ic-green-ppl.toml +1 -1
  101. flock/themes/iceberg-dark.toml +1 -1
  102. flock/themes/japanesque.toml +1 -1
  103. flock/themes/jubi.toml +1 -1
  104. flock/themes/kibble.toml +1 -1
  105. flock/themes/kolorit.toml +1 -1
  106. flock/themes/kurokula.toml +1 -1
  107. flock/themes/materialdesigncolors.toml +1 -1
  108. flock/themes/matrix.toml +1 -1
  109. flock/themes/mellifluous.toml +1 -1
  110. flock/themes/midnight-in-mojave.toml +1 -1
  111. flock/themes/monokai-remastered.toml +1 -1
  112. flock/themes/monokai-soda.toml +1 -1
  113. flock/themes/neon.toml +1 -1
  114. flock/themes/neopolitan.toml +1 -1
  115. flock/themes/nord-light.toml +1 -1
  116. flock/themes/ocean.toml +1 -1
  117. flock/themes/onehalfdark.toml +1 -1
  118. flock/themes/onehalflight.toml +1 -1
  119. flock/themes/palenighthc.toml +1 -1
  120. flock/themes/paulmillr.toml +1 -1
  121. flock/themes/pencildark.toml +1 -1
  122. flock/themes/pnevma.toml +1 -1
  123. flock/themes/purple-rain.toml +1 -1
  124. flock/themes/purplepeter.toml +1 -1
  125. flock/themes/raycast-dark.toml +1 -1
  126. flock/themes/red-sands.toml +1 -1
  127. flock/themes/relaxed.toml +1 -1
  128. flock/themes/retro.toml +1 -1
  129. flock/themes/rose-pine.toml +1 -1
  130. flock/themes/royal.toml +1 -1
  131. flock/themes/ryuuko.toml +1 -1
  132. flock/themes/sakura.toml +1 -1
  133. flock/themes/scarlet-protocol.toml +1 -1
  134. flock/themes/seoulbones-dark.toml +1 -1
  135. flock/themes/shades-of-purple.toml +1 -1
  136. flock/themes/smyck.toml +1 -1
  137. flock/themes/softserver.toml +1 -1
  138. flock/themes/solarized-darcula.toml +1 -1
  139. flock/themes/square.toml +1 -1
  140. flock/themes/sugarplum.toml +1 -1
  141. flock/themes/thayer-bright.toml +1 -1
  142. flock/themes/tokyonight.toml +1 -1
  143. flock/themes/tomorrow.toml +1 -1
  144. flock/themes/ubuntu.toml +1 -1
  145. flock/themes/ultradark.toml +1 -1
  146. flock/themes/ultraviolent.toml +1 -1
  147. flock/themes/unikitty.toml +1 -1
  148. flock/themes/urple.toml +1 -1
  149. flock/themes/vesper.toml +1 -1
  150. flock/themes/vimbones.toml +1 -1
  151. flock/themes/wildcherry.toml +1 -1
  152. flock/themes/wilmersdorf.toml +1 -1
  153. flock/themes/wryan.toml +1 -1
  154. flock/themes/xcodedarkhc.toml +1 -1
  155. flock/themes/xcodelight.toml +1 -1
  156. flock/themes/zenbones-light.toml +1 -1
  157. flock/themes/zenwritten-dark.toml +1 -1
  158. flock/utilities.py +301 -0
  159. flock/{components/utility → utility}/output_utility_component.py +68 -53
  160. flock/visibility.py +107 -0
  161. flock_core-0.5.0b50.dist-info/METADATA +747 -0
  162. flock_core-0.5.0b50.dist-info/RECORD +398 -0
  163. flock_core-0.5.0b50.dist-info/entry_points.txt +2 -0
  164. {flock_core-0.5.0b27.dist-info → flock_core-0.5.0b50.dist-info}/licenses/LICENSE +1 -1
  165. flock/adapter/__init__.py +0 -14
  166. flock/adapter/azure_adapter.py +0 -68
  167. flock/adapter/chroma_adapter.py +0 -73
  168. flock/adapter/faiss_adapter.py +0 -97
  169. flock/adapter/pinecone_adapter.py +0 -51
  170. flock/adapter/vector_base.py +0 -47
  171. flock/cli/assets/release_notes.md +0 -140
  172. flock/cli/config.py +0 -8
  173. flock/cli/constants.py +0 -36
  174. flock/cli/create_agent.py +0 -1
  175. flock/cli/create_flock.py +0 -280
  176. flock/cli/execute_flock.py +0 -620
  177. flock/cli/load_agent.py +0 -1
  178. flock/cli/load_examples.py +0 -1
  179. flock/cli/load_flock.py +0 -192
  180. flock/cli/load_release_notes.py +0 -20
  181. flock/cli/loaded_flock_cli.py +0 -254
  182. flock/cli/manage_agents.py +0 -459
  183. flock/cli/registry_management.py +0 -889
  184. flock/cli/runner.py +0 -41
  185. flock/cli/settings.py +0 -857
  186. flock/cli/utils.py +0 -135
  187. flock/cli/view_results.py +0 -29
  188. flock/cli/yaml_editor.py +0 -396
  189. flock/components/__init__.py +0 -30
  190. flock/components/evaluation/__init__.py +0 -9
  191. flock/components/evaluation/declarative_evaluation_component.py +0 -606
  192. flock/components/routing/__init__.py +0 -15
  193. flock/components/routing/conditional_routing_component.py +0 -494
  194. flock/components/routing/default_routing_component.py +0 -103
  195. flock/components/routing/llm_routing_component.py +0 -206
  196. flock/components/utility/__init__.py +0 -15
  197. flock/components/utility/memory_utility_component.py +0 -550
  198. flock/components/utility/metrics_utility_component.py +0 -700
  199. flock/config.py +0 -61
  200. flock/core/__init__.py +0 -110
  201. flock/core/agent/__init__.py +0 -16
  202. flock/core/agent/default_agent.py +0 -180
  203. flock/core/agent/flock_agent_components.py +0 -104
  204. flock/core/agent/flock_agent_execution.py +0 -101
  205. flock/core/agent/flock_agent_integration.py +0 -260
  206. flock/core/agent/flock_agent_lifecycle.py +0 -186
  207. flock/core/agent/flock_agent_serialization.py +0 -381
  208. flock/core/api/__init__.py +0 -10
  209. flock/core/api/custom_endpoint.py +0 -45
  210. flock/core/api/endpoints.py +0 -254
  211. flock/core/api/main.py +0 -162
  212. flock/core/api/models.py +0 -97
  213. flock/core/api/run_store.py +0 -224
  214. flock/core/api/runner.py +0 -44
  215. flock/core/api/service.py +0 -214
  216. flock/core/component/__init__.py +0 -15
  217. flock/core/component/agent_component_base.py +0 -309
  218. flock/core/component/evaluation_component.py +0 -62
  219. flock/core/component/routing_component.py +0 -74
  220. flock/core/component/utility_component.py +0 -69
  221. flock/core/config/flock_agent_config.py +0 -58
  222. flock/core/config/scheduled_agent_config.py +0 -40
  223. flock/core/context/context.py +0 -213
  224. flock/core/context/context_manager.py +0 -37
  225. flock/core/context/context_vars.py +0 -10
  226. flock/core/evaluation/utils.py +0 -396
  227. flock/core/execution/batch_executor.py +0 -369
  228. flock/core/execution/evaluation_executor.py +0 -438
  229. flock/core/execution/local_executor.py +0 -31
  230. flock/core/execution/opik_executor.py +0 -103
  231. flock/core/execution/temporal_executor.py +0 -164
  232. flock/core/flock.py +0 -634
  233. flock/core/flock_agent.py +0 -336
  234. flock/core/flock_factory.py +0 -551
  235. flock/core/flock_scheduler.py +0 -166
  236. flock/core/flock_server_manager.py +0 -136
  237. flock/core/interpreter/python_interpreter.py +0 -689
  238. flock/core/mcp/__init__.py +0 -1
  239. flock/core/mcp/flock_mcp_server.py +0 -680
  240. flock/core/mcp/mcp_client_manager.py +0 -201
  241. flock/core/mcp/types/__init__.py +0 -1
  242. flock/core/mixin/dspy_integration.py +0 -403
  243. flock/core/mixin/prompt_parser.py +0 -125
  244. flock/core/orchestration/__init__.py +0 -15
  245. flock/core/orchestration/flock_batch_processor.py +0 -94
  246. flock/core/orchestration/flock_evaluator.py +0 -113
  247. flock/core/orchestration/flock_execution.py +0 -295
  248. flock/core/orchestration/flock_initialization.py +0 -149
  249. flock/core/orchestration/flock_server_manager.py +0 -67
  250. flock/core/orchestration/flock_web_server.py +0 -117
  251. flock/core/registry/__init__.py +0 -45
  252. flock/core/registry/agent_registry.py +0 -69
  253. flock/core/registry/callable_registry.py +0 -139
  254. flock/core/registry/component_discovery.py +0 -142
  255. flock/core/registry/component_registry.py +0 -64
  256. flock/core/registry/config_mapping.py +0 -64
  257. flock/core/registry/decorators.py +0 -137
  258. flock/core/registry/registry_hub.py +0 -205
  259. flock/core/registry/server_registry.py +0 -57
  260. flock/core/registry/type_registry.py +0 -86
  261. flock/core/serialization/__init__.py +0 -13
  262. flock/core/serialization/callable_registry.py +0 -52
  263. flock/core/serialization/flock_serializer.py +0 -832
  264. flock/core/serialization/json_encoder.py +0 -41
  265. flock/core/serialization/secure_serializer.py +0 -175
  266. flock/core/serialization/serializable.py +0 -342
  267. flock/core/serialization/serialization_utils.py +0 -412
  268. flock/core/util/file_path_utils.py +0 -223
  269. flock/core/util/hydrator.py +0 -309
  270. flock/core/util/input_resolver.py +0 -164
  271. flock/core/util/loader.py +0 -59
  272. flock/core/util/splitter.py +0 -219
  273. flock/di.py +0 -27
  274. flock/platform/docker_tools.py +0 -49
  275. flock/platform/jaeger_install.py +0 -86
  276. flock/webapp/__init__.py +0 -1
  277. flock/webapp/app/__init__.py +0 -0
  278. flock/webapp/app/api/__init__.py +0 -0
  279. flock/webapp/app/api/agent_management.py +0 -241
  280. flock/webapp/app/api/execution.py +0 -709
  281. flock/webapp/app/api/flock_management.py +0 -129
  282. flock/webapp/app/api/registry_viewer.py +0 -30
  283. flock/webapp/app/chat.py +0 -665
  284. flock/webapp/app/config.py +0 -104
  285. flock/webapp/app/dependencies.py +0 -117
  286. flock/webapp/app/main.py +0 -1070
  287. flock/webapp/app/middleware.py +0 -113
  288. flock/webapp/app/models_ui.py +0 -7
  289. flock/webapp/app/services/__init__.py +0 -0
  290. flock/webapp/app/services/feedback_file_service.py +0 -363
  291. flock/webapp/app/services/flock_service.py +0 -337
  292. flock/webapp/app/services/sharing_models.py +0 -81
  293. flock/webapp/app/services/sharing_store.py +0 -598
  294. flock/webapp/app/templates/theme_mapper.html +0 -326
  295. flock/webapp/app/theme_mapper.py +0 -812
  296. flock/webapp/app/utils.py +0 -85
  297. flock/webapp/run.py +0 -215
  298. flock/webapp/static/css/chat.css +0 -301
  299. flock/webapp/static/css/components.css +0 -167
  300. flock/webapp/static/css/header.css +0 -39
  301. flock/webapp/static/css/layout.css +0 -46
  302. flock/webapp/static/css/sidebar.css +0 -127
  303. flock/webapp/static/css/two-pane.css +0 -48
  304. flock/webapp/templates/base.html +0 -200
  305. flock/webapp/templates/chat.html +0 -152
  306. flock/webapp/templates/chat_settings.html +0 -19
  307. flock/webapp/templates/flock_editor.html +0 -16
  308. flock/webapp/templates/index.html +0 -12
  309. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  310. flock/webapp/templates/partials/_agent_list.html +0 -18
  311. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  312. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  313. flock/webapp/templates/partials/_chat_container.html +0 -15
  314. flock/webapp/templates/partials/_chat_messages.html +0 -57
  315. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  316. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  317. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  318. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  319. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  320. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  321. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  322. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  323. flock/webapp/templates/partials/_execution_form.html +0 -118
  324. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  325. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  326. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  327. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  328. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  329. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  330. flock/webapp/templates/partials/_registry_table.html +0 -25
  331. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  332. flock/webapp/templates/partials/_results_display.html +0 -78
  333. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  334. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  335. flock/webapp/templates/partials/_settings_view.html +0 -36
  336. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  337. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  338. flock/webapp/templates/partials/_sidebar.html +0 -74
  339. flock/webapp/templates/partials/_streaming_results_container.html +0 -195
  340. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  341. flock/webapp/templates/partials/_theme_preview.html +0 -36
  342. flock/webapp/templates/registry_viewer.html +0 -84
  343. flock/webapp/templates/shared_run_page.html +0 -140
  344. flock/workflow/__init__.py +0 -0
  345. flock/workflow/activities.py +0 -196
  346. flock/workflow/agent_activities.py +0 -24
  347. flock/workflow/agent_execution_activity.py +0 -202
  348. flock/workflow/flock_workflow.py +0 -214
  349. flock/workflow/temporal_config.py +0 -96
  350. flock/workflow/temporal_setup.py +0 -68
  351. flock_core-0.5.0b27.dist-info/METADATA +0 -274
  352. flock_core-0.5.0b27.dist-info/RECORD +0 -559
  353. flock_core-0.5.0b27.dist-info/entry_points.txt +0 -2
  354. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  355. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  356. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  357. {flock_core-0.5.0b27.dist-info → flock_core-0.5.0b50.dist-info}/WHEEL +0 -0
flock/cli/load_flock.py DELETED
@@ -1,192 +0,0 @@
1
- """Load a Flock from a file."""
2
-
3
- from pathlib import Path
4
-
5
- import questionary
6
- from rich.console import Console
7
- from rich.markdown import Markdown
8
-
9
- from flock.cli.loaded_flock_cli import start_loaded_flock_cli
10
- from flock.core.flock import Flock
11
- from flock.core.logging.logging import get_logger
12
-
13
- logger = get_logger("cli.load_flock")
14
-
15
-
16
- def filter(file_path) -> bool:
17
- """Filter function for file selection."""
18
- path = Path(file_path)
19
- if path.is_dir():
20
- return True
21
- return path.is_file() and (
22
- path.suffix == ".flock"
23
- or path.suffix == ".yaml"
24
- or path.suffix == ".yml"
25
- )
26
-
27
-
28
- def load_flock():
29
- """Load a Flock from a file."""
30
- console = Console()
31
-
32
- console.print(
33
- "\nPlease select a *.flock, *.yaml, or *.yml file\n", style="bold green"
34
- )
35
-
36
- result = questionary.path("", file_filter=filter).ask()
37
-
38
- if not result:
39
- return
40
-
41
- selected_file = Path(result)
42
- if selected_file.is_file():
43
- console.print(f"Selected file: {selected_file}", style="bold green")
44
-
45
- try:
46
- # Try loading with detailed error handling
47
- try:
48
- logger.info(f"Attempting to load Flock from: {result}")
49
- flock = Flock.load_from_file(result)
50
- except ImportError as e:
51
- # Handle missing module path errors
52
- if "No module named" in str(e):
53
- console.print(
54
- f"[yellow]Warning: Module import failed: {e}[/]"
55
- )
56
- console.print(
57
- "[yellow]Trying file path fallback mechanism...[/]"
58
- )
59
- # Re-try loading with fallback
60
- flock = Flock.load_from_file(result)
61
- else:
62
- raise # Re-raise if it's not a missing module error
63
- except KeyError as e:
64
- # This could be caused by missing tool references
65
- if "__callable_ref__" in str(e):
66
- console.print(
67
- f"[yellow]Warning: Tool reference error: {e}[/]"
68
- )
69
- console.print(
70
- "[yellow]This may be due to missing tool registrations. Attempting to scan for tools...[/]"
71
- )
72
- # Scan for tools and retry
73
- from flock.cli.registry_management import (
74
- auto_registration_scanner,
75
- )
76
-
77
- auto_registration_scanner()
78
- # Try loading again
79
- flock = Flock.load_from_file(result)
80
- else:
81
- raise # Re-raise if it's not a tool reference error
82
-
83
- console.line()
84
- console.print(
85
- Markdown("# Flock loaded successfully"), style="bold green"
86
- )
87
- console.line()
88
-
89
- # Instead of just running the Flock, start our enhanced CLI
90
- start_loaded_flock_cli(
91
- flock, server_name=f"Flock - {selected_file.name}"
92
- )
93
-
94
- except Exception as e:
95
- console.print(f"Error loading Flock: {e!s}", style="bold red")
96
- logger.error(f"Failed to load Flock: {e}", exc_info=True)
97
-
98
- # Add more detailed error information for specific errors
99
- if "No module named" in str(e):
100
- console.print(
101
- "\n[yellow]This error might be due to missing module paths.[/]"
102
- )
103
- console.print(
104
- "[yellow]Component references may need to be updated with file paths.[/]"
105
- )
106
-
107
- # Show the option to scan the directory for components
108
- fix_paths = questionary.confirm(
109
- "Would you like to scan directories for components to fix missing imports?",
110
- default=True,
111
- ).ask()
112
-
113
- if fix_paths:
114
- from flock.cli.registry_management import (
115
- auto_registration_scanner,
116
- )
117
-
118
- auto_registration_scanner()
119
-
120
- # Try loading again
121
- console.print(
122
- "\n[yellow]Attempting to load Flock again...[/]"
123
- )
124
- try:
125
- flock = Flock.load_from_file(result)
126
- console.line()
127
- console.print(
128
- Markdown(
129
- "# Flock loaded successfully after component scan"
130
- ),
131
- style="bold green",
132
- )
133
- console.line()
134
-
135
- start_loaded_flock_cli(
136
- flock, server_name=f"Flock - {selected_file.name}"
137
- )
138
- return
139
- except Exception as e2:
140
- console.print(
141
- f"Error loading Flock after scan: {e2!s}",
142
- style="bold red",
143
- )
144
-
145
- # Handle tool reference issues
146
- elif "__callable_ref__" in str(e) or "callable" in str(e).lower():
147
- console.print(
148
- "\n[yellow]This error might be due to missing tool registrations.[/]"
149
- )
150
-
151
- # Show the option to scan the directory for tools
152
- fix_tools = questionary.confirm(
153
- "Would you like to scan directories for tools to fix missing references?",
154
- default=True,
155
- ).ask()
156
-
157
- if fix_tools:
158
- from flock.cli.registry_management import (
159
- auto_registration_scanner,
160
- )
161
-
162
- console.print(
163
- "\n[yellow]Scanning for tools and callables...[/]"
164
- )
165
- auto_registration_scanner()
166
-
167
- # Try loading again
168
- console.print(
169
- "\n[yellow]Attempting to load Flock again...[/]"
170
- )
171
- try:
172
- flock = Flock.load_from_file(result)
173
- console.line()
174
- console.print(
175
- Markdown(
176
- "# Flock loaded successfully after tool scan"
177
- ),
178
- style="bold green",
179
- )
180
- console.line()
181
-
182
- start_loaded_flock_cli(
183
- flock, server_name=f"Flock - {selected_file.name}"
184
- )
185
- return
186
- except Exception as e2:
187
- console.print(
188
- f"Error loading Flock after tool scan: {e2!s}",
189
- style="bold red",
190
- )
191
-
192
- input("\nPress Enter to continue...")
@@ -1,20 +0,0 @@
1
- from pathlib import Path
2
-
3
-
4
- def load_release_notes():
5
- """Load release notes."""
6
- from rich.console import Console
7
- from rich.markdown import Markdown
8
-
9
- from flock.core.util.cli_helper import display_hummingbird, init_console
10
-
11
- console = Console()
12
- file_path = Path(__file__).parent / "assets" / "release_notes.md"
13
-
14
- init_console()
15
- console.print(Markdown("# *'Hummingbird'* Release Notes"))
16
- display_hummingbird()
17
- with open(file_path) as file:
18
- release_notes = file.read()
19
-
20
- console.print(Markdown(release_notes))
@@ -1,254 +0,0 @@
1
- """CLI interface for working with a loaded Flock instance.
2
-
3
- This module provides a CLI interface for a Flock instance that has already been loaded,
4
- allowing users to execute, edit, or manage agents from the existing configuration.
5
- """
6
-
7
- import questionary
8
- from rich.console import Console
9
- from rich.panel import Panel
10
-
11
- from flock.cli.constants import (
12
- CLI_REGISTRY_MANAGEMENT,
13
- CLI_SETTINGS,
14
- )
15
- from flock.core.flock import Flock
16
- from flock.core.logging.logging import get_logger
17
- from flock.core.util.cli_helper import init_console
18
-
19
- # Import future modules we'll create
20
- # These will be implemented later
21
- try:
22
- from flock.cli.yaml_editor import yaml_editor
23
-
24
- yaml_editor_available = True
25
- except ImportError:
26
- yaml_editor_available = False
27
-
28
- try:
29
- from flock.cli.manage_agents import manage_agents
30
-
31
- manage_agents_available = True
32
- except ImportError:
33
- manage_agents_available = False
34
-
35
- try:
36
- from flock.cli.execute_flock import execute_flock, execute_flock_batch
37
-
38
- execute_flock_available = True
39
- except ImportError:
40
- execute_flock_available = False
41
-
42
- try:
43
- from flock.cli.view_results import view_results
44
-
45
- view_results_available = True
46
- except ImportError:
47
- view_results_available = False
48
-
49
- # Create console instance
50
- console = Console()
51
- logger = get_logger("cli.loaded_flock")
52
-
53
-
54
- def start_loaded_flock_cli(
55
- flock: Flock,
56
- server_name: str = "Flock CLI",
57
- show_results: bool = False,
58
- edit_mode: bool = False,
59
- ) -> None:
60
- """Start a CLI interface with a loaded Flock instance.
61
-
62
- Args:
63
- flock: The loaded Flock instance
64
- server_name: Optional name for the CLI interface
65
- show_results: Whether to initially show results of previous runs
66
- edit_mode: Whether to open directly in edit mode
67
- """
68
- if not flock:
69
- console.print("[bold red]Error: No Flock instance provided.[/]")
70
- return
71
-
72
- agent_names = list(flock._agents.keys())
73
-
74
- # Directly go to specific modes if requested
75
- if edit_mode and yaml_editor_available:
76
- yaml_editor(flock)
77
- return
78
-
79
- if show_results and view_results_available:
80
- view_results(flock)
81
- return
82
-
83
- # Main CLI loop
84
- while True:
85
- # Initialize console for each loop iteration
86
- init_console()
87
-
88
- # Display header with Flock information
89
- console.print(Panel(f"[bold green]{server_name}[/]"), justify="center")
90
- console.print(
91
- f"Flock loaded with [bold cyan]{len(agent_names)}[/] agents: {', '.join(agent_names)}"
92
- )
93
- console.line()
94
-
95
- # Main menu choices
96
- choices = [
97
- questionary.Separator(line=" "),
98
- "Execute Flock",
99
- "Execute Flock - Batch Mode",
100
- "Start Web Server",
101
- "Start Web Server with UI",
102
- "Manage Agents",
103
- "View Results of Past Runs",
104
- ]
105
-
106
- # Add YAML Editor option if available
107
- if yaml_editor_available:
108
- choices.append("Edit YAML Configurations")
109
-
110
- # Add remaining options
111
- choices.extend([questionary.Separator(), CLI_REGISTRY_MANAGEMENT])
112
- choices.extend(
113
- [
114
- questionary.Separator(),
115
- CLI_SETTINGS,
116
- questionary.Separator(),
117
- "Exit",
118
- ]
119
- )
120
-
121
- # Display menu and get choice
122
- choice = questionary.select(
123
- "What would you like to do?",
124
- choices=choices,
125
- ).ask()
126
-
127
- # Handle menu selection
128
- if choice == "Execute Flock":
129
- if execute_flock_available:
130
- execute_flock(flock)
131
- else:
132
- console.print(
133
- "[yellow]Execute Flock functionality not yet implemented.[/]"
134
- )
135
- input("\nPress Enter to continue...")
136
-
137
- elif choice == "Execute Flock - Batch Mode":
138
- if execute_flock_available:
139
- execute_flock_batch(flock)
140
- else:
141
- console.print(
142
- "[yellow]Batch execution functionality not yet implemented.[/]"
143
- )
144
- input("\nPress Enter to continue...")
145
-
146
- elif choice == "Start Web Server":
147
- _start_web_server(flock, create_ui=False)
148
-
149
- elif choice == "Start Web Server with UI":
150
- _start_web_server(flock, create_ui=True)
151
-
152
- elif choice == "Manage Agents":
153
- if manage_agents_available:
154
- manage_agents(flock)
155
- else:
156
- console.print(
157
- "[yellow]Manage Agents functionality not yet implemented.[/]"
158
- )
159
- input("\nPress Enter to continue...")
160
-
161
- elif choice == "View Results of Past Runs":
162
- if view_results_available:
163
- view_results(flock)
164
- else:
165
- console.print(
166
- "[yellow]View Results functionality not yet implemented.[/]"
167
- )
168
- input("\nPress Enter to continue...")
169
-
170
- elif choice == CLI_REGISTRY_MANAGEMENT:
171
- from flock.cli.registry_management import manage_registry
172
-
173
- manage_registry()
174
-
175
- elif choice == "Edit YAML Configurations" and yaml_editor_available:
176
- yaml_editor(flock)
177
-
178
- elif choice == CLI_SETTINGS:
179
- from flock.cli.settings import settings_editor
180
-
181
- settings_editor()
182
-
183
- elif choice == "Exit":
184
- break
185
-
186
- # Pause after each action unless we're exiting
187
- if choice != "Exit" and not choice.startswith("Start Web Server"):
188
- input("\nPress Enter to continue...")
189
-
190
-
191
- def _start_web_server(flock: Flock, create_ui: bool = False) -> None:
192
- """Start a web server with the loaded Flock instance."""
193
- host = "127.0.0.1"
194
- port = 8344
195
- # server_name = flock.name + " API" # Use flock name by default for server_name
196
-
197
- console.print("\n[bold]Web Server Configuration[/]")
198
-
199
- host_input = questionary.text(
200
- "Host (default: 127.0.0.1):", default=host
201
- ).ask()
202
- if host_input:
203
- host = host_input
204
-
205
- port_input = questionary.text(
206
- "Port (default: 8344):", default=str(port)
207
- ).ask()
208
- if port_input and port_input.isdigit():
209
- port = int(port_input)
210
-
211
- server_name_input = questionary.text(
212
- "Server name (default: FlockName API):", default=f"{flock.name or 'Flock'} API"
213
- ).ask()
214
- # if server_name_input: # server_name will be set by flock.start_api if not passed, or use its default
215
- # server_name = server_name_input
216
-
217
- ui_theme_to_pass = None
218
- if create_ui:
219
- try:
220
- from flock.webapp.app.config import (
221
- DEFAULT_THEME_NAME,
222
- list_available_themes,
223
- )
224
- available_themes = list_available_themes()
225
- theme_choices = ["default (current environment setting)", "random"] + sorted(available_themes)
226
-
227
- selected_theme_choice = questionary.select(
228
- "Select UI theme:",
229
- choices=theme_choices,
230
- default="default (current environment setting)"
231
- ).ask()
232
-
233
- if selected_theme_choice == "random":
234
- ui_theme_to_pass = "random"
235
- elif selected_theme_choice and selected_theme_choice != "default (current environment setting)":
236
- ui_theme_to_pass = selected_theme_choice
237
- # If "default" or None, ui_theme_to_pass remains None, Flock.start_api will use its logic
238
-
239
- except ImportError:
240
- logger.warning("Could not import webapp theme configuration for CLI selection. Theme will use default.")
241
- ui_theme_to_pass = None # Fallback if webapp components not there
242
-
243
- console.print(
244
- f"\nStarting web server on {host}:{port} {'with UI' if create_ui else 'without UI'}{' (Theme: ' + (ui_theme_to_pass if ui_theme_to_pass else 'default') + ')' if create_ui else ''}..."
245
- )
246
-
247
- # Call the Flock instance's own start_api method directly
248
- flock.start_api(
249
- host=host,
250
- port=port,
251
- server_name=server_name_input, # Pass the chosen server name
252
- create_ui=create_ui,
253
- ui_theme=ui_theme_to_pass,
254
- )