PraisonAI 4.7.8__tar.gz → 4.7.9__tar.gz

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.
Files changed (562) hide show
  1. {praisonai-4.7.8 → praisonai-4.7.9}/PKG-INFO +11 -9
  2. {praisonai-4.7.8 → praisonai-4.7.9}/PraisonAI.egg-info/PKG-INFO +11 -9
  3. {praisonai-4.7.8 → praisonai-4.7.9}/PraisonAI.egg-info/requires.txt +10 -8
  4. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/agents_generator.py +33 -11
  5. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/api/agent_invoke.py +93 -44
  6. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/passthrough.py +101 -21
  7. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/langfuse_client.py +18 -1
  8. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/framework_adapters/registry.py +23 -1
  9. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/framework_adapters/workflow_framework.py +10 -3
  10. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/jobs/executor.py +55 -15
  11. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/jobs/models.py +1 -1
  12. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/jobs/router.py +7 -1
  13. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/history.py +132 -37
  14. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/operations.py +39 -15
  15. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/run_policy.py +10 -0
  16. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/yaml_loader.py +5 -2
  17. praisonai-4.7.9/praisonai/version.py +1 -0
  18. {praisonai-4.7.8 → praisonai-4.7.9}/pyproject.toml +19 -8
  19. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_n8n_agent_invoke.py +278 -0
  20. praisonai-4.7.8/praisonai/version.py +0 -1
  21. {praisonai-4.7.8 → praisonai-4.7.9}/PraisonAI.egg-info/SOURCES.txt +0 -0
  22. {praisonai-4.7.8 → praisonai-4.7.9}/PraisonAI.egg-info/dependency_links.txt +0 -0
  23. {praisonai-4.7.8 → praisonai-4.7.9}/PraisonAI.egg-info/entry_points.txt +0 -0
  24. {praisonai-4.7.8 → praisonai-4.7.9}/PraisonAI.egg-info/top_level.txt +0 -0
  25. {praisonai-4.7.8 → praisonai-4.7.9}/README.md +0 -0
  26. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/__init__.py +0 -0
  27. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/__main__.py +0 -0
  28. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_api_auth.py +0 -0
  29. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_approval_spec.py +0 -0
  30. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_async_bridge.py +0 -0
  31. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_bootstrap.py +0 -0
  32. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_dev/__init__.py +0 -0
  33. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_dev/api_md.py +0 -0
  34. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_entrypoint.py +0 -0
  35. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_framework_availability.py +0 -0
  36. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_lazy_cache.py +0 -0
  37. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_logging.py +0 -0
  38. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_registry.py +0 -0
  39. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/_safe_loader.py +0 -0
  40. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/acp/__init__.py +0 -0
  41. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/acp/config.py +0 -0
  42. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/acp/safe_edit.py +0 -0
  43. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/acp/server.py +0 -0
  44. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/acp/session.py +0 -0
  45. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/adapters/__init__.py +0 -0
  46. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/adapters/readers.py +0 -0
  47. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/adapters/rerankers.py +0 -0
  48. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/adapters/retrievers.py +0 -0
  49. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/adapters/vector_stores.py +0 -0
  50. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/agent.py +0 -0
  51. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/agent_scheduler.py +0 -0
  52. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/api/call.py +0 -0
  53. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/app/__init__.py +0 -0
  54. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/app/agentos.py +0 -0
  55. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/async_agent_scheduler.py +0 -0
  56. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/audit/__init__.py +0 -0
  57. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/audit/agent_centric.py +0 -0
  58. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/auto.py +0 -0
  59. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/bots/__init__.py +0 -0
  60. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/browser/__init__.py +0 -0
  61. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/__init__.py +0 -0
  62. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/a2a.py +0 -0
  63. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/assistants.py +0 -0
  64. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/audio.py +0 -0
  65. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/batches.py +0 -0
  66. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/completions.py +0 -0
  67. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/container_files.py +0 -0
  68. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/containers.py +0 -0
  69. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/embeddings.py +0 -0
  70. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/files.py +0 -0
  71. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/fine_tuning.py +0 -0
  72. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/guardrails.py +0 -0
  73. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/images.py +0 -0
  74. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/mcp.py +0 -0
  75. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/messages.py +0 -0
  76. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/moderations.py +0 -0
  77. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/ocr.py +0 -0
  78. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/rag.py +0 -0
  79. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/realtime.py +0 -0
  80. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/rerank.py +0 -0
  81. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/responses.py +0 -0
  82. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/search.py +0 -0
  83. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/skills.py +0 -0
  84. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/vector_store_files.py +0 -0
  85. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/vector_stores.py +0 -0
  86. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/capabilities/videos.py +0 -0
  87. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/claw/__init__.py +0 -0
  88. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/__init__.py +0 -0
  89. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/_paths.py +0 -0
  90. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/_shim.py +0 -0
  91. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/_warnings.py +0 -0
  92. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/app.py +0 -0
  93. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/approval_backend.py +0 -0
  94. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/branding.py +0 -0
  95. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/__init__.py +0 -0
  96. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/_profiling.py +0 -0
  97. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/acp.py +0 -0
  98. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/agent.py +0 -0
  99. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/agents.py +0 -0
  100. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/app.py +0 -0
  101. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/attach.py +0 -0
  102. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/audit.py +0 -0
  103. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/auth.py +0 -0
  104. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/batch.py +0 -0
  105. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/benchmark.py +0 -0
  106. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/bot.py +0 -0
  107. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/browser.py +0 -0
  108. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/call.py +0 -0
  109. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/chat.py +0 -0
  110. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/checkpoint.py +0 -0
  111. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/claw.py +0 -0
  112. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/code.py +0 -0
  113. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/command.py +0 -0
  114. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/commit.py +0 -0
  115. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/completion.py +0 -0
  116. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/config.py +0 -0
  117. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/context.py +0 -0
  118. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/daemon.py +0 -0
  119. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/dashboard.py +0 -0
  120. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/debug.py +0 -0
  121. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/deploy.py +0 -0
  122. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/diag.py +0 -0
  123. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/docs.py +0 -0
  124. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/doctor.py +0 -0
  125. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/endpoints.py +0 -0
  126. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/environment.py +0 -0
  127. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/eval.py +0 -0
  128. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/examples.py +0 -0
  129. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/flow.py +0 -0
  130. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/gateway.py +0 -0
  131. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/github.py +0 -0
  132. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/hooks.py +0 -0
  133. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/identity.py +0 -0
  134. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/init.py +0 -0
  135. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/kanban.py +0 -0
  136. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/knowledge.py +0 -0
  137. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/langextract.py +0 -0
  138. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/langfuse.py +0 -0
  139. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/loop.py +0 -0
  140. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/lsp.py +0 -0
  141. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/managed.py +0 -0
  142. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/mcp.py +0 -0
  143. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/memory.py +0 -0
  144. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/mint_link.py +0 -0
  145. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/models.py +0 -0
  146. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/n8n.py +0 -0
  147. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/obs.py +0 -0
  148. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/onboard.py +0 -0
  149. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/package.py +0 -0
  150. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/pairing.py +0 -0
  151. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/paths.py +0 -0
  152. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/permissions.py +0 -0
  153. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/plugins.py +0 -0
  154. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/port.py +0 -0
  155. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/profile.py +0 -0
  156. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/publish.py +0 -0
  157. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/rag.py +0 -0
  158. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/realtime.py +0 -0
  159. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/recipe.py +0 -0
  160. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/registry.py +0 -0
  161. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/replay.py +0 -0
  162. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/research.py +0 -0
  163. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/retrieval.py +0 -0
  164. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/rules.py +0 -0
  165. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/run.py +0 -0
  166. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/sandbox.py +0 -0
  167. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/schedule.py +0 -0
  168. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/serve.py +0 -0
  169. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/session.py +0 -0
  170. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/setup.py +0 -0
  171. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/skills.py +0 -0
  172. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/standardise.py +0 -0
  173. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/templates.py +0 -0
  174. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/test.py +0 -0
  175. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/todo.py +0 -0
  176. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/tools.py +0 -0
  177. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/traces.py +0 -0
  178. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/tracker.py +0 -0
  179. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/train.py +0 -0
  180. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/ui.py +0 -0
  181. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/up.py +0 -0
  182. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/validate.py +0 -0
  183. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/version.py +0 -0
  184. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/commands/workflow.py +0 -0
  185. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/config_loader.py +0 -0
  186. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/configuration/__init__.py +0 -0
  187. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/configuration/config.schema.json +0 -0
  188. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/execution/__init__.py +0 -0
  189. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/fallback_schema.py +0 -0
  190. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/__init__.py +0 -0
  191. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/acp.py +0 -0
  192. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/agent_scheduler.py +0 -0
  193. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/agent_tools.py +0 -0
  194. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/approval.py +0 -0
  195. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/background.py +0 -0
  196. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/bots_cli.py +0 -0
  197. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/deploy.py +0 -0
  198. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/endpoints.py +0 -0
  199. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/eval.py +0 -0
  200. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/gateway.py +0 -0
  201. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/ollama.py +0 -0
  202. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/onboard.py +0 -0
  203. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/persistence.py +0 -0
  204. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/recipe.py +0 -0
  205. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/recipe_optimizer.py +0 -0
  206. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/registry.py +0 -0
  207. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/sandbox_cli.py +0 -0
  208. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/serve.py +0 -0
  209. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/templates.py +0 -0
  210. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/tools.py +0 -0
  211. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/tui/__init__.py +0 -0
  212. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/tui/app.py +0 -0
  213. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/features/workflow.py +0 -0
  214. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/interactive/__init__.py +0 -0
  215. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/interactive/async_tui.py +0 -0
  216. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/interactive/config.py +0 -0
  217. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/interactive/core.py +0 -0
  218. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/interactive/events.py +0 -0
  219. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/legacy/__init__.py +0 -0
  220. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/legacy/direct_prompt.py +0 -0
  221. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
  222. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
  223. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
  224. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/legacy/framework_run.py +0 -0
  225. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
  226. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/legacy/interactive_legacy.py +0 -0
  227. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/legacy/subcommand_handlers.py +0 -0
  228. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/legacy/workflow_commands.py +0 -0
  229. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/main.py +0 -0
  230. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/output/__init__.py +0 -0
  231. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/schedule_cli.py +0 -0
  232. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/schema_provider.py +0 -0
  233. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/session/__init__.py +0 -0
  234. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/state/__init__.py +0 -0
  235. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/ui/__init__.py +0 -0
  236. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/unified_schema.py +0 -0
  237. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli/utils/__init__.py +0 -0
  238. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/cli_backends/__init__.py +0 -0
  239. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/__init__.py +0 -0
  240. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/agent_tools.py +0 -0
  241. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/diff/__init__.py +0 -0
  242. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/diff/diff_strategy.py +0 -0
  243. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/tools/__init__.py +0 -0
  244. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/tools/apply_diff.py +0 -0
  245. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/tools/execute_command.py +0 -0
  246. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/tools/list_files.py +0 -0
  247. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/tools/read_file.py +0 -0
  248. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/tools/search_replace.py +0 -0
  249. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/tools/write_file.py +0 -0
  250. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/utils/__init__.py +0 -0
  251. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/utils/file_utils.py +0 -0
  252. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/utils/ignore_utils.py +0 -0
  253. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/code/utils/text_utils.py +0 -0
  254. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/config/__init__.py +0 -0
  255. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/config/agents.schema.json +0 -0
  256. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/config/schema.py +0 -0
  257. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/config/validator.py +0 -0
  258. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/context/__init__.py +0 -0
  259. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/context/_storage_path.py +0 -0
  260. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/context/artifact_store.py +0 -0
  261. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/context/config.py +0 -0
  262. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/context/history_store.py +0 -0
  263. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/context/queue.py +0 -0
  264. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/context/setup.py +0 -0
  265. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/context/terminal_logger.py +0 -0
  266. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/daemon/__init__.py +0 -0
  267. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/db/__init__.py +0 -0
  268. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/db/adapter.py +0 -0
  269. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/deploy/__init__.py +0 -0
  270. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/__init__.py +0 -0
  271. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/a2u_server.py +0 -0
  272. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/discovery.py +0 -0
  273. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/providers/__init__.py +0 -0
  274. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/providers/a2a.py +0 -0
  275. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/providers/a2u.py +0 -0
  276. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/providers/agents_api.py +0 -0
  277. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/providers/base.py +0 -0
  278. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/providers/mcp.py +0 -0
  279. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/providers/openai_compat.py +0 -0
  280. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/providers/recipe.py +0 -0
  281. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  282. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/registry.py +0 -0
  283. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/endpoints/server.py +0 -0
  284. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/flow/__init__.py +0 -0
  285. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/flow/client.py +0 -0
  286. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  287. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  288. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/flow/components/__init__.py +0 -0
  289. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/flow/converter.py +0 -0
  290. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/flow/helpers.py +0 -0
  291. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/framework_adapters/__init__.py +0 -0
  292. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/framework_adapters/_config_builder.py +0 -0
  293. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  294. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/framework_adapters/base.py +0 -0
  295. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  296. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  297. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/framework_adapters/validators.py +0 -0
  298. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/gateway/__init__.py +0 -0
  299. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/inbuilt_tools/__init__.py +0 -0
  300. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  301. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/inc/__init__.py +0 -0
  302. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/inc/config.py +0 -0
  303. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/inc/models.py +0 -0
  304. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/__init__.py +0 -0
  305. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/bridges/__init__.py +0 -0
  306. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  307. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/bridges/hooks_query.py +0 -0
  308. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  309. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/bridges/schedules_runner.py +0 -0
  310. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/bridges/usage_bridge.py +0 -0
  311. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/bridges/workflows_service.py +0 -0
  312. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/context_files.py +0 -0
  313. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/gateway_host.py +0 -0
  314. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/host_app.py +0 -0
  315. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/pages/__init__.py +0 -0
  316. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/pages/bot_health.py +0 -0
  317. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integration/pages/workflow_runs.py +0 -0
  318. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/__init__.py +0 -0
  319. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/_cli_loaders.py +0 -0
  320. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/_session_info.py +0 -0
  321. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/_tool_aliases.py +0 -0
  322. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/backend_registry.py +0 -0
  323. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/base.py +0 -0
  324. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/claude_code.py +0 -0
  325. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/codex_cli.py +0 -0
  326. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/compute/__init__.py +0 -0
  327. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/compute/_sync_base.py +0 -0
  328. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/compute/daytona.py +0 -0
  329. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/compute/docker.py +0 -0
  330. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/compute/e2b.py +0 -0
  331. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/compute/flyio.py +0 -0
  332. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/compute/local.py +0 -0
  333. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/compute/modal_compute.py +0 -0
  334. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/compute/tenki.py +0 -0
  335. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/compute_managed_agent.py +0 -0
  336. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/cursor_cli.py +0 -0
  337. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/db_session_adapter.py +0 -0
  338. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/gemini_cli.py +0 -0
  339. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/hosted_agent.py +0 -0
  340. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/local_agent.py +0 -0
  341. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/managed_agents.py +0 -0
  342. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/managed_local.py +0 -0
  343. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/registry.py +0 -0
  344. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/integrations/sandboxed_agent.py +0 -0
  345. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/jobs/__init__.py +0 -0
  346. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/jobs/path_validation.py +0 -0
  347. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/jobs/server.py +0 -0
  348. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/jobs/store.py +0 -0
  349. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/kanban/__init__.py +0 -0
  350. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/llm/__init__.py +0 -0
  351. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/llm/catalogue.py +0 -0
  352. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/llm/config.py +0 -0
  353. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/llm/credentials.py +0 -0
  354. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/llm/env.py +0 -0
  355. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/llm/gateways.py +0 -0
  356. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/llm/registry.py +0 -0
  357. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/mcp_server/__init__.py +0 -0
  358. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/n8n/__init__.py +0 -0
  359. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/n8n/client.py +0 -0
  360. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/n8n/converter.py +0 -0
  361. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/n8n/preview.py +0 -0
  362. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/n8n/reverse_converter.py +0 -0
  363. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/observability/__init__.py +0 -0
  364. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/observability/hooks.py +0 -0
  365. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/observability/langextract.py +0 -0
  366. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/observability/langfuse.py +0 -0
  367. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/__init__.py +0 -0
  368. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/_valkey_client.py +0 -0
  369. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/config.py +0 -0
  370. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/__init__.py +0 -0
  371. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/_ops.py +0 -0
  372. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/_sql_base.py +0 -0
  373. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
  374. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/async_mysql.py +0 -0
  375. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/async_postgres.py +0 -0
  376. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  377. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/base.py +0 -0
  378. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/json_store.py +0 -0
  379. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/mysql.py +0 -0
  380. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/postgres.py +0 -0
  381. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/singlestore.py +0 -0
  382. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/sqlite.py +0 -0
  383. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/supabase.py +0 -0
  384. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/surrealdb.py +0 -0
  385. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  386. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/conversation/turso.py +0 -0
  387. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/factory.py +0 -0
  388. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/hooks/__init__.py +0 -0
  389. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  390. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/__init__.py +0 -0
  391. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/base.py +0 -0
  392. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/cassandra.py +0 -0
  393. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/chroma.py +0 -0
  394. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  395. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  396. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/couchbase.py +0 -0
  397. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/lancedb.py +0 -0
  398. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  399. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  400. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  401. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/milvus.py +0 -0
  402. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  403. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/pgvector.py +0 -0
  404. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/pinecone.py +0 -0
  405. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/qdrant.py +0 -0
  406. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  407. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  408. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  409. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  410. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  411. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/knowledge/weaviate.py +0 -0
  412. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/migrations/__init__.py +0 -0
  413. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/migrations/manager.py +0 -0
  414. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/orchestrator.py +0 -0
  415. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/registry.py +0 -0
  416. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/__init__.py +0 -0
  417. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/async_mongodb.py +0 -0
  418. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/base.py +0 -0
  419. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/dynamodb.py +0 -0
  420. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/firestore.py +0 -0
  421. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/gcs.py +0 -0
  422. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/memory.py +0 -0
  423. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/mongodb.py +0 -0
  424. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/redis.py +0 -0
  425. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/upstash.py +0 -0
  426. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/persistence/state/valkey.py +0 -0
  427. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/profiler.py +0 -0
  428. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/push/__init__.py +0 -0
  429. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/push/client.py +0 -0
  430. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/push/transports.py +0 -0
  431. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/__init__.py +0 -0
  432. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/bridge.py +0 -0
  433. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/core.py +0 -0
  434. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/exceptions.py +0 -0
  435. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/models.py +0 -0
  436. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/policy.py +0 -0
  437. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/registry.py +0 -0
  438. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/runtime.py +0 -0
  439. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/security.py +0 -0
  440. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/serve.py +0 -0
  441. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/recipe/server.py +0 -0
  442. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/replay/__init__.py +0 -0
  443. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/replay/analyzer.py +0 -0
  444. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/replay/applier.py +0 -0
  445. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/replay/judge.py +0 -0
  446. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/replay/plan.py +0 -0
  447. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/replay/player.py +0 -0
  448. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/replay/reader.py +0 -0
  449. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/replay/storage.py +0 -0
  450. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/replay/writer.py +0 -0
  451. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/runtime/__init__.py +0 -0
  452. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/runtime/__main__.py +0 -0
  453. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/sandbox/__init__.py +0 -0
  454. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/sandbox/_registry.py +0 -0
  455. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/__init__.py +0 -0
  456. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/_base_scheduler.py +0 -0
  457. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/_delivery.py +0 -0
  458. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/_dispatch.py +0 -0
  459. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/agent_scheduler.py +0 -0
  460. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  461. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/base.py +0 -0
  462. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/blueprint_catalogue.py +0 -0
  463. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/condition_gate.py +0 -0
  464. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/daemon_manager.py +0 -0
  465. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/deployment.py +0 -0
  466. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/executor.py +0 -0
  467. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/shared.py +0 -0
  468. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/state_manager.py +0 -0
  469. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/scheduler/suggestion_engine.py +0 -0
  470. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/security/__init__.py +0 -0
  471. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/security/audit.py +0 -0
  472. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/security/injection.py +0 -0
  473. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/security/protected.py +0 -0
  474. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/setup/__init__.py +0 -0
  475. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/setup/build.py +0 -0
  476. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/setup/post_install.py +0 -0
  477. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/setup/setup_conda_env.py +0 -0
  478. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/setup.py +0 -0
  479. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/__init__.py +0 -0
  480. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/ai_generator.py +0 -0
  481. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/config.py +0 -0
  482. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/dedupe.py +0 -0
  483. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/discovery.py +0 -0
  484. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/drift.py +0 -0
  485. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/engine.py +0 -0
  486. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/example_verifier.py +0 -0
  487. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/models.py +0 -0
  488. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/reports.py +0 -0
  489. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/templates.py +0 -0
  490. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/undo_redo.py +0 -0
  491. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/standardise/validator.py +0 -0
  492. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/storage/__init__.py +0 -0
  493. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/storage/dynamodb_adapter.py +0 -0
  494. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/storage/mongodb_adapter.py +0 -0
  495. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/storage/postgresql_adapter.py +0 -0
  496. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/storage/redis_adapter.py +0 -0
  497. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/storage/valkey_adapter.py +0 -0
  498. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/__init__.py +0 -0
  499. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/batch_source.py +0 -0
  500. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/cli_docs_source.py +0 -0
  501. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/discovery.py +0 -0
  502. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/docs_source.py +0 -0
  503. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/examples_source.py +0 -0
  504. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/executor.py +0 -0
  505. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/models.py +0 -0
  506. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/report_viewer.py +0 -0
  507. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/reporter.py +0 -0
  508. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/suite_runner/runner.py +0 -0
  509. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/__init__.py +0 -0
  510. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/_tool_sources.py +0 -0
  511. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/cache.py +0 -0
  512. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/dependency_checker.py +0 -0
  513. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/discovery.py +0 -0
  514. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/loader.py +0 -0
  515. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/registry.py +0 -0
  516. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/resolver.py +0 -0
  517. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/security.py +0 -0
  518. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/tool_override.py +0 -0
  519. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/templates/tools_doctor.py +0 -0
  520. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/tool_registry.py +0 -0
  521. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/tool_resolver.py +0 -0
  522. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/tools/__init__.py +0 -0
  523. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/tools/audio.py +0 -0
  524. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/tools/glob_tool.py +0 -0
  525. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/tools/grep_tool.py +0 -0
  526. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/tools/kanban_tools.py +0 -0
  527. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/tools/multiedit.py +0 -0
  528. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/tools/skill_manage.py +0 -0
  529. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/train/__init__.py +0 -0
  530. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/train.py +0 -0
  531. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/train_vision.py +0 -0
  532. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui/_aiui_datastore.py +0 -0
  533. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui/_external_agents.py +0 -0
  534. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui/context.py +0 -0
  535. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui/database_config.py +0 -0
  536. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui_agents/__init__.py +0 -0
  537. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui_agents/default_app.py +0 -0
  538. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui_bot/__init__.py +0 -0
  539. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui_bot/default_app.py +0 -0
  540. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui_chat/__init__.py +0 -0
  541. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui_chat/default_app.py +0 -0
  542. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui_dashboard/__init__.py +0 -0
  543. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui_dashboard/default_app.py +0 -0
  544. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui_realtime/__init__.py +0 -0
  545. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/ui_realtime/default_app.py +0 -0
  546. {praisonai-4.7.8 → praisonai-4.7.9}/praisonai/upload_vision.py +0 -0
  547. {praisonai-4.7.8 → praisonai-4.7.9}/setup.cfg +0 -0
  548. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test.py +0 -0
  549. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_agents_playbook.py +0 -0
  550. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_approval_system.py +0 -0
  551. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_basic.py +0 -0
  552. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_cli_features.py +0 -0
  553. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_custom_tools_fix.py +0 -0
  554. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_double_api_fix.py +0 -0
  555. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_n8n_cli_feature.py +0 -0
  556. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_n8n_integration.py +0 -0
  557. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_phase2_refactor.py +0 -0
  558. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_recipe.py +0 -0
  559. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_registry.py +0 -0
  560. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_runner.py +0 -0
  561. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_sandboxed_agent_compatibility.py +0 -0
  562. {praisonai-4.7.8 → praisonai-4.7.9}/tests/test_serve_features.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.7.8
3
+ Version: 4.7.9
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -11,14 +11,14 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=1.7.6
15
- Requires-Dist: praisonai-code>=0.1.5
16
- Requires-Dist: praisonai-bot>=0.1.5
17
- Requires-Dist: praisonai-train>=0.1.5
18
- Requires-Dist: praisonai-browser>=0.1.5
19
- Requires-Dist: praisonai-mcp>=0.1.7
20
- Requires-Dist: praisonai-sandbox>=0.1.5
21
- Requires-Dist: praisonai-deploy>=0.1.5
14
+ Requires-Dist: praisonaiagents>=1.7.7
15
+ Requires-Dist: praisonai-code>=0.1.6
16
+ Requires-Dist: praisonai-bot>=0.1.6
17
+ Requires-Dist: praisonai-train>=0.1.6
18
+ Requires-Dist: praisonai-browser>=0.1.6
19
+ Requires-Dist: praisonai-mcp>=0.1.8
20
+ Requires-Dist: praisonai-sandbox>=0.1.6
21
+ Requires-Dist: praisonai-deploy>=0.1.6
22
22
  Requires-Dist: python-dotenv>=0.19.0
23
23
  Requires-Dist: litellm<2,>=1.83.14
24
24
  Requires-Dist: PyYAML>=6.0
@@ -140,6 +140,8 @@ Requires-Dist: agent-client-protocol>=0.7.0; extra == "acp"
140
140
  Provides-Extra: flow
141
141
  Requires-Dist: langflow>=1.0.0; extra == "flow"
142
142
  Requires-Dist: requests>=2.31.0; extra == "flow"
143
+ Requires-Dist: a2a-sdk[http-server]>=1.0.0; extra == "flow"
144
+ Requires-Dist: fastapi-pagination>=0.12.34; extra == "flow"
143
145
  Provides-Extra: lite
144
146
  Provides-Extra: all
145
147
  Requires-Dist: fastapi>=0.115.0; extra == "all"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.7.8
3
+ Version: 4.7.9
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -11,14 +11,14 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=1.7.6
15
- Requires-Dist: praisonai-code>=0.1.5
16
- Requires-Dist: praisonai-bot>=0.1.5
17
- Requires-Dist: praisonai-train>=0.1.5
18
- Requires-Dist: praisonai-browser>=0.1.5
19
- Requires-Dist: praisonai-mcp>=0.1.7
20
- Requires-Dist: praisonai-sandbox>=0.1.5
21
- Requires-Dist: praisonai-deploy>=0.1.5
14
+ Requires-Dist: praisonaiagents>=1.7.7
15
+ Requires-Dist: praisonai-code>=0.1.6
16
+ Requires-Dist: praisonai-bot>=0.1.6
17
+ Requires-Dist: praisonai-train>=0.1.6
18
+ Requires-Dist: praisonai-browser>=0.1.6
19
+ Requires-Dist: praisonai-mcp>=0.1.8
20
+ Requires-Dist: praisonai-sandbox>=0.1.6
21
+ Requires-Dist: praisonai-deploy>=0.1.6
22
22
  Requires-Dist: python-dotenv>=0.19.0
23
23
  Requires-Dist: litellm<2,>=1.83.14
24
24
  Requires-Dist: PyYAML>=6.0
@@ -140,6 +140,8 @@ Requires-Dist: agent-client-protocol>=0.7.0; extra == "acp"
140
140
  Provides-Extra: flow
141
141
  Requires-Dist: langflow>=1.0.0; extra == "flow"
142
142
  Requires-Dist: requests>=2.31.0; extra == "flow"
143
+ Requires-Dist: a2a-sdk[http-server]>=1.0.0; extra == "flow"
144
+ Requires-Dist: fastapi-pagination>=0.12.34; extra == "flow"
143
145
  Provides-Extra: lite
144
146
  Provides-Extra: all
145
147
  Requires-Dist: fastapi>=0.115.0; extra == "all"
@@ -1,14 +1,14 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.7.6
5
- praisonai-code>=0.1.5
6
- praisonai-bot>=0.1.5
7
- praisonai-train>=0.1.5
8
- praisonai-browser>=0.1.5
9
- praisonai-mcp>=0.1.7
10
- praisonai-sandbox>=0.1.5
11
- praisonai-deploy>=0.1.5
4
+ praisonaiagents>=1.7.7
5
+ praisonai-code>=0.1.6
6
+ praisonai-bot>=0.1.6
7
+ praisonai-train>=0.1.6
8
+ praisonai-browser>=0.1.6
9
+ praisonai-mcp>=0.1.8
10
+ praisonai-sandbox>=0.1.6
11
+ praisonai-deploy>=0.1.6
12
12
  python-dotenv>=0.19.0
13
13
  litellm<2,>=1.83.14
14
14
  PyYAML>=6.0
@@ -153,6 +153,8 @@ praisonai-sandbox[e2b]
153
153
  [flow]
154
154
  langflow>=1.0.0
155
155
  requests>=2.31.0
156
+ a2a-sdk[http-server]>=1.0.0
157
+ fastapi-pagination>=0.12.34
156
158
 
157
159
  [gateway]
158
160
  praisonai-bot[gateway]
@@ -844,8 +844,11 @@ class AgentsGenerator:
844
844
  # Build tools dictionary using shared logic
845
845
  tools_dict = self._build_tools_dict(config)
846
846
 
847
- # Select framework and resolve adapter variant
848
- framework_name = self.framework or config.get('framework', 'praisonai')
847
+ # Select framework and resolve adapter variant. Registry is the single
848
+ # source of truth for the default, so no literal framework name here.
849
+ framework_name = self._adapter_registry.resolve_or_default(
850
+ self.framework or config.get('framework')
851
+ )
849
852
  adapter = self._select_framework(framework_name, config)
850
853
 
851
854
  # Validate framework availability through the injected registry so a
@@ -1376,10 +1379,13 @@ class AgentsGenerator:
1376
1379
  if self._is_workflow_yaml(config):
1377
1380
  # Bracket the workflow run in the same observability session the
1378
1381
  # sequential/hierarchical path uses so AgentOps init/finalize fires
1379
- # for workflow YAMLs too. Workflow YAMLs are native-only, so tag
1380
- # them 'praisonai'.
1382
+ # for workflow YAMLs too. Tag with the config-resolved framework
1383
+ # (registry default when omitted) rather than a hardcoded name.
1381
1384
  self._validate_workflow_cli_capabilities()
1382
- with observability_session("praisonai"):
1385
+ workflow_label = self._adapter_registry.resolve_or_default(
1386
+ self.framework or config.get('framework')
1387
+ ).lower()
1388
+ with observability_session(workflow_label):
1383
1389
  return self._run_yaml_workflow(config)
1384
1390
 
1385
1391
  # Use shared preparation logic
@@ -1432,10 +1438,14 @@ class AgentsGenerator:
1432
1438
  if self._is_workflow_yaml(config):
1433
1439
  # Bracket the async workflow run in the same observability session
1434
1440
  # the sequential/hierarchical path uses so AgentOps init/finalize
1435
- # fires for workflow YAMLs too. Workflow YAMLs are native-only, so
1436
- # tag them 'praisonai'.
1441
+ # fires for workflow YAMLs too. Tag with the config-resolved
1442
+ # framework (registry default when omitted) rather than a hardcoded
1443
+ # name.
1437
1444
  self._validate_workflow_cli_capabilities()
1438
- with observability_session("praisonai"):
1445
+ workflow_label = self._adapter_registry.resolve_or_default(
1446
+ self.framework or config.get('framework')
1447
+ ).lower()
1448
+ with observability_session(workflow_label):
1439
1449
  return await self._arun_yaml_workflow(config)
1440
1450
 
1441
1451
  # Use shared preparation logic (off the event loop to avoid blocking imports)
@@ -1493,23 +1503,35 @@ class AgentsGenerator:
1493
1503
  )
1494
1504
  # Validate the YAML-declared framework first so a non-native workflow
1495
1505
  # YAML (e.g. framework: crewai) can't slip through just because the
1496
- # generator instance still holds the default 'praisonai'.
1497
- workflow_framework = framework_from_config(config)
1506
+ # generator instance still holds the default 'praisonai'. Resolve
1507
+ # through the injected registry (not the process default) so the
1508
+ # build-time framework agrees with the observability label and a
1509
+ # tenant-scoped adapter is honoured. Fall back to the process default
1510
+ # when the instance was built without an injected registry.
1511
+ registry = getattr(self, "_adapter_registry", None) or _get_default_adapter_registry()
1512
+ workflow_framework = framework_from_config(
1513
+ config, registry=registry
1514
+ )
1498
1515
  validate_workflow_framework(
1499
1516
  workflow_framework,
1500
1517
  source="agents.yaml workflow section",
1518
+ registry=registry,
1501
1519
  )
1502
1520
  if self.framework:
1503
1521
  validate_workflow_framework(
1504
1522
  self.framework,
1505
1523
  source="AgentsGenerator framework",
1524
+ registry=registry,
1506
1525
  )
1507
1526
 
1508
1527
  # Parity with the sequential/hierarchical path: reject an incompatible
1509
1528
  # cli_backend in a workflow YAML at build time instead of accepting it
1510
1529
  # silently. Workflow YAMLs are native-only, so validate against
1511
1530
  # 'praisonai'.
1512
- self._validate_cli_backend_compatibility(config, workflow_framework or 'praisonai')
1531
+ self._validate_cli_backend_compatibility(
1532
+ config,
1533
+ registry.resolve_or_default(workflow_framework),
1534
+ )
1513
1535
 
1514
1536
  # The framework-level check above passes for 'praisonai' because the
1515
1537
  # sequential/hierarchical adapter does support cli_backend — but
@@ -443,6 +443,42 @@ def _apply_agent_config(agent: Any, agent_config: Optional[Dict[str, Any]]) -> N
443
443
  )
444
444
 
445
445
 
446
+ async def _safe_close_agent(agent: Any) -> None:
447
+ """Best-effort teardown of a per-request agent clone.
448
+
449
+ ``resolve_session_agent`` returns a fresh clone for every invoke of a
450
+ session-isolatable ``Agent`` (so concurrent callers never share
451
+ ``chat_history``). Those clones lazily spin up LLM client pools,
452
+ tool-executor threads and MCP subprocesses that
453
+ ``Agent.close()``/``aclose()`` release — without this teardown each request
454
+ leaks them into the long-lived server process.
455
+
456
+ Only a *clone* is closed. Ownership is derived from the agent itself via
457
+ :func:`_supports_session_isolation`: an isolatable agent was cloned for this
458
+ request and is safe to close, whereas a non-isolatable one (plain mock /
459
+ lightweight callable) is the shared registry instance and must NOT be closed
460
+ or the next request would run against a torn-down agent. Deriving ownership
461
+ from the resolved object — rather than comparing it against a second,
462
+ independently-timed registry lookup — is race-free even when the registry
463
+ entry is concurrently replaced.
464
+
465
+ Errors are swallowed (logged) so cleanup never masks a successful response.
466
+ """
467
+ if agent is None or not _supports_session_isolation(agent):
468
+ return
469
+ try:
470
+ aclose = getattr(agent, "aclose", None)
471
+ if inspect.iscoroutinefunction(aclose):
472
+ await aclose()
473
+ else:
474
+ close = getattr(agent, "close", None)
475
+ if callable(close):
476
+ import asyncio
477
+ await asyncio.to_thread(close)
478
+ except Exception:
479
+ logger.exception("Agent cleanup failed")
480
+
481
+
446
482
  def _supports_async_start(agent: Any) -> bool:
447
483
  """Return True if agent.astart is a coroutine function."""
448
484
  astart = getattr(agent, "astart", None)
@@ -511,52 +547,60 @@ if FASTAPI_AVAILABLE and APIRouter is not None:
511
547
  status_code=404,
512
548
  detail=f"Agent '{agent_id}' not found"
513
549
  )
514
-
515
- # Apply per-request agent_config overrides to the isolated clone, or
516
- # reject unsupported keys with a 400 so the caller isn't silently
517
- # running a different config than they asked for.
518
- try:
519
- _apply_agent_config(agent, request.agent_config)
520
- except AgentConfigError as e:
521
- raise HTTPException(status_code=400, detail=str(e))
522
550
 
523
551
  try:
524
- # Session ID echoed back to the caller
525
- session_id = request.session_id or "default"
526
-
527
- # Invoke agent (handle both sync and async agents)
528
- if _supports_async_start(agent):
529
- # Async agent
530
- result = await agent.astart(request.message)
531
- elif _supports_sync_start(agent):
532
- # Sync agent - run in a worker thread to avoid blocking the event
533
- # loop. ``asyncio.to_thread`` is the correct primitive inside a
534
- # running request coroutine (``get_event_loop()`` is deprecated
535
- # there since Python 3.10).
536
- import asyncio
537
- result = await asyncio.to_thread(agent.start, request.message)
538
- else:
539
- raise AttributeError(f"Agent {agent_id} must provide start() or async astart()")
540
-
541
- logger.info(f"Agent {agent_id} invoked successfully")
542
-
543
- return AgentInvokeResponse(
544
- result=str(result),
545
- session_id=session_id,
546
- status="success",
547
- metadata={
548
- "agent_id": agent_id,
549
- "message_length": len(request.message),
550
- "response_length": len(str(result))
551
- }
552
- )
553
-
554
- except Exception as e:
555
- logger.error(f"Agent {agent_id} invocation failed: {e}")
556
- raise HTTPException(
557
- status_code=500,
558
- detail=f"Agent execution failed: {str(e)}"
559
- )
552
+ # Apply per-request agent_config overrides to the isolated clone, or
553
+ # reject unsupported keys with a 400 so the caller isn't silently
554
+ # running a different config than they asked for.
555
+ try:
556
+ _apply_agent_config(agent, request.agent_config)
557
+ except AgentConfigError as e:
558
+ raise HTTPException(status_code=400, detail=str(e))
559
+
560
+ try:
561
+ # Session ID echoed back to the caller
562
+ session_id = request.session_id or "default"
563
+
564
+ # Invoke agent (handle both sync and async agents)
565
+ if _supports_async_start(agent):
566
+ # Async agent
567
+ result = await agent.astart(request.message)
568
+ elif _supports_sync_start(agent):
569
+ # Sync agent - run in a worker thread to avoid blocking the event
570
+ # loop. ``asyncio.to_thread`` is the correct primitive inside a
571
+ # running request coroutine (``get_event_loop()`` is deprecated
572
+ # there since Python 3.10).
573
+ import asyncio
574
+ result = await asyncio.to_thread(agent.start, request.message)
575
+ else:
576
+ raise AttributeError(f"Agent {agent_id} must provide start() or async astart()")
577
+
578
+ logger.info(f"Agent {agent_id} invoked successfully")
579
+
580
+ return AgentInvokeResponse(
581
+ result=str(result),
582
+ session_id=session_id,
583
+ status="success",
584
+ metadata={
585
+ "agent_id": agent_id,
586
+ "message_length": len(request.message),
587
+ "response_length": len(str(result))
588
+ }
589
+ )
590
+
591
+ except HTTPException:
592
+ raise
593
+ except Exception as e:
594
+ logger.error(f"Agent {agent_id} invocation failed: {e}")
595
+ raise HTTPException(
596
+ status_code=500,
597
+ detail=f"Agent execution failed: {str(e)}"
598
+ )
599
+ finally:
600
+ # Release the per-request clone's resources (LLM pools, tool-executor
601
+ # threads, MCP subprocesses). No-op when the agent fell back to the
602
+ # shared template. Never masks the response.
603
+ await _safe_close_agent(agent)
560
604
 
561
605
  @router.get("/agents")
562
606
  async def list_agents(
@@ -669,6 +713,7 @@ async def invoke_agent_standalone(
669
713
  "available_agents": list_registered_agents()
670
714
  }
671
715
 
716
+ agent = None
672
717
  try:
673
718
  # Per-session isolated agent view (see resolve_session_agent). Done
674
719
  # inside the try so a clone/isolation failure returns a clean error
@@ -715,6 +760,10 @@ async def invoke_agent_standalone(
715
760
  "status": "error",
716
761
  "agent_id": agent_id
717
762
  }
763
+ finally:
764
+ # Release the per-request clone's resources; no-op for the shared
765
+ # template fallback. Never masks the response.
766
+ await _safe_close_agent(agent)
718
767
 
719
768
 
720
769
  # Example usage and helper functions
@@ -7,7 +7,91 @@ Provides generic API passthrough functionality for provider-specific endpoints.
7
7
  from dataclasses import dataclass, field
8
8
  from typing import Optional, Any, Dict
9
9
  from urllib.parse import urlparse
10
+ import asyncio
10
11
  import ipaddress
12
+ import threading
13
+
14
+
15
+ # Shared HTTP clients for the httpx fallback path (used when litellm's
16
+ # passthrough route is unavailable). Reused across calls so the hot passthrough
17
+ # fallback shares a keep-alive connection pool instead of opening + tearing down
18
+ # a socket per agent call. Timeout is applied per-request, so a single client
19
+ # safely serves callers with different ``timeout`` values.
20
+ _sync_client: Any = None
21
+ _async_client: Any = None
22
+ _async_client_loop: Any = None
23
+ _client_lock = threading.Lock()
24
+
25
+
26
+ def _get_sync_client() -> Any:
27
+ """Return the shared sync httpx client, constructing it lazily."""
28
+ global _sync_client
29
+ if _sync_client is None:
30
+ with _client_lock:
31
+ if _sync_client is None:
32
+ import httpx
33
+ _sync_client = httpx.Client()
34
+ return _sync_client
35
+
36
+
37
+ def _get_async_client() -> Any:
38
+ """Return the shared async httpx client for the running event loop.
39
+
40
+ ``httpx.AsyncClient`` binds its connection pool to the event loop that first
41
+ used it, so a client cached across separate ``asyncio.run()`` lifecycles (or
42
+ reused from a different loop) fails with a loop-closed error. We therefore
43
+ key the cached client to its owning loop and rebuild it whenever the current
44
+ loop differs from the one that created it.
45
+ """
46
+ global _async_client, _async_client_loop
47
+ import httpx
48
+
49
+ try:
50
+ current_loop = asyncio.get_running_loop()
51
+ except RuntimeError:
52
+ current_loop = None
53
+
54
+ with _client_lock:
55
+ if _async_client is None or _async_client_loop is not current_loop:
56
+ _async_client = httpx.AsyncClient()
57
+ _async_client_loop = current_loop
58
+ return _async_client
59
+
60
+
61
+ def close_clients() -> None:
62
+ """Close the cached sync client and clear the sync/async globals.
63
+
64
+ Provided as an explicit shutdown hook for long-lived hosts that want to
65
+ release the pooled sockets deterministically. The async client cannot be
66
+ awaited from this sync helper, so it is dropped (and rebuilt per-loop on next
67
+ use); the sync client is closed here.
68
+ """
69
+ global _sync_client, _async_client, _async_client_loop
70
+ with _client_lock:
71
+ if _sync_client is not None:
72
+ try:
73
+ _sync_client.close()
74
+ finally:
75
+ _sync_client = None
76
+ _async_client = None
77
+ _async_client_loop = None
78
+
79
+
80
+ async def aclose_clients() -> None:
81
+ """Await-close the cached async client (in its own loop) and the sync one."""
82
+ global _sync_client, _async_client, _async_client_loop
83
+ client = None
84
+ with _client_lock:
85
+ client = _async_client
86
+ _async_client = None
87
+ _async_client_loop = None
88
+ if _sync_client is not None:
89
+ try:
90
+ _sync_client.close()
91
+ finally:
92
+ _sync_client = None
93
+ if client is not None:
94
+ await client.aclose()
11
95
 
12
96
 
13
97
  @dataclass
@@ -121,22 +205,20 @@ def passthrough(
121
205
  metadata=metadata or {},
122
206
  )
123
207
  except AttributeError:
124
- # Fallback to httpx if passthrough not available
125
- import httpx
126
-
208
+ # Fallback to a shared httpx client if the passthrough route is missing.
127
209
  url = f"{_validate_api_base(api_base) if api_base else 'https://api.openai.com'}{endpoint}"
128
210
  request_headers = headers or {}
129
211
  if api_key:
130
212
  request_headers['Authorization'] = f"Bearer {api_key}"
131
213
 
132
- with httpx.Client(timeout=timeout) as client:
133
- response = client.request(
134
- method=method,
135
- url=url,
136
- headers=request_headers,
137
- json=json_data,
138
- data=data,
139
- )
214
+ response = _get_sync_client().request(
215
+ method=method,
216
+ url=url,
217
+ headers=request_headers,
218
+ json=json_data,
219
+ data=data,
220
+ timeout=timeout,
221
+ )
140
222
 
141
223
  return PassthroughResult(
142
224
  data=response.json() if response.headers.get('content-type', '').startswith('application/json') else response.text,
@@ -203,21 +285,19 @@ async def apassthrough(
203
285
  metadata=metadata or {},
204
286
  )
205
287
  except AttributeError:
206
- import httpx
207
-
208
288
  url = f"{_validate_api_base(api_base) if api_base else 'https://api.openai.com'}{endpoint}"
209
289
  request_headers = headers or {}
210
290
  if api_key:
211
291
  request_headers['Authorization'] = f"Bearer {api_key}"
212
292
 
213
- async with httpx.AsyncClient(timeout=timeout) as client:
214
- response = await client.request(
215
- method=method,
216
- url=url,
217
- headers=request_headers,
218
- json=json_data,
219
- data=data,
220
- )
293
+ response = await _get_async_client().request(
294
+ method=method,
295
+ url=url,
296
+ headers=request_headers,
297
+ json=json_data,
298
+ data=data,
299
+ timeout=timeout,
300
+ )
221
301
 
222
302
  return PassthroughResult(
223
303
  data=response.json() if response.headers.get('content-type', '').startswith('application/json') else response.text,
@@ -83,7 +83,24 @@ class LangfuseClient:
83
83
  self.secret_key = secret_key
84
84
  self.host = host.rstrip("/") # Remove trailing slash
85
85
  self._auth = HTTPBasicAuth(public_key, secret_key)
86
+ # Reuse a single Session so keep-alive connections and the auth handler
87
+ # persist across the many trace/session/observation lookups made by the
88
+ # interactive ``praisonai langfuse`` browser.
89
+ self._session = requests.Session()
90
+ self._session.auth = self._auth
86
91
 
92
+ def close(self) -> None:
93
+ """Close the underlying HTTP session and release its connection pool."""
94
+ session = getattr(self, "_session", None)
95
+ if session is not None:
96
+ session.close()
97
+
98
+ def __enter__(self) -> "LangfuseClient":
99
+ return self
100
+
101
+ def __exit__(self, *exc_info: Any) -> None:
102
+ self.close()
103
+
87
104
  @classmethod
88
105
  def from_config_file(cls, config_path: Optional[Path] = None) -> "LangfuseClient":
89
106
  """
@@ -149,7 +166,7 @@ class LangfuseClient:
149
166
  url = f"{self.host}{endpoint}"
150
167
 
151
168
  try:
152
- response = requests.get(url, auth=self._auth, params=params, timeout=30)
169
+ response = self._session.get(url, params=params, timeout=30)
153
170
  response.raise_for_status()
154
171
  return response.json()
155
172
  except requests.exceptions.HTTPError as e:
@@ -109,7 +109,29 @@ class FrameworkAdapterRegistry(PluginRegistry[FrameworkAdapter]):
109
109
  "No supported framework installed. Available adapters: "
110
110
  f"{self.list_all_names()}"
111
111
  )
112
-
112
+
113
+ def resolve_or_default(self, name: Optional[str]) -> str:
114
+ """Resolve an explicit framework name, or fall back to the default.
115
+
116
+ Single source of truth for the ``name or 'praisonai'`` fallbacks that
117
+ were previously scattered across the wrapper (agents_generator, jobs,
118
+ scheduler, workflow_framework). Callers pass whatever the user gave —
119
+ typically ``self.framework or config.get('framework')`` — and get back
120
+ either that name (stripped) or the registry-selected default.
121
+
122
+ When ``pick_default()`` cannot resolve (no adapter installed), fall back
123
+ to ``DEFAULT_PRIORITY[0]`` so downstream availability validation can
124
+ raise its own actionable error instead of this helper masking it.
125
+ """
126
+ if name:
127
+ resolved = str(name).strip()
128
+ if resolved:
129
+ return resolved
130
+ try:
131
+ return self.pick_default()
132
+ except RuntimeError:
133
+ return self.DEFAULT_PRIORITY[0]
134
+
113
135
  def _validate_adapter(self, name: str, adapter) -> None:
114
136
  """Validate that adapter implements the required protocol signature.
115
137
 
@@ -70,6 +70,13 @@ def validate_workflow_framework(
70
70
  raise ValueError(message)
71
71
 
72
72
 
73
- def framework_from_config(config: Dict[str, Any]) -> str:
74
- """Return normalised framework name from a parsed YAML config dict."""
75
- return str(config.get("framework") or "praisonai").lower()
73
+ def framework_from_config(config: Dict[str, Any], *, registry: Any = None) -> str:
74
+ """Return normalised framework name from a parsed YAML config dict.
75
+
76
+ Falls back to the registry-selected default (single source of truth) rather
77
+ than a hardcoded framework name when the config omits ``framework``.
78
+ """
79
+ from .registry import get_default_registry
80
+
81
+ registry = registry or get_default_registry()
82
+ return registry.resolve_or_default(config.get("framework")).lower()