flock-core 0.1.2__py3-none-any.whl → 0.2.2__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 (407) hide show
  1. flock/__init__.py +1 -4
  2. flock/core/__init__.py +1 -7
  3. flock/core/context/context.py +182 -0
  4. flock/core/context/context_manager.py +34 -0
  5. flock/core/{context_vars.py → context/context_vars.py} +8 -6
  6. flock/core/execution/local_executor.py +27 -0
  7. flock/core/execution/temporal_executor.py +56 -0
  8. flock/core/flock.py +232 -208
  9. flock/core/flock_agent.py +574 -0
  10. flock/core/logging/__init__.py +2 -18
  11. flock/core/logging/formatters/base_formatter.py +36 -0
  12. flock/core/logging/formatters/formatter_factory.py +38 -0
  13. flock/core/logging/formatters/pprint_formatter.py +18 -0
  14. flock/core/logging/formatters/rich_formatters.py +132 -0
  15. flock/core/logging/formatters/theme_builder.py +480 -0
  16. flock/core/logging/formatters/themed_formatter.py +442 -0
  17. flock/core/logging/logging.py +141 -0
  18. flock/core/logging/telemetry.py +21 -0
  19. flock/core/logging/trace_and_logged.py +55 -0
  20. flock/core/mixin/dspy_integration.py +197 -0
  21. flock/core/mixin/prompt_parser.py +125 -0
  22. flock/core/registry/agent_registry.py +118 -0
  23. flock/core/tools/basic_tools.py +296 -98
  24. flock/core/tools/dev_tools/github.py +190 -0
  25. flock/core/util/cli_helper.py +25 -0
  26. flock/core/util/input_resolver.py +156 -0
  27. flock/core/util/serializable.py +93 -0
  28. flock/themes/3024-day.toml +39 -0
  29. flock/themes/3024-night.toml +77 -0
  30. flock/themes/aardvark-blue.toml +77 -0
  31. flock/themes/abernathy.toml +77 -0
  32. flock/themes/adventure.toml +77 -0
  33. flock/themes/adventuretime.toml +77 -0
  34. flock/themes/afterglow.toml +77 -0
  35. flock/themes/alabaster.toml +77 -0
  36. flock/themes/alienblood.toml +77 -0
  37. flock/themes/andromeda.toml +77 -0
  38. flock/themes/apple-classic.toml +77 -0
  39. flock/themes/apple-system-colors.toml +77 -0
  40. flock/themes/arcoiris.toml +77 -0
  41. flock/themes/argonaut copy.toml +77 -0
  42. flock/themes/argonaut.toml +39 -0
  43. flock/themes/arthur.toml +77 -0
  44. flock/themes/ateliersulphurpool.toml +77 -0
  45. flock/themes/atom.toml +38 -0
  46. flock/themes/atom_test.toml +65 -0
  47. flock/themes/atomonelight.toml +77 -0
  48. flock/themes/aurora.toml +77 -0
  49. flock/themes/ayu copy.toml +77 -0
  50. flock/themes/ayu-light.toml +77 -0
  51. flock/themes/ayu-mirage.toml +77 -0
  52. flock/themes/ayu.toml +39 -0
  53. flock/themes/banana-blueberry.toml +77 -0
  54. flock/themes/batman.toml +77 -0
  55. flock/themes/belafonte-day.toml +77 -0
  56. flock/themes/belafonte-night.toml +77 -0
  57. flock/themes/birdsofparadise.toml +77 -0
  58. flock/themes/blazer.toml +77 -0
  59. flock/themes/blue-matrix.toml +77 -0
  60. flock/themes/blueberrypie.toml +77 -0
  61. flock/themes/bluedolphin.toml +77 -0
  62. flock/themes/blulocodark.toml +77 -0
  63. flock/themes/blulocolight.toml +77 -0
  64. flock/themes/borland.toml +77 -0
  65. flock/themes/breeze.toml +77 -0
  66. flock/themes/bright-lights.toml +77 -0
  67. flock/themes/broadcast.toml +77 -0
  68. flock/themes/brogrammer.toml +77 -0
  69. flock/themes/builtin-dark.toml +77 -0
  70. flock/themes/builtin-light.toml +77 -0
  71. flock/themes/builtin-pastel-dark.toml +77 -0
  72. flock/themes/builtin-solarized-dark.toml +77 -0
  73. flock/themes/builtin-solarized-light.toml +77 -0
  74. flock/themes/builtin-tango-dark.toml +77 -0
  75. flock/themes/builtin-tango-light.toml +77 -0
  76. flock/themes/c64.toml +77 -0
  77. flock/themes/calamity.toml +77 -0
  78. flock/themes/catppuccin-frappe.toml +77 -0
  79. flock/themes/catppuccin-latte.toml +77 -0
  80. flock/themes/catppuccin-macchiato.toml +77 -0
  81. flock/themes/catppuccin-mocha.toml +77 -0
  82. flock/themes/cga.toml +77 -0
  83. flock/themes/chalk.toml +77 -0
  84. flock/themes/chalkboard.toml +77 -0
  85. flock/themes/challengerdeep.toml +77 -0
  86. flock/themes/chester.toml +77 -0
  87. flock/themes/ciapre.toml +77 -0
  88. flock/themes/clrs.toml +77 -0
  89. flock/themes/cobalt-neon.toml +77 -0
  90. flock/themes/cobalt2.toml +77 -0
  91. flock/themes/coffee-theme.toml +77 -0
  92. flock/themes/crayonponyfish.toml +77 -0
  93. flock/themes/cutiepro.toml +77 -0
  94. flock/themes/cyberdyne.toml +77 -0
  95. flock/themes/cyberpunk.toml +77 -0
  96. flock/themes/cyberpunkscarletprotocol.toml +77 -0
  97. flock/themes/dark+.toml +77 -0
  98. flock/themes/dark-pastel.toml +77 -0
  99. flock/themes/darkermatrix.toml +77 -0
  100. flock/themes/darkmatrix.toml +77 -0
  101. flock/themes/darkside.toml +77 -0
  102. flock/themes/dayfox.toml +77 -0
  103. flock/themes/deep.toml +77 -0
  104. flock/themes/desert.toml +77 -0
  105. flock/themes/dimidium.toml +77 -0
  106. flock/themes/dimmedmonokai.toml +77 -0
  107. flock/themes/django.toml +77 -0
  108. flock/themes/djangorebornagain.toml +77 -0
  109. flock/themes/djangosmooth.toml +77 -0
  110. flock/themes/doom-peacock.toml +77 -0
  111. flock/themes/doomone.toml +77 -0
  112. flock/themes/dotgov.toml +77 -0
  113. flock/themes/dracula+.toml +77 -0
  114. flock/themes/dracula.toml +77 -0
  115. flock/themes/duckbones.toml +77 -0
  116. flock/themes/duotone-dark.toml +77 -0
  117. flock/themes/earthsong.toml +77 -0
  118. flock/themes/elemental.toml +77 -0
  119. flock/themes/elementary.toml +77 -0
  120. flock/themes/encom.toml +77 -0
  121. flock/themes/espresso-libre.toml +77 -0
  122. flock/themes/espresso.toml +77 -0
  123. flock/themes/everblush.toml +77 -0
  124. flock/themes/fahrenheit.toml +77 -0
  125. flock/themes/fairyfloss.toml +77 -0
  126. flock/themes/farmhouse-dark.toml +77 -0
  127. flock/themes/farmhouse-light.toml +77 -0
  128. flock/themes/fideloper.toml +77 -0
  129. flock/themes/firefly-traditional.toml +77 -0
  130. flock/themes/firefoxdev.toml +77 -0
  131. flock/themes/firewatch.toml +77 -0
  132. flock/themes/fishtank.toml +77 -0
  133. flock/themes/flat.toml +77 -0
  134. flock/themes/flatland.toml +77 -0
  135. flock/themes/flexoki-dark.toml +77 -0
  136. flock/themes/flexoki-light.toml +77 -0
  137. flock/themes/floraverse.toml +77 -0
  138. flock/themes/forestblue.toml +77 -0
  139. flock/themes/framer.toml +77 -0
  140. flock/themes/frontenddelight.toml +77 -0
  141. flock/themes/funforrest.toml +77 -0
  142. flock/themes/galaxy.toml +77 -0
  143. flock/themes/galizur.toml +77 -0
  144. flock/themes/github-dark.toml +77 -0
  145. flock/themes/github.toml +77 -0
  146. flock/themes/glacier.toml +77 -0
  147. flock/themes/grape.toml +77 -0
  148. flock/themes/grass.toml +77 -0
  149. flock/themes/grey-green.toml +77 -0
  150. flock/themes/gruber-darker.toml +77 -0
  151. flock/themes/gruvboxdark.toml +77 -0
  152. flock/themes/gruvboxdarkhard.toml +77 -0
  153. flock/themes/gruvboxlight.toml +77 -0
  154. flock/themes/guezwhoz.toml +77 -0
  155. flock/themes/hacktober.toml +77 -0
  156. flock/themes/hardcore.toml +77 -0
  157. flock/themes/harper.toml +77 -0
  158. flock/themes/hax0r-blue.toml +77 -0
  159. flock/themes/hax0r-gr33n.toml +77 -0
  160. flock/themes/hax0r-r3d.toml +77 -0
  161. flock/themes/highway.toml +77 -0
  162. flock/themes/hipster-green.toml +77 -0
  163. flock/themes/hivacruz.toml +77 -0
  164. flock/themes/homebrew.toml +77 -0
  165. flock/themes/hopscotch.256.toml +77 -0
  166. flock/themes/hopscotch.toml +77 -0
  167. flock/themes/hurtado.toml +77 -0
  168. flock/themes/hybrid.toml +77 -0
  169. flock/themes/ic-green-ppl.toml +77 -0
  170. flock/themes/ic-orange-ppl.toml +77 -0
  171. flock/themes/iceberg-dark.toml +77 -0
  172. flock/themes/iceberg-light.toml +77 -0
  173. flock/themes/idea.toml +77 -0
  174. flock/themes/idletoes.toml +77 -0
  175. flock/themes/ir-black.toml +77 -0
  176. flock/themes/iterm2-dark-background.toml +77 -0
  177. flock/themes/iterm2-default.toml +77 -0
  178. flock/themes/iterm2-light-background.toml +77 -0
  179. flock/themes/iterm2-pastel-dark-background.toml +77 -0
  180. flock/themes/iterm2-smoooooth.toml +77 -0
  181. flock/themes/iterm2-solarized-dark.toml +77 -0
  182. flock/themes/iterm2-solarized-light.toml +77 -0
  183. flock/themes/iterm2-tango-dark.toml +77 -0
  184. flock/themes/iterm2-tango-light.toml +77 -0
  185. flock/themes/jackie-brown.toml +77 -0
  186. flock/themes/japanesque.toml +77 -0
  187. flock/themes/jellybeans.toml +77 -0
  188. flock/themes/jetbrains-darcula.toml +77 -0
  189. flock/themes/jubi.toml +77 -0
  190. flock/themes/kanagawabones.toml +77 -0
  191. flock/themes/kibble.toml +77 -0
  192. flock/themes/kolorit.toml +77 -0
  193. flock/themes/konsolas.toml +77 -0
  194. flock/themes/kurokula.toml +77 -0
  195. flock/themes/lab-fox.toml +77 -0
  196. flock/themes/laser.toml +77 -0
  197. flock/themes/later-this-evening.toml +77 -0
  198. flock/themes/lavandula.toml +77 -0
  199. flock/themes/liquidcarbon.toml +77 -0
  200. flock/themes/liquidcarbontransparent.toml +77 -0
  201. flock/themes/liquidcarbontransparentinverse.toml +77 -0
  202. flock/themes/lovelace.toml +77 -0
  203. flock/themes/man-page.toml +77 -0
  204. flock/themes/mariana.toml +77 -0
  205. flock/themes/material.toml +77 -0
  206. flock/themes/materialdark.toml +77 -0
  207. flock/themes/materialdarker.toml +77 -0
  208. flock/themes/materialdesigncolors.toml +77 -0
  209. flock/themes/materialocean.toml +77 -0
  210. flock/themes/mathias.toml +77 -0
  211. flock/themes/matrix.toml +77 -0
  212. flock/themes/medallion.toml +77 -0
  213. flock/themes/mellifluous.toml +77 -0
  214. flock/themes/midnight-in-mojave.toml +77 -0
  215. flock/themes/mirage.toml +77 -0
  216. flock/themes/misterioso.toml +77 -0
  217. flock/themes/molokai.toml +77 -0
  218. flock/themes/monalisa.toml +77 -0
  219. flock/themes/monokai-remastered.toml +77 -0
  220. flock/themes/monokai-soda.toml +77 -0
  221. flock/themes/monokai-vivid.toml +77 -0
  222. flock/themes/n0tch2k.toml +77 -0
  223. flock/themes/neobones-dark.toml +77 -0
  224. flock/themes/neobones-light.toml +77 -0
  225. flock/themes/neon.toml +77 -0
  226. flock/themes/neopolitan.toml +77 -0
  227. flock/themes/neutron.toml +77 -0
  228. flock/themes/night-owlish-light.toml +77 -0
  229. flock/themes/nightfox.toml +77 -0
  230. flock/themes/nightlion-v1.toml +77 -0
  231. flock/themes/nightlion-v2.toml +77 -0
  232. flock/themes/niji.toml +77 -0
  233. flock/themes/nocturnal-winter.toml +77 -0
  234. flock/themes/nord-light.toml +77 -0
  235. flock/themes/nord.toml +77 -0
  236. flock/themes/novel.toml +77 -0
  237. flock/themes/nvimdark.toml +77 -0
  238. flock/themes/nvimlight.toml +77 -0
  239. flock/themes/obsidian.toml +77 -0
  240. flock/themes/ocean.toml +77 -0
  241. flock/themes/oceanic-next.toml +77 -0
  242. flock/themes/oceanicmaterial.toml +77 -0
  243. flock/themes/ollie.toml +77 -0
  244. flock/themes/onehalfdark.toml +77 -0
  245. flock/themes/onehalflight.toml +77 -0
  246. flock/themes/operator-mono-dark.toml +77 -0
  247. flock/themes/overnight-slumber.toml +77 -0
  248. flock/themes/oxocarbon.toml +77 -0
  249. flock/themes/palenighthc.toml +77 -0
  250. flock/themes/pandora.toml +77 -0
  251. flock/themes/paraiso-dark.toml +77 -0
  252. flock/themes/paulmillr.toml +77 -0
  253. flock/themes/pencildark.toml +77 -0
  254. flock/themes/pencillight.toml +77 -0
  255. flock/themes/peppermint.toml +77 -0
  256. flock/themes/piatto-light.toml +77 -0
  257. flock/themes/pnevma.toml +77 -0
  258. flock/themes/popping-and-locking.toml +77 -0
  259. flock/themes/primary.toml +77 -0
  260. flock/themes/pro-light.toml +77 -0
  261. flock/themes/pro.toml +77 -0
  262. flock/themes/purple-rain.toml +77 -0
  263. flock/themes/purplepeter.toml +77 -0
  264. flock/themes/rapture.toml +77 -0
  265. flock/themes/raycast-dark.toml +77 -0
  266. flock/themes/raycast-light.toml +77 -0
  267. flock/themes/rebecca.toml +77 -0
  268. flock/themes/red-alert.toml +77 -0
  269. flock/themes/red-planet.toml +77 -0
  270. flock/themes/red-sands.toml +77 -0
  271. flock/themes/relaxed.toml +77 -0
  272. flock/themes/retro.toml +77 -0
  273. flock/themes/rippedcasts.toml +77 -0
  274. flock/themes/rose-pine-dawn.toml +77 -0
  275. flock/themes/rose-pine-moon.toml +77 -0
  276. flock/themes/rose-pine.toml +77 -0
  277. flock/themes/rouge-2.toml +77 -0
  278. flock/themes/royal.toml +77 -0
  279. flock/themes/ryuuko.toml +77 -0
  280. flock/themes/sakura.toml +77 -0
  281. flock/themes/scarlet-protocol.toml +77 -0
  282. flock/themes/seafoam-pastel.toml +77 -0
  283. flock/themes/seashells.toml +77 -0
  284. flock/themes/seoulbones-dark.toml +77 -0
  285. flock/themes/seoulbones-light.toml +77 -0
  286. flock/themes/seti.toml +77 -0
  287. flock/themes/shades-of-purple.toml +77 -0
  288. flock/themes/shaman.toml +77 -0
  289. flock/themes/slate.toml +77 -0
  290. flock/themes/sleepyhollow.toml +77 -0
  291. flock/themes/smyck.toml +77 -0
  292. flock/themes/snazzy.toml +77 -0
  293. flock/themes/softserver.toml +77 -0
  294. flock/themes/solarized-darcula.toml +77 -0
  295. flock/themes/solarized-dark---patched.toml +77 -0
  296. flock/themes/solarized-dark-higher-contrast.toml +77 -0
  297. flock/themes/spacedust.toml +77 -0
  298. flock/themes/spacegray-eighties-dull.toml +77 -0
  299. flock/themes/spacegray-eighties.toml +77 -0
  300. flock/themes/spacegray.toml +77 -0
  301. flock/themes/spiderman.toml +77 -0
  302. flock/themes/spring.toml +77 -0
  303. flock/themes/square.toml +77 -0
  304. flock/themes/sublette.toml +77 -0
  305. flock/themes/subliminal.toml +77 -0
  306. flock/themes/sugarplum.toml +77 -0
  307. flock/themes/sundried.toml +77 -0
  308. flock/themes/symfonic.toml +77 -0
  309. flock/themes/synthwave-everything.toml +77 -0
  310. flock/themes/synthwave.toml +77 -0
  311. flock/themes/synthwavealpha.toml +77 -0
  312. flock/themes/tango-adapted.toml +77 -0
  313. flock/themes/tango-half-adapted.toml +77 -0
  314. flock/themes/teerb.toml +77 -0
  315. flock/themes/terafox.toml +77 -0
  316. flock/themes/terminal-basic.toml +77 -0
  317. flock/themes/thayer-bright.toml +77 -0
  318. flock/themes/the-hulk.toml +77 -0
  319. flock/themes/tinacious-design-(dark).toml +77 -0
  320. flock/themes/tinacious-design-(light).toml +77 -0
  321. flock/themes/tokyonight-day.toml +77 -0
  322. flock/themes/tokyonight-storm.toml +77 -0
  323. flock/themes/tokyonight.toml +77 -0
  324. flock/themes/tomorrow-night-blue.toml +77 -0
  325. flock/themes/tomorrow-night-bright.toml +77 -0
  326. flock/themes/tomorrow-night-burns.toml +77 -0
  327. flock/themes/tomorrow-night-eighties.toml +77 -0
  328. flock/themes/tomorrow-night.toml +77 -0
  329. flock/themes/tomorrow.toml +77 -0
  330. flock/themes/toychest.toml +77 -0
  331. flock/themes/treehouse.toml +77 -0
  332. flock/themes/twilight.toml +77 -0
  333. flock/themes/ubuntu.toml +77 -0
  334. flock/themes/ultradark.toml +77 -0
  335. flock/themes/ultraviolent.toml +77 -0
  336. flock/themes/underthesea.toml +77 -0
  337. flock/themes/unikitty.toml +77 -0
  338. flock/themes/urple.toml +77 -0
  339. flock/themes/vaughn.toml +77 -0
  340. flock/themes/vesper.toml +77 -0
  341. flock/themes/vibrantink.toml +77 -0
  342. flock/themes/vimbones.toml +77 -0
  343. flock/themes/violet-dark.toml +77 -0
  344. flock/themes/violet-light.toml +77 -0
  345. flock/themes/warmneon.toml +77 -0
  346. flock/themes/wez.toml +77 -0
  347. flock/themes/whimsy.toml +77 -0
  348. flock/themes/wildcherry.toml +77 -0
  349. flock/themes/wilmersdorf.toml +77 -0
  350. flock/themes/wombat.toml +77 -0
  351. flock/themes/wryan.toml +77 -0
  352. flock/themes/xcodedark.toml +77 -0
  353. flock/themes/xcodedarkhc.toml +77 -0
  354. flock/themes/xcodelight.toml +77 -0
  355. flock/themes/xcodelighthc.toml +77 -0
  356. flock/themes/xcodewwdc.toml +77 -0
  357. flock/themes/zenbones-dark.toml +77 -0
  358. flock/themes/zenbones-light.toml +77 -0
  359. flock/themes/zenbones.toml +77 -0
  360. flock/themes/zenburn.toml +77 -0
  361. flock/themes/zenburned.toml +77 -0
  362. flock/themes/zenwritten-dark.toml +77 -0
  363. flock/themes/zenwritten-light.toml +77 -0
  364. flock/workflow/activities.py +175 -115
  365. flock/workflow/agent_activities.py +24 -26
  366. flock/workflow/temporal_setup.py +38 -37
  367. flock/workflow/workflow.py +58 -53
  368. flock_core-0.2.2.dist-info/METADATA +320 -0
  369. flock_core-0.2.2.dist-info/RECORD +372 -0
  370. {flock_core-0.1.2.dist-info → flock_core-0.2.2.dist-info}/licenses/LICENSE +21 -21
  371. flock/agents/__init__.py +0 -3
  372. flock/agents/batch_agent.py +0 -175
  373. flock/agents/declarative_agent.py +0 -166
  374. flock/agents/loop_agent.py +0 -178
  375. flock/agents/trigger_agent.py +0 -191
  376. flock/agents/user_agent.py +0 -230
  377. flock/app/components/__init__.py +0 -14
  378. flock/app/components/charts/agent_workflow.py +0 -14
  379. flock/app/components/charts/core_architecture.py +0 -14
  380. flock/app/components/charts/tool_system.py +0 -14
  381. flock/app/components/history_grid.py +0 -168
  382. flock/app/components/history_grid_alt.py +0 -189
  383. flock/app/components/sidebar.py +0 -19
  384. flock/app/components/theme.py +0 -9
  385. flock/app/components/util.py +0 -18
  386. flock/app/hive_app.py +0 -118
  387. flock/app/html/d3.html +0 -179
  388. flock/app/modules/__init__.py +0 -12
  389. flock/app/modules/about.py +0 -17
  390. flock/app/modules/agent_detail.py +0 -70
  391. flock/app/modules/agent_list.py +0 -59
  392. flock/app/modules/playground.py +0 -322
  393. flock/app/modules/settings.py +0 -96
  394. flock/core/agent.py +0 -150
  395. flock/core/agent_registry.py +0 -162
  396. flock/core/context.py +0 -279
  397. flock/core/handoff/handoff_base.py +0 -12
  398. flock/core/logging/error_handler.py +0 -84
  399. flock/core/logging/formatters.py +0 -122
  400. flock/core/logging/handlers.py +0 -117
  401. flock/core/logging/logger.py +0 -107
  402. flock/core/serializable.py +0 -206
  403. flock_core-0.1.2.dist-info/METADATA +0 -476
  404. flock_core-0.1.2.dist-info/RECORD +0 -48
  405. flock_core-0.1.2.dist-info/entry_points.txt +0 -2
  406. /flock/{core/config/declarative_agent_config.py → workflow/__init__.py} +0 -0
  407. {flock_core-0.1.2.dist-info → flock_core-0.2.2.dist-info}/WHEEL +0 -0
flock/__init__.py CHANGED
@@ -1,4 +1 @@
1
- # Initialize error handling through our custom handler
2
- from flock.core.logging import error_handler
3
-
4
- error_handler.install()
1
+ """Flock package initialization."""
flock/core/__init__.py CHANGED
@@ -1,7 +1 @@
1
- from flock.core.agent import Agent
2
- from flock.core.agent_registry import Registry
3
- from flock.core.context import FlockContext
4
- from flock.core.flock import Flock
5
- from flock.core.serializable import Serializable
6
-
7
- __all__ = ["Agent", "Flock", "FlockContext", "Registry", "Serializable"]
1
+
@@ -0,0 +1,182 @@
1
+ from dataclasses import asdict, dataclass, field
2
+ from datetime import datetime
3
+ from typing import Any, Literal
4
+
5
+ from opentelemetry import trace
6
+
7
+ from flock.core.context.context_vars import FLOCK_LAST_AGENT, FLOCK_LAST_RESULT
8
+ from flock.core.logging.logging import get_logger
9
+ from flock.core.util.serializable import Serializable
10
+
11
+ logger = get_logger("context")
12
+ tracer = trace.get_tracer(__name__)
13
+
14
+
15
+ @dataclass
16
+ class AgentRunRecord:
17
+ agent: str = field(default="")
18
+ data: dict[str, Any] = field(default_factory=dict)
19
+ timestamp: str = field(default="")
20
+ hand_off: dict = field(default_factory=dict)
21
+ called_from: str = field(default="")
22
+
23
+
24
+ @dataclass
25
+ class AgentDefinition:
26
+ agent_type: str = field(default="")
27
+ agent_name: str = field(default="")
28
+ agent_data: dict = field(default_factory=dict)
29
+ serializer: Literal["json", "cloudpickle", "msgpack"] = field(
30
+ default="cloudpickle"
31
+ )
32
+
33
+
34
+ @dataclass
35
+ class FlockContext(Serializable):
36
+ state: dict[str, Any] = field(default_factory=dict)
37
+ history: list[AgentRunRecord] = field(default_factory=list)
38
+ agent_definitions: dict[str, AgentDefinition] = field(default_factory=dict)
39
+ run_id: str = field(default="")
40
+ workflow_id: str = field(default="")
41
+ workflow_timestamp: str = field(default="")
42
+
43
+ def record(
44
+ self,
45
+ agent_name: str,
46
+ data: dict[str, Any],
47
+ timestamp: str,
48
+ hand_off: str,
49
+ called_from: str,
50
+ ) -> None:
51
+ record = AgentRunRecord(
52
+ agent=agent_name,
53
+ data=data.copy(),
54
+ timestamp=timestamp,
55
+ hand_off=hand_off,
56
+ called_from=called_from,
57
+ )
58
+ self.history.append(record)
59
+ for key, value in data.items():
60
+ self.set_variable(f"{agent_name}.{key}", value)
61
+ self.set_variable(FLOCK_LAST_RESULT, data)
62
+ self.set_variable(FLOCK_LAST_AGENT, agent_name)
63
+ logger.info(
64
+ "Agent run recorded",
65
+ agent=agent_name,
66
+ timestamp=timestamp,
67
+ data=data,
68
+ )
69
+ current_span = trace.get_current_span()
70
+ if current_span.get_span_context().is_valid:
71
+ current_span.add_event(
72
+ "record",
73
+ attributes={"agent": agent_name, "timestamp": timestamp},
74
+ )
75
+
76
+ def get_variable(self, key: str) -> Any:
77
+ return self.state.get(key)
78
+
79
+ def set_variable(self, key: str, value: Any) -> None:
80
+ old_value = self.state.get(key)
81
+ self.state[key] = value
82
+ if old_value != value:
83
+ logger.info(
84
+ "Context variable updated",
85
+ variable=key,
86
+ old=old_value,
87
+ new=value,
88
+ )
89
+ current_span = trace.get_current_span()
90
+ if current_span.get_span_context().is_valid:
91
+ current_span.add_event(
92
+ "set_variable",
93
+ attributes={
94
+ "key": key,
95
+ "old": str(old_value),
96
+ "new": str(value),
97
+ },
98
+ )
99
+
100
+ def deepcopy(self) -> "FlockContext":
101
+ return FlockContext.from_dict(self.to_dict())
102
+
103
+ def get_agent_history(self, agent_name: str) -> list[AgentRunRecord]:
104
+ return [record for record in self.history if record.agent == agent_name]
105
+
106
+ def next_input_for(self, agent) -> Any:
107
+ try:
108
+ if hasattr(agent, "input") and isinstance(agent.input, str):
109
+ keys = [k.strip() for k in agent.input.split(",") if k.strip()]
110
+ if len(keys) == 1:
111
+ return self.get_variable(keys[0])
112
+ else:
113
+ return {key: self.get_variable(key) for key in keys}
114
+ else:
115
+ return self.get_variable("init_input")
116
+ except Exception as e:
117
+ logger.error(
118
+ "Error getting next input for agent",
119
+ agent=agent.name,
120
+ error=str(e),
121
+ )
122
+ raise
123
+
124
+ def get_most_recent_value(self, variable_name: str) -> Any:
125
+ for history_record in reversed(self.history):
126
+ if variable_name in history_record.data:
127
+ return history_record.data[variable_name]
128
+
129
+ def get_agent_definition(self, agent_name: str) -> AgentDefinition | None:
130
+ return self.agent_definitions.get(agent_name)
131
+
132
+ def add_agent_definition(
133
+ self, agent_type: type, agent_name: str, agent_data: Any
134
+ ) -> None:
135
+ definition = AgentDefinition(
136
+ agent_type=agent_type.__name__,
137
+ agent_name=agent_name,
138
+ agent_data=agent_data,
139
+ )
140
+ self.agent_definitions[agent_name] = definition
141
+
142
+ # Use the reactive setter for dict-like access.
143
+ def __getitem__(self, key: str) -> Any:
144
+ return self.get_variable(key)
145
+
146
+ def __setitem__(self, key: str, value: Any) -> None:
147
+ self.set_variable(key, value)
148
+
149
+ def to_dict(self) -> dict[str, Any]:
150
+ def convert(obj):
151
+ if isinstance(obj, datetime):
152
+ return obj.isoformat()
153
+ if hasattr(obj, "__dataclass_fields__"):
154
+ return asdict(
155
+ obj, dict_factory=lambda x: {k: convert(v) for k, v in x}
156
+ )
157
+ return obj
158
+
159
+ return convert(asdict(self))
160
+
161
+ @classmethod
162
+ def from_dict(cls, data: dict[str, Any]) -> "FlockContext":
163
+ def convert(obj):
164
+ if isinstance(obj, dict):
165
+ if "timestamp" in obj:
166
+ return AgentRunRecord(
167
+ **{
168
+ **obj,
169
+ "timestamp": datetime.fromisoformat(
170
+ obj["timestamp"]
171
+ ),
172
+ }
173
+ )
174
+ if "agent_type" in obj:
175
+ return AgentDefinition(**obj)
176
+ return {k: convert(v) for k, v in obj.items()}
177
+ if isinstance(obj, list):
178
+ return [convert(v) for v in obj]
179
+ return obj
180
+
181
+ converted = convert(data)
182
+ return cls(**converted)
@@ -0,0 +1,34 @@
1
+ """Module for managing the FlockContext."""
2
+
3
+ from flock.core.context.context import FlockContext
4
+ from flock.core.context.context_vars import (
5
+ FLOCK_CURRENT_AGENT,
6
+ FLOCK_INITIAL_INPUT,
7
+ FLOCK_LOCAL_DEBUG,
8
+ FLOCK_RUN_ID,
9
+ )
10
+
11
+
12
+ def initialize_context(
13
+ context: FlockContext,
14
+ agent_name: str,
15
+ input_data: dict,
16
+ run_id: str,
17
+ local_debug: bool,
18
+ ) -> None:
19
+ """Initialize the FlockContext with standard variables before running an agent.
20
+
21
+ Args:
22
+ context: The FlockContext instance.
23
+ agent_name: The name of the current agent.
24
+ input_data: A dictionary of inputs for the agent.
25
+ run_id: A unique identifier for the run.
26
+ local_debug: Flag indicating whether local debugging is enabled.
27
+ """
28
+ context.set_variable(FLOCK_CURRENT_AGENT, agent_name)
29
+ for key, value in input_data.items():
30
+ context.set_variable("flock." + key, value)
31
+ context.set_variable(FLOCK_INITIAL_INPUT, input_data)
32
+ context.set_variable(FLOCK_LOCAL_DEBUG, local_debug)
33
+ context.run_id = run_id
34
+ context.set_variable(FLOCK_RUN_ID, run_id)
@@ -1,6 +1,8 @@
1
- FLOCK_CURRENT_AGENT = "flock.current_agent"
2
- FLOCK_INITIAL_INPUT = "flock.initial_input"
3
- FLOCK_LOCAL_DEBUG = "flock.local_debug"
4
- FLOCK_RUN_ID = "flock.run_id"
5
- FLOCK_LAST_AGENT = "flock.last_agent"
6
- FLOCK_LAST_RESULT = "flock.last_result"
1
+ """Context variables for Flock."""
2
+
3
+ FLOCK_CURRENT_AGENT = "flock.current_agent"
4
+ FLOCK_INITIAL_INPUT = "flock.initial_input"
5
+ FLOCK_LOCAL_DEBUG = "flock.local_debug"
6
+ FLOCK_RUN_ID = "flock.run_id"
7
+ FLOCK_LAST_AGENT = "flock.last_agent"
8
+ FLOCK_LAST_RESULT = "flock.last_result"
@@ -0,0 +1,27 @@
1
+ # src/your_package/core/execution/local_executor.py
2
+ from flock.core.context.context import FlockContext
3
+ from flock.core.logging.logging import get_logger
4
+ from flock.workflow.activities import run_agent # This should be the local activity function
5
+
6
+ logger = get_logger("flock")
7
+
8
+
9
+ async def run_local_workflow(context: FlockContext, output_formatter, box_result: bool = True) -> dict:
10
+ """Execute the agent workflow locally (for debugging).
11
+
12
+ Args:
13
+ context: The FlockContext instance with state and history.
14
+ output_formatter: Formatter options for displaying results.
15
+ box_result: If True, wraps the result in a Box for nicer display.
16
+
17
+ Returns:
18
+ A dictionary containing the workflow result.
19
+ """
20
+ logger.info("Running local debug workflow")
21
+ result = await run_agent(context, output_formatter)
22
+ if box_result:
23
+ from box import Box
24
+
25
+ logger.debug("Boxing result")
26
+ return Box(result)
27
+ return result
@@ -0,0 +1,56 @@
1
+ # src/your_package/core/execution/temporal_executor.py
2
+ from devtools import pprint
3
+
4
+ from flock.core.context.context import FlockContext
5
+ from flock.core.context.context_vars import FLOCK_RUN_ID
6
+ from flock.core.logging.formatters.formatter_factory import FormatterFactory
7
+ from flock.core.logging.logging import get_logger
8
+ from flock.workflow.activities import (
9
+ run_agent, # Activity function used in Temporal
10
+ )
11
+ from flock.workflow.temporal_setup import create_temporal_client, setup_worker
12
+ from flock.workflow.workflow import FlockWorkflow # Your workflow class
13
+
14
+ logger = get_logger("flock")
15
+
16
+
17
+ async def run_temporal_workflow(
18
+ context: FlockContext,
19
+ output_formatter,
20
+ box_result: bool = True,
21
+ ) -> dict:
22
+ """Execute the agent workflow via Temporal for robust, distributed processing.
23
+
24
+ Args:
25
+ context: The FlockContext instance with state and history.
26
+ box_result: If True, wraps the result in a Box for nicer display.
27
+
28
+ Returns:
29
+ A dictionary containing the workflow result.
30
+ """
31
+ logger.info("Setting up Temporal workflow")
32
+ await setup_worker(workflow=FlockWorkflow, activity=run_agent)
33
+ logger.debug("Creating Temporal client")
34
+ flock_client = await create_temporal_client()
35
+ workflow_id = context.get_variable(FLOCK_RUN_ID)
36
+ logger.info("Executing Temporal workflow", workflow_id=workflow_id)
37
+ result = await flock_client.execute_workflow(
38
+ FlockWorkflow.run,
39
+ context.to_dict(),
40
+ id=workflow_id,
41
+ task_queue="flock-queue",
42
+ )
43
+
44
+ agent_name = context.get_variable("FLOCK_CURRENT_AGENT")
45
+ logger.debug("Formatting Temporal result", agent=agent_name)
46
+ if output_formatter:
47
+ formatter = FormatterFactory.create_formatter(output_formatter)
48
+ formatter.display(result, agent_name, output_formatter.wait_for_input)
49
+ else:
50
+ pprint(result)
51
+ if box_result:
52
+ from box import Box
53
+
54
+ logger.debug("Boxing Temporal result")
55
+ return Box(result)
56
+ return result