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,309 +0,0 @@
1
- # src/flock/core/component/agent_component_base.py
2
- """Base classes for the unified Flock component system."""
3
-
4
- from abc import ABC
5
- from typing import Any, TypeVar
6
-
7
- from pydantic import BaseModel, Field, create_model
8
-
9
- from flock.core.context.context import FlockContext
10
-
11
- # HandOffRequest removed - using agent.next_agent directly
12
-
13
- T = TypeVar("T", bound="AgentComponentConfig")
14
-
15
-
16
- class AgentComponentConfig(BaseModel):
17
- """Base configuration class for all Flock agent components.
18
-
19
- This unified config class replaces FlockModuleConfig, FlockEvaluatorConfig,
20
- and FlockRouterConfig, providing common functionality for all component types.
21
- """
22
-
23
- enabled: bool = Field(
24
- default=True,
25
- description="Whether this component is currently enabled"
26
- )
27
-
28
- model: str | None = Field(
29
- default=None,
30
- description="Model to use for this component (if applicable)"
31
- )
32
-
33
- @classmethod
34
- def with_fields(cls: type[T], **field_definitions) -> type[T]:
35
- """Create a new config class with additional fields.
36
-
37
- This allows dynamic config creation for components with custom configuration needs.
38
-
39
- Example:
40
- CustomConfig = AgentComponentConfig.with_fields(
41
- temperature=Field(default=0.7, description="LLM temperature"),
42
- max_tokens=Field(default=1000, description="Max tokens to generate")
43
- )
44
- """
45
- return create_model(
46
- f"Dynamic{cls.__name__}",
47
- __base__=cls,
48
- **field_definitions
49
- )
50
-
51
-
52
- class AgentComponent(BaseModel, ABC):
53
- """Base class for all Flock agent components.
54
-
55
- This unified base class replaces the separate FlockModule, FlockEvaluator,
56
- and FlockRouter base classes. All agent extensions now inherit from this
57
- single base class and use the unified lifecycle hooks.
58
-
59
- Components can specialize by:
60
- - EvaluationComponentBase: Implements evaluate_core() for agent intelligence
61
- - RoutingComponentBase: Implements determine_next_step() for workflow routing
62
- - UtilityComponentBase: Uses standard lifecycle hooks for cross-cutting concerns
63
- """
64
-
65
- name: str = Field(
66
- ...,
67
- description="Unique identifier for this component"
68
- )
69
-
70
- config: AgentComponentConfig = Field(
71
- default_factory=AgentComponentConfig,
72
- description="Component configuration"
73
- )
74
-
75
- def __init__(self, **data):
76
- super().__init__(**data)
77
-
78
- # --- Standard Lifecycle Hooks ---
79
- # These are called for ALL components during agent execution
80
-
81
- async def on_initialize(
82
- self,
83
- agent: Any,
84
- inputs: dict[str, Any],
85
- context: FlockContext | None = None,
86
- ) -> None:
87
- """Called when the agent starts running.
88
-
89
- Use this for component initialization, resource setup, etc.
90
- """
91
- pass
92
-
93
- async def on_pre_evaluate(
94
- self,
95
- agent: Any,
96
- inputs: dict[str, Any],
97
- context: FlockContext | None = None,
98
- ) -> dict[str, Any]:
99
- """Called before agent evaluation, can modify inputs.
100
-
101
- Args:
102
- agent: The agent being executed
103
- inputs: Current input data
104
- context: Execution context
105
-
106
- Returns:
107
- Modified input data (or original if no changes)
108
- """
109
- return inputs
110
-
111
- async def on_post_evaluate(
112
- self,
113
- agent: Any,
114
- inputs: dict[str, Any],
115
- context: FlockContext | None = None,
116
- result: dict[str, Any] | None = None,
117
- ) -> dict[str, Any] | None:
118
- """Called after agent evaluation, can modify results.
119
-
120
- Args:
121
- agent: The agent that was executed
122
- inputs: Original input data
123
- context: Execution context
124
- result: Evaluation result
125
-
126
- Returns:
127
- Modified result data (or original if no changes)
128
- """
129
- return result
130
-
131
- async def on_terminate(
132
- self,
133
- agent: Any,
134
- inputs: dict[str, Any],
135
- context: FlockContext | None = None,
136
- result: dict[str, Any] | None = None,
137
- ) -> dict[str, Any] | None:
138
- """Called when the agent finishes running.
139
-
140
- Use this for cleanup, final result processing, etc.
141
- """
142
- return result
143
-
144
- async def on_error(
145
- self,
146
- agent: Any,
147
- inputs: dict[str, Any],
148
- context: FlockContext | None = None,
149
- error: Exception | None = None,
150
- ) -> None:
151
- """Called when an error occurs during agent execution.
152
-
153
- Use this for error handling, logging, recovery, etc.
154
- """
155
- pass
156
-
157
- # --- Specialized Hooks ---
158
- # These are overridden by specialized component types
159
-
160
- async def evaluate_core(
161
- self,
162
- agent: Any,
163
- inputs: dict[str, Any],
164
- context: FlockContext | None = None,
165
- tools: list[Any] | None = None,
166
- mcp_tools: list[Any] | None = None,
167
- ) -> dict[str, Any]:
168
- """Core evaluation logic - override in EvaluationComponentBase.
169
-
170
- This is where the main "intelligence" of the agent happens.
171
- Only one component per agent should implement this meaningfully.
172
-
173
- Args:
174
- agent: The agent being executed
175
- inputs: Input data for evaluation
176
- context: Execution context
177
- tools: Available tools for the agent
178
- mcp_tools: Available MCP tools
179
-
180
- Returns:
181
- Evaluation result
182
- """
183
- # Default implementation is pass-through
184
- return inputs
185
-
186
- async def determine_next_step(
187
- self,
188
- agent: Any,
189
- result: dict[str, Any],
190
- context: FlockContext | None = None,
191
- ) -> None:
192
- """Determine the next step in the workflow - override in RoutingComponentBase.
193
-
194
- This is where routing decisions are made. Sets agent.next_agent directly.
195
-
196
- Args:
197
- agent: The agent that just completed
198
- result: Result from the agent's evaluation
199
- context: Execution context
200
-
201
- Returns:
202
- None - routing components set agent.next_agent directly
203
- """
204
- # Default implementation provides no routing
205
- pass
206
-
207
- # --- MCP Server Lifecycle Hooks ---
208
- # For components that interact directly with MCP servers
209
-
210
- async def on_pre_server_init(self, server: Any) -> None:
211
- """Called before a server initializes."""
212
- pass
213
-
214
- async def on_post_server_init(self, server: Any) -> None:
215
- """Called after a server initializes."""
216
- pass
217
-
218
- async def on_pre_server_terminate(self, server: Any) -> None:
219
- """Called before a server terminates."""
220
- pass
221
-
222
- async def on_post_server_terminate(self, server: Any) -> None:
223
- """Called after a server terminates."""
224
- pass
225
-
226
- async def on_server_error(self, server: Any, error: Exception) -> None:
227
- """Called when a server errors."""
228
- pass
229
-
230
- async def on_connect(
231
- self,
232
- server: Any,
233
- additional_params: dict[str, Any],
234
- ) -> dict[str, Any]:
235
- """Called before a connection is being established to a mcp server.
236
-
237
- use `server` (type FlockMCPServer) to modify the core behavior of the server.
238
- use `additional_params` to 'tack_on' additional configurations (for example additional headers for sse-clients.)
239
-
240
- (For example: modify the server's config)
241
- new_config = NewConfigObject(...)
242
- server.config = new_config
243
-
244
- Warning:
245
- Be very careful when modifying a server's internal state.
246
- If you just need to 'tack on' additional information (such as headers)
247
- or want to temporarily override certain configurations (such as timeouts)
248
- use `additional_params` instead if you can.
249
-
250
- (Or pass additional values downstream:)
251
- additional_params["headers"] = { "Authorization": "Bearer 123" }
252
- additional_params["read_timeout_seconds"] = 100
253
-
254
-
255
- Note:
256
- `additional_params` resets between mcp_calls.
257
- so there is not persistence between individual calls.
258
- This choice has been made to allow developers to
259
- dynamically switch configurations.
260
- (This can be used, for example, to use a module to inject oauth headers for
261
- individual users on a call-to-call basis. this also gives you direct control over
262
- managing the headers yourself. For example, checking for lifetimes on JWT-Tokens.)
263
-
264
- Note:
265
- you can access `additional_params` when you are implementing your own subclasses of
266
- FlockMCPClientManager and FlockMCPClient. (with self.additional_params.)
267
-
268
- keys which are processed for `additional_params` in the flock core code are:
269
- --- General ---
270
-
271
- "refresh_client": bool -> defaults to False. Indicates whether or not to restart a connection on a call. (can be used when headers oder api-keys change to automatically switch to a new client.)
272
- "read_timeout_seconds": float -> How long to wait for a connection to happen.
273
-
274
- --- SSE ---
275
-
276
- "override_headers": bool -> default False. If set to false, additional headers will be appended, if set to True, additional headers will override existing ones.
277
- "headers": dict[str, Any] -> Additional Headers injected in sse-clients and ws-clients
278
- "sse_read_timeout_seconds": float -> how long until a connection is being terminated for sse-clients.
279
- "url": str -> which url the server listens on (allows switching between mcp-servers with modules.)
280
-
281
- --- Stdio ---
282
-
283
- "command": str -> Command to run for stdio-servers.
284
- "args": list[str] -> additional paramters for stdio-servers.
285
- "env": dict[str, Any] -> Environment-Variables for stdio-servers.
286
- "encoding": str -> Encoding to use when talking to stdio-servers.
287
- "encoding-error-handler": str -> Encoding error handler to use when talking to stdio-servers.
288
-
289
- --- Websockets ---
290
-
291
- "url": str -> Which url the server listens on (allows switching between mcp-servers with modules.)
292
- """
293
- pass
294
-
295
- async def on_pre_mcp_call(
296
- self,
297
- server: Any,
298
- arguments: Any | None = None,
299
- ) -> None:
300
- """Called before any MCP Calls."""
301
- pass
302
-
303
- async def on_post_mcp_call(
304
- self,
305
- server: Any,
306
- result: Any | None = None,
307
- ) -> None:
308
- """Called after any MCP Calls."""
309
- pass
@@ -1,62 +0,0 @@
1
- # src/flock/core/component/evaluation_component_base.py
2
- """Base class for evaluation components in the unified component system."""
3
-
4
- from abc import abstractmethod
5
- from typing import Any
6
-
7
- from flock.core.context.context import FlockContext
8
-
9
- from .agent_component_base import AgentComponent
10
-
11
-
12
- class EvaluationComponent(AgentComponent):
13
- """Base class for evaluation components.
14
-
15
- Evaluation components implement the core intelligence/logic of an agent.
16
- They are responsible for taking inputs and producing outputs using some
17
- evaluation strategy (e.g., DSPy, direct LLM calls, deterministic logic).
18
-
19
- Each agent should have exactly one primary evaluation component.
20
-
21
- Example implementations:
22
- - DeclarativeEvaluationComponent (DSPy-based)
23
- - ScriptEvaluationComponent (Python script-based)
24
- - LLMEvaluationComponent (direct LLM API)
25
- """
26
-
27
- @abstractmethod
28
- def set_model(self, model: str, temperature: float = 0.0, max_tokens: int = 4096) -> None:
29
- """Set the model for the evaluation component."""
30
- pass
31
-
32
-
33
- @abstractmethod
34
- async def evaluate_core(
35
- self,
36
- agent: Any,
37
- inputs: dict[str, Any],
38
- context: FlockContext | None = None,
39
- tools: list[Any] | None = None,
40
- mcp_tools: list[Any] | None = None,
41
- ) -> dict[str, Any]:
42
- """Core evaluation logic - MUST be implemented by concrete classes.
43
-
44
- This is the heart of the agent's intelligence. It takes the processed
45
- inputs (after all on_pre_evaluate hooks) and produces the agent's output.
46
-
47
- Args:
48
- agent: The agent being executed
49
- inputs: Input data for evaluation (after pre-processing)
50
- context: Execution context with variables, history, etc.
51
- tools: Available callable tools for the agent
52
- mcp_tools: Available MCP server tools
53
-
54
- Returns:
55
- Evaluation result as a dictionary
56
-
57
- Raises:
58
- NotImplementedError: Must be implemented by concrete classes
59
- """
60
- raise NotImplementedError(
61
- f"{self.__class__.__name__} must implement evaluate_core()"
62
- )
@@ -1,74 +0,0 @@
1
- # src/flock/core/component/routing_component_base.py
2
- """Base class for routing components in the unified component system."""
3
-
4
- from abc import abstractmethod
5
- from typing import Any
6
-
7
- from flock.core.context.context import FlockContext
8
-
9
- from .agent_component_base import AgentComponent
10
-
11
-
12
- class RoutingComponent(AgentComponent):
13
- """Base class for routing components.
14
-
15
- Routing components determine the next step in a workflow based on the
16
- current agent's output. They implement workflow orchestration logic
17
- and can enable complex multi-agent patterns.
18
-
19
- Each agent should have at most one routing component. If no routing
20
- component is present, the workflow ends after this agent.
21
-
22
- Example implementations:
23
- - ConditionalRoutingModule (rule-based routing)
24
- - LLMRoutingModule (AI-powered routing decisions)
25
- - DefaultRoutingModule (simple next-agent routing)
26
- - ListGeneratorRoutingModule (dynamic agent creation)
27
- """
28
-
29
- @abstractmethod
30
- async def determine_next_step(
31
- self,
32
- agent: Any,
33
- result: dict[str, Any],
34
- context: FlockContext | None = None,
35
- ) -> str | Any | None:
36
- """Determine the next agent in the workflow - MUST be implemented.
37
-
38
- This method analyzes the agent's result and determines what agent
39
- should execute next. The result will be stored in agent.next_agent
40
- for the orchestrator to process.
41
-
42
- Args:
43
- agent: The agent that just completed execution
44
- result: Result from the agent's evaluation (after post-processing)
45
- context: Execution context with workflow state
46
-
47
- Returns:
48
- String (agent name), FlockAgent instance, or None to end workflow
49
-
50
- Raises:
51
- NotImplementedError: Must be implemented by concrete classes
52
- """
53
- raise NotImplementedError(
54
- f"{self.__class__.__name__} must implement determine_next_step()"
55
- )
56
-
57
- async def evaluate_core(
58
- self,
59
- agent: Any,
60
- inputs: dict[str, Any],
61
- context: FlockContext | None = None,
62
- tools: list[Any] | None = None,
63
- mcp_tools: list[Any] | None = None,
64
- ) -> dict[str, Any]:
65
- """Routing components typically don't modify evaluation - pass through.
66
-
67
- Routing components usually don't implement core evaluation logic,
68
- they focus on workflow decisions. This default implementation
69
- passes inputs through unchanged.
70
-
71
- Override this if your routing component also needs to modify
72
- the evaluation process.
73
- """
74
- return inputs
@@ -1,69 +0,0 @@
1
- # src/flock/core/component/utility_component_base.py
2
- """Base class for utility components in the unified component system."""
3
-
4
- from typing import Any
5
-
6
- from flock.core.context.context import FlockContext
7
-
8
- # HandOffRequest removed - using agent.next_agent directly
9
- from .agent_component_base import AgentComponent
10
-
11
-
12
- class UtilityComponent(AgentComponent):
13
- """Base class for utility/enhancement components.
14
-
15
- Utility components add cross-cutting concerns to agents without being
16
- the primary evaluation or routing logic. They typically use the standard
17
- lifecycle hooks to enhance agent behavior.
18
-
19
- These components focus on concerns like:
20
- - Memory management
21
- - Output formatting
22
- - Metrics collection
23
- - Logging and tracing
24
- - Input validation
25
- - Error handling
26
- - Caching
27
- - Rate limiting
28
-
29
- Example implementations:
30
- - MemoryUtilityModule (memory persistence)
31
- - OutputUtilityModule (result formatting)
32
- - MetricsUtilityModule (performance tracking)
33
- - AssertionUtilityModule (result validation)
34
- """
35
-
36
- async def evaluate_core(
37
- self,
38
- agent: Any,
39
- inputs: dict[str, Any],
40
- context: FlockContext | None = None,
41
- tools: list[Any] | None = None,
42
- mcp_tools: list[Any] | None = None,
43
- ) -> dict[str, Any]:
44
- """Utility components typically don't implement core evaluation.
45
-
46
- This default implementation passes inputs through unchanged.
47
- Utility components usually enhance behavior through the standard
48
- lifecycle hooks (on_pre_evaluate, on_post_evaluate, etc.).
49
-
50
- Override this only if your utility component needs to participate
51
- in the core evaluation process.
52
- """
53
- return inputs
54
-
55
- async def determine_next_step(
56
- self,
57
- agent: Any,
58
- result: dict[str, Any],
59
- context: FlockContext | None = None,
60
- ) -> None:
61
- """Utility components typically don't implement routing logic.
62
-
63
- This default implementation does nothing, as utility components
64
- usually enhance behavior through other lifecycle hooks.
65
-
66
- Override this only if your utility component needs to influence
67
- workflow routing decisions by setting agent.next_agent.
68
- """
69
- pass
@@ -1,58 +0,0 @@
1
- """Configuration settings for FlockAgent."""
2
-
3
- from typing import Literal
4
-
5
- from pydantic import BaseModel, Field
6
-
7
-
8
- class FlockAgentConfig(BaseModel):
9
- """FlockAgentConfig is a class that holds the configuration for a Flock agent.
10
-
11
- It is used to store various settings and parameters that can be accessed throughout the agent's lifecycle.
12
- """
13
-
14
- write_to_file: bool = Field(
15
- default=False,
16
- description="Write the agent's output to a file.",
17
- )
18
- wait_for_input: bool = Field(
19
- default=False,
20
- description="Wait for user input after the agent's output is displayed.",
21
- )
22
-
23
- handoff_strategy: Literal["append", "override", "static", "map"] = Field(
24
- default="static",
25
- description="""Strategy for passing data to the next agent.
26
-
27
- example:
28
- ReviewAgent.next_agent = SummaryAgent
29
- ReviewAgent(output = "text:str, keywords:list[str], rating:int")
30
- SummaryAgent(input = "text:str, title:str")
31
-
32
- 'append' means the difference in signature is appended to the next agent's input signature.
33
- SummaryAgent(input = "text:str, title:str, keywords:list[str], rating:int")
34
-
35
- 'override' means the target agent's signature is getting overriden.
36
- SummaryAgent(input = "text:str, keywords:list[str], rating:int")
37
-
38
- 'static' means the the target agent's signature is not changed at all.
39
- If source agent has no output fields that match the target agent's input,
40
- there will be no data passed to the next agent.
41
- SummaryAgent(input = "text:str, title:str")
42
-
43
- 'map' means the source agent's output is mapped to the target agent's input
44
- based on 'handoff_map' configuration.
45
-
46
- """,
47
- )
48
-
49
- handoff_map: dict[str, str] | None = Field(
50
- default=None,
51
- description="""Mapping of source agent output fields to target agent input fields.
52
-
53
- Used with 'handoff_strategy' = 'map'.
54
- Example: {"text": "text", "keywords": "title"}
55
-
56
- If a field is not mapped, it will not be passed to the next agent.
57
- """,
58
- )
@@ -1,40 +0,0 @@
1
-
2
-
3
-
4
- from pydantic import Field
5
-
6
- from flock.core.config.flock_agent_config import FlockAgentConfig
7
-
8
-
9
- class ScheduledAgentConfig(FlockAgentConfig):
10
- """Configuration specific to agents that run on a schedule."""
11
- schedule_expression: str = Field(
12
- ...,
13
- description="Defines when the agent should run. "
14
- "Examples: 'every 60m', 'every 1h', 'daily at 02:00', '0 */2 * * *' (cron expression)"
15
- )
16
- enabled: bool = Field(
17
- True,
18
- description="Whether the scheduled agent is enabled. "
19
- "If False, the agent will not run even if the schedule expression is valid."
20
- )
21
- initial_run: bool = Field(
22
- False,
23
- description="If True, the agent will run immediately after being scheduled, "
24
- "regardless of the schedule expression."
25
- )
26
- max_runs: int = Field(
27
- 0,
28
- description="Maximum number of times the agent can run. "
29
- "0 means unlimited runs. If set, the agent will stop running after reaching this limit."
30
- )
31
-
32
- def __init__(self, **kwargs):
33
- super().__init__(**kwargs)
34
- # Ensure schedule_expression is always set
35
- if 'schedule_expression' not in kwargs:
36
- raise ValueError("schedule_expression is required for ScheduledAgentConfig")
37
-
38
- # Validate initial_run and max_runs
39
- if self.initial_run and self.max_runs > 0:
40
- raise ValueError("Cannot set initial_run to True if max_runs is greater than 0")