flock-core 0.1.1__py3-none-any.whl → 0.2.1__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 (405) hide show
  1. flock/__init__.py +1 -4
  2. flock/agents/__init__.py +0 -3
  3. flock/agents/batch_agent.py +140 -175
  4. flock/agents/loop_agent.py +117 -178
  5. flock/agents/trigger_agent.py +113 -191
  6. flock/agents/user_agent.py +145 -230
  7. flock/core/__init__.py +1 -7
  8. flock/core/context/context.py +211 -0
  9. flock/core/context/context_manager.py +34 -0
  10. flock/core/{context_vars.py → context/context_vars.py} +8 -6
  11. flock/core/execution/local_executor.py +27 -0
  12. flock/core/execution/temporal_executor.py +40 -0
  13. flock/core/flock.py +199 -208
  14. flock/core/flock_agent.py +492 -0
  15. flock/core/logging/__init__.py +2 -18
  16. flock/core/logging/formatters/base_formatter.py +36 -0
  17. flock/core/logging/formatters/formatter_factory.py +38 -0
  18. flock/core/logging/formatters/pprint_formatter.py +18 -0
  19. flock/core/logging/formatters/rich_formatters.py +132 -0
  20. flock/core/logging/formatters/theme_builder.py +480 -0
  21. flock/core/logging/formatters/themed_formatter.py +442 -0
  22. flock/core/logging/logging.py +123 -0
  23. flock/core/mixin/dspy_integration.py +171 -0
  24. flock/core/mixin/prompt_parser.py +125 -0
  25. flock/core/registry/agent_registry.py +103 -0
  26. flock/core/tools/basic_tools.py +273 -98
  27. flock/core/tools/dev_tools/github.py +161 -0
  28. flock/core/util/cli_helper.py +21 -0
  29. flock/core/util/input_resolver.py +156 -0
  30. flock/core/util/serializable.py +93 -0
  31. flock/themes/3024-day.toml +39 -0
  32. flock/themes/3024-night.toml +77 -0
  33. flock/themes/aardvark-blue.toml +77 -0
  34. flock/themes/abernathy.toml +77 -0
  35. flock/themes/adventure.toml +77 -0
  36. flock/themes/adventuretime.toml +77 -0
  37. flock/themes/afterglow.toml +77 -0
  38. flock/themes/alabaster.toml +77 -0
  39. flock/themes/alienblood.toml +77 -0
  40. flock/themes/andromeda.toml +77 -0
  41. flock/themes/apple-classic.toml +77 -0
  42. flock/themes/apple-system-colors.toml +77 -0
  43. flock/themes/arcoiris.toml +77 -0
  44. flock/themes/argonaut copy.toml +77 -0
  45. flock/themes/argonaut.toml +39 -0
  46. flock/themes/arthur.toml +77 -0
  47. flock/themes/ateliersulphurpool.toml +77 -0
  48. flock/themes/atom.toml +38 -0
  49. flock/themes/atom_test.toml +65 -0
  50. flock/themes/atomonelight.toml +77 -0
  51. flock/themes/aurora.toml +77 -0
  52. flock/themes/ayu copy.toml +77 -0
  53. flock/themes/ayu-light.toml +77 -0
  54. flock/themes/ayu-mirage.toml +77 -0
  55. flock/themes/ayu.toml +39 -0
  56. flock/themes/banana-blueberry.toml +77 -0
  57. flock/themes/batman.toml +77 -0
  58. flock/themes/belafonte-day.toml +77 -0
  59. flock/themes/belafonte-night.toml +77 -0
  60. flock/themes/birdsofparadise.toml +77 -0
  61. flock/themes/blazer.toml +77 -0
  62. flock/themes/blue-matrix.toml +77 -0
  63. flock/themes/blueberrypie.toml +77 -0
  64. flock/themes/bluedolphin.toml +77 -0
  65. flock/themes/blulocodark.toml +77 -0
  66. flock/themes/blulocolight.toml +77 -0
  67. flock/themes/borland.toml +77 -0
  68. flock/themes/breeze.toml +77 -0
  69. flock/themes/bright-lights.toml +77 -0
  70. flock/themes/broadcast.toml +77 -0
  71. flock/themes/brogrammer.toml +77 -0
  72. flock/themes/builtin-dark.toml +77 -0
  73. flock/themes/builtin-light.toml +77 -0
  74. flock/themes/builtin-pastel-dark.toml +77 -0
  75. flock/themes/builtin-solarized-dark.toml +77 -0
  76. flock/themes/builtin-solarized-light.toml +77 -0
  77. flock/themes/builtin-tango-dark.toml +77 -0
  78. flock/themes/builtin-tango-light.toml +77 -0
  79. flock/themes/c64.toml +77 -0
  80. flock/themes/calamity.toml +77 -0
  81. flock/themes/catppuccin-frappe.toml +77 -0
  82. flock/themes/catppuccin-latte.toml +77 -0
  83. flock/themes/catppuccin-macchiato.toml +77 -0
  84. flock/themes/catppuccin-mocha.toml +77 -0
  85. flock/themes/cga.toml +77 -0
  86. flock/themes/chalk.toml +77 -0
  87. flock/themes/chalkboard.toml +77 -0
  88. flock/themes/challengerdeep.toml +77 -0
  89. flock/themes/chester.toml +77 -0
  90. flock/themes/ciapre.toml +77 -0
  91. flock/themes/clrs.toml +77 -0
  92. flock/themes/cobalt-neon.toml +77 -0
  93. flock/themes/cobalt2.toml +77 -0
  94. flock/themes/coffee-theme.toml +77 -0
  95. flock/themes/crayonponyfish.toml +77 -0
  96. flock/themes/cutiepro.toml +77 -0
  97. flock/themes/cyberdyne.toml +77 -0
  98. flock/themes/cyberpunk.toml +77 -0
  99. flock/themes/cyberpunkscarletprotocol.toml +77 -0
  100. flock/themes/dark+.toml +77 -0
  101. flock/themes/dark-pastel.toml +77 -0
  102. flock/themes/darkermatrix.toml +77 -0
  103. flock/themes/darkmatrix.toml +77 -0
  104. flock/themes/darkside.toml +77 -0
  105. flock/themes/dayfox.toml +77 -0
  106. flock/themes/deep.toml +77 -0
  107. flock/themes/desert.toml +77 -0
  108. flock/themes/dimidium.toml +77 -0
  109. flock/themes/dimmedmonokai.toml +77 -0
  110. flock/themes/django.toml +77 -0
  111. flock/themes/djangorebornagain.toml +77 -0
  112. flock/themes/djangosmooth.toml +77 -0
  113. flock/themes/doom-peacock.toml +77 -0
  114. flock/themes/doomone.toml +77 -0
  115. flock/themes/dotgov.toml +77 -0
  116. flock/themes/dracula+.toml +77 -0
  117. flock/themes/dracula.toml +77 -0
  118. flock/themes/duckbones.toml +77 -0
  119. flock/themes/duotone-dark.toml +77 -0
  120. flock/themes/earthsong.toml +77 -0
  121. flock/themes/elemental.toml +77 -0
  122. flock/themes/elementary.toml +77 -0
  123. flock/themes/encom.toml +77 -0
  124. flock/themes/espresso-libre.toml +77 -0
  125. flock/themes/espresso.toml +77 -0
  126. flock/themes/everblush.toml +77 -0
  127. flock/themes/fahrenheit.toml +77 -0
  128. flock/themes/fairyfloss.toml +77 -0
  129. flock/themes/farmhouse-dark.toml +77 -0
  130. flock/themes/farmhouse-light.toml +77 -0
  131. flock/themes/fideloper.toml +77 -0
  132. flock/themes/firefly-traditional.toml +77 -0
  133. flock/themes/firefoxdev.toml +77 -0
  134. flock/themes/firewatch.toml +77 -0
  135. flock/themes/fishtank.toml +77 -0
  136. flock/themes/flat.toml +77 -0
  137. flock/themes/flatland.toml +77 -0
  138. flock/themes/flexoki-dark.toml +77 -0
  139. flock/themes/flexoki-light.toml +77 -0
  140. flock/themes/floraverse.toml +77 -0
  141. flock/themes/forestblue.toml +77 -0
  142. flock/themes/framer.toml +77 -0
  143. flock/themes/frontenddelight.toml +77 -0
  144. flock/themes/funforrest.toml +77 -0
  145. flock/themes/galaxy.toml +77 -0
  146. flock/themes/galizur.toml +77 -0
  147. flock/themes/github-dark.toml +77 -0
  148. flock/themes/github.toml +77 -0
  149. flock/themes/glacier.toml +77 -0
  150. flock/themes/grape.toml +77 -0
  151. flock/themes/grass.toml +77 -0
  152. flock/themes/grey-green.toml +77 -0
  153. flock/themes/gruber-darker.toml +77 -0
  154. flock/themes/gruvboxdark.toml +77 -0
  155. flock/themes/gruvboxdarkhard.toml +77 -0
  156. flock/themes/gruvboxlight.toml +77 -0
  157. flock/themes/guezwhoz.toml +77 -0
  158. flock/themes/hacktober.toml +77 -0
  159. flock/themes/hardcore.toml +77 -0
  160. flock/themes/harper.toml +77 -0
  161. flock/themes/hax0r-blue.toml +77 -0
  162. flock/themes/hax0r-gr33n.toml +77 -0
  163. flock/themes/hax0r-r3d.toml +77 -0
  164. flock/themes/highway.toml +77 -0
  165. flock/themes/hipster-green.toml +77 -0
  166. flock/themes/hivacruz.toml +77 -0
  167. flock/themes/homebrew.toml +77 -0
  168. flock/themes/hopscotch.256.toml +77 -0
  169. flock/themes/hopscotch.toml +77 -0
  170. flock/themes/hurtado.toml +77 -0
  171. flock/themes/hybrid.toml +77 -0
  172. flock/themes/ic-green-ppl.toml +77 -0
  173. flock/themes/ic-orange-ppl.toml +77 -0
  174. flock/themes/iceberg-dark.toml +77 -0
  175. flock/themes/iceberg-light.toml +77 -0
  176. flock/themes/idea.toml +77 -0
  177. flock/themes/idletoes.toml +77 -0
  178. flock/themes/ir-black.toml +77 -0
  179. flock/themes/iterm2-dark-background.toml +77 -0
  180. flock/themes/iterm2-default.toml +77 -0
  181. flock/themes/iterm2-light-background.toml +77 -0
  182. flock/themes/iterm2-pastel-dark-background.toml +77 -0
  183. flock/themes/iterm2-smoooooth.toml +77 -0
  184. flock/themes/iterm2-solarized-dark.toml +77 -0
  185. flock/themes/iterm2-solarized-light.toml +77 -0
  186. flock/themes/iterm2-tango-dark.toml +77 -0
  187. flock/themes/iterm2-tango-light.toml +77 -0
  188. flock/themes/jackie-brown.toml +77 -0
  189. flock/themes/japanesque.toml +77 -0
  190. flock/themes/jellybeans.toml +77 -0
  191. flock/themes/jetbrains-darcula.toml +77 -0
  192. flock/themes/jubi.toml +77 -0
  193. flock/themes/kanagawabones.toml +77 -0
  194. flock/themes/kibble.toml +77 -0
  195. flock/themes/kolorit.toml +77 -0
  196. flock/themes/konsolas.toml +77 -0
  197. flock/themes/kurokula.toml +77 -0
  198. flock/themes/lab-fox.toml +77 -0
  199. flock/themes/laser.toml +77 -0
  200. flock/themes/later-this-evening.toml +77 -0
  201. flock/themes/lavandula.toml +77 -0
  202. flock/themes/liquidcarbon.toml +77 -0
  203. flock/themes/liquidcarbontransparent.toml +77 -0
  204. flock/themes/liquidcarbontransparentinverse.toml +77 -0
  205. flock/themes/lovelace.toml +77 -0
  206. flock/themes/man-page.toml +77 -0
  207. flock/themes/mariana.toml +77 -0
  208. flock/themes/material.toml +77 -0
  209. flock/themes/materialdark.toml +77 -0
  210. flock/themes/materialdarker.toml +77 -0
  211. flock/themes/materialdesigncolors.toml +77 -0
  212. flock/themes/materialocean.toml +77 -0
  213. flock/themes/mathias.toml +77 -0
  214. flock/themes/matrix.toml +77 -0
  215. flock/themes/medallion.toml +77 -0
  216. flock/themes/mellifluous.toml +77 -0
  217. flock/themes/midnight-in-mojave.toml +77 -0
  218. flock/themes/mirage.toml +77 -0
  219. flock/themes/misterioso.toml +77 -0
  220. flock/themes/molokai.toml +77 -0
  221. flock/themes/monalisa.toml +77 -0
  222. flock/themes/monokai-remastered.toml +77 -0
  223. flock/themes/monokai-soda.toml +77 -0
  224. flock/themes/monokai-vivid.toml +77 -0
  225. flock/themes/n0tch2k.toml +77 -0
  226. flock/themes/neobones-dark.toml +77 -0
  227. flock/themes/neobones-light.toml +77 -0
  228. flock/themes/neon.toml +77 -0
  229. flock/themes/neopolitan.toml +77 -0
  230. flock/themes/neutron.toml +77 -0
  231. flock/themes/night-owlish-light.toml +77 -0
  232. flock/themes/nightfox.toml +77 -0
  233. flock/themes/nightlion-v1.toml +77 -0
  234. flock/themes/nightlion-v2.toml +77 -0
  235. flock/themes/niji.toml +77 -0
  236. flock/themes/nocturnal-winter.toml +77 -0
  237. flock/themes/nord-light.toml +77 -0
  238. flock/themes/nord.toml +77 -0
  239. flock/themes/novel.toml +77 -0
  240. flock/themes/nvimdark.toml +77 -0
  241. flock/themes/nvimlight.toml +77 -0
  242. flock/themes/obsidian.toml +77 -0
  243. flock/themes/ocean.toml +77 -0
  244. flock/themes/oceanic-next.toml +77 -0
  245. flock/themes/oceanicmaterial.toml +77 -0
  246. flock/themes/ollie.toml +77 -0
  247. flock/themes/onehalfdark.toml +77 -0
  248. flock/themes/onehalflight.toml +77 -0
  249. flock/themes/operator-mono-dark.toml +77 -0
  250. flock/themes/overnight-slumber.toml +77 -0
  251. flock/themes/oxocarbon.toml +77 -0
  252. flock/themes/palenighthc.toml +77 -0
  253. flock/themes/pandora.toml +77 -0
  254. flock/themes/paraiso-dark.toml +77 -0
  255. flock/themes/paulmillr.toml +77 -0
  256. flock/themes/pencildark.toml +77 -0
  257. flock/themes/pencillight.toml +77 -0
  258. flock/themes/peppermint.toml +77 -0
  259. flock/themes/piatto-light.toml +77 -0
  260. flock/themes/pnevma.toml +77 -0
  261. flock/themes/popping-and-locking.toml +77 -0
  262. flock/themes/primary.toml +77 -0
  263. flock/themes/pro-light.toml +77 -0
  264. flock/themes/pro.toml +77 -0
  265. flock/themes/purple-rain.toml +77 -0
  266. flock/themes/purplepeter.toml +77 -0
  267. flock/themes/rapture.toml +77 -0
  268. flock/themes/raycast-dark.toml +77 -0
  269. flock/themes/raycast-light.toml +77 -0
  270. flock/themes/rebecca.toml +77 -0
  271. flock/themes/red-alert.toml +77 -0
  272. flock/themes/red-planet.toml +77 -0
  273. flock/themes/red-sands.toml +77 -0
  274. flock/themes/relaxed.toml +77 -0
  275. flock/themes/retro.toml +77 -0
  276. flock/themes/rippedcasts.toml +77 -0
  277. flock/themes/rose-pine-dawn.toml +77 -0
  278. flock/themes/rose-pine-moon.toml +77 -0
  279. flock/themes/rose-pine.toml +77 -0
  280. flock/themes/rouge-2.toml +77 -0
  281. flock/themes/royal.toml +77 -0
  282. flock/themes/ryuuko.toml +77 -0
  283. flock/themes/sakura.toml +77 -0
  284. flock/themes/scarlet-protocol.toml +77 -0
  285. flock/themes/seafoam-pastel.toml +77 -0
  286. flock/themes/seashells.toml +77 -0
  287. flock/themes/seoulbones-dark.toml +77 -0
  288. flock/themes/seoulbones-light.toml +77 -0
  289. flock/themes/seti.toml +77 -0
  290. flock/themes/shades-of-purple.toml +77 -0
  291. flock/themes/shaman.toml +77 -0
  292. flock/themes/slate.toml +77 -0
  293. flock/themes/sleepyhollow.toml +77 -0
  294. flock/themes/smyck.toml +77 -0
  295. flock/themes/snazzy.toml +77 -0
  296. flock/themes/softserver.toml +77 -0
  297. flock/themes/solarized-darcula.toml +77 -0
  298. flock/themes/solarized-dark---patched.toml +77 -0
  299. flock/themes/solarized-dark-higher-contrast.toml +77 -0
  300. flock/themes/spacedust.toml +77 -0
  301. flock/themes/spacegray-eighties-dull.toml +77 -0
  302. flock/themes/spacegray-eighties.toml +77 -0
  303. flock/themes/spacegray.toml +77 -0
  304. flock/themes/spiderman.toml +77 -0
  305. flock/themes/spring.toml +77 -0
  306. flock/themes/square.toml +77 -0
  307. flock/themes/sublette.toml +77 -0
  308. flock/themes/subliminal.toml +77 -0
  309. flock/themes/sugarplum.toml +77 -0
  310. flock/themes/sundried.toml +77 -0
  311. flock/themes/symfonic.toml +77 -0
  312. flock/themes/synthwave-everything.toml +77 -0
  313. flock/themes/synthwave.toml +77 -0
  314. flock/themes/synthwavealpha.toml +77 -0
  315. flock/themes/tango-adapted.toml +77 -0
  316. flock/themes/tango-half-adapted.toml +77 -0
  317. flock/themes/teerb.toml +77 -0
  318. flock/themes/terafox.toml +77 -0
  319. flock/themes/terminal-basic.toml +77 -0
  320. flock/themes/thayer-bright.toml +77 -0
  321. flock/themes/the-hulk.toml +77 -0
  322. flock/themes/tinacious-design-(dark).toml +77 -0
  323. flock/themes/tinacious-design-(light).toml +77 -0
  324. flock/themes/tokyonight-day.toml +77 -0
  325. flock/themes/tokyonight-storm.toml +77 -0
  326. flock/themes/tokyonight.toml +77 -0
  327. flock/themes/tomorrow-night-blue.toml +77 -0
  328. flock/themes/tomorrow-night-bright.toml +77 -0
  329. flock/themes/tomorrow-night-burns.toml +77 -0
  330. flock/themes/tomorrow-night-eighties.toml +77 -0
  331. flock/themes/tomorrow-night.toml +77 -0
  332. flock/themes/tomorrow.toml +77 -0
  333. flock/themes/toychest.toml +77 -0
  334. flock/themes/treehouse.toml +77 -0
  335. flock/themes/twilight.toml +77 -0
  336. flock/themes/ubuntu.toml +77 -0
  337. flock/themes/ultradark.toml +77 -0
  338. flock/themes/ultraviolent.toml +77 -0
  339. flock/themes/underthesea.toml +77 -0
  340. flock/themes/unikitty.toml +77 -0
  341. flock/themes/urple.toml +77 -0
  342. flock/themes/vaughn.toml +77 -0
  343. flock/themes/vesper.toml +77 -0
  344. flock/themes/vibrantink.toml +77 -0
  345. flock/themes/vimbones.toml +77 -0
  346. flock/themes/violet-dark.toml +77 -0
  347. flock/themes/violet-light.toml +77 -0
  348. flock/themes/warmneon.toml +77 -0
  349. flock/themes/wez.toml +77 -0
  350. flock/themes/whimsy.toml +77 -0
  351. flock/themes/wildcherry.toml +77 -0
  352. flock/themes/wilmersdorf.toml +77 -0
  353. flock/themes/wombat.toml +77 -0
  354. flock/themes/wryan.toml +77 -0
  355. flock/themes/xcodedark.toml +77 -0
  356. flock/themes/xcodedarkhc.toml +77 -0
  357. flock/themes/xcodelight.toml +77 -0
  358. flock/themes/xcodelighthc.toml +77 -0
  359. flock/themes/xcodewwdc.toml +77 -0
  360. flock/themes/zenbones-dark.toml +77 -0
  361. flock/themes/zenbones-light.toml +77 -0
  362. flock/themes/zenbones.toml +77 -0
  363. flock/themes/zenburn.toml +77 -0
  364. flock/themes/zenburned.toml +77 -0
  365. flock/themes/zenwritten-dark.toml +77 -0
  366. flock/themes/zenwritten-light.toml +77 -0
  367. flock/workflow/activities.py +117 -115
  368. flock/workflow/agent_activities.py +24 -26
  369. flock/workflow/temporal_setup.py +38 -37
  370. flock/workflow/workflow.py +58 -53
  371. flock_core-0.2.1.dist-info/METADATA +287 -0
  372. flock_core-0.2.1.dist-info/RECORD +375 -0
  373. {flock_core-0.1.1.dist-info → flock_core-0.2.1.dist-info}/licenses/LICENSE +21 -21
  374. flock/agents/declarative_agent.py +0 -166
  375. flock/app/components/__init__.py +0 -14
  376. flock/app/components/charts/agent_workflow.py +0 -14
  377. flock/app/components/charts/core_architecture.py +0 -14
  378. flock/app/components/charts/tool_system.py +0 -14
  379. flock/app/components/history_grid.py +0 -168
  380. flock/app/components/history_grid_alt.py +0 -189
  381. flock/app/components/sidebar.py +0 -19
  382. flock/app/components/theme.py +0 -9
  383. flock/app/components/util.py +0 -18
  384. flock/app/hive_app.py +0 -118
  385. flock/app/html/d3.html +0 -179
  386. flock/app/modules/__init__.py +0 -12
  387. flock/app/modules/about.py +0 -17
  388. flock/app/modules/agent_detail.py +0 -70
  389. flock/app/modules/agent_list.py +0 -59
  390. flock/app/modules/playground.py +0 -322
  391. flock/app/modules/settings.py +0 -96
  392. flock/core/agent.py +0 -150
  393. flock/core/agent_registry.py +0 -162
  394. flock/core/context.py +0 -279
  395. flock/core/handoff/handoff_base.py +0 -12
  396. flock/core/logging/error_handler.py +0 -84
  397. flock/core/logging/formatters.py +0 -122
  398. flock/core/logging/handlers.py +0 -117
  399. flock/core/logging/logger.py +0 -107
  400. flock/core/serializable.py +0 -206
  401. flock_core-0.1.1.dist-info/METADATA +0 -449
  402. flock_core-0.1.1.dist-info/RECORD +0 -48
  403. flock_core-0.1.1.dist-info/entry_points.txt +0 -2
  404. /flock/{core/config/declarative_agent_config.py → workflow/__init__.py} +0 -0
  405. {flock_core-0.1.1.dist-info → flock_core-0.2.1.dist-info}/WHEEL +0 -0
@@ -1,14 +0,0 @@
1
- from fasthtml.common import *
2
- from fasthtml.svg import *
3
- from monsterui.all import *
4
-
5
-
6
- def AgentWorkflowChart():
7
- return Div(
8
- Div(
9
- style="max-width:100%;border:1px solid transparent;",
10
- data_mxgraph='{"highlight":"#0000ff","nav":true,"resize":true,"page":1,"toolbar":"pages zoom layers tags lightbox","edit":"_blank","xml":"<mxfile><diagram id=\\"l7_B5a2V6sOU66k4eApJ\\" name=\\"Core Architecture\\"><mxGraphModel dx=\\"1139\\" dy=\\"934\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#FFFFFF\\" math=\\"0\\" shadow=\\"1\\"><root><mxCell id=\\"0\\"/><mxCell id=\\"1\\" parent=\\"0\\"/><mxCell id=\\"3\\" value=\\"graph TB&#10; subgraph User Application&#10; UA[User Code] --&gt; |Uses| SM[Flock Manager]&#10; end&#10;&#10; subgraph Flock Core&#10; SM --&gt; |Manages| AR[Agent Registry]&#10; SM --&gt; |Executes| WF[Workflow System]&#10; &#10; subgraph Agents&#10; AR --&gt; |Registers| DA[Declarative Agent]&#10; DA --&gt; |Uses| TS[Type System]&#10; DA --&gt; |Uses| TM[Tool Manager]&#10; end&#10; &#10; subgraph Workflow&#10; WF --&gt; |Runs| AC[Activities]&#10; WF --&gt; |Uses| TW[Temporal Worker]&#10; AC --&gt; |Executes| DA&#10; end&#10; end&#10;&#10; subgraph External Systems&#10; TW --&gt; |Connects to| TS1[Temporal Server]&#10; TM --&gt; |Integrates| T1[Web Search]&#10; TM --&gt; |Integrates| T2[Code Eval]&#10; TM --&gt; |Integrates| T3[Math Tools]&#10; DA --&gt; |Uses| LLM[LLM Provider]&#10; end&#10;&#10; classDef core fill:#f9f,stroke:#333,stroke-width:2px&#10; classDef external fill:#bbf,stroke:#333,stroke-width:2px&#10; classDef user fill:#bfb,stroke:#333,stroke-width:2px&#10; &#10; class SM,AR,DA,WF,AC,TM,TS core&#10; class TS1,T1,T2,T3,LLM external&#10; class UA user&#10;&#10;\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;rounded=1;\\" parent=\\"1\\" vertex=\\"1\\"><mxGeometry x=\\"200\\" y=\\"310\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/></mxCell></root></mxGraphModel></diagram><diagram id=\\"m33Os__FMXyp1zJ4IDTH\\" name=\\"Agent Workflow\\"><mxGraphModel dx=\\"1139\\" dy=\\"934\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"1\\"><root><mxCell id=\\"0\\"/><mxCell id=\\"1\\" parent=\\"0\\"/><mxCell id=\\"Yf0mmGmI6B4_u023lZ5C-1\\" value=\\"sequenceDiagram&#10; participant User&#10; participant Flock&#10; participant Agent&#10; participant Tools&#10; participant LLM&#10; participant Temporal&#10;&#10; User-&gt;&gt;Flock: Create Agent&#10; Flock-&gt;&gt;Agent: Initialize&#10; User-&gt;&gt;Flock: activate(agent, input)&#10; &#10; alt Local Debug Mode&#10; Flock-&gt;&gt;Agent: Execute Directly&#10; else Production Mode&#10; Flock-&gt;&gt;Temporal: Start Workflow&#10; Temporal-&gt;&gt;Agent: Execute via Activity&#10; end&#10;&#10; loop Agent Execution&#10; Agent-&gt;&gt;LLM: Process Input&#10; opt Tool Usage&#10; Agent-&gt;&gt;Tools: Execute Tool&#10; Tools--&gt;&gt;Agent: Tool Result&#10; end&#10; Agent-&gt;&gt;LLM: Generate Output&#10; end&#10;&#10; alt Has Hand-off&#10; Agent-&gt;&gt;Flock: Hand off to Next Agent&#10; Flock-&gt;&gt;Agent: Start Next Agent&#10; else No Hand-off&#10; Agent--&gt;&gt;Flock: Return Result&#10; end&#10;&#10; Flock--&gt;&gt;User: Return Final Result\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" parent=\\"1\\" vertex=\\"1\\"><mxGeometry x=\\"275\\" y=\\"114\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/></mxCell></root></mxGraphModel></diagram><diagram id=\\"zsmzvY-bLYlccnSXdfzv\\" name=\\"Temporal Workflow\\">\\n <mxGraphModel dx=\\"205\\" dy=\\"165\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"1\\">\\n <root>\\n <mxCell id=\\"0\\"/>\\n <mxCell id=\\"1\\" parent=\\"0\\"/>\\n <mxCell id=\\"LGo0nXY-PDX6Si-UCiUW-1\\" value=\\"graph TB&#10; subgraph Temporal Integration&#10; WF[Workflow System] --&gt; |Manages| TW[Temporal Worker]&#10; TW --&gt; |Executes| AC[Activities]&#10; TW --&gt; |Connects to| TS[Temporal Server]&#10; &#10; subgraph State Management&#10; TS --&gt; |Manages| WS[Workflow State]&#10; WS --&gt; |Tracks| AS[Agent State]&#10; WS --&gt; |Tracks| TS1[Tool State]&#10; WS --&gt; |Tracks| ES[Error State]&#10; end&#10;&#10; subgraph Reliability Features&#10; TS --&gt; |Provides| R1[Automatic Retries]&#10; TS --&gt; |Provides| R2[Error Recovery]&#10; TS --&gt; |Provides| R3[State Persistence]&#10; TS --&gt; |Provides| R4[Workflow History]&#10; end&#10;&#10; subgraph Monitoring&#10; TS --&gt; |Enables| M1[Execution Metrics]&#10; TS --&gt; |Enables| M2[Error Tracking]&#10; TS --&gt; |Enables| M3[Performance Stats]&#10; TS --&gt; |Enables| M4[Workflow Visualization]&#10; end&#10; end&#10;&#10; classDef core fill:#f9f,stroke:#333,stroke-width:2px&#10; classDef state fill:#bbf,stroke:#333,stroke-width:2px&#10; classDef feature fill:#bfb,stroke:#333,stroke-width:2px&#10; classDef monitor fill:#fbb,stroke:#333,stroke-width:2px&#10;&#10; class WF,TW,AC,TS core&#10; class WS,AS,TS1,ES state&#10; class R1,R2,R3,R4 feature&#10; class M1,M2,M3,M4 monitor&#10;&#10;\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" vertex=\\"1\\" parent=\\"1\\">\\n <mxGeometry x=\\"242\\" y=\\"169\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/>\\n </mxCell>\\n </root>\\n </mxGraphModel>\\n </diagram><diagram id=\\"FU8wRJNSLGF58lYnAYQQ\\" name=\\"Tool System\\">\\n <mxGraphModel dx=\\"307\\" dy=\\"248\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"1\\">\\n <root>\\n <mxCell id=\\"0\\"/>\\n <mxCell id=\\"1\\" parent=\\"0\\"/>\\n <mxCell id=\\"T-pgXY2fyKOihok5m5tA-1\\" value=\\"graph TB&#10; subgraph Tool Management&#10; TM[Tool Manager] --&gt; |Manages| TR[Tool Registry]&#10; TR --&gt; |Registers| T1[Web Search Tool]&#10; TR --&gt; |Registers| T2[Code Eval Tool]&#10; TR --&gt; |Registers| T3[Math Tool]&#10; &#10; TM --&gt; |Provides| TI[Tool Interface]&#10; TI --&gt; |Used by| DA[Declarative Agent]&#10; end&#10;&#10; subgraph Tool Execution&#10; T1 --&gt; |Uses| WS[Web Search API]&#10; T2 --&gt; |Uses| CE[Code Executor]&#10; T3 --&gt; |Uses| ME[Math Engine]&#10; &#10; WS --&gt; |Returns| R1[Search Results]&#10; CE --&gt; |Returns| R2[Execution Results]&#10; ME --&gt; |Returns| R3[Math Results]&#10; end&#10;&#10; subgraph Error Handling&#10; TM --&gt; |Manages| EH[Error Handler]&#10; EH --&gt; |Handles| E1[API Errors]&#10; EH --&gt; |Handles| E2[Execution Errors]&#10; EH --&gt; |Handles| E3[Validation Errors]&#10; end&#10;&#10; classDef core fill:#f9f,stroke:#333,stroke-width:2px&#10; classDef tool fill:#bbf,stroke:#333,stroke-width:2px&#10; classDef handler fill:#bfb,stroke:#333,stroke-width:2px&#10;&#10; class TM,TR,TI core&#10; class T1,T2,T3,WS,CE,ME tool&#10; class EH,E1,E2,E3 handler\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" vertex=\\"1\\" parent=\\"1\\">\\n <mxGeometry x=\\"240\\" y=\\"170\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/>\\n </mxCell>\\n </root>\\n </mxGraphModel>\\n </diagram><diagram id=\\"44PLLl0pgulDx2n2xTWC\\" name=\\"Type System\\">\\n <mxGraphModel dx=\\"767\\" dy=\\"620\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"1\\">\\n <root>\\n <mxCell id=\\"0\\"/>\\n <mxCell id=\\"1\\" parent=\\"0\\"/>\\n <mxCell id=\\"jTONh3Pudjw2xIwc2DDu-1\\" value=\\"classDiagram&#10; class TypeSystem {&#10; +register_type(name, validator, serializer)&#10; +validate(value, type_def)&#10; +parse_type_string(type_str)&#10; -_validate_complex_type(value, type_def)&#10; }&#10;&#10; class TypeDefinition {&#10; +name: str&#10; +validators: List&#10; +serializers: Optional&#10; +validate(value)&#10; +serialize(value)&#10; }&#10;&#10; class DeclarativeAgent {&#10; +input: str&#10; +output: str&#10; +tools: List&#10; +validate_input(value)&#10; +validate_output(value)&#10; }&#10;&#10; class Validator {&#10; +validate(value)&#10; +coerce(value)&#10; }&#10;&#10; TypeSystem --&gt; TypeDefinition : manages&#10; DeclarativeAgent --&gt; TypeSystem : uses&#10; TypeDefinition --&gt; Validator : uses&#10;&#10;\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" vertex=\\"1\\" parent=\\"1\\">\\n <mxGeometry x=\\"242\\" y=\\"169\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/>\\n </mxCell>\\n </root>\\n </mxGraphModel>\\n </diagram></mxfile>"}',
11
- cls="mxgraph",
12
- ),
13
- Script(type="text/javascript", src="https://viewer.diagrams.net/js/viewer-static.min.js"),
14
- )
@@ -1,14 +0,0 @@
1
- from fasthtml.common import *
2
- from fasthtml.svg import *
3
- from monsterui.all import *
4
-
5
-
6
- def CoreArchitectureChart():
7
- return Div(
8
- Div(
9
- style="max-width:100%;border:1px solid transparent;",
10
- data_mxgraph='{"highlight":"#0000ff","nav":true,"resize":true,"page":0,"toolbar":"pages zoom layers tags lightbox","edit":"_blank","xml":"<mxfile><diagram id=\\"l7_B5a2V6sOU66k4eApJ\\" name=\\"Core Architecture\\"><mxGraphModel dx=\\"1139\\" dy=\\"934\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#FFFFFF\\" math=\\"0\\" shadow=\\"1\\"><root><mxCell id=\\"0\\"/><mxCell id=\\"1\\" parent=\\"0\\"/><mxCell id=\\"3\\" value=\\"graph TB&#10; subgraph User Application&#10; UA[User Code] --&gt; |Uses| SM[Flock Manager]&#10; end&#10;&#10; subgraph Flock Core&#10; SM --&gt; |Manages| AR[Agent Registry]&#10; SM --&gt; |Executes| WF[Workflow System]&#10; &#10; subgraph Agents&#10; AR --&gt; |Registers| DA[Declarative Agent]&#10; DA --&gt; |Uses| TS[Type System]&#10; DA --&gt; |Uses| TM[Tool Manager]&#10; end&#10; &#10; subgraph Workflow&#10; WF --&gt; |Runs| AC[Activities]&#10; WF --&gt; |Uses| TW[Temporal Worker]&#10; AC --&gt; |Executes| DA&#10; end&#10; end&#10;&#10; subgraph External Systems&#10; TW --&gt; |Connects to| TS1[Temporal Server]&#10; TM --&gt; |Integrates| T1[Web Search]&#10; TM --&gt; |Integrates| T2[Code Eval]&#10; TM --&gt; |Integrates| T3[Math Tools]&#10; DA --&gt; |Uses| LLM[LLM Provider]&#10; end&#10;&#10; classDef core fill:#f9f,stroke:#333,stroke-width:2px&#10; classDef external fill:#bbf,stroke:#333,stroke-width:2px&#10; classDef user fill:#bfb,stroke:#333,stroke-width:2px&#10; &#10; class SM,AR,DA,WF,AC,TM,TS core&#10; class TS1,T1,T2,T3,LLM external&#10; class UA user&#10;&#10;\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;rounded=1;\\" parent=\\"1\\" vertex=\\"1\\"><mxGeometry x=\\"200\\" y=\\"310\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/></mxCell></root></mxGraphModel></diagram><diagram id=\\"m33Os__FMXyp1zJ4IDTH\\" name=\\"Agent Workflow\\"><mxGraphModel dx=\\"1139\\" dy=\\"934\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"1\\"><root><mxCell id=\\"0\\"/><mxCell id=\\"1\\" parent=\\"0\\"/><mxCell id=\\"Yf0mmGmI6B4_u023lZ5C-1\\" value=\\"sequenceDiagram&#10; participant User&#10; participant Flock&#10; participant Agent&#10; participant Tools&#10; participant LLM&#10; participant Temporal&#10;&#10; User-&gt;&gt;Flock: Create Agent&#10; Flock-&gt;&gt;Agent: Initialize&#10; User-&gt;&gt;Flock: activate(agent, input)&#10; &#10; alt Local Debug Mode&#10; Flock-&gt;&gt;Agent: Execute Directly&#10; else Production Mode&#10; Flock-&gt;&gt;Temporal: Start Workflow&#10; Temporal-&gt;&gt;Agent: Execute via Activity&#10; end&#10;&#10; loop Agent Execution&#10; Agent-&gt;&gt;LLM: Process Input&#10; opt Tool Usage&#10; Agent-&gt;&gt;Tools: Execute Tool&#10; Tools--&gt;&gt;Agent: Tool Result&#10; end&#10; Agent-&gt;&gt;LLM: Generate Output&#10; end&#10;&#10; alt Has Hand-off&#10; Agent-&gt;&gt;Flock: Hand off to Next Agent&#10; Flock-&gt;&gt;Agent: Start Next Agent&#10; else No Hand-off&#10; Agent--&gt;&gt;Flock: Return Result&#10; end&#10;&#10; Flock--&gt;&gt;User: Return Final Result\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" parent=\\"1\\" vertex=\\"1\\"><mxGeometry x=\\"275\\" y=\\"114\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/></mxCell></root></mxGraphModel></diagram><diagram id=\\"zsmzvY-bLYlccnSXdfzv\\" name=\\"Temporal Workflow\\">\\n <mxGraphModel dx=\\"205\\" dy=\\"165\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"1\\">\\n <root>\\n <mxCell id=\\"0\\"/>\\n <mxCell id=\\"1\\" parent=\\"0\\"/>\\n <mxCell id=\\"LGo0nXY-PDX6Si-UCiUW-1\\" value=\\"graph TB&#10; subgraph Temporal Integration&#10; WF[Workflow System] --&gt; |Manages| TW[Temporal Worker]&#10; TW --&gt; |Executes| AC[Activities]&#10; TW --&gt; |Connects to| TS[Temporal Server]&#10; &#10; subgraph State Management&#10; TS --&gt; |Manages| WS[Workflow State]&#10; WS --&gt; |Tracks| AS[Agent State]&#10; WS --&gt; |Tracks| TS1[Tool State]&#10; WS --&gt; |Tracks| ES[Error State]&#10; end&#10;&#10; subgraph Reliability Features&#10; TS --&gt; |Provides| R1[Automatic Retries]&#10; TS --&gt; |Provides| R2[Error Recovery]&#10; TS --&gt; |Provides| R3[State Persistence]&#10; TS --&gt; |Provides| R4[Workflow History]&#10; end&#10;&#10; subgraph Monitoring&#10; TS --&gt; |Enables| M1[Execution Metrics]&#10; TS --&gt; |Enables| M2[Error Tracking]&#10; TS --&gt; |Enables| M3[Performance Stats]&#10; TS --&gt; |Enables| M4[Workflow Visualization]&#10; end&#10; end&#10;&#10; classDef core fill:#f9f,stroke:#333,stroke-width:2px&#10; classDef state fill:#bbf,stroke:#333,stroke-width:2px&#10; classDef feature fill:#bfb,stroke:#333,stroke-width:2px&#10; classDef monitor fill:#fbb,stroke:#333,stroke-width:2px&#10;&#10; class WF,TW,AC,TS core&#10; class WS,AS,TS1,ES state&#10; class R1,R2,R3,R4 feature&#10; class M1,M2,M3,M4 monitor&#10;&#10;\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" vertex=\\"1\\" parent=\\"1\\">\\n <mxGeometry x=\\"242\\" y=\\"169\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/>\\n </mxCell>\\n </root>\\n </mxGraphModel>\\n </diagram><diagram id=\\"FU8wRJNSLGF58lYnAYQQ\\" name=\\"Tool System\\">\\n <mxGraphModel dx=\\"307\\" dy=\\"248\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"1\\">\\n <root>\\n <mxCell id=\\"0\\"/>\\n <mxCell id=\\"1\\" parent=\\"0\\"/>\\n <mxCell id=\\"T-pgXY2fyKOihok5m5tA-1\\" value=\\"graph TB&#10; subgraph Tool Management&#10; TM[Tool Manager] --&gt; |Manages| TR[Tool Registry]&#10; TR --&gt; |Registers| T1[Web Search Tool]&#10; TR --&gt; |Registers| T2[Code Eval Tool]&#10; TR --&gt; |Registers| T3[Math Tool]&#10; &#10; TM --&gt; |Provides| TI[Tool Interface]&#10; TI --&gt; |Used by| DA[Declarative Agent]&#10; end&#10;&#10; subgraph Tool Execution&#10; T1 --&gt; |Uses| WS[Web Search API]&#10; T2 --&gt; |Uses| CE[Code Executor]&#10; T3 --&gt; |Uses| ME[Math Engine]&#10; &#10; WS --&gt; |Returns| R1[Search Results]&#10; CE --&gt; |Returns| R2[Execution Results]&#10; ME --&gt; |Returns| R3[Math Results]&#10; end&#10;&#10; subgraph Error Handling&#10; TM --&gt; |Manages| EH[Error Handler]&#10; EH --&gt; |Handles| E1[API Errors]&#10; EH --&gt; |Handles| E2[Execution Errors]&#10; EH --&gt; |Handles| E3[Validation Errors]&#10; end&#10;&#10; classDef core fill:#f9f,stroke:#333,stroke-width:2px&#10; classDef tool fill:#bbf,stroke:#333,stroke-width:2px&#10; classDef handler fill:#bfb,stroke:#333,stroke-width:2px&#10;&#10; class TM,TR,TI core&#10; class T1,T2,T3,WS,CE,ME tool&#10; class EH,E1,E2,E3 handler\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" vertex=\\"1\\" parent=\\"1\\">\\n <mxGeometry x=\\"240\\" y=\\"170\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/>\\n </mxCell>\\n </root>\\n </mxGraphModel>\\n </diagram><diagram id=\\"44PLLl0pgulDx2n2xTWC\\" name=\\"Type System\\">\\n <mxGraphModel dx=\\"767\\" dy=\\"620\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"1\\">\\n <root>\\n <mxCell id=\\"0\\"/>\\n <mxCell id=\\"1\\" parent=\\"0\\"/>\\n <mxCell id=\\"jTONh3Pudjw2xIwc2DDu-1\\" value=\\"classDiagram&#10; class TypeSystem {&#10; +register_type(name, validator, serializer)&#10; +validate(value, type_def)&#10; +parse_type_string(type_str)&#10; -_validate_complex_type(value, type_def)&#10; }&#10;&#10; class TypeDefinition {&#10; +name: str&#10; +validators: List&#10; +serializers: Optional&#10; +validate(value)&#10; +serialize(value)&#10; }&#10;&#10; class DeclarativeAgent {&#10; +input: str&#10; +output: str&#10; +tools: List&#10; +validate_input(value)&#10; +validate_output(value)&#10; }&#10;&#10; class Validator {&#10; +validate(value)&#10; +coerce(value)&#10; }&#10;&#10; TypeSystem --&gt; TypeDefinition : manages&#10; DeclarativeAgent --&gt; TypeSystem : uses&#10; TypeDefinition --&gt; Validator : uses&#10;&#10;\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" vertex=\\"1\\" parent=\\"1\\">\\n <mxGeometry x=\\"242\\" y=\\"169\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/>\\n </mxCell>\\n </root>\\n </mxGraphModel>\\n </diagram></mxfile>"}',
11
- cls="mxgraph",
12
- ),
13
- Script(type="text/javascript", src="https://viewer.diagrams.net/js/viewer-static.min.js"),
14
- )
@@ -1,14 +0,0 @@
1
- from fasthtml.common import *
2
- from fasthtml.svg import *
3
- from monsterui.all import *
4
-
5
-
6
- def ToolSystemChart():
7
- return Div(
8
- Div(
9
- style="max-width:100%;border:1px solid transparent;",
10
- data_mxgraph='{"highlight":"#0000ff","nav":true,"resize":true,"page":3,"toolbar":"pages zoom layers tags lightbox","edit":"_blank","xml":"<mxfile><diagram id=\\"l7_B5a2V6sOU66k4eApJ\\" name=\\"Core Architecture\\"><mxGraphModel dx=\\"380\\" dy=\\"311\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#FFFFFF\\" math=\\"0\\" shadow=\\"0\\"><root><mxCell id=\\"0\\"/><mxCell id=\\"1\\" parent=\\"0\\"/><mxCell id=\\"3\\" value=\\"graph TB&#10; subgraph User Application&#10; UA[User Code] --&gt; |Uses| SM[Flock Manager]&#10; end&#10;&#10; subgraph Flock Core&#10; SM --&gt; |Manages| AR[Agent Registry]&#10; SM --&gt; |Executes| WF[Workflow System]&#10; &#10; subgraph Agents&#10; AR --&gt; |Registers| DA[Declarative Agent]&#10; DA --&gt; |Uses| TS[Type System]&#10; DA --&gt; |Uses| TM[Tool Manager]&#10; end&#10; &#10; subgraph Workflow&#10; WF --&gt; |Runs| AC[Activities]&#10; WF --&gt; |Uses| TW[Temporal Worker]&#10; AC --&gt; |Executes| DA&#10; end&#10; end&#10;&#10; subgraph External Systems&#10; TW --&gt; |Connects to| TS1[Temporal Server]&#10; TM --&gt; |Integrates| T1[Web Search]&#10; TM --&gt; |Integrates| T2[Code Eval]&#10; TM --&gt; |Integrates| T3[Math Tools]&#10; DA --&gt; |Uses| LLM[LLM Provider]&#10; end&#10;&#10; classDef core fill:#f9f,stroke:#333,stroke-width:2px&#10; classDef external fill:#bbf,stroke:#333,stroke-width:2px&#10; classDef user fill:#bfb,stroke:#333,stroke-width:2px&#10; &#10; class SM,AR,DA,WF,AC,TM,TS core&#10; class TS1,T1,T2,T3,LLM external&#10; class UA user&#10;&#10;\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;rounded=1;\\" parent=\\"1\\" vertex=\\"1\\"><mxGeometry x=\\"200\\" y=\\"310\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/></mxCell></root></mxGraphModel></diagram><diagram id=\\"m33Os__FMXyp1zJ4IDTH\\" name=\\"Agent Workflow\\"><mxGraphModel dx=\\"316\\" dy=\\"259\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"0\\"><root><mxCell id=\\"0\\"/><mxCell id=\\"1\\" parent=\\"0\\"/><mxCell id=\\"Yf0mmGmI6B4_u023lZ5C-1\\" value=\\"sequenceDiagram&#10; participant User&#10; participant Flock&#10; participant Agent&#10; participant Tools&#10; participant LLM&#10; participant Temporal&#10;&#10; User-&gt;&gt;Flock: Create Agent&#10; Flock-&gt;&gt;Agent: Initialize&#10; User-&gt;&gt;Flock: activate(agent, input)&#10; &#10; alt Local Debug Mode&#10; Flock-&gt;&gt;Agent: Execute Directly&#10; else Production Mode&#10; Flock-&gt;&gt;Temporal: Start Workflow&#10; Temporal-&gt;&gt;Agent: Execute via Activity&#10; end&#10;&#10; loop Agent Execution&#10; Agent-&gt;&gt;LLM: Process Input&#10; opt Tool Usage&#10; Agent-&gt;&gt;Tools: Execute Tool&#10; Tools--&gt;&gt;Agent: Tool Result&#10; end&#10; Agent-&gt;&gt;LLM: Generate Output&#10; end&#10;&#10; alt Has Hand-off&#10; Agent-&gt;&gt;Flock: Hand off to Next Agent&#10; Flock-&gt;&gt;Agent: Start Next Agent&#10; else No Hand-off&#10; Agent--&gt;&gt;Flock: Return Result&#10; end&#10;&#10; Flock--&gt;&gt;User: Return Final Result\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" parent=\\"1\\" vertex=\\"1\\"><mxGeometry x=\\"275\\" y=\\"114\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/></mxCell></root></mxGraphModel></diagram><diagram id=\\"zsmzvY-bLYlccnSXdfzv\\" name=\\"Temporal Workflow\\"><mxGraphModel dx=\\"1139\\" dy=\\"934\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"1\\"><root><mxCell id=\\"0\\"/><mxCell id=\\"1\\" parent=\\"0\\"/><mxCell id=\\"LGo0nXY-PDX6Si-UCiUW-1\\" value=\\"graph TB&#10; subgraph Temporal Integration&#10; WF[Workflow System] --&gt; |Manages| TW[Temporal Worker]&#10; TW --&gt; |Executes| AC[Activities]&#10; TW --&gt; |Connects to| TS[Temporal Server]&#10; &#10; subgraph State Management&#10; TS --&gt; |Manages| WS[Workflow State]&#10; WS --&gt; |Tracks| AS[Agent State]&#10; WS --&gt; |Tracks| TS1[Tool State]&#10; WS --&gt; |Tracks| ES[Error State]&#10; end&#10;&#10; subgraph Reliability Features&#10; TS --&gt; |Provides| R1[Automatic Retries]&#10; TS --&gt; |Provides| R2[Error Recovery]&#10; TS --&gt; |Provides| R3[State Persistence]&#10; TS --&gt; |Provides| R4[Workflow History]&#10; end&#10;&#10; subgraph Monitoring&#10; TS --&gt; |Enables| M1[Execution Metrics]&#10; TS --&gt; |Enables| M2[Error Tracking]&#10; TS --&gt; |Enables| M3[Performance Stats]&#10; TS --&gt; |Enables| M4[Workflow Visualization]&#10; end&#10; end&#10;&#10; classDef core fill:#f9f,stroke:#333,stroke-width:2px&#10; classDef state fill:#bbf,stroke:#333,stroke-width:2px&#10; classDef feature fill:#bfb,stroke:#333,stroke-width:2px&#10; classDef monitor fill:#fbb,stroke:#333,stroke-width:2px&#10;&#10; class WF,TW,AC,TS core&#10; class WS,AS,TS1,ES state&#10; class R1,R2,R3,R4 feature&#10; class M1,M2,M3,M4 monitor&#10;&#10;\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" parent=\\"1\\" vertex=\\"1\\"><mxGeometry x=\\"242\\" y=\\"169\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/></mxCell></root></mxGraphModel></diagram><diagram id=\\"FU8wRJNSLGF58lYnAYQQ\\" name=\\"Tool System\\"><mxGraphModel dx=\\"316\\" dy=\\"259\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"0\\"><root><mxCell id=\\"0\\"/><mxCell id=\\"1\\" parent=\\"0\\"/><mxCell id=\\"T-pgXY2fyKOihok5m5tA-1\\" value=\\"graph TB&#10; subgraph Tool Management&#10; TM[Tool Manager] --&gt; |Manages| TR[Tool Registry]&#10; TR --&gt; |Registers| T1[Web Search Tool]&#10; TR --&gt; |Registers| T2[Code Eval Tool]&#10; TR --&gt; |Registers| T3[Math Tool]&#10; &#10; TM --&gt; |Provides| TI[Tool Interface]&#10; TI --&gt; |Used by| DA[Declarative Agent]&#10; end&#10;&#10; subgraph Tool Execution&#10; T1 --&gt; |Uses| WS[Web Search API]&#10; T2 --&gt; |Uses| CE[Code Executor]&#10; T3 --&gt; |Uses| ME[Math Engine]&#10; &#10; WS --&gt; |Returns| R1[Search Results]&#10; CE --&gt; |Returns| R2[Execution Results]&#10; ME --&gt; |Returns| R3[Math Results]&#10; end&#10;&#10; subgraph Error Handling&#10; TM --&gt; |Manages| EH[Error Handler]&#10; EH --&gt; |Handles| E1[API Errors]&#10; EH --&gt; |Handles| E2[Execution Errors]&#10; EH --&gt; |Handles| E3[Validation Errors]&#10; end&#10;&#10; classDef core fill:#f9f,stroke:#333,stroke-width:2px&#10; classDef tool fill:#bbf,stroke:#333,stroke-width:2px&#10; classDef handler fill:#bfb,stroke:#333,stroke-width:2px&#10;&#10; class TM,TR,TI core&#10; class T1,T2,T3,WS,CE,ME tool&#10; class EH,E1,E2,E3 handler\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" parent=\\"1\\" vertex=\\"1\\"><mxGeometry x=\\"224\\" y=\\"232\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/></mxCell></root></mxGraphModel></diagram><diagram id=\\"44PLLl0pgulDx2n2xTWC\\" name=\\"Type System\\"><mxGraphModel dx=\\"380\\" dy=\\"311\\" grid=\\"0\\" gridSize=\\"10\\" guides=\\"1\\" tooltips=\\"1\\" connect=\\"1\\" arrows=\\"1\\" fold=\\"1\\" page=\\"1\\" pageScale=\\"1\\" pageWidth=\\"850\\" pageHeight=\\"1100\\" background=\\"#ffffff\\" math=\\"0\\" shadow=\\"1\\"><root><mxCell id=\\"0\\"/><mxCell id=\\"1\\" parent=\\"0\\"/><mxCell id=\\"jTONh3Pudjw2xIwc2DDu-1\\" value=\\"classDiagram&#10; class TypeSystem {&#10; +register_type(name, validator, serializer)&#10; +validate(value, type_def)&#10; +parse_type_string(type_str)&#10; -_validate_complex_type(value, type_def)&#10; }&#10;&#10; class TypeDefinition {&#10; +name: str&#10; +validators: List&#10; +serializers: Optional&#10; +validate(value)&#10; +serialize(value)&#10; }&#10;&#10; class DeclarativeAgent {&#10; +input: str&#10; +output: str&#10; +tools: List&#10; +validate_input(value)&#10; +validate_output(value)&#10; }&#10;&#10; class Validator {&#10; +validate(value)&#10; +coerce(value)&#10; }&#10;&#10; TypeSystem --&gt; TypeDefinition : manages&#10; DeclarativeAgent --&gt; TypeSystem : uses&#10; TypeDefinition --&gt; Validator : uses&#10;&#10;\\" style=\\"shadow=0;dashed=0;align=left;strokeWidth=1;shape=mxgraph.mermaid.abstract.mermaid;labelBackgroundColor=#ffffff;noLabel=1;theme=default;\\" parent=\\"1\\" vertex=\\"1\\"><mxGeometry x=\\"242\\" y=\\"169\\" width=\\"300\\" height=\\"300\\" as=\\"geometry\\"/></mxCell></root></mxGraphModel></diagram></mxfile>"}',
11
- cls="mxgraph",
12
- ),
13
- Script(type="text/javascript", src="https://viewer.diagrams.net/js/viewer-static.min.js"),
14
- )
@@ -1,168 +0,0 @@
1
- """Agent History Explorer built with MonsterUI"""
2
-
3
- import json
4
- from datetime import datetime
5
-
6
- from fasthtml.common import *
7
- from monsterui.all import *
8
-
9
-
10
- def load_history(page=1, per_page=10, search=None):
11
- with open("data/history.json") as f:
12
- data = json.load(f)
13
-
14
- if search:
15
- search = search.lower()
16
- data = [
17
- d
18
- for d in data
19
- if search in d["agent_name"].lower() or search in d["location"].lower() or search in d["date"].lower()
20
- ]
21
-
22
- total = len(data)
23
- pages = (total + per_page - 1) // per_page
24
- start = (page - 1) * per_page
25
- return {"data": data[start : start + per_page], "total": total, "pages": pages, "page": page}
26
-
27
-
28
- def format_date(iso_date):
29
- return datetime.fromisoformat(iso_date).strftime("%b %d, %Y %H:%M")
30
-
31
-
32
- def json_preview(value):
33
- return Pre(json.dumps(value, indent=2), cls="text-xs p-2 bg-muted rounded-md max-h-40 overflow-auto")
34
-
35
-
36
- def header_render(col):
37
- return Th(col, cls="p-2 text-left")
38
-
39
-
40
- def cell_render(col, val):
41
- """Modified cell renderer that only uses column value"""
42
- match col:
43
- case "Agent":
44
- return Td(cls="p-2 font-medium")(Div(val))
45
- case "Date":
46
- return Td(cls="p-2 text-sm")(format_date(val))
47
- case "Location":
48
- return Td(cls="p-2 capitalize")(val) # val is already location string
49
- case "Input" | "Output":
50
- return Td(cls="p-2")(json_preview(val))
51
- case "Details":
52
- # val contains the full record here
53
- return Td(cls="p-2")(Button("View", cls=ButtonT.primary, uk_toggle=f"target: #details-{val['agent_id']}"))
54
-
55
-
56
- def details_modal(record):
57
- return Modal(
58
- Div(cls="p-6 space-y-4")(
59
- ModalTitle(f"{record['agent_name']} - {format_date(record['date'])}"),
60
- Grid(
61
- Div(cls="space-y-2")(H4("Input Details", cls="text-sm font-medium"), json_preview(record["input"])),
62
- Div(cls="space-y-2")(H4("Output Details", cls="text-sm font-medium"), json_preview(record["output"])),
63
- ),
64
- DivRAligned(ModalCloseButton("Close", cls=ButtonT.ghost)),
65
- ),
66
- id=f"details-{record['agent_id']}",
67
- )
68
-
69
-
70
- def get_history(page: int = 1, per_page: int = 5, search: str = None, reduced=False):
71
- history = load_history(page, per_page, search)
72
-
73
- controls = DivFullySpaced(cls="mt-8")(
74
- Div(cls="flex gap-4 items-center")(
75
- Input(
76
- placeholder="Search agents...",
77
- value=search,
78
- name="search",
79
- hx_get="/history",
80
- hx_trigger="keyup changed delay:500ms",
81
- hx_target="#history-content",
82
- hx_include="[name='per_page']",
83
- cls="w-64",
84
- ),
85
- Select(
86
- Option("5", value="5"),
87
- Option("10", value="10"),
88
- Option("20", value="20"),
89
- name="per_page",
90
- value=str(per_page),
91
- hx_get="/history",
92
- hx_trigger="change",
93
- hx_target="#history-content",
94
- cls="w-24",
95
- ),
96
- )
97
- )
98
-
99
- if reduced:
100
- header_data = ["Agent", "Date", "Details"]
101
- bodydata = [
102
- {
103
- "Agent": d["agent_name"],
104
- "Date": d["date"],
105
- "Details": d, # Store full record here
106
- }
107
- for d in history["data"]
108
- ]
109
- else:
110
- header_data = ["Agent", "Date", "Input", "Output", "Details"]
111
- bodydata = [
112
- {
113
- "Agent": d["agent_name"],
114
- "Date": d["date"],
115
- # "Location": d["input"]["location"], # Pre-extract location
116
- "Input": d["input"],
117
- "Output": d["output"],
118
- "Details": d, # Store full record here
119
- }
120
- for d in history["data"]
121
- ]
122
-
123
- table = TableFromDicts(
124
- header_data=header_data,
125
- body_data=bodydata,
126
- body_cell_render=cell_render,
127
- header_cell_render=header_render,
128
- cls=TableT.responsive,
129
- )
130
-
131
- footer = DivFullySpaced(cls="mt-4")(
132
- Div(
133
- f"Showing {min(history['total'], per_page)} of {history['total']} records",
134
- cls="text-sm text-muted-foreground",
135
- ),
136
- Div(cls="flex items-center gap-4")(
137
- Button(
138
- "< Prev",
139
- hx_get=f"/history?page={history['page'] - 1}",
140
- hx_target="#history-content",
141
- disabled=history["page"] == 1,
142
- cls=ButtonT.primary,
143
- ),
144
- Span(f"Page {history['page']} of {history['pages']}"),
145
- Button(
146
- "Next >",
147
- hx_get=f"/history?page={history['page'] + 1}",
148
- hx_target="#history-content",
149
- disabled=history["page"] == history["pages"],
150
- cls=ButtonT.primary,
151
- ),
152
- ),
153
- )
154
-
155
- return Div(id="history-content")(controls, table, footer, *[details_modal(d) for d in history["data"]])
156
-
157
-
158
- def HistoryGrid(reduced=False):
159
- if reduced:
160
- return get_history(reduced)
161
-
162
- return Div(cls="flex flex-col")(
163
- Div(cls="px-4 py-2 ")(
164
- H3("Agent History Explorer"),
165
- P("Review historical agent executions and their outcomes", cls=TextFont.muted_sm),
166
- ),
167
- get_history(reduced),
168
- )
@@ -1,189 +0,0 @@
1
- """Agent History Explorer built with MonsterUI"""
2
-
3
- import json
4
- from datetime import datetime
5
-
6
- from fasthtml.common import *
7
- from monsterui.all import *
8
-
9
-
10
- def format_date(iso_date):
11
- return datetime.fromisoformat(iso_date).strftime("%b %d, %Y %H:%M")
12
-
13
-
14
- def json_preview(value):
15
- return Pre(json.dumps(value, indent=2), cls="text-xs p-2 bg-muted rounded-md max-h-40 overflow-auto")
16
-
17
-
18
- def header_render(col):
19
- return Th(col, cls="p-2 text-left")
20
-
21
-
22
- def cell_render(col, val):
23
- """Modified cell renderer that only uses column value"""
24
- match col:
25
- case "Agent":
26
- return Td(cls="p-2 font-medium")(Div(val))
27
- case "Date":
28
- return Td(cls="p-2 text-sm")(format_date(val))
29
- case "Location":
30
- return Td(cls="p-2 capitalize")(val) # val is already location string
31
- case "Input" | "Output":
32
- return Td(cls="p-2")(json_preview(val))
33
- case "Details":
34
- # val contains the full record here
35
- return Td(cls="p-2")(Button("View", cls=ButtonT.primary, uk_toggle=f"target: #details-{val['agent_id']}"))
36
-
37
-
38
- def load_history(page=1, per_page=10, search=None):
39
- with open("data/history.json") as f:
40
- data = json.load(f)
41
-
42
- # Full-text search across all fields
43
- if search:
44
- search = search.lower()
45
- data = [
46
- d
47
- for d in data
48
- if any(search in str(v).lower() for v in d.values())
49
- or any(search in str(v).lower() for sub in [d["input"], d["output"]] for v in sub.values())
50
- ]
51
-
52
- total = len(data)
53
- pages = (total + per_page - 1) // per_page
54
- start = (page - 1) * per_page
55
- return {"data": data[start : start + per_page], "total": total, "pages": pages, "page": page}
56
-
57
-
58
- def json_tree(value, depth=0):
59
- if isinstance(value, dict):
60
- return Div(cls=f"ml-{depth * 2} space-y-1")(
61
- *[Details(Summary(k, cls="inline-flex items-center"), json_tree(v, depth + 1)) for k, v in value.items()]
62
- )
63
- elif isinstance(value, list):
64
- return Div(cls=f"ml-{depth * 2} space-y-1")(
65
- *[
66
- Div(cls="flex items-center gap-2")(Span("•", cls="text-muted-foreground"), json_tree(item, depth + 1))
67
- for item in value
68
- ]
69
- )
70
- return Span(str(value), cls="text-muted-foreground")
71
-
72
-
73
- def render_cell(col, val):
74
- match col:
75
- case "date":
76
- return datetime.fromisoformat(val).strftime("%b %d, %Y %H:%M")
77
- case "input" | "output":
78
- return Div(cls="max-w-[300px] overflow-auto p-2 bg-muted rounded-md")(json_tree(val))
79
- case "_expand":
80
- return Button("Expand", cls=ButtonT.primary, uk_toggle=f"target: #details-{val['agent_id']}")
81
- case _:
82
- return val if isinstance(val, str) else json.dumps(val, default=str)
83
-
84
-
85
- def details_modal(record):
86
- return Modal(
87
- Div(cls="p-6 space-y-4")(
88
- ModalTitle(f"Agent Execution Details - {record['agent_id']}"),
89
- Div(cls="space-y-4")(
90
- Div(cls="grid grid-cols-2 gap-4")(
91
- Div(cls="space-y-2")(H4("Input", cls="text-sm font-medium"), json_tree(record["input"])),
92
- Div(cls="space-y-2")(H4("Output", cls="text-sm font-medium"), json_tree(record["output"])),
93
- ),
94
- Div(cls="space-y-2")(
95
- H4("Metadata", cls="text-sm font-medium"),
96
- json_tree({k: v for k, v in record.items() if k not in ["input", "output"]}),
97
- ),
98
- ),
99
- DivRAligned(ModalCloseButton("Close", cls=ButtonT.ghost)),
100
- ),
101
- id=f"details-{record['agent_id']}",
102
- )
103
-
104
-
105
- def Pagination(current_page, total_pages, hx_get, hx_target):
106
- return Div(cls="flex items-center gap-2")(
107
- Button(
108
- "Previous",
109
- disabled=current_page == 1,
110
- hx_get=f"{hx_get}?page={current_page - 1}",
111
- hx_target=hx_target,
112
- cls=ButtonT.primary,
113
- ),
114
- Span(f"Page {current_page} of {total_pages}", cls="text-sm"),
115
- Button(
116
- "Next",
117
- disabled=current_page >= total_pages,
118
- hx_get=f"{hx_get}?page={current_page + 1}",
119
- hx_target=hx_target,
120
- cls=ButtonT.primary,
121
- ),
122
- )
123
-
124
-
125
- def get_history(page: int = 1, per_page: int = 10, search: str = None):
126
- history = load_history(page, per_page, search)
127
-
128
- # Dynamic columns from first record (if exists)
129
- columns = []
130
- if history["data"]:
131
- sample = history["data"][0]
132
- columns = [k for k in sample.keys() if k not in ["input", "output", "agent_id"]]
133
- columns += ["input", "output", "_expand"]
134
-
135
- controls = DivFullySpaced(cls="mt-8")(
136
- Input(
137
- placeholder="Search history...",
138
- value=search,
139
- name="search",
140
- hx_get="/history",
141
- hx_trigger="keyup changed delay:500ms",
142
- hx_target="#history-content",
143
- hx_include="[name='per_page']",
144
- cls="w-64",
145
- ),
146
- Select(
147
- *[Option(str(n), value=str(n)) for n in [5, 10, 20, 50]],
148
- name="per_page",
149
- value=str(per_page),
150
- hx_get="/history",
151
- hx_trigger="change",
152
- hx_target="#history-content",
153
- cls="w-24",
154
- ),
155
- )
156
-
157
- table = TableFromDicts(
158
- header_data=columns,
159
- body_data=[{**d, "_expand": d} for d in history["data"]],
160
- body_cell_render=lambda col, val: Td(render_cell(col, val)),
161
- header_cell_render=lambda col: Th(col.replace("_", " ").title(), cls="p-2 text-left"),
162
- cls=f"{TableT.responsive} {TableT.hover}",
163
- )
164
-
165
- footer = DivFullySpaced(cls="mt-4")(
166
- Div(
167
- f"Showing {(page - 1) * per_page + 1}-{min(page * per_page, history['total'])} of {history['total']} records",
168
- cls="text-sm text-muted-foreground",
169
- ),
170
- Pagination(current_page=page, total_pages=history["pages"], hx_get="/history", hx_target="#history-content"),
171
- )
172
-
173
- return Div(id="history-content")(
174
- controls,
175
- table if history["data"] else P("No records found", cls=TextFont.muted),
176
- footer,
177
- *[details_modal(d) for d in history["data"]],
178
- )
179
-
180
-
181
- def HistoryGrid(reduced=False):
182
- return Container(
183
- Div(cls="space-y-4")(
184
- H1("Agent History Explorer"),
185
- P("Inspect agent executions with dynamic JSON exploration", cls=TextFont.muted_sm),
186
- ),
187
- get_history(),
188
- cls="p-8",
189
- )
@@ -1,19 +0,0 @@
1
- from fasthtml.common import *
2
- from fasthtml.svg import *
3
- from monsterui.all import *
4
-
5
-
6
- def SidebarLi(icon, title=None, href=None):
7
- if icon == "---":
8
- return Li(Hr())
9
- return Li(
10
- AX(DivLAligned(Span(UkIcon(icon)), Span(title)), hx_get=href, hx_target="#main-grid", hx_swap="outerHTML")
11
- )
12
-
13
-
14
- def Sidebar(sidebar):
15
- return NavContainer(
16
- NavHeaderLi(H1("Flock UI", cls="text-xxl font-semibold")),
17
- *[SidebarLi(icon, title, href) for icon, title, href in sidebar],
18
- cls="space-y-6 mt-3",
19
- )
@@ -1,9 +0,0 @@
1
- from fasthtml.common import *
2
- from fasthtml.svg import *
3
- from monsterui.all import *
4
-
5
-
6
- def ThemeDialog():
7
- from fasthtml.components import Uk_theme_switcher
8
-
9
- return Uk_theme_switcher()
@@ -1,18 +0,0 @@
1
- from datetime import datetime
2
-
3
- from fasthtml.common import *
4
- from fasthtml.svg import *
5
- from monsterui.all import *
6
-
7
-
8
- def format_date(date_str):
9
- date_obj = datetime.fromisoformat(date_str)
10
- return date_obj.strftime("%Y-%m-%d %I:%M %p")
11
-
12
-
13
- def IconNavItem(*d):
14
- return [Li(A(UkIcon(o[0], uk_tooltip=o[1]))) for o in d]
15
-
16
-
17
- def IconNav(*c, cls=""):
18
- return Ul(cls=f"uk-iconnav {cls}")(*c)
flock/app/hive_app.py DELETED
@@ -1,118 +0,0 @@
1
- from fasthtml.common import *
2
- from fasthtml.svg import *
3
- from monsterui.all import *
4
-
5
- from flock.app.components import HistoryGrid, Sidebar
6
- from flock.app.modules import AgentContent, AgentDetailView, Playground, Settings, agent_data
7
- from flock.app.modules.about import AboutPage
8
-
9
- hdrs = Theme.blue.headers()
10
-
11
- app, rt = fast_app(hdrs=hdrs, live=True)
12
-
13
- ##############################
14
- # Sidebar
15
- ##############################
16
-
17
- sidebar = (
18
- ("layout-dashboard", "Dashboard", "/"),
19
- ("---", "", ""),
20
- ("bot", "Agents", "/agents"),
21
- ("server", "Agent Systems", "/systems"),
22
- ("scroll", "History", "/history"),
23
- ("---", "", ""),
24
- ("wrench", "Tools", "/tools"),
25
- ("test-tube", "Playground", "/playground"),
26
- ("---", "", ""),
27
- ("settings", "Settings", "/settings"),
28
- ("info", "About", "/about"),
29
- )
30
-
31
-
32
- ##############################
33
- # MAIN
34
- ##############################
35
-
36
-
37
- @rt
38
- def index():
39
- return (
40
- Title("Flock UI"),
41
- Container(
42
- Grid(
43
- Div(Sidebar(sidebar), cls="col-span-1 w-48 flex"),
44
- Grid(
45
- Div(AgentContent(), cls="col-span-2"),
46
- Div(AgentDetailView(agent_data[0]), cls="col-span-3"),
47
- cols=5,
48
- cls="col-span-5",
49
- id="main-grid",
50
- ),
51
- cols_sm=2,
52
- cols_md=2,
53
- cols_lg=6,
54
- cols_xl=6,
55
- gap=5,
56
- cls="flex-1",
57
- ),
58
- cls=("flex", ContainerT.xl),
59
- ),
60
- )
61
-
62
-
63
- @rt("/history")
64
- def get():
65
- return Grid(
66
- Div(HistoryGrid(), cls="col-span-5"),
67
- cols=5,
68
- cls="col-span-5",
69
- id="main-grid",
70
- )
71
-
72
-
73
- @rt("/playground")
74
- def get():
75
- return Grid(
76
- Div(Playground(), cls="col-span-5"), # noqa: F405
77
- cols=5,
78
- cls="col-span-5",
79
- id="main-grid",
80
- )
81
-
82
-
83
- @rt("/settings")
84
- def get():
85
- return Grid(
86
- Div(Settings(), cls="col-span-5"),
87
- cols=5,
88
- cls="col-span-5",
89
- id="main-grid",
90
- )
91
-
92
-
93
- @rt("/agents")
94
- def get():
95
- return Grid(
96
- Div(AgentContent(), cls="col-span-2"),
97
- Div(AgentDetailView(agent=agent_data[0]), cls="col-span-3"),
98
- cols=5,
99
- cls="col-span-5",
100
- id="main-grid",
101
- )
102
-
103
-
104
- @rt("/about")
105
- def get():
106
- return Grid(
107
- Div(AboutPage(), cls="col-span-5"),
108
- cols=5,
109
- cls="col-span-5",
110
- id="main-grid",
111
- )
112
-
113
-
114
- serve()
115
-
116
-
117
- def main():
118
- serve()