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,36 +0,0 @@
1
- <!-- Settings View -->
2
- <article>
3
- <header>
4
- <h2>Settings</h2>
5
- </header>
6
- <nav>
7
- <ul role="group">
8
- <li>
9
- <button role="button" class="primary" hx-get="{{ url_for('htmx_settings_env_vars') }}" hx-target="#settings-content-container" hx-indicator="#settings-loading" hx-on:click="setActiveButton(this)">Environment</button>
10
- </li>
11
- <li>
12
- <button role="button" class="outline" hx-get="{{ url_for('htmx_settings_theme') }}" hx-target="#settings-content-container" hx-indicator="#settings-loading" hx-on:click="setActiveButton(this)">Theme</button>
13
- </li>
14
- </ul>
15
- </nav>
16
-
17
- <div id="settings-loading" class="htmx-indicator" style="text-align:center; margin-top:1rem;">
18
- <progress></progress> Loading...
19
- </div>
20
-
21
- <div id="settings-content-container" style="margin-top:1.5rem;">
22
- {% include 'partials/_settings_env_content.html' %}
23
- </div>
24
- </article>
25
-
26
- <script>
27
- function setActiveButton(clickedButton) {
28
- const buttons = clickedButton.closest('ul[role="group"]').querySelectorAll('button');
29
- buttons.forEach(btn => {
30
- btn.classList.remove('primary');
31
- btn.classList.add('outline');
32
- });
33
- clickedButton.classList.remove('outline');
34
- clickedButton.classList.add('primary');
35
- }
36
- </script>
@@ -1,11 +0,0 @@
1
- {# This snippet is returned by the /ui/htmx/share/chat/generate-link endpoint #}
2
- {% if share_url %}
3
- <p style="margin-bottom: 0.5rem;"><strong>Shareable Chat Link generated:</strong></p>
4
- <input type="text" id="generatedShareChatLinkInput" value="{{ share_url }}" readonly style="width: 100%; margin-bottom: 0.5rem;">
5
- <p><small>You can select the link above and copy it (Ctrl+C or Cmd+C).</small></p>
6
- <p><small>This link will start a chat session with the agent '{{ agent_name }}' from Flock '{{ flock_name }}' using the currently saved settings.</small></p>
7
- {% elif error_message %}
8
- <p style="color: var(--pico-form-invalid-color);">Error generating chat link: {{ error_message }}</p>
9
- {% else %}
10
- <p><em>Something went wrong, no chat link generated.</em></p>
11
- {% endif %}
@@ -1,35 +0,0 @@
1
- {# This snippet is returned by the /ui/htmx/share/generate-link endpoint #}
2
- {% if share_url %}
3
- <p style="margin-bottom: 0.5rem;"><strong>Shareable Link generated:</strong></p>
4
- <input type="text" id="generatedShareLinkInput" value="{{ share_url }}" readonly style="width: 100%; margin-bottom: 0.5rem;">
5
- {# <button type="button" onclick="copyGeneratedLinkToClipboard()">Copy Link</button> #}
6
- {# <small id="copyGeneratedStatusMsg" style="margin-left: 0.5rem;"></small> #}
7
- <p><small>You can select the link above and copy it (Ctrl+C or Cmd+C).</small></p>
8
- {% elif error_message %}
9
- <p style="color: var(--pico-form-invalid-color);">Error: {{ error_message }}</p>
10
- {% else %}
11
- <p><em>Something went wrong, no link generated.</em></p>
12
- {% endif %}
13
-
14
- {#
15
- <script>
16
- // Minimal JS for copy if desired - but user asked for JS-free.
17
- // If you re-add the button, uncomment this.
18
- function copyGeneratedLinkToClipboard() {
19
- const input = document.getElementById('generatedShareLinkInput');
20
- const msg = document.getElementById('copyGeneratedStatusMsg');
21
- if (!input || !msg) return;
22
-
23
- input.select();
24
- input.setSelectionRange(0, 99999); // For mobile devices
25
- try {
26
- document.execCommand('copy');
27
- msg.textContent = 'Copied!';
28
- setTimeout(() => { msg.textContent = ''; }, 2000);
29
- } catch (err) {
30
- console.error('Failed to copy text: ', err);
31
- msg.textContent = 'Failed to copy.';
32
- }
33
- }
34
- </script>
35
- #}
@@ -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,195 +0,0 @@
1
- <div id="streaming-results-wrapper"
2
- data-run-id="{{ run_id }}"
3
- data-stream-url="{{ stream_url }}"
4
- data-target-id="results-display"
5
- data-agent-name="{{ agent_name }}">
6
- <header style="margin-bottom: 0.75rem;">
7
- <h5 style="margin: 0;">Streaming {{ agent_name }}</h5>
8
- <p style="margin: 0; color: var(--pico-muted-color);">Live output appears below while the agent runs.</p>
9
- </header>
10
-
11
- <p class="error" data-role="error" hidden></p>
12
- <div class="stream-output" data-role="output" style="min-height: 8rem; white-space: normal; word-break: break-word; font-family: var(--pico-code-font-family, monospace);">Connecting to agent…</div>
13
- <div data-role="progress" style="margin-top: 0.5rem;" role="status">
14
- <progress indeterminate></progress> Streaming response…
15
- </div>
16
- </div>
17
-
18
- <script>
19
- (function () {
20
- const script = document.currentScript;
21
- if (!script) {
22
- return;
23
- }
24
- const wrapper = script.previousElementSibling;
25
- if (!(wrapper instanceof HTMLElement)) {
26
- return;
27
- }
28
- if (wrapper.dataset.streamInit === '1') {
29
- return;
30
- }
31
- wrapper.dataset.streamInit = '1';
32
-
33
- const streamUrl = wrapper.dataset.streamUrl;
34
- const runId = wrapper.dataset.runId;
35
- const targetId = wrapper.dataset.targetId || 'results-display';
36
-
37
- const outputEl = wrapper.querySelector('[data-role="output"]');
38
- const errorEl = wrapper.querySelector('[data-role="error"]');
39
- const progressEl = wrapper.querySelector('[data-role="progress"]');
40
-
41
- if (!streamUrl || !runId || !(outputEl instanceof HTMLElement)) {
42
- if (errorEl instanceof HTMLElement) {
43
- errorEl.textContent = 'Streaming setup failed due to missing metadata.';
44
- errorEl.hidden = false;
45
- }
46
- if (progressEl instanceof HTMLElement) {
47
- progressEl.hidden = true;
48
- }
49
- return;
50
- }
51
-
52
- let plainText = outputEl instanceof HTMLElement ? outputEl.textContent || '' : '';
53
- let source;
54
- const fieldValues = new Map();
55
- let latestStatus = '';
56
-
57
- function escapeHtml(value) {
58
- return value.replace(/[&<>"']/g, (char) => ({
59
- '&': '&amp;',
60
- '<': '&lt;',
61
- '>': '&gt;',
62
- '"': '&quot;',
63
- "'": '&#39;',
64
- })[char]);
65
- }
66
-
67
- function renderTableCell(value) {
68
- return escapeHtml(value).replace(/\n/g, '<br>');
69
- }
70
-
71
- function renderStream() {
72
- if (!(outputEl instanceof HTMLElement)) {
73
- return;
74
- }
75
- if (fieldValues.size > 0) {
76
- outputEl.style.whiteSpace = 'normal';
77
- let rows = '';
78
- fieldValues.forEach((value, field) => {
79
- rows += `<tr><td class="stream-field" style="white-space: nowrap; padding-right: 1rem; vertical-align: top;">${escapeHtml(field)}</td><td>${renderTableCell(value)}</td></tr>`;
80
- });
81
- if (latestStatus) {
82
- rows += `<tr class="stream-status"><td class="stream-field" style="white-space: nowrap; padding-right: 1rem; vertical-align: top;">status</td><td>${escapeHtml(latestStatus)}</td></tr>`;
83
- }
84
- outputEl.innerHTML = `<table class="structured-table streaming-table" style="width:100%; border-collapse: collapse; table-layout: auto;"><tbody>${rows}</tbody></table>`;
85
- } else {
86
- outputEl.style.whiteSpace = 'pre-wrap';
87
- outputEl.textContent = plainText;
88
- }
89
- }
90
-
91
- function showError(message) {
92
- if (errorEl instanceof HTMLElement) {
93
- errorEl.textContent = message;
94
- errorEl.hidden = false;
95
- }
96
- if (progressEl instanceof HTMLElement) {
97
- progressEl.hidden = true;
98
- }
99
- }
100
-
101
- function closeStream() {
102
- if (source) {
103
- source.close();
104
- source = undefined;
105
- }
106
- if (progressEl instanceof HTMLElement) {
107
- progressEl.hidden = true;
108
- }
109
- renderStream();
110
- }
111
-
112
- function renderFinal(html, rawJson) {
113
- const target = document.getElementById(targetId);
114
- if (!target) {
115
- return;
116
- }
117
- target.innerHTML = html;
118
- if (window.htmx) {
119
- window.htmx.process(target);
120
- }
121
- if (window.Prism) {
122
- window.Prism.highlightAllUnder(target);
123
- }
124
- if (outputEl instanceof HTMLElement) {
125
- outputEl.textContent = '';
126
- }
127
- }
128
-
129
- try {
130
- source = new EventSource(streamUrl);
131
- } catch (err) {
132
- console.error('Failed to start EventSource', err);
133
- showError('Failed to connect for streaming.');
134
- return;
135
- }
136
-
137
- source.onmessage = (event) => {
138
- if (!event.data) {
139
- return;
140
- }
141
- let payload;
142
- try {
143
- payload = JSON.parse(event.data);
144
- } catch (err) {
145
- console.warn('Unable to parse streaming payload', err);
146
- return;
147
- }
148
-
149
- switch (payload.type) {
150
- case 'token':
151
- if (typeof payload.chunk === 'string') {
152
- if (payload.field) {
153
- const existing = fieldValues.get(payload.field) || '';
154
- fieldValues.set(payload.field, existing + payload.chunk);
155
- } else {
156
- plainText = (plainText === 'Connecting to agent…' ? '' : plainText) + payload.chunk;
157
- }
158
- renderStream();
159
- }
160
- break;
161
- case 'status':
162
- if (payload.message) {
163
- latestStatus = payload.message;
164
- if (fieldValues.size === 0) {
165
- plainText = (plainText === 'Connecting to agent…' ? '' : plainText);
166
- if (plainText && !plainText.endsWith('\n')) {
167
- plainText += '\n';
168
- }
169
- plainText += payload.message + '\n';
170
- }
171
- renderStream();
172
- }
173
- break;
174
- case 'error':
175
- showError(payload.message || 'An unexpected error occurred while streaming.');
176
- closeStream();
177
- break;
178
- case 'final':
179
- closeStream();
180
- renderFinal(payload.html || '', payload.raw_json || payload.rawJson);
181
- break;
182
- case 'complete':
183
- closeStream();
184
- break;
185
- default:
186
- break;
187
- }
188
- };
189
-
190
- source.onerror = () => {
191
- showError('Connection lost while streaming.');
192
- closeStream();
193
- };
194
- })();
195
- </script>
@@ -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>