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,191 +1,113 @@
1
- from collections.abc import Callable
2
- from typing import Any
3
-
4
- from pydantic import Field
5
-
6
- from flock.core.agent import Agent
7
- from flock.core.context import FlockContext
8
- from flock.core.logging import flock_logger, live_update_handler, performance_handler
9
-
10
-
11
- class TriggerAgent(Agent):
12
- """An agent that executes based on specific triggers/conditions.
13
-
14
- Attributes:
15
- input: Input domain for the agent
16
- output: Output types for the agent
17
- tools: Tools the agent is allowed to use
18
- trigger_condition: Callable that evaluates whether the agent should execute
19
- trigger_check_interval: How often to check the trigger condition (in seconds)
20
- max_wait_time: Maximum time to wait for trigger (in seconds)
21
- """
22
-
23
- input: str = Field(default="", description="Input domain for the agent")
24
- output: str = Field(default="", description="Output types for the agent")
25
- tools: list[Callable] | None = Field(default=None, description="Tools the agent is allowed to use")
26
- trigger_condition: Callable[[dict[str, Any]], bool] = Field(
27
- ..., description="Function that evaluates trigger conditions"
28
- )
29
- trigger_check_interval: float = Field(default=1.0, description="Interval between trigger checks (seconds)")
30
- max_wait_time: float = Field(default=60.0, description="Maximum time to wait for trigger (seconds)")
31
-
32
- async def _evaluate_trigger(self, context: FlockContext) -> bool:
33
- """Evaluate the trigger condition."""
34
- try:
35
- with performance_handler.track_time("trigger_evaluation"):
36
- flock_logger.debug("Evaluating trigger condition", agent=self.name)
37
- result = self.trigger_condition(context.state)
38
- flock_logger.debug(
39
- "Trigger evaluation result",
40
- triggered=result,
41
- agent=self.name,
42
- )
43
- return result
44
- except Exception as e:
45
- flock_logger.error(
46
- "Trigger evaluation failed",
47
- error=str(e),
48
- agent=self.name,
49
- )
50
- raise
51
-
52
- async def _execute_action(self, context: FlockContext) -> dict[str, Any]:
53
- """Execute the agent's action once triggered."""
54
- try:
55
- with performance_handler.track_time("action_execution"):
56
- flock_logger.info("Executing triggered action", agent=self.name)
57
- # Here you would implement the actual action logic
58
- # For now, we'll just return a simple result
59
- result = {"status": "completed", "trigger_time": context.state.get("current_time")}
60
- flock_logger.success("Action executed successfully", agent=self.name)
61
- return result
62
- except Exception as e:
63
- flock_logger.error(
64
- "Action execution failed",
65
- error=str(e),
66
- agent=self.name,
67
- )
68
- raise
69
-
70
- async def run(self, context: FlockContext) -> dict[str, Any]:
71
- """Run the agent, waiting for and responding to triggers."""
72
- import asyncio
73
- import time
74
-
75
- try:
76
- flock_logger.info(f"Starting trigger agent: {self.name}")
77
- start_time = time.time()
78
- triggered = False
79
-
80
- with live_update_handler.progress_tracker("Waiting for trigger") as update_progress:
81
- while (time.time() - start_time) < self.max_wait_time:
82
- # Update progress based on elapsed time
83
- elapsed = time.time() - start_time
84
- progress = min(elapsed * 100 / self.max_wait_time, 100)
85
- update_progress(progress)
86
-
87
- # Check trigger with status tracking
88
- with live_update_handler.update_activity_status(
89
- self.name,
90
- "Checking Trigger",
91
- "Running",
92
- {
93
- "elapsed_time": f"{elapsed:.1f}s",
94
- "max_wait_time": f"{self.max_wait_time:.1f}s",
95
- },
96
- ):
97
- if await self._evaluate_trigger(context):
98
- triggered = True
99
- break
100
-
101
- await asyncio.sleep(self.trigger_check_interval)
102
-
103
- if not triggered:
104
- flock_logger.warning(
105
- "Trigger timeout reached",
106
- max_wait_time=self.max_wait_time,
107
- agent=self.name,
108
- )
109
- return {"error": "Trigger timeout", "max_wait_time": self.max_wait_time}
110
-
111
- # Execute action when triggered
112
- result = await self._execute_action(context)
113
- return result
114
-
115
- except Exception as e:
116
- flock_logger.error(
117
- "Trigger agent execution failed",
118
- error=str(e),
119
- agent=self.name,
120
- )
121
- raise
122
-
123
- async def run_temporal(self, context: FlockContext) -> dict[str, Any]:
124
- """Run the trigger agent via Temporal."""
125
- try:
126
- from temporalio.client import Client
127
-
128
- from flock.workflow.agent_activities import run_agent_activity
129
- from flock.workflow.temporal_setup import run_activity
130
-
131
- with performance_handler.track_time("temporal_setup"):
132
- flock_logger.info(f"Starting temporal trigger agent: {self.name}")
133
- client = await Client.connect("localhost:7233", namespace="default")
134
-
135
- with live_update_handler.update_workflow_status(
136
- self.name,
137
- "Running",
138
- {
139
- "phase": "trigger_monitoring",
140
- "check_interval": self.trigger_check_interval,
141
- "max_wait_time": self.max_wait_time,
142
- },
143
- ):
144
- # First activity: Monitor trigger
145
- context_data = {
146
- "state": context.state,
147
- "history": [record.__dict__ for record in context.history],
148
- "agent_definitions": [definition.__dict__ for definition in context.agent_definitions],
149
- }
150
- agent_data = self.dict()
151
-
152
- with performance_handler.track_time("temporal_trigger_monitoring"):
153
- flock_logger.info("Starting trigger monitoring activity")
154
- monitor_result = await run_activity(
155
- client,
156
- f"{self.name}_monitor",
157
- run_agent_activity,
158
- {"agent_data": agent_data, "context_data": context_data},
159
- )
160
-
161
- if monitor_result.get("error"):
162
- flock_logger.warning(
163
- "Trigger monitoring ended without activation",
164
- reason=monitor_result["error"],
165
- agent=self.name,
166
- )
167
- return monitor_result
168
-
169
- # Second activity: Execute action
170
- with performance_handler.track_time("temporal_action_execution"):
171
- flock_logger.info("Starting action execution activity")
172
- action_result = await run_activity(
173
- client,
174
- f"{self.name}_action",
175
- run_agent_activity,
176
- {"agent_data": agent_data, "context_data": context_data},
177
- )
178
-
179
- flock_logger.success(
180
- "Temporal trigger agent completed successfully",
181
- agent=self.name,
182
- )
183
- return action_result
184
-
185
- except Exception as e:
186
- flock_logger.error(
187
- "Temporal trigger agent execution failed",
188
- error=str(e),
189
- agent=self.name,
190
- )
191
- raise
1
+ from collections.abc import Callable
2
+ from typing import Any
3
+
4
+ from pydantic import Field
5
+
6
+ from flock.core.context.context import FlockContext
7
+ from flock.core.flock_agent import FlockAgent
8
+
9
+
10
+ class TriggerAgent(FlockAgent):
11
+ """An agent that executes based on specific triggers/conditions.
12
+
13
+ Attributes:
14
+ input: Input domain for the agent
15
+ output: Output types for the agent
16
+ tools: Tools the agent is allowed to use
17
+ trigger_condition: Callable that evaluates whether the agent should execute
18
+ trigger_check_interval: How often to check the trigger condition (in seconds)
19
+ max_wait_time: Maximum time to wait for trigger (in seconds)
20
+ """
21
+
22
+ input: str = Field(default="", description="Input domain for the agent")
23
+ output: str = Field(default="", description="Output types for the agent")
24
+ tools: list[Callable] | None = Field(default=None, description="Tools the agent is allowed to use")
25
+ trigger_condition: Callable[[dict[str, Any]], bool] = Field(
26
+ ..., description="Function that evaluates trigger conditions"
27
+ )
28
+ trigger_check_interval: float = Field(default=1.0, description="Interval between trigger checks (seconds)")
29
+ max_wait_time: float = Field(default=60.0, description="Maximum time to wait for trigger (seconds)")
30
+
31
+ async def _evaluate_trigger(self, context: FlockContext) -> bool:
32
+ """Evaluate the trigger condition."""
33
+ try:
34
+ return self.trigger_condition(context.state)
35
+ except Exception:
36
+ raise
37
+
38
+ async def _execute_action(self, context: FlockContext) -> dict[str, Any]:
39
+ """Execute the agent's action once triggered."""
40
+ try:
41
+ # Here you would implement the actual action logic
42
+ # For now, we'll just return a simple result
43
+ result = {"status": "completed", "trigger_time": context.state.get("current_time")}
44
+ return result
45
+ except Exception:
46
+ raise
47
+
48
+ async def run(self, context: FlockContext) -> dict[str, Any]:
49
+ """Run the agent, waiting for and responding to triggers."""
50
+ import asyncio
51
+ import time
52
+
53
+ try:
54
+ start_time = time.time()
55
+ triggered = False
56
+
57
+ while (time.time() - start_time) < self.max_wait_time:
58
+ if await self._evaluate_trigger(context):
59
+ triggered = True
60
+ break
61
+
62
+ await asyncio.sleep(self.trigger_check_interval)
63
+
64
+ if not triggered:
65
+ return {"error": "Trigger timeout", "max_wait_time": self.max_wait_time}
66
+
67
+ # Execute action when triggered
68
+ result = await self._execute_action(context)
69
+ return result
70
+
71
+ except Exception:
72
+ raise
73
+
74
+ async def run_temporal(self, context: FlockContext) -> dict[str, Any]:
75
+ """Run the trigger agent via Temporal."""
76
+ try:
77
+ from temporalio.client import Client
78
+
79
+ from flock.workflow.agent_activities import run_agent_activity
80
+ from flock.workflow.temporal_setup import run_activity
81
+
82
+ client = await Client.connect("localhost:7233", namespace="default")
83
+
84
+ # First activity: Monitor trigger
85
+ context_data = {
86
+ "state": context.state,
87
+ "history": [record.__dict__ for record in context.history],
88
+ "agent_definitions": [definition.__dict__ for definition in context.agent_definitions],
89
+ }
90
+ agent_data = self.dict()
91
+
92
+ monitor_result = await run_activity(
93
+ client,
94
+ f"{self.name}_monitor",
95
+ run_agent_activity,
96
+ {"agent_data": agent_data, "context_data": context_data},
97
+ )
98
+
99
+ if monitor_result.get("error"):
100
+ return monitor_result
101
+
102
+ # Second activity: Execute action
103
+ action_result = await run_activity(
104
+ client,
105
+ f"{self.name}_action",
106
+ run_agent_activity,
107
+ {"agent_data": agent_data, "context_data": context_data},
108
+ )
109
+
110
+ return action_result
111
+
112
+ except Exception:
113
+ raise