flock-core 0.4.542__py3-none-any.whl → 0.5.0__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (501) hide show
  1. flock/__init__.py +12 -217
  2. flock/agent.py +1079 -0
  3. flock/api/themes.py +71 -0
  4. flock/artifacts.py +86 -0
  5. flock/cli.py +147 -0
  6. flock/components.py +189 -0
  7. flock/dashboard/__init__.py +30 -0
  8. flock/dashboard/collector.py +559 -0
  9. flock/dashboard/events.py +188 -0
  10. flock/dashboard/graph_builder.py +563 -0
  11. flock/dashboard/launcher.py +235 -0
  12. flock/dashboard/models/graph.py +156 -0
  13. flock/dashboard/service.py +991 -0
  14. flock/dashboard/static_v2/assets/index-DFRnI_mt.js +111 -0
  15. flock/dashboard/static_v2/assets/index-fPLNdmp1.css +1 -0
  16. flock/dashboard/static_v2/index.html +13 -0
  17. flock/dashboard/websocket.py +246 -0
  18. flock/engines/__init__.py +6 -0
  19. flock/engines/dspy_engine.py +932 -0
  20. flock/examples.py +131 -0
  21. flock/frontend/README.md +778 -0
  22. flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
  23. flock/frontend/index.html +12 -0
  24. flock/frontend/package-lock.json +4337 -0
  25. flock/frontend/package.json +48 -0
  26. flock/frontend/src/App.tsx +139 -0
  27. flock/frontend/src/__tests__/integration/graph-snapshot.test.tsx +647 -0
  28. flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
  29. flock/frontend/src/components/common/BuildInfo.tsx +39 -0
  30. flock/frontend/src/components/common/EmptyState.module.css +115 -0
  31. flock/frontend/src/components/common/EmptyState.tsx +128 -0
  32. flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
  33. flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
  34. flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
  35. flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
  36. flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
  37. flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
  38. flock/frontend/src/components/controls/PublishControl.css +547 -0
  39. flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
  40. flock/frontend/src/components/controls/PublishControl.tsx +432 -0
  41. flock/frontend/src/components/details/DetailWindowContainer.tsx +58 -0
  42. flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
  43. flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
  44. flock/frontend/src/components/details/MessageDetailWindow.tsx +439 -0
  45. flock/frontend/src/components/details/MessageHistoryTab.tsx +374 -0
  46. flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
  47. flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
  48. flock/frontend/src/components/details/RunStatusTab.tsx +348 -0
  49. flock/frontend/src/components/details/tabs.test.tsx +1015 -0
  50. flock/frontend/src/components/filters/ArtifactTypeFilter.tsx +21 -0
  51. flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
  52. flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
  53. flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
  54. flock/frontend/src/components/filters/FilterFlyout.module.css +104 -0
  55. flock/frontend/src/components/filters/FilterFlyout.tsx +80 -0
  56. flock/frontend/src/components/filters/FilterPills.module.css +220 -0
  57. flock/frontend/src/components/filters/FilterPills.test.tsx +189 -0
  58. flock/frontend/src/components/filters/FilterPills.tsx +143 -0
  59. flock/frontend/src/components/filters/ProducerFilter.tsx +21 -0
  60. flock/frontend/src/components/filters/SavedFiltersControl.module.css +60 -0
  61. flock/frontend/src/components/filters/SavedFiltersControl.test.tsx +158 -0
  62. flock/frontend/src/components/filters/SavedFiltersControl.tsx +159 -0
  63. flock/frontend/src/components/filters/TagFilter.tsx +21 -0
  64. flock/frontend/src/components/filters/TimeRangeFilter.module.css +115 -0
  65. flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
  66. flock/frontend/src/components/filters/TimeRangeFilter.tsx +110 -0
  67. flock/frontend/src/components/filters/VisibilityFilter.tsx +21 -0
  68. flock/frontend/src/components/graph/AgentNode.test.tsx +77 -0
  69. flock/frontend/src/components/graph/AgentNode.tsx +324 -0
  70. flock/frontend/src/components/graph/GraphCanvas.tsx +613 -0
  71. flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
  72. flock/frontend/src/components/graph/MessageNode.test.tsx +64 -0
  73. flock/frontend/src/components/graph/MessageNode.tsx +129 -0
  74. flock/frontend/src/components/graph/MiniMap.tsx +47 -0
  75. flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
  76. flock/frontend/src/components/layout/DashboardLayout.css +420 -0
  77. flock/frontend/src/components/layout/DashboardLayout.tsx +287 -0
  78. flock/frontend/src/components/layout/Header.module.css +88 -0
  79. flock/frontend/src/components/layout/Header.tsx +52 -0
  80. flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css +288 -0
  81. flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx +450 -0
  82. flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx +13 -0
  83. flock/frontend/src/components/modules/JsonAttributeRenderer.tsx +140 -0
  84. flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
  85. flock/frontend/src/components/modules/ModuleRegistry.ts +93 -0
  86. flock/frontend/src/components/modules/ModuleWindow.tsx +223 -0
  87. flock/frontend/src/components/modules/TraceModuleJaeger.tsx +1971 -0
  88. flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx +13 -0
  89. flock/frontend/src/components/modules/registerModules.ts +29 -0
  90. flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
  91. flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
  92. flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
  93. flock/frontend/src/components/settings/MultiSelect.tsx +235 -0
  94. flock/frontend/src/components/settings/SettingsPanel.css +327 -0
  95. flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
  96. flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
  97. flock/frontend/src/components/settings/TracingSettings.tsx +404 -0
  98. flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
  99. flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
  100. flock/frontend/src/hooks/useModulePersistence.ts +154 -0
  101. flock/frontend/src/hooks/useModules.ts +157 -0
  102. flock/frontend/src/hooks/usePersistence.ts +141 -0
  103. flock/frontend/src/main.tsx +13 -0
  104. flock/frontend/src/services/api.ts +337 -0
  105. flock/frontend/src/services/graphService.test.ts +330 -0
  106. flock/frontend/src/services/graphService.ts +75 -0
  107. flock/frontend/src/services/indexeddb.test.ts +793 -0
  108. flock/frontend/src/services/indexeddb.ts +848 -0
  109. flock/frontend/src/services/layout.test.ts +437 -0
  110. flock/frontend/src/services/layout.ts +357 -0
  111. flock/frontend/src/services/themeApplicator.ts +140 -0
  112. flock/frontend/src/services/themeService.ts +77 -0
  113. flock/frontend/src/services/websocket.ts +650 -0
  114. flock/frontend/src/store/filterStore.test.ts +250 -0
  115. flock/frontend/src/store/filterStore.ts +272 -0
  116. flock/frontend/src/store/graphStore.test.ts +570 -0
  117. flock/frontend/src/store/graphStore.ts +462 -0
  118. flock/frontend/src/store/moduleStore.test.ts +253 -0
  119. flock/frontend/src/store/moduleStore.ts +75 -0
  120. flock/frontend/src/store/settingsStore.ts +188 -0
  121. flock/frontend/src/store/streamStore.ts +68 -0
  122. flock/frontend/src/store/uiStore.test.ts +54 -0
  123. flock/frontend/src/store/uiStore.ts +122 -0
  124. flock/frontend/src/store/wsStore.ts +34 -0
  125. flock/frontend/src/styles/index.css +15 -0
  126. flock/frontend/src/styles/scrollbar.css +47 -0
  127. flock/frontend/src/styles/variables.css +488 -0
  128. flock/frontend/src/test/setup.ts +1 -0
  129. flock/frontend/src/types/filters.ts +47 -0
  130. flock/frontend/src/types/graph.ts +95 -0
  131. flock/frontend/src/types/modules.ts +10 -0
  132. flock/frontend/src/types/theme.ts +55 -0
  133. flock/frontend/src/utils/artifacts.ts +24 -0
  134. flock/frontend/src/utils/mockData.ts +98 -0
  135. flock/frontend/src/utils/performance.ts +16 -0
  136. flock/frontend/src/vite-env.d.ts +17 -0
  137. flock/frontend/tsconfig.json +27 -0
  138. flock/frontend/tsconfig.node.json +11 -0
  139. flock/frontend/vite.config.ts +25 -0
  140. flock/frontend/vitest.config.ts +11 -0
  141. flock/{core/util → helper}/cli_helper.py +9 -5
  142. flock/{core/logging → logging}/__init__.py +2 -3
  143. flock/logging/auto_trace.py +159 -0
  144. flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
  145. flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
  146. flock/{core/logging → logging}/formatters/themed_formatter.py +69 -107
  147. flock/{core/logging → logging}/logging.py +78 -61
  148. flock/{core/logging → logging}/telemetry.py +66 -26
  149. flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
  150. flock/logging/telemetry_exporter/duckdb_exporter.py +216 -0
  151. flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +13 -10
  152. flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
  153. flock/logging/trace_and_logged.py +304 -0
  154. flock/mcp/__init__.py +91 -0
  155. flock/{core/mcp/mcp_client.py → mcp/client.py} +131 -158
  156. flock/{core/mcp/mcp_config.py → mcp/config.py} +86 -132
  157. flock/mcp/manager.py +286 -0
  158. flock/mcp/servers/sse/__init__.py +1 -1
  159. flock/mcp/servers/sse/flock_sse_server.py +16 -58
  160. flock/mcp/servers/stdio/__init__.py +1 -1
  161. flock/mcp/servers/stdio/flock_stdio_server.py +13 -53
  162. flock/mcp/servers/streamable_http/flock_streamable_http_server.py +22 -67
  163. flock/mcp/servers/websockets/flock_websocket_server.py +12 -45
  164. flock/{core/mcp/flock_mcp_tool_base.py → mcp/tool.py} +24 -78
  165. flock/mcp/types/__init__.py +42 -0
  166. flock/{core/mcp → mcp}/types/callbacks.py +12 -15
  167. flock/{core/mcp → mcp}/types/factories.py +7 -6
  168. flock/{core/mcp → mcp}/types/handlers.py +13 -18
  169. flock/{core/mcp → mcp}/types/types.py +70 -74
  170. flock/{core/mcp → mcp}/util/helpers.py +3 -3
  171. flock/orchestrator.py +970 -0
  172. flock/registry.py +148 -0
  173. flock/runtime.py +262 -0
  174. flock/service.py +277 -0
  175. flock/store.py +1214 -0
  176. flock/subscription.py +111 -0
  177. flock/themes/andromeda.toml +1 -1
  178. flock/themes/apple-system-colors.toml +1 -1
  179. flock/themes/arcoiris.toml +1 -1
  180. flock/themes/atomonelight.toml +1 -1
  181. flock/themes/ayu copy.toml +1 -1
  182. flock/themes/ayu-light.toml +1 -1
  183. flock/themes/belafonte-day.toml +1 -1
  184. flock/themes/belafonte-night.toml +1 -1
  185. flock/themes/blulocodark.toml +1 -1
  186. flock/themes/breeze.toml +1 -1
  187. flock/themes/broadcast.toml +1 -1
  188. flock/themes/brogrammer.toml +1 -1
  189. flock/themes/builtin-dark.toml +1 -1
  190. flock/themes/builtin-pastel-dark.toml +1 -1
  191. flock/themes/catppuccin-latte.toml +1 -1
  192. flock/themes/catppuccin-macchiato.toml +1 -1
  193. flock/themes/catppuccin-mocha.toml +1 -1
  194. flock/themes/cga.toml +1 -1
  195. flock/themes/chalk.toml +1 -1
  196. flock/themes/ciapre.toml +1 -1
  197. flock/themes/coffee-theme.toml +1 -1
  198. flock/themes/cyberpunkscarletprotocol.toml +1 -1
  199. flock/themes/dark+.toml +1 -1
  200. flock/themes/darkermatrix.toml +1 -1
  201. flock/themes/darkmatrix.toml +2 -2
  202. flock/themes/darkside.toml +1 -1
  203. flock/themes/deep.toml +2 -2
  204. flock/themes/desert.toml +1 -1
  205. flock/themes/django.toml +1 -1
  206. flock/themes/djangosmooth.toml +1 -1
  207. flock/themes/doomone.toml +1 -1
  208. flock/themes/dotgov.toml +1 -1
  209. flock/themes/dracula+.toml +1 -1
  210. flock/themes/duckbones.toml +1 -1
  211. flock/themes/encom.toml +1 -1
  212. flock/themes/espresso.toml +1 -1
  213. flock/themes/everblush.toml +1 -1
  214. flock/themes/fairyfloss.toml +1 -1
  215. flock/themes/fideloper.toml +1 -1
  216. flock/themes/fishtank.toml +1 -1
  217. flock/themes/flexoki-light.toml +1 -1
  218. flock/themes/floraverse.toml +1 -1
  219. flock/themes/framer.toml +1 -1
  220. flock/themes/galizur.toml +1 -1
  221. flock/themes/github.toml +1 -1
  222. flock/themes/grass.toml +1 -1
  223. flock/themes/grey-green.toml +1 -1
  224. flock/themes/gruvboxlight.toml +1 -1
  225. flock/themes/guezwhoz.toml +1 -1
  226. flock/themes/harper.toml +1 -1
  227. flock/themes/hax0r-blue.toml +1 -1
  228. flock/themes/hopscotch.256.toml +1 -1
  229. flock/themes/ic-green-ppl.toml +1 -1
  230. flock/themes/iceberg-dark.toml +1 -1
  231. flock/themes/japanesque.toml +1 -1
  232. flock/themes/jubi.toml +1 -1
  233. flock/themes/kibble.toml +1 -1
  234. flock/themes/kolorit.toml +1 -1
  235. flock/themes/kurokula.toml +1 -1
  236. flock/themes/materialdesigncolors.toml +1 -1
  237. flock/themes/matrix.toml +1 -1
  238. flock/themes/mellifluous.toml +1 -1
  239. flock/themes/midnight-in-mojave.toml +1 -1
  240. flock/themes/monokai-remastered.toml +1 -1
  241. flock/themes/monokai-soda.toml +1 -1
  242. flock/themes/neon.toml +1 -1
  243. flock/themes/neopolitan.toml +5 -5
  244. flock/themes/nord-light.toml +1 -1
  245. flock/themes/ocean.toml +1 -1
  246. flock/themes/onehalfdark.toml +1 -1
  247. flock/themes/onehalflight.toml +1 -1
  248. flock/themes/palenighthc.toml +1 -1
  249. flock/themes/paulmillr.toml +1 -1
  250. flock/themes/pencildark.toml +1 -1
  251. flock/themes/pnevma.toml +1 -1
  252. flock/themes/purple-rain.toml +1 -1
  253. flock/themes/purplepeter.toml +1 -1
  254. flock/themes/raycast-dark.toml +1 -1
  255. flock/themes/red-sands.toml +1 -1
  256. flock/themes/relaxed.toml +1 -1
  257. flock/themes/retro.toml +1 -1
  258. flock/themes/rose-pine.toml +1 -1
  259. flock/themes/royal.toml +1 -1
  260. flock/themes/ryuuko.toml +1 -1
  261. flock/themes/sakura.toml +1 -1
  262. flock/themes/scarlet-protocol.toml +1 -1
  263. flock/themes/seoulbones-dark.toml +1 -1
  264. flock/themes/shades-of-purple.toml +1 -1
  265. flock/themes/smyck.toml +1 -1
  266. flock/themes/softserver.toml +1 -1
  267. flock/themes/solarized-darcula.toml +1 -1
  268. flock/themes/square.toml +1 -1
  269. flock/themes/sugarplum.toml +1 -1
  270. flock/themes/thayer-bright.toml +1 -1
  271. flock/themes/tokyonight.toml +1 -1
  272. flock/themes/tomorrow.toml +1 -1
  273. flock/themes/ubuntu.toml +1 -1
  274. flock/themes/ultradark.toml +1 -1
  275. flock/themes/ultraviolent.toml +1 -1
  276. flock/themes/unikitty.toml +1 -1
  277. flock/themes/urple.toml +1 -1
  278. flock/themes/vesper.toml +1 -1
  279. flock/themes/vimbones.toml +1 -1
  280. flock/themes/wildcherry.toml +1 -1
  281. flock/themes/wilmersdorf.toml +1 -1
  282. flock/themes/wryan.toml +1 -1
  283. flock/themes/xcodedarkhc.toml +1 -1
  284. flock/themes/xcodelight.toml +1 -1
  285. flock/themes/zenbones-light.toml +1 -1
  286. flock/themes/zenwritten-dark.toml +1 -1
  287. flock/utilities.py +301 -0
  288. flock/utility/output_utility_component.py +226 -0
  289. flock/visibility.py +107 -0
  290. flock_core-0.5.0.dist-info/METADATA +964 -0
  291. flock_core-0.5.0.dist-info/RECORD +525 -0
  292. flock_core-0.5.0.dist-info/entry_points.txt +2 -0
  293. {flock_core-0.4.542.dist-info → flock_core-0.5.0.dist-info}/licenses/LICENSE +1 -1
  294. flock/adapter/__init__.py +0 -14
  295. flock/adapter/azure_adapter.py +0 -68
  296. flock/adapter/chroma_adapter.py +0 -73
  297. flock/adapter/faiss_adapter.py +0 -97
  298. flock/adapter/pinecone_adapter.py +0 -51
  299. flock/adapter/vector_base.py +0 -47
  300. flock/cli/assets/release_notes.md +0 -140
  301. flock/cli/config.py +0 -8
  302. flock/cli/constants.py +0 -36
  303. flock/cli/create_agent.py +0 -1
  304. flock/cli/create_flock.py +0 -280
  305. flock/cli/execute_flock.py +0 -620
  306. flock/cli/load_agent.py +0 -1
  307. flock/cli/load_examples.py +0 -1
  308. flock/cli/load_flock.py +0 -192
  309. flock/cli/load_release_notes.py +0 -20
  310. flock/cli/loaded_flock_cli.py +0 -254
  311. flock/cli/manage_agents.py +0 -459
  312. flock/cli/registry_management.py +0 -889
  313. flock/cli/runner.py +0 -41
  314. flock/cli/settings.py +0 -857
  315. flock/cli/utils.py +0 -135
  316. flock/cli/view_results.py +0 -29
  317. flock/cli/yaml_editor.py +0 -396
  318. flock/config.py +0 -56
  319. flock/core/__init__.py +0 -44
  320. flock/core/api/__init__.py +0 -10
  321. flock/core/api/custom_endpoint.py +0 -45
  322. flock/core/api/endpoints.py +0 -262
  323. flock/core/api/main.py +0 -162
  324. flock/core/api/models.py +0 -101
  325. flock/core/api/run_store.py +0 -224
  326. flock/core/api/runner.py +0 -44
  327. flock/core/api/service.py +0 -214
  328. flock/core/config/flock_agent_config.py +0 -11
  329. flock/core/config/scheduled_agent_config.py +0 -40
  330. flock/core/context/context.py +0 -214
  331. flock/core/context/context_manager.py +0 -40
  332. flock/core/context/context_vars.py +0 -11
  333. flock/core/evaluation/utils.py +0 -395
  334. flock/core/execution/batch_executor.py +0 -369
  335. flock/core/execution/evaluation_executor.py +0 -438
  336. flock/core/execution/local_executor.py +0 -31
  337. flock/core/execution/opik_executor.py +0 -103
  338. flock/core/execution/temporal_executor.py +0 -166
  339. flock/core/flock.py +0 -1003
  340. flock/core/flock_agent.py +0 -1258
  341. flock/core/flock_evaluator.py +0 -60
  342. flock/core/flock_factory.py +0 -513
  343. flock/core/flock_module.py +0 -207
  344. flock/core/flock_registry.py +0 -702
  345. flock/core/flock_router.py +0 -83
  346. flock/core/flock_scheduler.py +0 -166
  347. flock/core/flock_server_manager.py +0 -136
  348. flock/core/interpreter/python_interpreter.py +0 -689
  349. flock/core/logging/live_capture.py +0 -137
  350. flock/core/logging/trace_and_logged.py +0 -59
  351. flock/core/mcp/__init__.py +0 -1
  352. flock/core/mcp/flock_mcp_server.py +0 -640
  353. flock/core/mcp/mcp_client_manager.py +0 -201
  354. flock/core/mcp/types/__init__.py +0 -1
  355. flock/core/mixin/dspy_integration.py +0 -445
  356. flock/core/mixin/prompt_parser.py +0 -125
  357. flock/core/serialization/__init__.py +0 -13
  358. flock/core/serialization/callable_registry.py +0 -52
  359. flock/core/serialization/flock_serializer.py +0 -854
  360. flock/core/serialization/json_encoder.py +0 -41
  361. flock/core/serialization/secure_serializer.py +0 -175
  362. flock/core/serialization/serializable.py +0 -342
  363. flock/core/serialization/serialization_utils.py +0 -409
  364. flock/core/util/file_path_utils.py +0 -223
  365. flock/core/util/hydrator.py +0 -309
  366. flock/core/util/input_resolver.py +0 -141
  367. flock/core/util/loader.py +0 -59
  368. flock/core/util/splitter.py +0 -219
  369. flock/di.py +0 -41
  370. flock/evaluators/__init__.py +0 -1
  371. flock/evaluators/declarative/__init__.py +0 -1
  372. flock/evaluators/declarative/declarative_evaluator.py +0 -217
  373. flock/evaluators/memory/memory_evaluator.py +0 -90
  374. flock/evaluators/test/test_case_evaluator.py +0 -38
  375. flock/evaluators/zep/zep_evaluator.py +0 -59
  376. flock/modules/__init__.py +0 -1
  377. flock/modules/assertion/__init__.py +0 -1
  378. flock/modules/assertion/assertion_module.py +0 -286
  379. flock/modules/callback/__init__.py +0 -1
  380. flock/modules/callback/callback_module.py +0 -91
  381. flock/modules/enterprise_memory/README.md +0 -99
  382. flock/modules/enterprise_memory/enterprise_memory_module.py +0 -526
  383. flock/modules/mem0/__init__.py +0 -1
  384. flock/modules/mem0/mem0_module.py +0 -126
  385. flock/modules/mem0_async/__init__.py +0 -1
  386. flock/modules/mem0_async/async_mem0_module.py +0 -126
  387. flock/modules/memory/__init__.py +0 -1
  388. flock/modules/memory/memory_module.py +0 -429
  389. flock/modules/memory/memory_parser.py +0 -125
  390. flock/modules/memory/memory_storage.py +0 -736
  391. flock/modules/output/__init__.py +0 -1
  392. flock/modules/output/output_module.py +0 -196
  393. flock/modules/performance/__init__.py +0 -1
  394. flock/modules/performance/metrics_module.py +0 -678
  395. flock/modules/zep/__init__.py +0 -1
  396. flock/modules/zep/zep_module.py +0 -192
  397. flock/platform/docker_tools.py +0 -49
  398. flock/platform/jaeger_install.py +0 -86
  399. flock/routers/__init__.py +0 -1
  400. flock/routers/agent/__init__.py +0 -1
  401. flock/routers/agent/agent_router.py +0 -236
  402. flock/routers/agent/handoff_agent.py +0 -58
  403. flock/routers/conditional/conditional_router.py +0 -486
  404. flock/routers/default/__init__.py +0 -1
  405. flock/routers/default/default_router.py +0 -80
  406. flock/routers/feedback/feedback_router.py +0 -114
  407. flock/routers/list_generator/list_generator_router.py +0 -166
  408. flock/routers/llm/__init__.py +0 -1
  409. flock/routers/llm/llm_router.py +0 -365
  410. flock/tools/__init__.py +0 -0
  411. flock/tools/azure_tools.py +0 -781
  412. flock/tools/code_tools.py +0 -167
  413. flock/tools/file_tools.py +0 -149
  414. flock/tools/github_tools.py +0 -157
  415. flock/tools/markdown_tools.py +0 -205
  416. flock/tools/system_tools.py +0 -9
  417. flock/tools/text_tools.py +0 -810
  418. flock/tools/web_tools.py +0 -92
  419. flock/tools/zendesk_tools.py +0 -501
  420. flock/webapp/__init__.py +0 -1
  421. flock/webapp/app/__init__.py +0 -0
  422. flock/webapp/app/api/__init__.py +0 -0
  423. flock/webapp/app/api/agent_management.py +0 -237
  424. flock/webapp/app/api/execution.py +0 -503
  425. flock/webapp/app/api/flock_management.py +0 -125
  426. flock/webapp/app/api/registry_viewer.py +0 -29
  427. flock/webapp/app/chat.py +0 -662
  428. flock/webapp/app/config.py +0 -104
  429. flock/webapp/app/dependencies.py +0 -117
  430. flock/webapp/app/main.py +0 -1086
  431. flock/webapp/app/middleware.py +0 -113
  432. flock/webapp/app/models_ui.py +0 -7
  433. flock/webapp/app/services/__init__.py +0 -0
  434. flock/webapp/app/services/feedback_file_service.py +0 -363
  435. flock/webapp/app/services/flock_service.py +0 -345
  436. flock/webapp/app/services/sharing_models.py +0 -81
  437. flock/webapp/app/services/sharing_store.py +0 -597
  438. flock/webapp/app/templates/theme_mapper.html +0 -326
  439. flock/webapp/app/theme_mapper.py +0 -811
  440. flock/webapp/app/utils.py +0 -85
  441. flock/webapp/run.py +0 -219
  442. flock/webapp/static/css/chat.css +0 -301
  443. flock/webapp/static/css/components.css +0 -167
  444. flock/webapp/static/css/header.css +0 -39
  445. flock/webapp/static/css/layout.css +0 -281
  446. flock/webapp/static/css/sidebar.css +0 -127
  447. flock/webapp/static/css/two-pane.css +0 -48
  448. flock/webapp/templates/base.html +0 -389
  449. flock/webapp/templates/chat.html +0 -152
  450. flock/webapp/templates/chat_settings.html +0 -19
  451. flock/webapp/templates/flock_editor.html +0 -16
  452. flock/webapp/templates/index.html +0 -12
  453. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  454. flock/webapp/templates/partials/_agent_list.html +0 -18
  455. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  456. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  457. flock/webapp/templates/partials/_chat_container.html +0 -15
  458. flock/webapp/templates/partials/_chat_messages.html +0 -57
  459. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  460. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  461. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  462. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  463. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  464. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  465. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  466. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  467. flock/webapp/templates/partials/_execution_form.html +0 -127
  468. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  469. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  470. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  471. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  472. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  473. flock/webapp/templates/partials/_live_logs.html +0 -13
  474. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  475. flock/webapp/templates/partials/_registry_table.html +0 -25
  476. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  477. flock/webapp/templates/partials/_results_display.html +0 -78
  478. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  479. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  480. flock/webapp/templates/partials/_settings_view.html +0 -36
  481. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  482. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  483. flock/webapp/templates/partials/_sidebar.html +0 -74
  484. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  485. flock/webapp/templates/partials/_theme_preview.html +0 -36
  486. flock/webapp/templates/registry_viewer.html +0 -84
  487. flock/webapp/templates/shared_run_page.html +0 -140
  488. flock/workflow/__init__.py +0 -0
  489. flock/workflow/activities.py +0 -237
  490. flock/workflow/agent_activities.py +0 -24
  491. flock/workflow/agent_execution_activity.py +0 -240
  492. flock/workflow/flock_workflow.py +0 -225
  493. flock/workflow/temporal_config.py +0 -96
  494. flock/workflow/temporal_setup.py +0 -60
  495. flock_core-0.4.542.dist-info/METADATA +0 -676
  496. flock_core-0.4.542.dist-info/RECORD +0 -572
  497. flock_core-0.4.542.dist-info/entry_points.txt +0 -2
  498. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  499. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  500. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  501. {flock_core-0.4.542.dist-info → flock_core-0.5.0.dist-info}/WHEEL +0 -0
@@ -1,74 +0,0 @@
1
- <nav>
2
- {% if ui_mode == 'standalone' %}
3
- <h5>Manage Flocks</h5>
4
- <ul>
5
- <li> <button hx-get="{{ url_for('htmx_get_load_flock_view') }}?ui_mode={{ ui_mode }}" hx-target="#main-content-area"
6
- hx-push-url="{{ url_for('page_dashboard') }}?ui_mode={{ ui_mode }}" hx-indicator="#content-loading-indicator-main"
7
- class="contrast {% if request.url.path == url_for('page_dashboard') or request.url.path == url_for('htmx_get_load_flock_view') %}active-nav{% endif %}">
8
- <i class="fas fa-folder-open"></i> Load Flock
9
- </button>
10
- </li>
11
- <!-- <li> <button hx-get="{{ url_for('htmx_get_create_flock_form') }}?ui_mode={{ ui_mode }}" hx-target="#main-content-area"
12
- hx-push-url="{{ url_for('page_create') }}?ui_mode={{ ui_mode }}" hx-indicator="#content-loading-indicator-main"
13
- class="contrast {% if request.url.path == url_for('page_create') %}active-nav{% endif %}">>
14
- <i class="fas fa-plus-circle"></i> Create New Flock
15
- </button>
16
- </li> -->
17
- </ul>
18
- {% endif %}
19
-
20
- {% if current_flock %}
21
- <hr>
22
- <h5>Current Flock</h5>
23
- <ul>
24
- <li> <button hx-get="{{ url_for('htmx_get_execution_view_container') }}?ui_mode={{ ui_mode }}" hx-target="#main-content-area"
25
- hx-push-url="{{ url_for('page_editor_section', section='execute') }}?ui_mode={{ ui_mode }}" hx-indicator="#content-loading-indicator-main"
26
- class="contrast {% if request.url.path == url_for('page_editor_section', section='execute') %}active-nav{% endif %}">
27
- <i class="fas fa-play-circle"></i> Execute Flock
28
- </button>
29
- </li>
30
- <li> <button hx-get="{{ url_for('htmx_get_agent_manager_view') }}?ui_mode={{ ui_mode }}" hx-target="#main-content-area"
31
- hx-push-url="{{ url_for('page_editor_section', section='agents') }}?ui_mode={{ ui_mode }}" hx-indicator="#content-loading-indicator-main"
32
- class="contrast{% if request.url.path == url_for('page_editor_section', section='agents') %}active-nav{% endif %}">
33
- <i class="fas fa-robot"></i> Agents ({{ current_flock.agents|length }})
34
- </button>
35
- </li> <li> <button hx-get="{{ url_for('htmx_get_flock_properties_form') }}?ui_mode={{ ui_mode }}" hx-target="#main-content-area"
36
- hx-push-url="{{ url_for('page_editor_section', section='properties') }}?ui_mode={{ ui_mode }}" hx-indicator="#content-loading-indicator-main"
37
- class="contrast {% if request.url.path == url_for('page_editor_section', section='properties') %}active-nav{% endif %}">
38
- <i class="fas fa-cog"></i> Properties
39
- </button>
40
- </li>
41
- </ul>
42
- {% endif %}
43
-
44
- <hr>
45
- <h5>Tools</h5>
46
- <ul>
47
- <li> <button hx-get="{{ url_for('htmx_get_registry_viewer') }}?ui_mode={{ ui_mode }}" hx-target="#main-content-area"
48
- hx-push-url="{{ url_for('page_registry') }}?ui_mode={{ ui_mode }}" hx-indicator="#content-loading-indicator-main"
49
- class="contrast {% if request.url.path == url_for('page_registry') %}active-nav{% endif %}">
50
- <i class="fas fa-book"></i> View Registry
51
- </button>
52
- </li>
53
- <li> <button hx-get="{{ url_for('htmx_get_settings_view') }}?ui_mode={{ ui_mode }}" hx-target="#main-content-area"
54
- hx-push-url="{{ url_for('page_settings') }}?ui_mode={{ ui_mode }}" hx-indicator="#content-loading-indicator-main"
55
- class="contrast {% if request.url.path == url_for('page_settings') %}active-nav{% endif %}">
56
- <i class="fas fa-sliders-h"></i> Settings
57
- </button>
58
- </li>
59
- {% if chat_enabled %} <li> <button hx-get="{{ url_for('htmx_get_chat_view') }}?ui_mode={{ ui_mode }}" hx-target="#main-content-area"
60
- hx-push-url="{{ url_for('page_chat') }}?ui_mode={{ ui_mode }}" hx-indicator="#content-loading-indicator-main"
61
- class="contrast {% if request.url.path == url_for('page_chat') %}active-nav{% endif %}">
62
- <i class="fas fa-comments"></i> Chat
63
- </button>
64
- </li> <li> <button hx-get="{{ url_for('chat_settings_form') }}?ui_mode={{ ui_mode }}" hx-target="#main-content-area"
65
- hx-push-url="{{ url_for('chat_settings_standalone') }}?ui_mode={{ ui_mode }}" hx-indicator="#content-loading-indicator-main"
66
- class="contrast {% if request.url.path == url_for('chat_settings_standalone') %}active-nav{% endif %}">
67
- <i class="fas fa-sliders-h"></i> Chat Settings
68
- </button>
69
- </li>
70
- {% endif %}
71
- </ul>
72
- <div id="content-loading-indicator-main" class="htmx-indicator" style="text-align:center; padding:1rem;"><progress
73
- indeterminate></progress></div>
74
- </nav>
@@ -1,40 +0,0 @@
1
- {% macro render_value(value, level=0) %}
2
- {% if value is mapping %}
3
- {% if not value %}
4
- <em style="color: var(--pico-muted-color);">(Empty Dictionary)</em>
5
- {% else %}
6
- <table class="structured-table level-{{ level }}" style="margin-left: {{ level * 20 }}px; margin-bottom: 0.5em; border-collapse: collapse; width: auto;">
7
- <tbody>
8
- {% for k, v in value.items() %}
9
- <tr style="border-bottom: 1px solid var(--pico-muted-border-color);">
10
- <td style="font-weight: bold; padding: 0.25em 0.5em; vertical-align: top; border-right: 1px solid var(--pico-muted-border-color); width: 30%;">{{ k }}</td>
11
- <td style="padding: 0.25em 0.5em; vertical-align: top;">{{ render_value(v, level + 1) }}</td>
12
- </tr>
13
- {% endfor %}
14
- </tbody>
15
- </table>
16
- {% endif %}
17
- {% elif value is iterable and value is not string %}
18
- {% if not value %}
19
- <em style="color: var(--pico-code-color);">(Empty List)</em>
20
- {% else %}
21
- <ul style="margin-left: {{ level * 20 }}px; padding-left: 1em; list-style-type: disc; margin-bottom:0.5em;">
22
- {% for item in value %}
23
- <li>{{ render_value(item, level + 1) }}</li>
24
- {% endfor %}
25
- </ul>
26
- {% endif %}
27
- {% elif value is boolean %}
28
- <code style="color: {{ 'var(--flock-success-color)' if value else 'var(--flock-error-color)' }}; font-weight:bold;">{{ value }}</code>
29
- {% elif value is number %}
30
- <code style="color: var(--pico-code-color);">{{ value }}</code>
31
- {% elif value is none %}
32
- <em style="color: var(--pico-code-color);">None</em>
33
- {% else %}
34
- {# Apply pre-wrap for multi-line strings and render markdown #}
35
- <div class="markdown-content" style="word-break: break-word;">{{ value | markdown | safe }}</div>
36
- {% endif %}
37
- {% endmacro %}
38
-
39
- {# Main entry point for this partial, assuming result_data is in context #}
40
- {{ render_value(result_data) }}
@@ -1,36 +0,0 @@
1
- {% if css_vars_str %}
2
- <script>
3
- (function() {
4
- // Remove any existing theme preview
5
- var existingPreview = document.getElementById('theme-preview-css');
6
- if (existingPreview) {
7
- existingPreview.remove();
8
- }
9
-
10
- // Inject new theme preview CSS
11
- var style = document.createElement('style');
12
- style.id = 'theme-preview-css';
13
- style.textContent = `{{ css_vars_str | safe }}`;
14
- document.head.appendChild(style);
15
- })();
16
- </script>
17
- {% endif %}
18
- <article style="border:1px solid var(--pico-border-color); padding:1rem; border-radius:8px;">
19
- <hgroup>
20
- <h3>Theme Preview: {{ theme_name }}</h3>
21
- <p><small>Preview applied globally - navigate away or refresh to revert</small></p>
22
- </hgroup>
23
- <div class="grid" style="grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap:0.5rem;">
24
- {% for color_name, color_value in main_colors %}
25
- <div>
26
- <div style="height:24px; border-radius:4px; background-color: {{ color_value }};"></div>
27
- <small>{{ color_name }}<br>{{ color_value }}</small>
28
- </div>
29
- {% endfor %}
30
- </div>
31
- <hr>
32
- <button>Button</button>
33
- <button class="secondary">Secondary</button>
34
- <button class="contrast">Contrast</button>
35
- <p>Sample text with <a href="#">link</a>, <mark>mark</mark>, <code>code</code>.</p>
36
- </article>
@@ -1,84 +0,0 @@
1
- {% extends "base.html" %}
2
-
3
- {% block title %}Flock UI - Registry Viewer{% endblock %}
4
-
5
- {% block content %}
6
- <article>
7
- <header>
8
- <h2>Flock Registry Viewer</h2>
9
- <p>Browse items registered with the Flock framework.</p>
10
- </header>
11
-
12
- <nav>
13
- <ul role="group">
14
- <li>
15
- <button role="button" class="outline"
16
- hx-get="{{ url_for('htmx_get_registry_table', item_type='type') }}"
17
- hx-target="#registry-table-container" hx-indicator="#registry-loading"
18
- hx-on:click="setActiveButton(this)">
19
- View Types
20
- </button>
21
- </li>
22
- <li>
23
- <button role="button" class="outline"
24
- hx-get="{{ url_for('htmx_get_registry_table', item_type='component') }}"
25
- hx-target="#registry-table-container" hx-indicator="#registry-loading"
26
- hx-on:click="setActiveButton(this)">
27
- View Components
28
- </button>
29
- </li>
30
- <li>
31
- <button role="button" class="outline"
32
- hx-get="{{ url_for('htmx_get_registry_table', item_type='component') }}"
33
- hx-target="#registry-table-container" hx-indicator="#registry-loading"
34
- hx-on:click="setActiveButton(this)">
35
- View Components
36
- </button>
37
- </li>
38
- <li>
39
- <button role="button" class="secondary" hx-get="{{ url_for('chat_feedback_download_all')}}" download>
40
- Download Feedback-Files for Agents
41
- </button>
42
- </li>
43
- </ul>
44
- </nav>
45
-
46
- <div id="registry-loading" class="htmx-indicator" style="text-align: center; margin-top: 1rem;">
47
- <progress></progress> Loading...
48
- </div>
49
-
50
- <div id="registry-table-container" style="margin-top: 1.5rem;">
51
- <p>Select a category above to view registered items.</p>
52
- </div>
53
-
54
- <footer style="margin-top: 2rem;">
55
- <a href="{{ url_for('page_editor_section', section='execute') }}" role="button" class="secondary contrast">Back
56
- to Editor</a>
57
- </footer>
58
- </article>
59
-
60
- <script>
61
- function setActiveButton(clickedButton) {
62
- // Get all buttons in the group
63
- const buttons = clickedButton.closest('ul[role="group"]').querySelectorAll('button');
64
- // Remove 'primary' (or any active class) and add 'outline' to all
65
- buttons.forEach(button => {
66
- button.classList.remove('primary'); // Assuming 'primary' is your active class
67
- button.classList.add('outline');
68
- });
69
- // Add 'primary' and remove 'outline' from the clicked button
70
- clickedButton.classList.remove('outline');
71
- clickedButton.classList.add('primary'); // Use Pico's primary button style for active
72
- }
73
-
74
- // Optional: Set the first button as active on initial load,
75
- // or if you want to default to loading "Types"
76
- document.addEventListener('DOMContentLoaded', function () {
77
- const firstButton = document.querySelector('nav ul[role="group"] button');
78
- if (firstButton) {
79
- // setActiveButton(firstButton); // Uncomment if you want a default active button
80
- // htmx.trigger(firstButton, 'click'); // Uncomment to auto-load Types on page load
81
- }
82
- });
83
- </script>
84
- {% endblock %}
@@ -1,140 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" data-theme="dark">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Flock Shared Agent: {{ selected_agent_name }}</title>
7
-
8
- {# Link to Pico.css #}
9
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css" /> <link rel="stylesheet" href="{{ url_for('static', path='css/layout.css') }}">
10
- <link rel="stylesheet" href="{{ url_for('static', path='css/header.css') }}">
11
- <link rel="stylesheet" href="{{ url_for('static', path='css/sidebar.css') }}">
12
- <link rel="stylesheet" href="{{ url_for('static', path='css/components.css') }}">
13
- <link rel="stylesheet" href="{{ url_for('static', path='css/chat.css') }}">
14
- <!-- Font Awesome for icons -->
15
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
16
- <!-- Prism.js CSS for syntax highlighting (okaidia theme) -->
17
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-okaidia.min.css" referrerpolicy="no-referrer" />
18
- {# Inline generated theme CSS variables #}
19
- {% if theme_css %}
20
- <style>
21
- /* Start Theme CSS */
22
- /* stylelint-disable */
23
- {{ theme_css | safe }}
24
- /* stylelint-enable */
25
- /* End Theme CSS */
26
- </style>
27
- {% endif %}
28
-
29
-
30
- {# HTMX script - ensure this is loaded for the page to work #}
31
- <script src="https://unpkg.com/htmx.org@1.9.10" integrity="sha384-D1Kt99CQMDuVetoL1lrYwg5t+9QdHe7NLX/SoJYkXDFfX37iInKRy5xLSi8nO7UC" crossorigin="anonymous"></script>
32
- <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
33
- </head>
34
- <body>
35
- <main class="main-content">
36
- <header>
37
- <hgroup>
38
- <h2>Run {{ flock.name }} - {{ selected_agent_name }} </h2>
39
- </hgroup>
40
- </header>
41
-
42
- {% if error_message %}
43
- <article class="error-message" role="alert">
44
- <strong>Error:</strong> {{ error_message }}
45
- </article>
46
- {% endif %}
47
-
48
- {% if selected_agent_name and not error_message %} {# Only show form if no fatal error and agent is selected #}
49
- <div style="display: flex; gap: var(--pico-spacing, 1rem);">
50
- <div style="flex: 1;">
51
- <article id="execution-form-content"> <form id="agent-run-form-shared" hx-post="{{ url_for('htmx_run_shared_flock') }}"
52
- hx-target="#results-display"
53
- hx-swap="innerHTML"
54
- hx-indicator="#run-loading-indicator">
55
-
56
- {# Hidden input for the fixed agent name #}
57
- <input type="hidden" name="start_agent_name" value="{{ selected_agent_name }}">
58
-
59
- {# Add share_id as a hidden input to be sent with the form #}
60
- <input type="hidden" name="share_id" value="{{ share_id }}">
61
-
62
- {# flock_definition_str hidden input is no longer needed #}
63
- {# {% if flock_definition_str %} #}
64
- {# <input type="hidden" name="flock_definition_str" value="{{ flock_definition_str }}"> #}
65
- {# {% endif %} #}
66
-
67
- {# Dynamically generated input fields #}
68
- {% if input_fields %}
69
- <h4>Inputs for <code>{{ selected_agent_name }}</code>:</h4>
70
- {% for field in input_fields %}
71
- <label for="agent_input_{{ field.name }}">
72
- {{ field.name }} ({{ field.type }})<br>
73
- {% if field.description %}<small>{{ field.description }}</small>{% endif %}
74
- </label>
75
- {% if field.html_type == "checkbox" %}
76
- <input type="checkbox" id="agent_input_{{ field.name }}" name="agent_input_{{ field.name }}" role="switch">
77
- {% elif field.html_type == "textarea" %}
78
- <textarea id="agent_input_{{ field.name }}" name="agent_input_{{ field.name }}" placeholder="{{ field.placeholder | default('Enter value') }}"></textarea>
79
- {% else %}
80
- <input type="{{ field.html_type }}" id="agent_input_{{ field.name }}" name="agent_input_{{ field.name }}" placeholder="Enter {{ field.type }} value">
81
- {% endif %}
82
- {% endfor %}
83
- {% elif flock and selected_agent_name in flock.agents and not flock.agents[selected_agent_name].input %}
84
- <p>Agent <code>{{ selected_agent_name }}</code> requires no inputs.</p>
85
- {% elif not error_message %}
86
- <p>Could not determine inputs for agent <code>{{ selected_agent_name }}</code>. The input signature might be missing or invalid.</p>
87
- {% endif %}
88
-
89
- <button type="submit" class="hide-on-request">Run Agent</button>
90
- <span id="run-loading-indicator" class="htmx-indicator">
91
- <progress indeterminate></progress> Running...
92
- </span>
93
- </form>
94
- </article>
95
- </div>
96
- <section class="right-pane-framed" style="flex: 2; border-left: 1px solid var(--pico-muted-border-color); padding-left: 1.5rem;">
97
- <header style=" border-bottom: 1px solid var(--pico-muted-border-color); margin-bottom: 1rem;">
98
- <h5>Execution Results</h5>
99
- </header>
100
- <div id="results-display">
101
- <p><code>Results will appear here after running the Flock.</code></p>
102
- </div>
103
- </section>
104
- </div>
105
-
106
- {% elif not error_message %}
107
- <p>This shared link is not configured correctly. No agent specified or an issue occurred loading the configuration.</p>
108
- {% endif %}
109
-
110
- <footer class="main-footer">
111
- <small>Built with FastAPI, HTMX, Pico.CSS by 🤍 white duck 🦆 - Theme: {{ active_theme_name | default('default') }}</small>
112
- </footer>
113
- </main>
114
-
115
- <!-- Prism.js JS (core and autoloader) -->
116
- <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js" referrerpolicy="no-referrer"></script>
117
- <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js" referrerpolicy="no-referrer"></script>
118
- <script>
119
- // Add HTMX event listener for Prism highlighting
120
- document.addEventListener('htmx:afterSwap', function(event) {
121
- const resultsDisplay = document.getElementById('results-display');
122
- // Check if the swapped element is the results display or a child of it
123
- if (resultsDisplay && (event.detail.target === resultsDisplay || resultsDisplay.contains(event.detail.target))) {
124
- if (typeof Prism !== 'undefined') {
125
- // console.log('Prism highlighting triggered for swapped content in results-display.');
126
- Prism.highlightAllUnder(resultsDisplay);
127
- }
128
- }
129
- });
130
-
131
- // Initial highlight on page load
132
- document.addEventListener('DOMContentLoaded', () => {
133
- if (typeof Prism !== 'undefined') {
134
- // console.log('Prism initial highlighting on shared page.');
135
- Prism.highlightAll();
136
- }
137
- });
138
- </script>
139
- </body>
140
- </html>
File without changes
@@ -1,237 +0,0 @@
1
- """Defines Temporal activities for running a chain of agents with logging and tracing."""
2
-
3
- from datetime import datetime
4
-
5
- from opentelemetry import trace
6
- from temporalio import activity
7
-
8
- from flock.core.context.context import FlockContext
9
- from flock.core.context.context_vars import (
10
- FLOCK_CURRENT_AGENT,
11
- FLOCK_MODEL,
12
- FLOCK_USE_PRODUCTION_TOOLS,
13
- )
14
- from flock.core.flock_agent import FlockAgent
15
- from flock.core.flock_registry import get_registry
16
- from flock.core.flock_router import HandOffRequest
17
- from flock.core.logging.logging import get_logger
18
- from flock.core.util.input_resolver import resolve_inputs
19
-
20
- logger = get_logger("activities")
21
- tracer = trace.get_tracer(__name__)
22
-
23
-
24
- @activity.defn
25
- async def run_agent(context: FlockContext) -> dict:
26
- """Runs a chain of agents using the provided context.
27
-
28
- The context contains state, history, and agent definitions.
29
- After each agent run, its output is merged into the context.
30
- """
31
- # Start a top-level span for the entire run_agent activity.
32
- with tracer.start_as_current_span("run_agent") as span:
33
- registry = get_registry()
34
-
35
- previous_agent_name = ""
36
- if isinstance(context, dict):
37
- context = FlockContext.from_dict(context)
38
- current_agent_name = context.get_variable(FLOCK_CURRENT_AGENT)
39
- span.set_attribute("initial.agent", current_agent_name)
40
- logger.info("Starting agent chain", initial_agent=current_agent_name)
41
-
42
- agent = registry.get_agent(current_agent_name)
43
- if agent.model is None or agent.evaluator.config.model is None:
44
- agent.set_model(context.get_variable(FLOCK_MODEL))
45
- agent.resolve_callables(context=context)
46
- if not agent:
47
- logger.error("Agent not found", agent=current_agent_name)
48
- span.record_exception(
49
- Exception(f"Agent '{current_agent_name}' not found")
50
- )
51
- return {"error": f"Agent '{current_agent_name}' not found."}
52
-
53
- # Loop over agents in the chain.
54
- while agent:
55
- # Create a nested span for this iteration.
56
- with tracer.start_as_current_span("agent_iteration") as iter_span:
57
- iter_span.set_attribute("agent.name", agent.name)
58
- agent.context = context
59
- # Resolve inputs for the agent.
60
- agent_inputs = resolve_inputs(
61
- agent.input, context, previous_agent_name
62
- )
63
- iter_span.add_event(
64
- "resolved inputs", attributes={"inputs": str(agent_inputs)}
65
- )
66
-
67
- # Execute the agent with its own span.
68
- with tracer.start_as_current_span("execute_agent") as exec_span:
69
- logger.info("Executing agent", agent=agent.name)
70
- try:
71
- use_prod_tools = bool(
72
- context.get_variable(
73
- FLOCK_USE_PRODUCTION_TOOLS, False
74
- )
75
- )
76
- exec_span.set_attribute(
77
- "tools.selection",
78
- "production" if use_prod_tools else "dev",
79
- )
80
- result = await agent.run_async(
81
- agent_inputs,
82
- use_production_tools=use_prod_tools,
83
- )
84
- exec_span.set_attribute("result", str(result))
85
- logger.debug(
86
- "Agent execution completed", agent=agent.name
87
- )
88
- except Exception as e:
89
- logger.error(
90
- "Agent execution failed",
91
- agent=agent.name,
92
- error=str(e),
93
- )
94
- exec_span.record_exception(e)
95
- raise
96
-
97
- # Determine the next agent using the handoff router if available
98
- handoff_data = HandOffRequest()
99
-
100
- if agent.handoff_router:
101
- logger.info(
102
- f"Using handoff router: {agent.handoff_router.__class__.__name__}",
103
- agent=agent.name,
104
- )
105
- try:
106
- # Route to the next agent
107
- handoff_data = await agent.handoff_router.route(
108
- agent, result, context
109
- )
110
-
111
- if callable(handoff_data):
112
- logger.debug(
113
- "Executing handoff function", agent=agent.name
114
- )
115
- try:
116
- handoff_data = handoff_data(context, result)
117
- if isinstance(
118
- handoff_data.next_agent, FlockAgent
119
- ):
120
- handoff_data.next_agent = (
121
- handoff_data.next_agent.name
122
- )
123
- except Exception as e:
124
- logger.error(
125
- "Handoff function error {} {}",
126
- agent=agent.name,
127
- error=str(e),
128
- )
129
- iter_span.record_exception(e)
130
- return {"error": f"Handoff function error: {e}"}
131
- elif isinstance(handoff_data.next_agent, FlockAgent):
132
- handoff_data.next_agent = (
133
- handoff_data.next_agent.name
134
- )
135
-
136
- if not handoff_data.next_agent:
137
- logger.info(
138
- "Router found no suitable next agent",
139
- agent=agent.name,
140
- )
141
- context.record(
142
- agent.name,
143
- result,
144
- timestamp=datetime.now().isoformat(),
145
- hand_off=None,
146
- called_from=previous_agent_name,
147
- )
148
- logger.info("Completing chain", agent=agent.name)
149
- iter_span.add_event("chain completed")
150
- return result
151
- except Exception as e:
152
- logger.error(
153
- "Router error {} {}",
154
- agent.name,
155
- str(e),
156
- )
157
- iter_span.record_exception(e)
158
- return {"error": f"Router error: {e}"}
159
- else:
160
- # No router, so no handoff
161
- logger.info(
162
- "No handoff router defined, completing chain",
163
- agent=agent.name,
164
- )
165
- context.record(
166
- agent.name,
167
- result,
168
- timestamp=datetime.now().isoformat(),
169
- hand_off=None,
170
- called_from=previous_agent_name,
171
- )
172
- iter_span.add_event("chain completed")
173
- return result
174
-
175
- # Record the agent run in the context.
176
- context.record(
177
- agent.name,
178
- result,
179
- timestamp=datetime.now().isoformat(),
180
- hand_off=handoff_data.model_dump(),
181
- called_from=previous_agent_name,
182
- )
183
- previous_agent_name = agent.name
184
- previous_agent_output = agent.output
185
- if handoff_data.override_context:
186
- context.update(handoff_data.override_context)
187
-
188
- # Prepare the next agent.
189
- try:
190
- agent = registry.get_agent(handoff_data.next_agent)
191
- if handoff_data.output_to_input_merge_strategy == "add":
192
- agent.input = previous_agent_output + ", " + agent.input
193
-
194
- if handoff_data.add_input_fields:
195
- for field in handoff_data.add_input_fields:
196
- agent.input = field + ", " + agent.input
197
-
198
- if handoff_data.add_output_fields:
199
- for field in handoff_data.add_output_fields:
200
- agent.output = field + ", " + agent.output
201
-
202
- if handoff_data.add_description:
203
- if agent.description:
204
- agent.description = (
205
- agent.description
206
- + "\n"
207
- + handoff_data.add_description
208
- )
209
- else:
210
- agent.description = handoff_data.add_description
211
-
212
- agent.resolve_callables(context=context)
213
- if not agent:
214
- logger.error(
215
- "Next agent not found",
216
- agent=handoff_data.next_agent,
217
- )
218
- iter_span.record_exception(
219
- Exception(
220
- f"Next agent '{handoff_data.next_agent}' not found"
221
- )
222
- )
223
- return {
224
- "error": f"Next agent '{handoff_data.next_agent}' not found."
225
- }
226
-
227
- context.set_variable(FLOCK_CURRENT_AGENT, agent.name)
228
-
229
- logger.info("Handing off to next agent", next=agent.name)
230
- iter_span.set_attribute("next.agent", agent.name)
231
- except Exception as e:
232
- logger.error("Error during handoff", error=str(e))
233
- iter_span.record_exception(e)
234
- return {"error": f"Error during handoff: {e}"}
235
-
236
- # If the loop exits unexpectedly, return the initial input.
237
- return context.get_variable("init_input")
@@ -1,24 +0,0 @@
1
- from temporalio import activity
2
-
3
- from flock.core.context.context import FlockContext
4
- from flock.core.flock_agent import FlockAgent
5
-
6
-
7
- @activity.defn
8
- async def run_declarative_agent_activity(params: dict) -> dict:
9
- """Temporal activity to run a declarative (or batch) agent.
10
-
11
- Expects a dictionary with:
12
- - "agent_data": a dict representation of the agent (as produced by .dict()),
13
- - "context_data": a dict containing the FlockContext state and optionally other fields.
14
-
15
- The activity reconstructs the agent and a FlockContext, then calls the agent’s _evaluate() method.
16
- """
17
- agent_data = params.get("agent_data")
18
- context_data = params.get("context_data", {})
19
- # Reconstruct the agent from its serialized representation.
20
- agent = FlockAgent.from_dict(agent_data)
21
- # Reconstruct the FlockContext from the state.
22
- context = FlockContext.from_dict(context_data)
23
- result = await agent.evaluate(context)
24
- return result