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,28 +0,0 @@
1
- <article id="flock-preview-article">
2
- <header>
3
- <h4>Preview: {{ preview_flock.name if preview_flock else selected_filename }}</h4>
4
- </header>
5
- {% if preview_flock %}
6
- <p><strong>Default Model:</strong> {{ preview_flock.model or 'Not set' }}</p>
7
- <p><strong>Description:</strong> {{ preview_flock.description or 'None' }}</p>
8
- <p><strong>Agents:</strong> {{ preview_flock.agents_count }}</p>
9
- <form hx-post="{{ url_for('ui_load_flock_by_name_action') }}"
10
- hx-target="#main-content-area" {# This will load the full editor for this flock #}
11
- hx-swap="innerHTML"
12
- hx-indicator="#flock-preview-loading-indicator">
13
- <input type="hidden" name="selected_flock_filename" value="{{ selected_filename }}">
14
- <button type="submit" class="primary">Load this Flock into Editor</button>
15
- <span id="flock-preview-loading-indicator" class="htmx-indicator"><progress indeterminate></progress></span>
16
- </form>
17
- {% else %}
18
- <p class="error">Could not load preview for <code>{{ selected_filename }}</code>. It might be corrupted or not a valid Flock file.</p>
19
- <p><small>You can still attempt to load it into the editor.</small></p>
20
- <form hx-post="{{ url_for('ui_load_flock_by_name_action') }}" hx-target="#main-content-area" hx-swap="innerHTML">
21
- <input type="hidden" name="selected_flock_filename" value="{{ selected_filename }}">
22
- <button type="submit" class="secondary">Attempt to Load into Editor</button>
23
- </form>
24
- {% endif %}
25
- <hr>
26
-
27
-
28
- </article>
@@ -1,16 +0,0 @@
1
- <article>
2
- <header>
3
- <h5>Upload New Flock File</h5>
4
- </header> <form hx-post="{{ url_for('load_flock_by_upload') }}"
5
- hx-target="#main-content-area" {# Target the main area to show editor on success #}
6
- hx-swap="innerHTML"
7
- hx-encoding="multipart/form-data"
8
- hx-indicator="#dashboard-upload-loading-indicator">
9
- <label for="flock_file_upload_dashboard">Upload <code>.flock.yaml</code>, <code>.yaml</code>, or <code>.yml</code> file:</label>
10
- <input type="file" id="flock_file_upload_dashboard" name="flock_file_upload" accept=".yaml,.yml,.flock" required>
11
- <button type="submit">Upload and Load Flock</button>
12
- <span id="dashboard-upload-loading-indicator" class="htmx-indicator"><progress indeterminate></progress> Uploading...</span>
13
- </form>
14
- <hr>
15
- <p><small>Alternatively, select a Flock from the list on the left to view its details or load it.</small></p>
16
- </article>
@@ -1,22 +0,0 @@
1
- {% if input_fields %}
2
- {% for field in input_fields %}
3
- <fieldset> {# Group each field #}
4
- <label for="agent_input_{{ field.name }}">{{ field.name }} ({{ field.type }})</label>
5
- {% if field.description %}
6
- <small>{{ field.description }}</small>
7
- {% endif %}
8
- {% if field.html_type == 'textarea' %}
9
- <textarea id="agent_input_{{ field.name }}" name="agent_input_{{ field.name }}" rows="3" placeholder="{{ field.placeholder if field.placeholder else ('Enter ' + field.type) }}"></textarea>
10
- {% elif field.html_type == 'checkbox' %}
11
- <label for="agent_input_{{ field.name }}_cb">
12
- <input type="checkbox" id="agent_input_{{ field.name }}_cb" name="agent_input_{{ field.name }}" value="true">
13
- Enabled
14
- </label>
15
- {% else %}
16
- <input type="{{ field.html_type }}" id="agent_input_{{ field.name }}" name="agent_input_{{ field.name }}" placeholder="{{ field.placeholder if field.placeholder else ('Enter ' + field.type) }}">
17
- {% endif %}
18
- </fieldset>
19
- {% endfor %}
20
- {% else %}
21
- <p><small>This agent requires no specific inputs, or input signature could not be parsed.</small></p>
22
- {% endif %}
@@ -1,23 +0,0 @@
1
- <div id="env-vars-container">
2
- <table class="striped" style="font-size:0.9rem;">
3
- <thead>
4
- <tr>
5
- <th>Name</th>
6
- <th>Value</th>
7
- <th>Actions</th>
8
- </tr>
9
- </thead>
10
- <tbody>
11
- {% for var in env_vars %}
12
- <tr>
13
- <td>{{ var.name }}</td>
14
- <td>{{ var.value }}</td> <td> <button class="secondary small outline" hx-post="{{ url_for('htmx_env_edit') }}" hx-vals='{"var_name": "{{ var.name }}"}'
15
- hx-prompt="Enter new value for {{ var.name }}" hx-target="#env-vars-container" hx-swap="outerHTML">Edit</button>
16
- <button class="contrast small outline" hx-post="{{ url_for('htmx_env_delete') }}" hx-vals='{"var_name": "{{ var.name }}"}'
17
- hx-confirm="Delete {{ var.name }}?" hx-target="#env-vars-container" hx-swap="outerHTML" style="margin-left:0.25rem;">Delete</button>
18
- </td>
19
- </tr>
20
- {% endfor %}
21
- </tbody>
22
- </table>
23
- </div>
@@ -1,118 +0,0 @@
1
- <script>
2
- // Create URL template for agent input forms
3
- window.agentInputFormUrlTemplate = '{{ url_for("htmx_get_agent_input_form", agent_name="AGENT_PLACEHOLDER") }}';
4
- </script>
5
-
6
- <article id="execution-form-content">
7
- <header>
8
- <h2>Run Flock</h2>
9
- </header>
10
- {% if flock and flock.agents %} <form hx-post="{{ url_for('htmx_run_flock') }}" hx-target="#results-display"
11
- hx-swap="innerHTML" hx-indicator="#run-loading-indicator" x-data="{ selectedAgentForInput: '' }">
12
-
13
- <label for="start_agent_name_select">Select Start Agent:</label>
14
- <select id="start_agent_name_select" name="start_agent_name" required x-model="selectedAgentForInput" @change="
15
- if ($event.target.value) {
16
- const url = window.agentInputFormUrlTemplate.replace('AGENT_PLACEHOLDER', $event.target.value);
17
- htmx.ajax('GET', url, {target: '#dynamic-input-form-fields', swap: 'innerHTML', indicator: '#input-form-loading-indicator'});
18
- } else {
19
- document.getElementById('dynamic-input-form-fields').innerHTML = '<p><small>Select an agent to see its input fields.</small></p>';
20
- }
21
- ">
22
- <option value="" disabled {% if not selected_agent_name %}selected{% endif %}>-- Choose an agent --</option>
23
- {% for agent_name_key in flock.agents.keys() %}
24
- <option value="{{ agent_name_key }}" {% if selected_agent_name==agent_name_key %}selected{% endif %}>{{
25
- agent_name_key }}</option>
26
- {% endfor %}
27
- </select>
28
-
29
- <div id="dynamic-input-form-fields">
30
- <!-- Input fields for the selected agent will be loaded here -->
31
- <p><small>Select an agent to see its input fields.</small></p>
32
- </div>
33
- <div id="input-form-loading-indicator" class="htmx-indicator">
34
- <progress indeterminate></progress> Loading input form...
35
- </div>
36
-
37
- <button type="submit" {% if not flock.agents %}disabled{% endif %}>Run Flock</button>
38
- <div id="share-agent-link-container" style="margin-top: 0.5rem;">
39
- <a href="#" id="shareAgentHtmxLink" hx-post="{{ url_for('htmx_generate_share_link') }}"
40
- hx-target="#shareLinkDisplayArea" hx-swap="innerHTML" hx-indicator="#share-loading-indicator"
41
- hx-include="#start_agent_name_select"
42
- style="padding: 0.25rem 0.5rem; margin: 0.25rem; background: var(--pico-primary); color: white; text-decoration: none; border-radius: 4px; font-size: 0.875rem;">
43
- Create shareable link...
44
- </a>
45
- <span id="share-loading-indicator" class="htmx-indicator">
46
- <progress indeterminate></progress> Generating link...
47
- </span>
48
- </div>
49
-
50
- <div id="feedback-download-container" style="margin-top: 0.5rem;">
51
- <div x-show="selectedAgentForInput" x-cloak
52
- style="display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;">
53
- <span style="padding: 0.25rem; text-decoration: underline;">Download feedback for selected
54
- agent:</span>
55
- <div>
56
- <a href="#" id="downloadFeedbackLink" hx-indicator="#download-feedback-loading-indicator"
57
- hx-include="#start_agent_name_select"
58
- :href="selectedAgentForInput ? '{{ url_for('chat_feedback_download', agent_name='AGENT_PLACEHOLDER', format='csv') }}'.replace('AGENT_PLACEHOLDER', selectedAgentForInput) : '#'"
59
- style="padding: 0.25rem 0.5rem; margin: 0.25rem; background: var(--pico-primary); color: white; text-decoration: none; border-radius: 4px; font-size: 0.875rem;">
60
- CSV
61
- </a>
62
- <a href="#" id="downloadFeedbackLinkXlsx" hx-indicator="#download-feedback-loading-indicator"
63
- hx-include="#start_agent_name_select"
64
- :href="selectedAgentForInput ? '{{ url_for('chat_feedback_download', agent_name='AGENT_PLACEHOLDER', format='xlsx') }}'.replace('AGENT_PLACEHOLDER', selectedAgentForInput) : '#'"
65
- style="padding: 0.25rem 0.5rem; margin: 0.25rem; background: var(--pico-primary); color: white; text-decoration: none; border-radius: 4px; font-size: 0.875rem;">
66
- XLSX
67
- </a>
68
- </div>
69
- </div>
70
- <span id="download-feedback-loading-indicator" class="htmx-indicator">
71
- <progress indeterminate></progress> Preparing file...
72
- </span>
73
- </div>
74
-
75
- <div id="feedback-download-container-all" style="margin-top: 0.5rem;">
76
- <div style="display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;">
77
- <span style="padding: 0.25rem; text-decoration: underline;">Download feedback for all
78
- agents:</span>
79
- <div>
80
- <a href="{{ url_for('chat_feedback_download_all', format='csv') }}" id="downloadFeedbackLinkAll"
81
- style="padding: 0.25rem 0.5rem; margin: 0.25rem; background: var(--pico-primary); color: white; text-decoration: none; border-radius: 4px; font-size: 0.875rem;">
82
- CSV
83
- </a>
84
- <a href="{{ url_for('chat_feedback_download_all', format='xlsx') }}"
85
- id="downloadFeedbackLinkAllXlsx"
86
- style="padding: 0.25rem 0.5rem; margin: 0.25rem; background: var(--pico-primary); color: white; text-decoration: none; border-radius: 4px; font-size: 0.875rem;">
87
- XLSX
88
- </a>
89
- </div>
90
- </div>
91
- <span id="download-feedback-loading-indicator-all" class="htmx-indicator">
92
- <progress indeterminate></progress> Preparing file...
93
- </span>
94
- </div>
95
-
96
- <span id="run-loading-indicator" class="htmx-indicator">
97
- <progress indeterminate></progress> Running...
98
- </span>
99
- </form>
100
- {% elif flock and not flock.agents %}
101
- <p>No agents available in the current Flock. Add agents to enable execution.</p>
102
- {% else %}
103
- <p>Load or create a Flock to enable execution.</p>
104
- {% endif %}
105
-
106
- <div id="shareLinkDisplayArea" style="margin-top: 1rem;">
107
- <!-- Content will be loaded here by HTMX -->
108
- </div>
109
-
110
- </article>
111
-
112
- <script>
113
- document.addEventListener('DOMContentLoaded', function () {
114
- // All previous JavaScript for toggling share link visibility is removed.
115
- // If there are other unrelated JavaScript functions in this script block,
116
- // they would remain.
117
- });
118
- </script>
@@ -1,28 +0,0 @@
1
- <article class="two-pane-flex-container" x-data="{ showLeftPane: true }">
2
- <!-- Left pane - collapsed state -->
3
- <div class="left-pane-collapsed" x-show="!showLeftPane" style="display: none;">
4
- <a href="#" class="pane-toggle" @click.prevent="showLeftPane = true" aria-label="Expand left pane">Show</a>
5
- </div>
6
-
7
- <!-- Left pane - expanded state -->
8
- <section id="execution-left-pane" x-show="showLeftPane" style="flex: 1; min-width: 200px; max-width: 500px;">
9
- <div class="pane-header" style="display: flex; justify-content: flex-end; margin-bottom: 10px;">
10
- <a href="#" class="pane-toggle" @click.prevent="showLeftPane = false" aria-label="Hide left pane">Hide</a>
11
- </div>
12
- {# The Execution Form will be loaded here #} <div id="execution-form-wrapper" hx-get="{{ url_for('htmx_get_execution_form_content') }}"
13
- hx-trigger="load" hx-swap="innerHTML">
14
- <p>Loading execution form...</p><progress indeterminate></progress>
15
- </div>
16
- </section>
17
-
18
- <section id="execution-right-pane" class="right-pane-framed"
19
- :style="showLeftPane ? 'flex: 2; border-left: 1px solid var(--pico-muted-border-color); padding-left: 1.5rem;' : 'flex: 1; border-left: none; padding-left: 0;'">
20
- {# The Results Display area, always present when this container is loaded #}
21
- <header style=" border-bottom: 1px solid var(--pico-muted-border-color); margin-bottom: 1rem;">
22
- <h5>Execution Results</h5>
23
- </header>
24
- <div id="results-display">
25
- <p><code>Results will appear here after running the Flock.</code></p>
26
- </div>
27
- </section>
28
- </article>
@@ -1,23 +0,0 @@
1
- {% if flock_files %}
2
- <ul class="item-list">
3
- {% for file_name in flock_files %} <li hx-post="{{ url_for('ui_load_flock_by_name_action') }}"
4
- hx-vals='{"selected_flock_filename": "{{ file_name }}"}'
5
- {# After successful load, the main.py route for by-name will now return
6
- the flock properties form targeted to the main content area AND
7
- trigger flockLoaded event for the sidebar.
8
- For the right pane of *this* view, we might want to show file details.
9
- Let's assume for now loading a flock navigates to the editor.
10
- If we want to show details *here*, the target would be #flock-file-detail-or-upload
11
- #}
12
- hx-target="#main-content-area" {# This will load the editor page content #}
13
- hx-swap="innerHTML"
14
- hx-indicator="#flock-file-list-loading-indicator"
15
- hx-push-url="{{ url_for('page_editor_section', ui_mode='properties') }}"> {# Push URL to editor after load #}
16
- {{ file_name }}
17
- </li>
18
- {% endfor %}
19
- </ul>
20
- {% else %}
21
- <p style="padding: 1rem;">No Flock files found. Create one or upload.</p>
22
- {% endif %}
23
- <div id="flock-file-list-loading-indicator" class="htmx-indicator" style="text-align:center;"><progress indeterminate></progress></div>
@@ -1,52 +0,0 @@
1
- <article id="flock-properties-form-article">
2
- <header>
3
- <h2>Flock Properties </h2>
4
-
5
- </header>
6
-
7
- {% if update_message %}
8
- <div class="form-message {{ 'success' if success else 'error' }}" role="alert"
9
- x-data="{ show: true }" x-show="show" x-init="setTimeout(() => show = false, 3000)"
10
- x-transition:leave="transition ease-in duration-300"
11
- x-transition:leave-start="opacity-100"
12
- x-transition:leave-end="opacity-0">
13
- {{ update_message }}
14
- </div>
15
- {% endif %}
16
- {% if save_message %}
17
- <div class="form-message {{ 'success' if success else 'error' }}" role="alert"
18
- x-data="{ show: true }" x-show="show" x-init="setTimeout(() => show = false, 3000)"
19
- x-transition:leave="transition ease-in duration-300"
20
- x-transition:leave-start="opacity-100"
21
- x-transition:leave-end="opacity-0">
22
- {{ save_message }}
23
- </div>
24
- {% endif %}
25
-
26
- <form hx-post="{{ url_for('htmx_update_flock_properties') }}" hx-target="#flock-properties-form-article" hx-swap="innerHTML" hx-indicator="#flock-props-loading">
27
- <label for="flock_name">Flock Name</label>
28
- <input type="text" id="flock_name" name="flock_name" value="{{ flock.name if flock else '' }}" required>
29
-
30
- <label for="default_model">Default Model</label>
31
- <input type="text" id="default_model" name="default_model" value="{{ flock.model if flock and flock.model else '' }}" placeholder="e.g., openai/gpt-4o">
32
-
33
- <label for="description">Description</label>
34
- <textarea id="description" name="description" placeholder="A brief description of this Flock.">{{ flock.description if flock and flock.description else '' }}</textarea>
35
-
36
- <div class="grid">
37
- <button type="submit">Update Properties <span id="flock-props-loading" class="htmx-indicator"><progress indeterminate></progress></span></button>
38
- </div>
39
- </form>
40
- <hr>
41
- <form hx-post="{{ url_for('htmx_save_flock') }}" hx-target="#flock-properties-form-article" hx-swap="innerHTML" hx-indicator="#flock-save-loading">
42
- <label for="save_filename">Save Flock As:</label>
43
- <input type="text" id="save_filename" name="save_filename"
44
- value="{{ current_filename if current_filename else (flock.name.replace(' ', '_').lower() + '.flock.yaml' if flock and flock.name else 'my_flock.flock.yaml') }}"
45
- required
46
- placeholder="filename.flock.yaml">
47
- <small>Will save to <code>./.flock_ui_projects/</code>. Use <code>.flock.yaml</code>, <code>.yaml</code>, or <code>.yml</code>.</small>
48
- <div class="grid">
49
- <button type="submit">Save to File <span id="flock-save-loading" class="htmx-indicator"><progress indeterminate></progress></span></button>
50
- </div>
51
- </form>
52
- </article>
@@ -1,16 +0,0 @@
1
- <article>
2
- <header>
3
- <h5>Upload New Flock File</h5>
4
- </header> <form hx-post="{{ url_for('load_flock_by_upload') }}"
5
- hx-target="#main-content-area" {# After upload, go to editor #}
6
- hx-swap="innerHTML"
7
- hx-encoding="multipart/form-data"
8
- hx-indicator="#upload-loading-indicator-pane">
9
- <label for="flock_file_upload_pane">Upload <code>.flock.yaml</code>, <code>.yaml</code>, or <code>.yml</code> file:</label>
10
- <input type="file" id="flock_file_upload_pane" name="flock_file_upload" accept=".yaml,.yml,.flock" required>
11
- <button type="submit">Upload and Load Flock</button>
12
- <span id="upload-loading-indicator-pane" class="htmx-indicator"><progress indeterminate></progress> Uploading...</span>
13
- </form>
14
- {# Optionally, if a file from the list was clicked to show details before loading: #}
15
- {# {% if selected_file_details %} ... display details ... {% endif %} #}
16
- </article>
@@ -1,5 +0,0 @@
1
- {% if current_flock %}
2
- <small>Current: <code>{{ current_filename or current_flock.name }}</code></small>
3
- {% else %}
4
- <small>No Flock Loaded</small>
5
- {% endif %}
@@ -1,49 +0,0 @@
1
- <!-- <article id="dashboard-flock-manager-content"> -->
2
- <!-- {# This outer header is removed, title moves into the left-pane's new article structure #}
3
- {# <header>
4
- <h2>Manage & Load Flocks</h2> #}
5
- </header> -->
6
-
7
- {% if error_message %}
8
- <div class="error DANGER" role="alert" x-data="{ show: true }" x-show="show" x-init="setTimeout(() => show = false, 5000)">
9
- {{ error_message }} <button type="button" class="close" @click="show = false">×</button>
10
- </div>
11
- {% endif %}
12
- {% if success_message %}
13
- <div class="success SUCCESS" role="alert" x-data="{ show: true }" x-show="show" x-init="setTimeout(() => show = false, 5000)">
14
- {{ success_message }} <button type="button" class="close" @click="show = false">×</button>
15
- </div>
16
- {% endif %}
17
-
18
- <article class="two-pane-flex-container">
19
- <article class="left-pane"> {# Changed section to article, or wrap section in article #}
20
- <header class="grid">
21
- <h2>Load Flock</h2> {# Moved title here #}
22
- <div style="text-align: right;">
23
- <button role="button" class="outline" hx-get="{{ url_for('htmx_get_create_flock_form') }}?ui_mode={{ ui_mode }}" hx-target="#flock-properties-or-action-content" hx-swap="innerHTML">Add New Flock</button>
24
- </div>
25
- </header>
26
- {# Content of the left pane now goes into this article #}
27
- <div style="padding: var(--pico-block-spacing-vertical) var(--pico-block-spacing-horizontal); flex-grow: 1; display: flex; flex-direction: column;"> <div hx-get="{{ url_for('htmx_get_dashboard_flock_file_list_partial') }}"
28
- hx-trigger="load, flockFileListChanged from:body"
29
- hx-swap="innerHTML"
30
- id="dashboard-flock-file-list-target"
31
- class="item-list-container" style="flex-grow: 1; overflow-y: auto;border: 1px solid var(--pico-border-color); border-radius: var(--pico-border-radius);">
32
- <p style="padding:1rem; border: 1px solid var(--pico-border-color); border-radius: var(--pico-border-radius);">Loading files...</p><progress indeterminate></progress>
33
- </div>
34
- </div>
35
- </article>
36
-
37
- <section id="flock-detail-action-column" class="right-pane-framed">
38
- <header>
39
- <h5>Flock Details</h5>
40
- </header>
41
- <div id="flock-properties-or-action-content">
42
- <article style="text-align:center; margin-top: 2rem; border: none; background: transparent;">
43
- <p>Select a Flock from the list to view its details and load it into the editor.</p>
44
- <p><small>To create a new Flock or upload an existing one, use the options in the sidebar.</small></p>
45
- </article>
46
- </div>
47
- </section>
48
- </article>
49
- <!-- </article> -->
@@ -1,25 +0,0 @@
1
- <article style="margin-top:0; padding-top:0;"> {# Remove top margin/padding from article to align with buttons #}
2
- <header>
3
- <h4 style="margin-bottom: 0.5rem;">{{ item_type_display }}</h4>
4
- </header>
5
- {% if items %}
6
- <table>
7
- <thead>
8
- <tr>
9
- <th>Name</th>
10
- <th>Module Path</th>
11
- </tr>
12
- </thead>
13
- <tbody>
14
- {% for item in items %}
15
- <tr>
16
- <td>{{ item.name }}</td>
17
- <td>{{ item.module }}</td>
18
- </tr>
19
- {% endfor %}
20
- </tbody>
21
- </table>
22
- {% else %}
23
- <p>No {{ item_type_display.lower() }} found in the registry.</p>
24
- {% endif %}
25
- </article>
@@ -1,70 +0,0 @@
1
- <article>
2
- <header>
3
- <h2>Flock Registry Viewer</h2>
4
- <p>Browse items registered with the Flock framework.</p>
5
- </header>
6
-
7
- <nav>
8
- <ul role="group">
9
- <li>
10
- <button role="button" class="outline"
11
- hx-get="{{ url_for('htmx_get_registry_table', item_type='type') }}"
12
- hx-target="#registry-table-container" hx-indicator="#registry-loading"
13
- hx-on:click="setActiveButton(this)">
14
- View Types
15
- </button>
16
- </li>
17
- <li>
18
- <button role="button" class="outline"
19
- hx-get="{{ url_for('htmx_get_registry_table', item_type='tool') }}"
20
- hx-target="#registry-table-container" hx-indicator="#registry-loading"
21
- hx-on:click="setActiveButton(this)">
22
- View Tools/Callables
23
- </button>
24
- </li>
25
- <li>
26
- <button role="button" class="outline"
27
- hx-get="{{ url_for('htmx_get_registry_table', item_type='component') }}"
28
- hx-target="#registry-table-container" hx-indicator="#registry-loading"
29
- hx-on:click="setActiveButton(this)">
30
- View Components
31
- </button>
32
- </li>
33
- <li>
34
- <span style="padding: 0.25rem; text-decoration: underline;">Feedback-Files</span>
35
- <div>
36
- <a href="{{ url_for('chat_feedback_download_all', format='csv') }}" id="downloadFeedbackLinkAll"
37
- style="padding: 0.25rem 0.5rem; margin: 0.25rem; background: var(--pico-primary); color: white; text-decoration: none; border-radius: 4px; font-size: 0.875rem;">
38
- CSV
39
- </a>
40
- <a href="{{ url_for('chat_feedback_download_all', format='xlsx') }}"
41
- id="downloadFeedbackLinkAllXlsx"
42
- style="padding: 0.25rem 0.5rem; margin: 0.25rem; background: var(--pico-primary); color: white; text-decoration: none; border-radius: 4px; font-size: 0.875rem;">
43
- XLSX
44
- </a>
45
- </div>
46
- </li>
47
- </ul>
48
- </nav>
49
-
50
- <div id="registry-loading" class="htmx-indicator" style="text-align: center; margin-top: 1rem;">
51
- <progress></progress> Loading...
52
- </div>
53
-
54
- <div id="registry-table-container" style="margin-top: 1.5rem;">
55
- <p>Select a category above to view registered items.</p>
56
- </div>
57
- </article>
58
-
59
- <script>
60
- // Make sure this script is included or available globally
61
- function setActiveButton(clickedButton) {
62
- const buttons = clickedButton.closest('ul[role="group"]').querySelectorAll('button');
63
- buttons.forEach(button => {
64
- button.classList.remove('primary');
65
- button.classList.add('outline');
66
- });
67
- clickedButton.classList.remove('outline');
68
- clickedButton.classList.add('primary');
69
- }
70
- </script>
@@ -1,78 +0,0 @@
1
- {% from "partials/_structured_data_view.html" import render_value %}
2
-
3
- <article id="results-display-content" x-data="{ viewMode: 'structured' }">
4
- <header class="grid">
5
- <h5 style="margin-bottom: 0;">Execution Result</h5>
6
- <div style="text-align: right;">
7
- <button role="button" class="outline contrast" @click="viewMode = 'structured'" :aria-pressed="viewMode === 'structured'">Structured</button>
8
- <button role="button" class="outline contrast" @click="viewMode = 'json'" :aria-pressed="viewMode === 'json'">Raw JSON</button>
9
-
10
- <div style="display:inline-block;margin-left:0.5rem;">
11
- <!-- Quick thumbs-up feedback (inline form so we have the identifiers) -->
12
- <form hx-post="{{ feedback_endpoint }}" hx-target="#results-display-content" hx-swap="innerHTML" style="display:inline-block;vertical-align:middle;margin:0;" hx-indicator="#feedback-loading-indicator">
13
- {% if share_id %}<input type="hidden" name="share_id" value="{{ share_id }}">{% endif %}
14
- <input type="hidden" name="flock_name" value="{{ flock_name }}">
15
- <input type="hidden" name="agent_name" value="{{ agent_name }}">
16
- <input type="hidden" name="flock_definition" value='{{ flock_definition | replace("'", "&#39;") }}'>
17
- <input type="hidden" name="actual_response" value='{{ result_raw_json | replace("'", "&#39;") }}'>
18
- <input type="hidden" name="reason" value="positive">
19
- <button type="submit" role="button" class="outline contrast" title="Looks good!" style="padding:0.3rem 0.5rem;line-height:1;vertical-align:middle;margin:0;"><i class="fa fa-thumbs-up"></i></button>
20
- </form>
21
-
22
- <!-- Thumbs-down toggles detailed feedback form -->
23
- <button role="button" class="outline contrast" @click="viewMode = 'feedback'" :aria-pressed="viewMode === 'feedback'" title="Something's wrong" style="padding:0.3rem 0.5rem;line-height:1;vertical-align:middle;margin:0;"><i class="fa fa-thumbs-down"></i></button>
24
- </div>
25
- </div>
26
- </header>
27
-
28
- <div x-show="viewMode === 'json'">
29
- {# Check for the new result_raw_json variable first #}
30
- {% if result_raw_json is defined %}
31
- <pre><code class="language-json" style="word-break: break-all; white-space: pre-wrap;">{{ result_raw_json }}</code></pre>
32
- {# Fallback for old context or if result was an error string from backend before formatting #}
33
- {% elif result is string %}
34
- <pre><code class="language-plaintext" style="word-break: break-all; white-space: pre-wrap;">{{ result }}</code></pre>
35
- {% elif result %}
36
- {# Fallback if result_raw_json is somehow not provided but result (dict) is #}
37
- <pre><code class="language-json" style="word-break: break-all; white-space: pre-wrap;">{{ result | tojson(indent=2) }}</code></pre>
38
- {% else %}
39
- <p>No results to display yet.</p>
40
- {% endif %}
41
- </div>
42
-
43
- <div x-show="viewMode === 'structured'">
44
- {% if result is string %}
45
- <p class="error" style="white-space: pre-wrap;">{{ result }}</p>
46
- {% elif result is mapping %}
47
- {{ render_value(result) }}
48
- {% elif result %}
49
- <p>Structured view not available for this result type (not a dictionary).</p>
50
- <pre><code class="language-json" style="word-break: break-all; white-space: pre-wrap;">{{ result | tojson(indent=2) }}</code></pre>
51
- {% else %}
52
- <p>No results to display yet.</p>
53
- {% endif %}
54
- </div>
55
-
56
- <!-- ---------------- Feedback form ---------------- -->
57
- <div x-show="viewMode === 'feedback'" style="margin-top: 1rem;">
58
- <form hx-post="{{ feedback_endpoint }}" hx-target="#results-display-content" hx-swap="innerHTML" hx-indicator="#feedback-loading-indicator">
59
- {# Hidden identifiers #}
60
- {% if share_id %}
61
- <input type="hidden" name="share_id" value="{{ share_id }}">
62
- {% endif %}
63
- <input type="hidden" name="flock_name" value="{{ flock_name }}">
64
- <input type="hidden" name="agent_name" value="{{ agent_name }}">
65
- <input type="hidden" name="flock_definition" value='{{ flock_definition | replace("'", "&#39;") }}'>
66
- <input type="hidden" name="actual_response" value='{{ result_raw_json | replace("'", "&#39;") }}'>
67
-
68
- <label for="feedback_reason">Reason / Comment</label>
69
- <textarea id="feedback_reason" name="reason" placeholder="Why isn't the answer good?" required style="min-height:6rem;"></textarea>
70
-
71
- <label for="expected_response" style="margin-top:0.5rem;">Correct / Expected Response (JSON or text)</label>
72
- <textarea id="expected_response" name="expected_response" style="white-space: pre; font-family: monospace; min-height:10rem;">{{ result_raw_json }}</textarea>
73
-
74
- <button type="submit" class="secondary" style="margin-top:0.5rem;">Send Feedback</button>
75
- <span id="feedback-loading-indicator" class="htmx-indicator"><progress indeterminate></progress> Sending…</span>
76
- </form>
77
- </div>
78
- </article>
@@ -1,9 +0,0 @@
1
- <article>
2
- <h3>Environment Variables</h3>
3
- <div style="display:flex; gap:0.5rem; flex-wrap:wrap;"> <button class="outline small" id="toggle-secrets-btn" hx-post="{{ url_for('htmx_toggle_show_secrets') }}" hx-target="#env-vars-container" hx-swap="outerHTML">
4
- {% if show_secrets %}Hide Secrets{% else %}Show Secrets{% endif %}
5
- </button>
6
- <button class="outline small" hx-get="{{ url_for('htmx_env_add_form') }}" hx-target="#env-vars-container" hx-swap="afterbegin">Add Variable</button>
7
- </div>
8
- {% include 'partials/_env_vars_table.html' %}
9
- </article>
@@ -1,14 +0,0 @@
1
- <article>
2
- <h3>Theme Switcher</h3>
3
- <div style="display:flex; gap:0.5rem; flex-wrap:wrap; align-items:center;">
4
- <label for="theme-select" style="margin:0;">Select Theme:</label> <select id="theme-select" name="theme" hx-get="{{ url_for('htmx_theme_preview') }}" hx-target="#theme-preview" hx-trigger="load, change" hx-include="#theme-select" hx-swap="innerHTML">
5
- {% for t in themes %}
6
- <option value="{{ t }}" {% if t == current_theme %}selected{% endif %}>{{ t }}</option>
7
- {% endfor %}
8
- </select>
9
- <button class="small" hx-post="{{ url_for('apply_theme') }}" hx-target="body" hx-include="#theme-select" hx-swap="none">Apply</button>
10
- </div>
11
- <div id="theme-preview" style="margin-top:1rem;">
12
- <!-- Preview generated by theme-preview endpoint -->
13
- </div>
14
- </article>