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,167 +0,0 @@
1
- /* ========================================================================
2
- components.css — Reusable component / utility styles
3
- ======================================================================== */
4
-
5
- /* ---------- Message container (toast notifications) ---------- */
6
- .message-container {
7
- position: fixed;
8
- bottom: 3rem;
9
- right: 1rem;
10
- z-index: 1002;
11
- max-width: 400px;
12
- }
13
-
14
- .message-container > div {
15
- margin-top: 0.5rem;
16
- box-shadow: var(--pico-card-box-shadow);
17
- display: flex;
18
- justify-content: space-between;
19
- align-items: center;
20
- padding: 0.75rem;
21
- border-radius: var(--pico-border-radius);
22
- font-weight: 500;
23
- }
24
-
25
- .message-container .success {
26
- background-color: var(--flock-success-color, var(--pico-ins-color));
27
- color: var(--pico-primary-inverse);
28
- border: 1px solid var(--flock-success-color, var(--pico-ins-color));
29
- }
30
-
31
- .message-container .error {
32
- background-color: var(--flock-error-color, var(--pico-del-color));
33
- color: var(--pico-primary-inverse);
34
- border: 1px solid var(--flock-error-color, var(--pico-del-color));
35
- }
36
-
37
- .message-container .close {
38
- background: none;
39
- border: none;
40
- color: inherit;
41
- font-size: 1.2rem;
42
- cursor: pointer;
43
- padding: 0 0.5rem;
44
- margin-left: 1rem;
45
- }
46
-
47
- /* ---------- HTMX loading indicator ---------- */
48
- .htmx-indicator { display: none; opacity: 0; transition: opacity 0.3s ease-in-out; }
49
- .htmx-request .htmx-indicator { display: inline-block; opacity: 1; margin-left: 0.5em; }
50
- .htmx-request.htmx-indicator { display: inline-block; opacity: 1; }
51
-
52
- /* ---------- Form & validation helpers ---------- */
53
- .field-error { color: var(--flock-error-color, var(--pico-del-color)); font-size: var(--pico-font-size-small); margin-top: -0.5rem; margin-bottom: 0.5rem; }
54
-
55
- /* ---------- Main content headings ---------- */
56
- main.main-content h1, main.main-content h2, main.main-content h3 {
57
- color: var(--pico-color);
58
- font-weight: 600;
59
- line-height: 1.2;
60
- margin-top: 0;
61
- }
62
- main.main-content h1 { font-size: 2rem; margin-bottom: 1.5rem; }
63
- main.main-content h2 { font-size: 1.75rem; margin-bottom: 1.25rem; }
64
- main.main-content h3 { font-size: 1.5rem; margin-bottom: 1rem; }
65
-
66
- .panel-title { margin-top: 0; margin-bottom: 1.25rem; }
67
-
68
- /* ---------- Two-pane flex container (Execution, Agents, etc.) ---------- */
69
- .two-pane-flex-container {
70
- display: flex;
71
- gap: 1.5rem;
72
- border: 1px solid var(--pico-muted-border-color);
73
- background-color: var(--pico-card-background-color);
74
- }
75
-
76
- .left-pane { flex: 1; min-width: 300px; display: flex; flex-direction: column; }
77
- .left-pane > .scrollable-content { flex-grow: 1; }
78
-
79
- .right-pane-framed { flex: 2; border-left: 1px solid var(--pico-muted-border-color); padding-left: 1.5rem; }
80
- .right-pane-framed > header { padding-bottom: 0.75rem; border-bottom: 1px solid var(--pico-muted-border-color); margin-bottom: 1rem; }
81
- .right-pane-framed > header > h5 { margin-bottom: 0; font-size: 1.1rem; }
82
-
83
- /* ---------- Item-list utility ---------- */
84
- .item-list-container { flex-grow: 1; }
85
- ul.item-list {
86
- list-style: none;
87
- padding: 0;
88
- margin: 0;
89
- }
90
-
91
- /* Guard against ::marker still appearing in some browsers */
92
- ul.item-list li::marker { content: none; }
93
-
94
- ul.item-list li { padding: 0.75rem 1rem; border-bottom: 1px solid var(--pico-muted-border-color); cursor: pointer; transition: background-color 0.15s ease-in-out, color 0.15s ease-in-out; }
95
- ul.item-list li:last-child { border-bottom: none; }
96
- ul.item-list li:hover, ul.item-list li.selected-item { background-color: var(--pico-primary-focus); color: var(--pico-primary-inverse); }
97
-
98
- /* ---------- Misc ---------- */
99
- progress { border-radius: 10px; height: 8px; }
100
- progress:indeterminate { background: rgba(var(--pico-primary-rgb, 0, 0, 0), 0.2); }
101
-
102
- /* ---------- Tool checklist (Agent form) ---------- */
103
- .tool-checklist {
104
- max-height: 150px;
105
- overflow-y: auto;
106
- border: 1px solid var(--pico-muted-border-color);
107
- padding: 0.5rem;
108
- margin-bottom: 0.75rem;
109
- border-radius: var(--pico-border-radius);
110
- background-color: var(--pico-form-element-background-color);
111
- }
112
-
113
- .tool-checklist label { display: block; margin-bottom: 0.25rem; font-weight: normal; }
114
- .tool-checklist input[type="checkbox"] { margin-right: 0.5rem; }
115
- .tool-checklist label small { color: var(--pico-muted-color); }
116
-
117
- /* ---------- Execution / Results display ---------- */
118
- #results-display {
119
- background-color: var(--pico-code-background-color);
120
- color: var(--pico-code-color);
121
- padding: 1rem;
122
- border-radius: var(--pico-border-radius);
123
- overflow-x: auto;
124
- margin-top: 1rem;
125
- min-height: 100px;
126
- border: 1px solid var(--pico-muted-border-color);
127
- }
128
-
129
- #results-display pre { margin: 0; white-space: pre-wrap; word-break: break-all; }
130
-
131
- #results-display .structured-table {
132
- border: 1px solid var(--pico-muted-border-color);
133
- font-size: 0.9em;
134
- width: 100%;
135
- margin-bottom: 0.75rem !important;
136
- border-collapse: collapse;
137
- }
138
- #results-display .structured-table td,
139
- #results-display .structured-table th {
140
- padding: 0.4em 0.6em !important;
141
- vertical-align: top;
142
- border-bottom: 1px solid var(--pico-muted-border-color);
143
- }
144
- #results-display .structured-table tr:last-child td { border-bottom: none; }
145
- #results-display .structured-table td[style*="font-weight: bold"] {
146
- color: var(--pico-secondary);
147
- min-width: 120px;
148
- max-width: 250px;
149
- word-break: break-word;
150
- border-right: 1px solid var(--pico-muted-border-color);
151
- }
152
- #results-display .structured-table ul { margin-left: 1em; padding-left: 1em; }
153
-
154
- /* ---------- Registry viewer tweaks ---------- */
155
- nav ul[role="group"] { margin-bottom: 1rem; }
156
- nav ul[role="group"] li button { width: 100%; }
157
- #registry-table-container table { margin-top: 1rem; }
158
-
159
- /* ---------- Progress elements ---------- */
160
- .sidebar progress { width: 80%; margin: 1rem auto; display: block; }
161
- progress { border-radius: 10px; height: 8px; }
162
- progress:indeterminate { background: rgba(var(--pico-primary-rgb, 0, 0, 0), 0.2); }
163
-
164
-
165
-
166
-
167
-
@@ -1,39 +0,0 @@
1
- /* ========================================================================
2
- header.css — Top header bar styles
3
- ======================================================================== */
4
-
5
- header.top-header {
6
- grid-area: header;
7
- border-bottom: 1px solid var(--pico-muted-border-color);
8
- padding: 0.7rem 1.5rem;
9
- background-color: var(--pico-card-sectioning-background-color);
10
- display: flex;
11
- justify-content: space-between;
12
- align-items: center;
13
- position: fixed;
14
- top: 0;
15
- left: 0;
16
- right: 0;
17
- z-index: 1001;
18
- box-shadow: var(--pico-card-box-shadow, 0 2px 10px rgba(0, 0, 0, 0.2));
19
- }
20
-
21
- header.top-header strong {
22
- color: var(--pico-color);
23
- font-weight: 600;
24
- font-size: 1.2rem;
25
- letter-spacing: 0.02em;
26
- }
27
-
28
- header.top-header small {
29
- color: var(--pico-muted-color);
30
- font-size: 0.85rem;
31
- }
32
-
33
- header.top-header code {
34
- background: var(--pico-code-background-color);
35
- color: var(--pico-code-color);
36
- padding: 0.2em 0.5em;
37
- border-radius: 4px;
38
- font-size: 0.85rem;
39
- }
@@ -1,46 +0,0 @@
1
- /* ========================================================================
2
- layout.css — Global layout & structure styles for Flock web UI
3
- (extracted from legacy custom.css)
4
- ======================================================================== */
5
-
6
- /* ---------- Global grid layout ---------- */
7
- body {
8
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
9
- display: grid;
10
- /* Sidebar column (300px) + main flexible column */
11
- grid-template-columns: 300px 1fr;
12
- /* Header (auto height) + main (flex) + footer (auto) rows */
13
- grid-template-rows: auto 1fr auto;
14
- grid-template-areas:
15
- "header header"
16
- "sidebar main"
17
- "footer footer";
18
- min-height: 100vh;
19
- margin: 0;
20
- background-color: var(--pico-background-color);
21
- }
22
-
23
- /* ---------- Main content area ---------- */
24
- main.main-content {
25
- grid-area: main;
26
- padding: 1.5rem;
27
- overflow-y: auto;
28
- /* account for fixed header height so content starts below */
29
- margin-top: 3.5rem;
30
- background-color: var(--pico-background-color);
31
- /* ensure footer does not overlap scrolling content */
32
- padding-bottom: 50px;
33
- }
34
-
35
- /* ---------- Footer ---------- */
36
- footer.main-footer {
37
- position: fixed;
38
- left: 0;
39
- bottom: 0;
40
- width: 100%;
41
- background-color: var(--pico-card-background-color);
42
- border-top: 1px solid var(--pico-muted-border-color);
43
- padding: 0.5rem 1rem;
44
- text-align: center;
45
- z-index: 1000;
46
- }
@@ -1,127 +0,0 @@
1
- /* ========================================================================
2
- sidebar.css — Left navigation sidebar styles
3
- ======================================================================== */
4
-
5
- aside.sidebar {
6
- grid-area: sidebar;
7
- background: var(--flock-sidebar-background, var(--pico-card-background-color));
8
- padding: 1.5rem 0;
9
- border-right: 1px solid var(--pico-muted-border-color);
10
- margin-top: 3.2rem; /* header height compensation */
11
- height: calc(100vh - 3.5rem - 2.1rem); /* header + footer */
12
- position: fixed;
13
- left: 0;
14
- bottom: 2.1rem; /* footer height */
15
- width: 300px;
16
- z-index: 1000;
17
- }
18
-
19
- .sidebar nav h5 {
20
- margin-bottom: 0.9rem;
21
- padding-left: 1.5rem;
22
- color: var(--pico-color);
23
- font-size: 0.85em;
24
- text-transform: uppercase;
25
- letter-spacing: 0.08em;
26
- font-weight: 600;
27
- }
28
-
29
- .sidebar nav h5:first-of-type {
30
- margin-top: 0;
31
- margin-bottom: 0.9rem;
32
- }
33
-
34
- .sidebar nav ul {
35
- padding-left: 0.5rem;
36
- padding-right: 0.5rem;
37
- list-style: none;
38
- margin-bottom: 1.5rem;
39
- }
40
-
41
- .sidebar nav li {
42
- margin-bottom: 0.2rem;
43
- }
44
-
45
- .sidebar hr {
46
- margin: 1.25rem 1.5rem;
47
- border-color: var(--pico-muted-border-color);
48
- opacity: 0.5;
49
- }
50
-
51
- /* Links & buttons */
52
- .sidebar nav a,
53
- .sidebar nav button {
54
- display: block;
55
- width: 100%;
56
- text-align: left;
57
- margin-bottom: 0;
58
- padding: 0.7rem 1rem;
59
- border: none;
60
- background-color: transparent;
61
- color: var(--pico-button-base-color);
62
- text-decoration: none;
63
- border-radius: 8px;
64
- font-size: 0.9em;
65
- cursor: pointer;
66
- transition: all 0.2s ease-in-out;
67
- font-weight: 500;
68
- white-space: nowrap;
69
- overflow: hidden;
70
- text-overflow: ellipsis;
71
- }
72
-
73
- .sidebar nav a i,
74
- .sidebar nav button i {
75
- width: 24px;
76
- margin-right: 8px;
77
- text-align: center;
78
- color: var(--pico-h2-color);
79
- transition: all 0.2s ease-in-out;
80
- flex-shrink: 0;
81
- }
82
-
83
- .sidebar nav a:hover i,
84
- .sidebar nav button:hover i,
85
- .sidebar nav a.active-nav i,
86
- .sidebar nav button.active-nav i {
87
- color: var(--pico-primary-inverse);
88
- transform: scale(1.1);
89
- }
90
-
91
- /* Button variations / states */
92
- .sidebar nav button.outline,
93
- .sidebar nav button.contrast {
94
- border: none;
95
- background-color: transparent;
96
- color: var(--pico-muted-color);
97
- box-shadow: none;
98
- }
99
-
100
- .sidebar nav button:focus {
101
- box-shadow: 0 0 0 3px var(--pico-primary-focus);
102
- }
103
-
104
- .sidebar nav a:hover,
105
- .sidebar nav button:hover {
106
- background-color: var(--pico-primary-hover-background, var(--pico-primary-focus));
107
- color: var(--pico-primary-inverse);
108
- transform: translateX(3px);
109
- }
110
-
111
- /* Active navigation */
112
- .sidebar nav a[aria-current="page"],
113
- .sidebar nav button[aria-current="page"],
114
- .sidebar nav a.active-nav,
115
- .sidebar nav button.active-nav {
116
- background-color: var(--pico-primary);
117
- color: var(--pico-primary-inverse);
118
- font-weight: 600;
119
- box-shadow: var(--pico-card-box-shadow);
120
- }
121
-
122
- /* Progress bar inside sidebar (used as loading indicator) */
123
- .sidebar progress {
124
- width: 80%;
125
- margin: 1rem auto;
126
- display: block;
127
- }
@@ -1,48 +0,0 @@
1
- /* ========================================================================
2
- two-pane.css — Styles for the two-pane layout used in execution view
3
- ======================================================================== */
4
-
5
- /* Two pane container */
6
- .two-pane-flex-container {
7
- display: flex;
8
- width: 100%;
9
- }
10
-
11
- /* Collapsed left pane */
12
- .left-pane-collapsed {
13
- width: 40px;
14
- display: flex;
15
- align-items: center;
16
- justify-content: center;
17
- background-color: var(--pico-muted-border-color);
18
- border-radius: 0 4px 4px 0;
19
- writing-mode: vertical-lr;
20
- transform: rotate(180deg);
21
- margin-right: 10px;
22
- transition: background-color 0.2s;
23
- }
24
-
25
- .left-pane-collapsed:hover {
26
- background-color: var(--pico-primary-hover);
27
- }
28
-
29
- /* Toggle links styling */
30
- .pane-toggle {
31
- text-decoration: none;
32
- color: var(--pico-primary);
33
- font-size: 0.875rem;
34
- font-weight: 500;
35
- padding: 5px 10px;
36
- border-radius: 4px;
37
- transition: all 0.2s;
38
- }
39
-
40
- .pane-toggle:hover {
41
- background-color: var(--pico-primary-hover);
42
- color: var(--pico-primary-inverse);
43
- }
44
-
45
- /* Ensure right pane takes full width when left is collapsed */
46
- #execution-right-pane {
47
- transition: flex 0.3s, padding-left 0.3s;
48
- }
@@ -1,200 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en" data-theme="dark">
3
-
4
- <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>{% block title %}Flock UI{% endblock %}</title>
8
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css" />
9
- <!-- Split modular CSS files -->
10
- <link rel="stylesheet"
11
- href="{{ url_for('static', path='css/layout.css') }}">
12
- <link rel="stylesheet"
13
- href="{{ url_for('static', path='css/header.css') }}">
14
- <link rel="stylesheet" href="{{ url_for('static', path='css/sidebar.css') }}">
15
- <link rel="stylesheet" href="{{ url_for('static', path='css/components.css') }}">
16
- <link rel="stylesheet" href="{{ url_for('static', path='css/chat.css') }}">
17
- <link rel="stylesheet" href="{{ url_for('static', path='css/two-pane.css') }}">
18
- <!-- Font Awesome for icons -->
19
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
20
- <!-- Prism.js CSS for syntax highlighting (okaidia theme) -->
21
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-okaidia.min.css" referrerpolicy="no-referrer" />
22
- {# Inject Theme CSS Variables #}
23
- {% if theme_css and theme_css.strip() %}
24
- <style>
25
- /* Start Theme CSS */
26
- {{ theme_css | safe }}
27
- /* End Theme CSS */
28
- </style>
29
- {% endif %}
30
- {# End Theme CSS Injection #}
31
- <script src="https://unpkg.com/htmx.org@1.9.10"
32
- integrity="sha384-D1Kt99CQMDuVetoL1lrYwg5t+9QdHe7NLX/SoJYkXDFfX37iInKRy5xLSi8nO7UC"
33
- crossorigin="anonymous"></script>
34
- <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
35
- <!-- Prism.js JS (core and autoloader) -->
36
- <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-core.min.js" referrerpolicy="no-referrer"></script>
37
- <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/autoloader/prism-autoloader.min.js" referrerpolicy="no-referrer"></script>
38
- <!-- Removed inline styles as they're in custom.css -->
39
- </head>
40
-
41
- <body>
42
- <div id="global-toast-container" style="position: fixed; top: 1rem; right: 1rem; z-index: 9999; display: flex; flex-direction: column; gap: 0.5rem;">
43
- <!-- Toasts will be appended here -->
44
- </div>
45
-
46
- <header class="top-header">
47
- <span><strong>🐧 Flock Playground 🐤</strong></span> <span id="header-flock-status-container" hx-get="{{ url_for('htmx_get_header_flock_status') }}?ui_mode={{ ui_mode }}"
48
- hx-trigger="load, flockLoaded from:body, flockCleared from:body" hx-swap="innerHTML">
49
- <small>Loading status...</small> {# Placeholder while loading #}
50
- </span>
51
- </header> <aside class="sidebar" hx-get="{{ url_for('htmx_get_sidebar') }}?ui_mode={{ ui_mode }}"
52
- hx-trigger="load, flockLoaded from:body, flockListChanged from:body" hx-swap="innerHTML">
53
- <p>Loading navigation...</p><progress></progress>
54
- </aside>
55
-
56
- <main class="main-content" id="main-content-area">
57
- {# Initial content is now loaded via HTMX based on the route #}
58
- <div hx-get="{{ initial_content_url }}" hx-trigger="load" hx-swap="innerHTML">
59
- <p>Loading content...</p><progress></progress>
60
- </div>
61
- {# Render block content if navigating directly and template extends base #}
62
- {% block content %}{% endblock %}
63
- </main>
64
-
65
- <div class="message-container" x-data="messageHandler(
66
- {{ success_message | tojson | safe if success_message else 'null' }},
67
- {{ error_message | tojson | safe if error_message else 'null' }}
68
- )">
69
- <template x-if="showSuccess && successMsg">
70
- <div class="success" role="alert" @click="showSuccess = false" style="cursor: pointer;">
71
- <span x-text="successMsg"></span>
72
- <button type="button" class="close" aria-label="Dismiss">×</button>
73
- </div>
74
- </template>
75
- <template x-if="showError && errorMsg">
76
- <div class="error" role="alert" @click="showError = false" style="cursor: pointer;">
77
- <span x-text="errorMsg"></span>
78
- <button type="button" class="close" aria-label="Dismiss">×</button>
79
- </div>
80
- </template>
81
- </div>
82
-
83
- <footer class="main-footer">
84
- <small>Built with FastAPI, HTMX, Pico.CSS by 🤍 white duck 🦆 - Theme: {{ active_theme_name | default('default') }}</small>
85
- </footer>
86
-
87
- <script>
88
- function messageHandler(initialSuccessMsg, initialErrorMsg) {
89
- return {
90
- showSuccess: !!initialSuccessMsg,
91
- showError: !!initialErrorMsg,
92
- successMsg: initialSuccessMsg,
93
- errorMsg: initialErrorMsg,
94
- init() {
95
- if (this.successMsg) { setTimeout(() => this.showSuccess = false, 5000); }
96
- if (this.errorMsg) { setTimeout(() => this.showError = false, 7000); }
97
-
98
- window.addEventListener('notify', event => {
99
- if (event.detail.type === 'success') {
100
- this.successMsg = event.detail.message;
101
- this.showSuccess = true; this.showError = false;
102
- setTimeout(() => this.showSuccess = false, 5000);
103
- }
104
- if (event.detail.type === 'error') {
105
- this.errorMsg = event.detail.message;
106
- this.showError = true; this.showSuccess = false;
107
- setTimeout(() => this.showError = false, 7000);
108
- }
109
- });
110
- }
111
- };
112
- }
113
- function triggerEvent(eventName, detail = {}) {
114
- htmx.trigger(document.body, eventName, detail);
115
- }
116
-
117
- // Add HTMX event listener for Prism highlighting
118
- document.addEventListener('htmx:afterSwap', function(event) {
119
- // Check if the swapped element or its parent is the main content area or results display
120
- const mainContentArea = document.getElementById('main-content-area');
121
- const resultsDisplay = document.getElementById('results-display-content');
122
- let targetElement = event.detail.target;
123
-
124
- if (targetElement === mainContentArea || (resultsDisplay && resultsDisplay.contains(targetElement)) || (mainContentArea && mainContentArea.contains(targetElement))) {
125
- if (typeof Prism !== 'undefined') {
126
- // console.log('Prism highlighting triggered for swapped content in main area.');
127
- Prism.highlightAllUnder(mainContentArea || document.documentElement);
128
- }
129
- }
130
- });
131
-
132
- // Initial highlight on page load
133
- document.addEventListener('DOMContentLoaded', () => {
134
- if (typeof Prism !== 'undefined') {
135
- // console.log('Prism initial highlighting.');
136
- Prism.highlightAll();
137
- }
138
- });
139
- </script>
140
- {# Global Toast Handler - identical to the one in chat.html #}
141
- <script>
142
- document.body.addEventListener('showGlobalToast', function (event) {
143
- const detail = event.detail;
144
- const message = detail.message || 'Done!';
145
- const type = detail.type || 'info'; // success, error, warning, info
146
-
147
- const toastContainer = document.getElementById('global-toast-container');
148
- if (!toastContainer) return;
149
-
150
- const toast = document.createElement('article');
151
- toast.className = `toast-message ${type}`;
152
- toast.innerHTML = `<button class="close-toast" style="float: right; background: none; border: none; font-size: 1.2rem; line-height: 1; padding: 0.25rem 0.5rem; cursor: pointer;">&times;</button>${message}`;
153
-
154
- toast.style.padding = '0.75rem';
155
- toast.style.border = '1px solid';
156
- toast.style.borderRadius = 'var(--pico-border-radius, 4px)';
157
- toast.style.minWidth = '250px';
158
- toast.style.maxWidth = '400px';
159
- toast.style.opacity = '0';
160
- toast.style.transition = 'opacity 0.3s ease-in-out, transform 0.3s ease-in-out';
161
- toast.style.transform = 'translateX(100%)';
162
-
163
- if (type === 'success') {
164
- toast.style.borderColor = 'var(--pico-color-green-500, green)';
165
- toast.style.backgroundColor = 'var(--pico-color-green-150, #e6fffa)';
166
- toast.style.color = 'var(--pico-color-green-700, darkgreen)';
167
- } else if (type === 'error') {
168
- toast.style.borderColor = 'var(--pico-color-red-500, red)';
169
- toast.style.backgroundColor = 'var(--pico-color-red-150, #ffe6e6)';
170
- toast.style.color = 'var(--pico-color-red-700, darkred)';
171
- } else { // Default/info/warning
172
- toast.style.borderColor = 'var(--pico-color-blue-500, blue)';
173
- toast.style.backgroundColor = 'var(--pico-color-blue-150, #e6f7ff)';
174
- toast.style.color = 'var(--pico-color-blue-700, darkblue)';
175
- }
176
-
177
- toastContainer.appendChild(toast);
178
-
179
- setTimeout(() => {
180
- toast.style.opacity = '1';
181
- toast.style.transform = 'translateX(0)';
182
- }, 10);
183
-
184
- const closeButton = toast.querySelector('.close-toast');
185
- closeButton.onclick = () => {
186
- toast.style.opacity = '0';
187
- toast.style.transform = 'translateY(-20px)';
188
- setTimeout(() => toast.remove(), 300);
189
- };
190
-
191
- setTimeout(() => {
192
- toast.style.opacity = '0';
193
- toast.style.transform = 'translateY(-20px)';
194
- setTimeout(() => toast.remove(), 300);
195
- }, 5000);
196
- });
197
- </script>
198
- </body>
199
-
200
- </html>