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

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

Potentially problematic release.


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

Files changed (501) hide show
  1. flock/__init__.py +12 -217
  2. flock/agent.py +1079 -0
  3. flock/api/themes.py +71 -0
  4. flock/artifacts.py +86 -0
  5. flock/cli.py +147 -0
  6. flock/components.py +189 -0
  7. flock/dashboard/__init__.py +30 -0
  8. flock/dashboard/collector.py +559 -0
  9. flock/dashboard/events.py +188 -0
  10. flock/dashboard/graph_builder.py +563 -0
  11. flock/dashboard/launcher.py +235 -0
  12. flock/dashboard/models/graph.py +156 -0
  13. flock/dashboard/service.py +991 -0
  14. flock/dashboard/static_v2/assets/index-DFRnI_mt.js +111 -0
  15. flock/dashboard/static_v2/assets/index-fPLNdmp1.css +1 -0
  16. flock/dashboard/static_v2/index.html +13 -0
  17. flock/dashboard/websocket.py +246 -0
  18. flock/engines/__init__.py +6 -0
  19. flock/engines/dspy_engine.py +932 -0
  20. flock/examples.py +131 -0
  21. flock/frontend/README.md +778 -0
  22. flock/frontend/docs/DESIGN_SYSTEM.md +1980 -0
  23. flock/frontend/index.html +12 -0
  24. flock/frontend/package-lock.json +4337 -0
  25. flock/frontend/package.json +48 -0
  26. flock/frontend/src/App.tsx +139 -0
  27. flock/frontend/src/__tests__/integration/graph-snapshot.test.tsx +647 -0
  28. flock/frontend/src/__tests__/integration/indexeddb-persistence.test.tsx +699 -0
  29. flock/frontend/src/components/common/BuildInfo.tsx +39 -0
  30. flock/frontend/src/components/common/EmptyState.module.css +115 -0
  31. flock/frontend/src/components/common/EmptyState.tsx +128 -0
  32. flock/frontend/src/components/common/ErrorBoundary.module.css +169 -0
  33. flock/frontend/src/components/common/ErrorBoundary.tsx +118 -0
  34. flock/frontend/src/components/common/KeyboardShortcutsDialog.css +251 -0
  35. flock/frontend/src/components/common/KeyboardShortcutsDialog.tsx +151 -0
  36. flock/frontend/src/components/common/LoadingSpinner.module.css +97 -0
  37. flock/frontend/src/components/common/LoadingSpinner.tsx +29 -0
  38. flock/frontend/src/components/controls/PublishControl.css +547 -0
  39. flock/frontend/src/components/controls/PublishControl.test.tsx +543 -0
  40. flock/frontend/src/components/controls/PublishControl.tsx +432 -0
  41. flock/frontend/src/components/details/DetailWindowContainer.tsx +58 -0
  42. flock/frontend/src/components/details/LiveOutputTab.test.tsx +792 -0
  43. flock/frontend/src/components/details/LiveOutputTab.tsx +220 -0
  44. flock/frontend/src/components/details/MessageDetailWindow.tsx +439 -0
  45. flock/frontend/src/components/details/MessageHistoryTab.tsx +374 -0
  46. flock/frontend/src/components/details/NodeDetailWindow.test.tsx +501 -0
  47. flock/frontend/src/components/details/NodeDetailWindow.tsx +218 -0
  48. flock/frontend/src/components/details/RunStatusTab.tsx +348 -0
  49. flock/frontend/src/components/details/tabs.test.tsx +1015 -0
  50. flock/frontend/src/components/filters/ArtifactTypeFilter.tsx +21 -0
  51. flock/frontend/src/components/filters/CorrelationIDFilter.module.css +102 -0
  52. flock/frontend/src/components/filters/CorrelationIDFilter.test.tsx +197 -0
  53. flock/frontend/src/components/filters/CorrelationIDFilter.tsx +121 -0
  54. flock/frontend/src/components/filters/FilterFlyout.module.css +104 -0
  55. flock/frontend/src/components/filters/FilterFlyout.tsx +80 -0
  56. flock/frontend/src/components/filters/FilterPills.module.css +220 -0
  57. flock/frontend/src/components/filters/FilterPills.test.tsx +189 -0
  58. flock/frontend/src/components/filters/FilterPills.tsx +143 -0
  59. flock/frontend/src/components/filters/ProducerFilter.tsx +21 -0
  60. flock/frontend/src/components/filters/SavedFiltersControl.module.css +60 -0
  61. flock/frontend/src/components/filters/SavedFiltersControl.test.tsx +158 -0
  62. flock/frontend/src/components/filters/SavedFiltersControl.tsx +159 -0
  63. flock/frontend/src/components/filters/TagFilter.tsx +21 -0
  64. flock/frontend/src/components/filters/TimeRangeFilter.module.css +115 -0
  65. flock/frontend/src/components/filters/TimeRangeFilter.test.tsx +154 -0
  66. flock/frontend/src/components/filters/TimeRangeFilter.tsx +110 -0
  67. flock/frontend/src/components/filters/VisibilityFilter.tsx +21 -0
  68. flock/frontend/src/components/graph/AgentNode.test.tsx +77 -0
  69. flock/frontend/src/components/graph/AgentNode.tsx +324 -0
  70. flock/frontend/src/components/graph/GraphCanvas.tsx +613 -0
  71. flock/frontend/src/components/graph/MessageFlowEdge.tsx +128 -0
  72. flock/frontend/src/components/graph/MessageNode.test.tsx +64 -0
  73. flock/frontend/src/components/graph/MessageNode.tsx +129 -0
  74. flock/frontend/src/components/graph/MiniMap.tsx +47 -0
  75. flock/frontend/src/components/graph/TransformEdge.tsx +123 -0
  76. flock/frontend/src/components/layout/DashboardLayout.css +420 -0
  77. flock/frontend/src/components/layout/DashboardLayout.tsx +287 -0
  78. flock/frontend/src/components/layout/Header.module.css +88 -0
  79. flock/frontend/src/components/layout/Header.tsx +52 -0
  80. flock/frontend/src/components/modules/HistoricalArtifactsModule.module.css +288 -0
  81. flock/frontend/src/components/modules/HistoricalArtifactsModule.tsx +450 -0
  82. flock/frontend/src/components/modules/HistoricalArtifactsModuleWrapper.tsx +13 -0
  83. flock/frontend/src/components/modules/JsonAttributeRenderer.tsx +140 -0
  84. flock/frontend/src/components/modules/ModuleRegistry.test.ts +333 -0
  85. flock/frontend/src/components/modules/ModuleRegistry.ts +93 -0
  86. flock/frontend/src/components/modules/ModuleWindow.tsx +223 -0
  87. flock/frontend/src/components/modules/TraceModuleJaeger.tsx +1971 -0
  88. flock/frontend/src/components/modules/TraceModuleJaegerWrapper.tsx +13 -0
  89. flock/frontend/src/components/modules/registerModules.ts +29 -0
  90. flock/frontend/src/components/settings/AdvancedSettings.tsx +175 -0
  91. flock/frontend/src/components/settings/AppearanceSettings.tsx +185 -0
  92. flock/frontend/src/components/settings/GraphSettings.tsx +110 -0
  93. flock/frontend/src/components/settings/MultiSelect.tsx +235 -0
  94. flock/frontend/src/components/settings/SettingsPanel.css +327 -0
  95. flock/frontend/src/components/settings/SettingsPanel.tsx +131 -0
  96. flock/frontend/src/components/settings/ThemeSelector.tsx +298 -0
  97. flock/frontend/src/components/settings/TracingSettings.tsx +404 -0
  98. flock/frontend/src/hooks/useKeyboardShortcuts.ts +148 -0
  99. flock/frontend/src/hooks/useModulePersistence.test.ts +442 -0
  100. flock/frontend/src/hooks/useModulePersistence.ts +154 -0
  101. flock/frontend/src/hooks/useModules.ts +157 -0
  102. flock/frontend/src/hooks/usePersistence.ts +141 -0
  103. flock/frontend/src/main.tsx +13 -0
  104. flock/frontend/src/services/api.ts +337 -0
  105. flock/frontend/src/services/graphService.test.ts +330 -0
  106. flock/frontend/src/services/graphService.ts +75 -0
  107. flock/frontend/src/services/indexeddb.test.ts +793 -0
  108. flock/frontend/src/services/indexeddb.ts +848 -0
  109. flock/frontend/src/services/layout.test.ts +437 -0
  110. flock/frontend/src/services/layout.ts +357 -0
  111. flock/frontend/src/services/themeApplicator.ts +140 -0
  112. flock/frontend/src/services/themeService.ts +77 -0
  113. flock/frontend/src/services/websocket.ts +650 -0
  114. flock/frontend/src/store/filterStore.test.ts +250 -0
  115. flock/frontend/src/store/filterStore.ts +272 -0
  116. flock/frontend/src/store/graphStore.test.ts +570 -0
  117. flock/frontend/src/store/graphStore.ts +462 -0
  118. flock/frontend/src/store/moduleStore.test.ts +253 -0
  119. flock/frontend/src/store/moduleStore.ts +75 -0
  120. flock/frontend/src/store/settingsStore.ts +188 -0
  121. flock/frontend/src/store/streamStore.ts +68 -0
  122. flock/frontend/src/store/uiStore.test.ts +54 -0
  123. flock/frontend/src/store/uiStore.ts +122 -0
  124. flock/frontend/src/store/wsStore.ts +34 -0
  125. flock/frontend/src/styles/index.css +15 -0
  126. flock/frontend/src/styles/scrollbar.css +47 -0
  127. flock/frontend/src/styles/variables.css +488 -0
  128. flock/frontend/src/test/setup.ts +1 -0
  129. flock/frontend/src/types/filters.ts +47 -0
  130. flock/frontend/src/types/graph.ts +95 -0
  131. flock/frontend/src/types/modules.ts +10 -0
  132. flock/frontend/src/types/theme.ts +55 -0
  133. flock/frontend/src/utils/artifacts.ts +24 -0
  134. flock/frontend/src/utils/mockData.ts +98 -0
  135. flock/frontend/src/utils/performance.ts +16 -0
  136. flock/frontend/src/vite-env.d.ts +17 -0
  137. flock/frontend/tsconfig.json +27 -0
  138. flock/frontend/tsconfig.node.json +11 -0
  139. flock/frontend/vite.config.ts +25 -0
  140. flock/frontend/vitest.config.ts +11 -0
  141. flock/{core/util → helper}/cli_helper.py +9 -5
  142. flock/{core/logging → logging}/__init__.py +2 -3
  143. flock/logging/auto_trace.py +159 -0
  144. flock/{core/logging → logging}/formatters/enum_builder.py +3 -4
  145. flock/{core/logging → logging}/formatters/theme_builder.py +19 -44
  146. flock/{core/logging → logging}/formatters/themed_formatter.py +69 -107
  147. flock/{core/logging → logging}/logging.py +78 -61
  148. flock/{core/logging → logging}/telemetry.py +66 -26
  149. flock/{core/logging → logging}/telemetry_exporter/base_exporter.py +2 -2
  150. flock/logging/telemetry_exporter/duckdb_exporter.py +216 -0
  151. flock/{core/logging → logging}/telemetry_exporter/file_exporter.py +13 -10
  152. flock/{core/logging → logging}/telemetry_exporter/sqlite_exporter.py +2 -3
  153. flock/logging/trace_and_logged.py +304 -0
  154. flock/mcp/__init__.py +91 -0
  155. flock/{core/mcp/mcp_client.py → mcp/client.py} +131 -158
  156. flock/{core/mcp/mcp_config.py → mcp/config.py} +86 -132
  157. flock/mcp/manager.py +286 -0
  158. flock/mcp/servers/sse/__init__.py +1 -1
  159. flock/mcp/servers/sse/flock_sse_server.py +16 -58
  160. flock/mcp/servers/stdio/__init__.py +1 -1
  161. flock/mcp/servers/stdio/flock_stdio_server.py +13 -53
  162. flock/mcp/servers/streamable_http/flock_streamable_http_server.py +22 -67
  163. flock/mcp/servers/websockets/flock_websocket_server.py +12 -45
  164. flock/{core/mcp/flock_mcp_tool_base.py → mcp/tool.py} +24 -78
  165. flock/mcp/types/__init__.py +42 -0
  166. flock/{core/mcp → mcp}/types/callbacks.py +12 -15
  167. flock/{core/mcp → mcp}/types/factories.py +7 -6
  168. flock/{core/mcp → mcp}/types/handlers.py +13 -18
  169. flock/{core/mcp → mcp}/types/types.py +70 -74
  170. flock/{core/mcp → mcp}/util/helpers.py +3 -3
  171. flock/orchestrator.py +970 -0
  172. flock/registry.py +148 -0
  173. flock/runtime.py +262 -0
  174. flock/service.py +277 -0
  175. flock/store.py +1214 -0
  176. flock/subscription.py +111 -0
  177. flock/themes/andromeda.toml +1 -1
  178. flock/themes/apple-system-colors.toml +1 -1
  179. flock/themes/arcoiris.toml +1 -1
  180. flock/themes/atomonelight.toml +1 -1
  181. flock/themes/ayu copy.toml +1 -1
  182. flock/themes/ayu-light.toml +1 -1
  183. flock/themes/belafonte-day.toml +1 -1
  184. flock/themes/belafonte-night.toml +1 -1
  185. flock/themes/blulocodark.toml +1 -1
  186. flock/themes/breeze.toml +1 -1
  187. flock/themes/broadcast.toml +1 -1
  188. flock/themes/brogrammer.toml +1 -1
  189. flock/themes/builtin-dark.toml +1 -1
  190. flock/themes/builtin-pastel-dark.toml +1 -1
  191. flock/themes/catppuccin-latte.toml +1 -1
  192. flock/themes/catppuccin-macchiato.toml +1 -1
  193. flock/themes/catppuccin-mocha.toml +1 -1
  194. flock/themes/cga.toml +1 -1
  195. flock/themes/chalk.toml +1 -1
  196. flock/themes/ciapre.toml +1 -1
  197. flock/themes/coffee-theme.toml +1 -1
  198. flock/themes/cyberpunkscarletprotocol.toml +1 -1
  199. flock/themes/dark+.toml +1 -1
  200. flock/themes/darkermatrix.toml +1 -1
  201. flock/themes/darkmatrix.toml +2 -2
  202. flock/themes/darkside.toml +1 -1
  203. flock/themes/deep.toml +2 -2
  204. flock/themes/desert.toml +1 -1
  205. flock/themes/django.toml +1 -1
  206. flock/themes/djangosmooth.toml +1 -1
  207. flock/themes/doomone.toml +1 -1
  208. flock/themes/dotgov.toml +1 -1
  209. flock/themes/dracula+.toml +1 -1
  210. flock/themes/duckbones.toml +1 -1
  211. flock/themes/encom.toml +1 -1
  212. flock/themes/espresso.toml +1 -1
  213. flock/themes/everblush.toml +1 -1
  214. flock/themes/fairyfloss.toml +1 -1
  215. flock/themes/fideloper.toml +1 -1
  216. flock/themes/fishtank.toml +1 -1
  217. flock/themes/flexoki-light.toml +1 -1
  218. flock/themes/floraverse.toml +1 -1
  219. flock/themes/framer.toml +1 -1
  220. flock/themes/galizur.toml +1 -1
  221. flock/themes/github.toml +1 -1
  222. flock/themes/grass.toml +1 -1
  223. flock/themes/grey-green.toml +1 -1
  224. flock/themes/gruvboxlight.toml +1 -1
  225. flock/themes/guezwhoz.toml +1 -1
  226. flock/themes/harper.toml +1 -1
  227. flock/themes/hax0r-blue.toml +1 -1
  228. flock/themes/hopscotch.256.toml +1 -1
  229. flock/themes/ic-green-ppl.toml +1 -1
  230. flock/themes/iceberg-dark.toml +1 -1
  231. flock/themes/japanesque.toml +1 -1
  232. flock/themes/jubi.toml +1 -1
  233. flock/themes/kibble.toml +1 -1
  234. flock/themes/kolorit.toml +1 -1
  235. flock/themes/kurokula.toml +1 -1
  236. flock/themes/materialdesigncolors.toml +1 -1
  237. flock/themes/matrix.toml +1 -1
  238. flock/themes/mellifluous.toml +1 -1
  239. flock/themes/midnight-in-mojave.toml +1 -1
  240. flock/themes/monokai-remastered.toml +1 -1
  241. flock/themes/monokai-soda.toml +1 -1
  242. flock/themes/neon.toml +1 -1
  243. flock/themes/neopolitan.toml +5 -5
  244. flock/themes/nord-light.toml +1 -1
  245. flock/themes/ocean.toml +1 -1
  246. flock/themes/onehalfdark.toml +1 -1
  247. flock/themes/onehalflight.toml +1 -1
  248. flock/themes/palenighthc.toml +1 -1
  249. flock/themes/paulmillr.toml +1 -1
  250. flock/themes/pencildark.toml +1 -1
  251. flock/themes/pnevma.toml +1 -1
  252. flock/themes/purple-rain.toml +1 -1
  253. flock/themes/purplepeter.toml +1 -1
  254. flock/themes/raycast-dark.toml +1 -1
  255. flock/themes/red-sands.toml +1 -1
  256. flock/themes/relaxed.toml +1 -1
  257. flock/themes/retro.toml +1 -1
  258. flock/themes/rose-pine.toml +1 -1
  259. flock/themes/royal.toml +1 -1
  260. flock/themes/ryuuko.toml +1 -1
  261. flock/themes/sakura.toml +1 -1
  262. flock/themes/scarlet-protocol.toml +1 -1
  263. flock/themes/seoulbones-dark.toml +1 -1
  264. flock/themes/shades-of-purple.toml +1 -1
  265. flock/themes/smyck.toml +1 -1
  266. flock/themes/softserver.toml +1 -1
  267. flock/themes/solarized-darcula.toml +1 -1
  268. flock/themes/square.toml +1 -1
  269. flock/themes/sugarplum.toml +1 -1
  270. flock/themes/thayer-bright.toml +1 -1
  271. flock/themes/tokyonight.toml +1 -1
  272. flock/themes/tomorrow.toml +1 -1
  273. flock/themes/ubuntu.toml +1 -1
  274. flock/themes/ultradark.toml +1 -1
  275. flock/themes/ultraviolent.toml +1 -1
  276. flock/themes/unikitty.toml +1 -1
  277. flock/themes/urple.toml +1 -1
  278. flock/themes/vesper.toml +1 -1
  279. flock/themes/vimbones.toml +1 -1
  280. flock/themes/wildcherry.toml +1 -1
  281. flock/themes/wilmersdorf.toml +1 -1
  282. flock/themes/wryan.toml +1 -1
  283. flock/themes/xcodedarkhc.toml +1 -1
  284. flock/themes/xcodelight.toml +1 -1
  285. flock/themes/zenbones-light.toml +1 -1
  286. flock/themes/zenwritten-dark.toml +1 -1
  287. flock/utilities.py +301 -0
  288. flock/utility/output_utility_component.py +226 -0
  289. flock/visibility.py +107 -0
  290. flock_core-0.5.0.dist-info/METADATA +964 -0
  291. flock_core-0.5.0.dist-info/RECORD +525 -0
  292. flock_core-0.5.0.dist-info/entry_points.txt +2 -0
  293. {flock_core-0.4.543.dist-info → flock_core-0.5.0.dist-info}/licenses/LICENSE +1 -1
  294. flock/adapter/__init__.py +0 -14
  295. flock/adapter/azure_adapter.py +0 -68
  296. flock/adapter/chroma_adapter.py +0 -73
  297. flock/adapter/faiss_adapter.py +0 -97
  298. flock/adapter/pinecone_adapter.py +0 -51
  299. flock/adapter/vector_base.py +0 -47
  300. flock/cli/assets/release_notes.md +0 -140
  301. flock/cli/config.py +0 -8
  302. flock/cli/constants.py +0 -36
  303. flock/cli/create_agent.py +0 -1
  304. flock/cli/create_flock.py +0 -280
  305. flock/cli/execute_flock.py +0 -620
  306. flock/cli/load_agent.py +0 -1
  307. flock/cli/load_examples.py +0 -1
  308. flock/cli/load_flock.py +0 -192
  309. flock/cli/load_release_notes.py +0 -20
  310. flock/cli/loaded_flock_cli.py +0 -254
  311. flock/cli/manage_agents.py +0 -459
  312. flock/cli/registry_management.py +0 -889
  313. flock/cli/runner.py +0 -41
  314. flock/cli/settings.py +0 -857
  315. flock/cli/utils.py +0 -135
  316. flock/cli/view_results.py +0 -29
  317. flock/cli/yaml_editor.py +0 -396
  318. flock/config.py +0 -56
  319. flock/core/__init__.py +0 -44
  320. flock/core/api/__init__.py +0 -10
  321. flock/core/api/custom_endpoint.py +0 -45
  322. flock/core/api/endpoints.py +0 -262
  323. flock/core/api/main.py +0 -162
  324. flock/core/api/models.py +0 -101
  325. flock/core/api/run_store.py +0 -224
  326. flock/core/api/runner.py +0 -44
  327. flock/core/api/service.py +0 -214
  328. flock/core/config/flock_agent_config.py +0 -11
  329. flock/core/config/scheduled_agent_config.py +0 -40
  330. flock/core/context/context.py +0 -214
  331. flock/core/context/context_manager.py +0 -40
  332. flock/core/context/context_vars.py +0 -11
  333. flock/core/evaluation/utils.py +0 -395
  334. flock/core/execution/batch_executor.py +0 -369
  335. flock/core/execution/evaluation_executor.py +0 -438
  336. flock/core/execution/local_executor.py +0 -31
  337. flock/core/execution/opik_executor.py +0 -103
  338. flock/core/execution/temporal_executor.py +0 -166
  339. flock/core/flock.py +0 -1003
  340. flock/core/flock_agent.py +0 -1258
  341. flock/core/flock_evaluator.py +0 -60
  342. flock/core/flock_factory.py +0 -513
  343. flock/core/flock_module.py +0 -207
  344. flock/core/flock_registry.py +0 -702
  345. flock/core/flock_router.py +0 -83
  346. flock/core/flock_scheduler.py +0 -166
  347. flock/core/flock_server_manager.py +0 -136
  348. flock/core/interpreter/python_interpreter.py +0 -689
  349. flock/core/logging/live_capture.py +0 -137
  350. flock/core/logging/trace_and_logged.py +0 -59
  351. flock/core/mcp/__init__.py +0 -1
  352. flock/core/mcp/flock_mcp_server.py +0 -640
  353. flock/core/mcp/mcp_client_manager.py +0 -201
  354. flock/core/mcp/types/__init__.py +0 -1
  355. flock/core/mixin/dspy_integration.py +0 -445
  356. flock/core/mixin/prompt_parser.py +0 -125
  357. flock/core/serialization/__init__.py +0 -13
  358. flock/core/serialization/callable_registry.py +0 -52
  359. flock/core/serialization/flock_serializer.py +0 -854
  360. flock/core/serialization/json_encoder.py +0 -41
  361. flock/core/serialization/secure_serializer.py +0 -175
  362. flock/core/serialization/serializable.py +0 -342
  363. flock/core/serialization/serialization_utils.py +0 -409
  364. flock/core/util/file_path_utils.py +0 -223
  365. flock/core/util/hydrator.py +0 -309
  366. flock/core/util/input_resolver.py +0 -141
  367. flock/core/util/loader.py +0 -59
  368. flock/core/util/splitter.py +0 -219
  369. flock/di.py +0 -41
  370. flock/evaluators/__init__.py +0 -1
  371. flock/evaluators/declarative/__init__.py +0 -1
  372. flock/evaluators/declarative/declarative_evaluator.py +0 -217
  373. flock/evaluators/memory/memory_evaluator.py +0 -90
  374. flock/evaluators/test/test_case_evaluator.py +0 -38
  375. flock/evaluators/zep/zep_evaluator.py +0 -59
  376. flock/modules/__init__.py +0 -1
  377. flock/modules/assertion/__init__.py +0 -1
  378. flock/modules/assertion/assertion_module.py +0 -286
  379. flock/modules/callback/__init__.py +0 -1
  380. flock/modules/callback/callback_module.py +0 -91
  381. flock/modules/enterprise_memory/README.md +0 -99
  382. flock/modules/enterprise_memory/enterprise_memory_module.py +0 -526
  383. flock/modules/mem0/__init__.py +0 -1
  384. flock/modules/mem0/mem0_module.py +0 -126
  385. flock/modules/mem0_async/__init__.py +0 -1
  386. flock/modules/mem0_async/async_mem0_module.py +0 -126
  387. flock/modules/memory/__init__.py +0 -1
  388. flock/modules/memory/memory_module.py +0 -429
  389. flock/modules/memory/memory_parser.py +0 -125
  390. flock/modules/memory/memory_storage.py +0 -736
  391. flock/modules/output/__init__.py +0 -1
  392. flock/modules/output/output_module.py +0 -196
  393. flock/modules/performance/__init__.py +0 -1
  394. flock/modules/performance/metrics_module.py +0 -678
  395. flock/modules/zep/__init__.py +0 -1
  396. flock/modules/zep/zep_module.py +0 -192
  397. flock/platform/docker_tools.py +0 -49
  398. flock/platform/jaeger_install.py +0 -86
  399. flock/routers/__init__.py +0 -1
  400. flock/routers/agent/__init__.py +0 -1
  401. flock/routers/agent/agent_router.py +0 -236
  402. flock/routers/agent/handoff_agent.py +0 -58
  403. flock/routers/conditional/conditional_router.py +0 -486
  404. flock/routers/default/__init__.py +0 -1
  405. flock/routers/default/default_router.py +0 -80
  406. flock/routers/feedback/feedback_router.py +0 -114
  407. flock/routers/list_generator/list_generator_router.py +0 -166
  408. flock/routers/llm/__init__.py +0 -1
  409. flock/routers/llm/llm_router.py +0 -365
  410. flock/tools/__init__.py +0 -0
  411. flock/tools/azure_tools.py +0 -781
  412. flock/tools/code_tools.py +0 -167
  413. flock/tools/file_tools.py +0 -149
  414. flock/tools/github_tools.py +0 -157
  415. flock/tools/markdown_tools.py +0 -205
  416. flock/tools/system_tools.py +0 -9
  417. flock/tools/text_tools.py +0 -810
  418. flock/tools/web_tools.py +0 -92
  419. flock/tools/zendesk_tools.py +0 -501
  420. flock/webapp/__init__.py +0 -1
  421. flock/webapp/app/__init__.py +0 -0
  422. flock/webapp/app/api/__init__.py +0 -0
  423. flock/webapp/app/api/agent_management.py +0 -237
  424. flock/webapp/app/api/execution.py +0 -503
  425. flock/webapp/app/api/flock_management.py +0 -125
  426. flock/webapp/app/api/registry_viewer.py +0 -29
  427. flock/webapp/app/chat.py +0 -662
  428. flock/webapp/app/config.py +0 -104
  429. flock/webapp/app/dependencies.py +0 -117
  430. flock/webapp/app/main.py +0 -1086
  431. flock/webapp/app/middleware.py +0 -113
  432. flock/webapp/app/models_ui.py +0 -7
  433. flock/webapp/app/services/__init__.py +0 -0
  434. flock/webapp/app/services/feedback_file_service.py +0 -363
  435. flock/webapp/app/services/flock_service.py +0 -345
  436. flock/webapp/app/services/sharing_models.py +0 -81
  437. flock/webapp/app/services/sharing_store.py +0 -597
  438. flock/webapp/app/templates/theme_mapper.html +0 -326
  439. flock/webapp/app/theme_mapper.py +0 -811
  440. flock/webapp/app/utils.py +0 -85
  441. flock/webapp/run.py +0 -219
  442. flock/webapp/static/css/chat.css +0 -301
  443. flock/webapp/static/css/components.css +0 -167
  444. flock/webapp/static/css/header.css +0 -39
  445. flock/webapp/static/css/layout.css +0 -281
  446. flock/webapp/static/css/sidebar.css +0 -127
  447. flock/webapp/static/css/two-pane.css +0 -48
  448. flock/webapp/templates/base.html +0 -389
  449. flock/webapp/templates/chat.html +0 -152
  450. flock/webapp/templates/chat_settings.html +0 -19
  451. flock/webapp/templates/flock_editor.html +0 -16
  452. flock/webapp/templates/index.html +0 -12
  453. flock/webapp/templates/partials/_agent_detail_form.html +0 -93
  454. flock/webapp/templates/partials/_agent_list.html +0 -18
  455. flock/webapp/templates/partials/_agent_manager_view.html +0 -51
  456. flock/webapp/templates/partials/_agent_tools_checklist.html +0 -14
  457. flock/webapp/templates/partials/_chat_container.html +0 -15
  458. flock/webapp/templates/partials/_chat_messages.html +0 -57
  459. flock/webapp/templates/partials/_chat_settings_form.html +0 -85
  460. flock/webapp/templates/partials/_create_flock_form.html +0 -50
  461. flock/webapp/templates/partials/_dashboard_flock_detail.html +0 -17
  462. flock/webapp/templates/partials/_dashboard_flock_file_list.html +0 -16
  463. flock/webapp/templates/partials/_dashboard_flock_properties_preview.html +0 -28
  464. flock/webapp/templates/partials/_dashboard_upload_flock_form.html +0 -16
  465. flock/webapp/templates/partials/_dynamic_input_form_content.html +0 -22
  466. flock/webapp/templates/partials/_env_vars_table.html +0 -23
  467. flock/webapp/templates/partials/_execution_form.html +0 -127
  468. flock/webapp/templates/partials/_execution_view_container.html +0 -28
  469. flock/webapp/templates/partials/_flock_file_list.html +0 -23
  470. flock/webapp/templates/partials/_flock_properties_form.html +0 -52
  471. flock/webapp/templates/partials/_flock_upload_form.html +0 -16
  472. flock/webapp/templates/partials/_header_flock_status.html +0 -5
  473. flock/webapp/templates/partials/_live_logs.html +0 -13
  474. flock/webapp/templates/partials/_load_manager_view.html +0 -49
  475. flock/webapp/templates/partials/_registry_table.html +0 -25
  476. flock/webapp/templates/partials/_registry_viewer_content.html +0 -70
  477. flock/webapp/templates/partials/_results_display.html +0 -78
  478. flock/webapp/templates/partials/_settings_env_content.html +0 -9
  479. flock/webapp/templates/partials/_settings_theme_content.html +0 -14
  480. flock/webapp/templates/partials/_settings_view.html +0 -36
  481. flock/webapp/templates/partials/_share_chat_link_snippet.html +0 -11
  482. flock/webapp/templates/partials/_share_link_snippet.html +0 -35
  483. flock/webapp/templates/partials/_sidebar.html +0 -74
  484. flock/webapp/templates/partials/_structured_data_view.html +0 -40
  485. flock/webapp/templates/partials/_theme_preview.html +0 -36
  486. flock/webapp/templates/registry_viewer.html +0 -84
  487. flock/webapp/templates/shared_run_page.html +0 -140
  488. flock/workflow/__init__.py +0 -0
  489. flock/workflow/activities.py +0 -237
  490. flock/workflow/agent_activities.py +0 -24
  491. flock/workflow/agent_execution_activity.py +0 -240
  492. flock/workflow/flock_workflow.py +0 -225
  493. flock/workflow/temporal_config.py +0 -96
  494. flock/workflow/temporal_setup.py +0 -60
  495. flock_core-0.4.543.dist-info/METADATA +0 -676
  496. flock_core-0.4.543.dist-info/RECORD +0 -572
  497. flock_core-0.4.543.dist-info/entry_points.txt +0 -2
  498. /flock/{core/logging → logging}/formatters/themes.py +0 -0
  499. /flock/{core/logging → logging}/span_middleware/baggage_span_processor.py +0 -0
  500. /flock/{core/mcp → mcp}/util/__init__.py +0 -0
  501. {flock_core-0.4.543.dist-info → flock_core-0.5.0.dist-info}/WHEEL +0 -0
@@ -1,127 +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
- <fieldset style="margin-top: 1rem;">
38
- <label style="display: flex; gap: 0.5rem; align-items: center;">
39
- <input type="checkbox" name="use_production_tools" value="true"
40
- @change="if ($event.target.checked && !confirm('Use production tool set? These calls may access live systems.')) { $event.target.checked = false; }">
41
- <span>Use production tool set</span>
42
- </label>
43
- <small>Production tools may connect to live services.</small>
44
- </fieldset>
45
-
46
- <button type="submit" {% if not flock.agents %}disabled{% endif %}>Run Flock</button>
47
- <div id="share-agent-link-container" style="margin-top: 0.5rem;">
48
- <a href="#" id="shareAgentHtmxLink" hx-post="{{ url_for('htmx_generate_share_link') }}"
49
- hx-target="#shareLinkDisplayArea" hx-swap="innerHTML" hx-indicator="#share-loading-indicator"
50
- hx-include="#start_agent_name_select"
51
- 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;">
52
- Create shareable link...
53
- </a>
54
- <span id="share-loading-indicator" class="htmx-indicator">
55
- <progress indeterminate></progress> Generating link...
56
- </span>
57
- </div>
58
-
59
- <div id="feedback-download-container" style="margin-top: 0.5rem;">
60
- <div x-show="selectedAgentForInput" x-cloak
61
- style="display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;">
62
- <span style="padding: 0.25rem; text-decoration: underline;">Download feedback for selected
63
- agent:</span>
64
- <div>
65
- <a href="#" id="downloadFeedbackLink" hx-indicator="#download-feedback-loading-indicator"
66
- hx-include="#start_agent_name_select"
67
- :href="selectedAgentForInput ? '{{ url_for('chat_feedback_download', agent_name='AGENT_PLACEHOLDER', format='csv') }}'.replace('AGENT_PLACEHOLDER', selectedAgentForInput) : '#'"
68
- 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;">
69
- CSV
70
- </a>
71
- <a href="#" id="downloadFeedbackLinkXlsx" hx-indicator="#download-feedback-loading-indicator"
72
- hx-include="#start_agent_name_select"
73
- :href="selectedAgentForInput ? '{{ url_for('chat_feedback_download', agent_name='AGENT_PLACEHOLDER', format='xlsx') }}'.replace('AGENT_PLACEHOLDER', selectedAgentForInput) : '#'"
74
- 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;">
75
- XLSX
76
- </a>
77
- </div>
78
- </div>
79
- <span id="download-feedback-loading-indicator" class="htmx-indicator">
80
- <progress indeterminate></progress> Preparing file...
81
- </span>
82
- </div>
83
-
84
- <div id="feedback-download-container-all" style="margin-top: 0.5rem;">
85
- <div style="display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;">
86
- <span style="padding: 0.25rem; text-decoration: underline;">Download feedback for all
87
- agents:</span>
88
- <div>
89
- <a href="{{ url_for('chat_feedback_download_all', format='csv') }}" id="downloadFeedbackLinkAll"
90
- 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;">
91
- CSV
92
- </a>
93
- <a href="{{ url_for('chat_feedback_download_all', format='xlsx') }}"
94
- id="downloadFeedbackLinkAllXlsx"
95
- 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;">
96
- XLSX
97
- </a>
98
- </div>
99
- </div>
100
- <span id="download-feedback-loading-indicator-all" class="htmx-indicator">
101
- <progress indeterminate></progress> Preparing file...
102
- </span>
103
- </div>
104
-
105
- <span id="run-loading-indicator" class="htmx-indicator">
106
- <progress indeterminate></progress> Running...
107
- </span>
108
- </form>
109
- {% elif flock and not flock.agents %}
110
- <p>No agents available in the current Flock. Add agents to enable execution.</p>
111
- {% else %}
112
- <p>Load or create a Flock to enable execution.</p>
113
- {% endif %}
114
-
115
- <div id="shareLinkDisplayArea" style="margin-top: 1rem;">
116
- <!-- Content will be loaded here by HTMX -->
117
- </div>
118
-
119
- </article>
120
-
121
- <script>
122
- document.addEventListener('DOMContentLoaded', function () {
123
- // All previous JavaScript for toggling share link visibility is removed.
124
- // If there are other unrelated JavaScript functions in this script block,
125
- // they would remain.
126
- });
127
- </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,13 +0,0 @@
1
- {% if logs %}
2
- <div class="live-log-entries">
3
- {% for entry in logs %}
4
- <div class="live-log-entry {{ entry.css_class }}">
5
- <span class="live-log-time">{{ entry.time_display }}</span>
6
- <span class="live-log-stream">{{ entry.stream_label }}</span>
7
- <span class="live-log-text">{{ entry.text }}</span>
8
- </div>
9
- {% endfor %}
10
- </div>
11
- {% else %}
12
- <div class="live-log-empty">No CLI output captured yet.</div>
13
- {% 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>
@@ -1,36 +0,0 @@
1
- <!-- Settings View -->
2
- <article>
3
- <header>
4
- <h2>Settings</h2>
5
- </header>
6
- <nav>
7
- <ul role="group">
8
- <li>
9
- <button role="button" class="primary" hx-get="{{ url_for('htmx_settings_env_vars') }}" hx-target="#settings-content-container" hx-indicator="#settings-loading" hx-on:click="setActiveButton(this)">Environment</button>
10
- </li>
11
- <li>
12
- <button role="button" class="outline" hx-get="{{ url_for('htmx_settings_theme') }}" hx-target="#settings-content-container" hx-indicator="#settings-loading" hx-on:click="setActiveButton(this)">Theme</button>
13
- </li>
14
- </ul>
15
- </nav>
16
-
17
- <div id="settings-loading" class="htmx-indicator" style="text-align:center; margin-top:1rem;">
18
- <progress></progress> Loading...
19
- </div>
20
-
21
- <div id="settings-content-container" style="margin-top:1.5rem;">
22
- {% include 'partials/_settings_env_content.html' %}
23
- </div>
24
- </article>
25
-
26
- <script>
27
- function setActiveButton(clickedButton) {
28
- const buttons = clickedButton.closest('ul[role="group"]').querySelectorAll('button');
29
- buttons.forEach(btn => {
30
- btn.classList.remove('primary');
31
- btn.classList.add('outline');
32
- });
33
- clickedButton.classList.remove('outline');
34
- clickedButton.classList.add('primary');
35
- }
36
- </script>
@@ -1,11 +0,0 @@
1
- {# This snippet is returned by the /ui/htmx/share/chat/generate-link endpoint #}
2
- {% if share_url %}
3
- <p style="margin-bottom: 0.5rem;"><strong>Shareable Chat Link generated:</strong></p>
4
- <input type="text" id="generatedShareChatLinkInput" value="{{ share_url }}" readonly style="width: 100%; margin-bottom: 0.5rem;">
5
- <p><small>You can select the link above and copy it (Ctrl+C or Cmd+C).</small></p>
6
- <p><small>This link will start a chat session with the agent '{{ agent_name }}' from Flock '{{ flock_name }}' using the currently saved settings.</small></p>
7
- {% elif error_message %}
8
- <p style="color: var(--pico-form-invalid-color);">Error generating chat link: {{ error_message }}</p>
9
- {% else %}
10
- <p><em>Something went wrong, no chat link generated.</em></p>
11
- {% endif %}
@@ -1,35 +0,0 @@
1
- {# This snippet is returned by the /ui/htmx/share/generate-link endpoint #}
2
- {% if share_url %}
3
- <p style="margin-bottom: 0.5rem;"><strong>Shareable Link generated:</strong></p>
4
- <input type="text" id="generatedShareLinkInput" value="{{ share_url }}" readonly style="width: 100%; margin-bottom: 0.5rem;">
5
- {# <button type="button" onclick="copyGeneratedLinkToClipboard()">Copy Link</button> #}
6
- {# <small id="copyGeneratedStatusMsg" style="margin-left: 0.5rem;"></small> #}
7
- <p><small>You can select the link above and copy it (Ctrl+C or Cmd+C).</small></p>
8
- {% elif error_message %}
9
- <p style="color: var(--pico-form-invalid-color);">Error: {{ error_message }}</p>
10
- {% else %}
11
- <p><em>Something went wrong, no link generated.</em></p>
12
- {% endif %}
13
-
14
- {#
15
- <script>
16
- // Minimal JS for copy if desired - but user asked for JS-free.
17
- // If you re-add the button, uncomment this.
18
- function copyGeneratedLinkToClipboard() {
19
- const input = document.getElementById('generatedShareLinkInput');
20
- const msg = document.getElementById('copyGeneratedStatusMsg');
21
- if (!input || !msg) return;
22
-
23
- input.select();
24
- input.setSelectionRange(0, 99999); // For mobile devices
25
- try {
26
- document.execCommand('copy');
27
- msg.textContent = 'Copied!';
28
- setTimeout(() => { msg.textContent = ''; }, 2000);
29
- } catch (err) {
30
- console.error('Failed to copy text: ', err);
31
- msg.textContent = 'Failed to copy.';
32
- }
33
- }
34
- </script>
35
- #}