PraisonAI 4.7.11__tar.gz → 4.7.12__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 (564) hide show
  1. {praisonai-4.7.11 → praisonai-4.7.12}/PKG-INFO +10 -10
  2. {praisonai-4.7.11 → praisonai-4.7.12}/PraisonAI.egg-info/PKG-INFO +10 -10
  3. {praisonai-4.7.11 → praisonai-4.7.12}/PraisonAI.egg-info/requires.txt +9 -9
  4. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_api_auth.py +7 -3
  5. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_async_bridge.py +31 -0
  6. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_entrypoint.py +10 -14
  7. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/agents_generator.py +27 -2
  8. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/api/agent_invoke.py +5 -1
  9. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/api/call.py +66 -26
  10. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/app/agentos.py +2 -16
  11. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/auto.py +20 -2
  12. praisonai-4.7.12/praisonai/capabilities/guardrails.py +192 -0
  13. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/managed.py +4 -2
  14. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/standardise.py +3 -2
  15. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/background.py +6 -4
  16. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/sandbox_cli.py +38 -29
  17. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/legacy/direct_prompt.py +2 -2
  18. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/legacy/interactive_legacy.py +5 -3
  19. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/db/adapter.py +226 -64
  20. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/framework_adapters/autogen_adapter.py +46 -0
  21. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/framework_adapters/registry.py +55 -24
  22. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/inbuilt_tools/__init__.py +6 -2
  23. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/inbuilt_tools/autogen_tools.py +4 -4
  24. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/__init__.py +8 -1
  25. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/compute_managed_agent.py +58 -16
  26. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/registry.py +8 -3
  27. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/__init__.py +7 -5
  28. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/_valkey_client.py +3 -0
  29. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/__init__.py +3 -2
  30. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/base.py +105 -0
  31. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/orchestrator.py +57 -10
  32. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/__init__.py +4 -3
  33. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/base.py +98 -0
  34. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/serve.py +146 -29
  35. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/_base_scheduler.py +25 -2
  36. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/async_agent_scheduler.py +3 -22
  37. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/run_policy.py +13 -0
  38. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/security/__init__.py +2 -2
  39. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/tools/multiedit.py +117 -32
  40. praisonai-4.7.12/praisonai/version.py +1 -0
  41. {praisonai-4.7.11 → praisonai-4.7.12}/pyproject.toml +9 -9
  42. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_serve_features.py +40 -1
  43. praisonai-4.7.11/praisonai/capabilities/guardrails.py +0 -186
  44. praisonai-4.7.11/praisonai/version.py +0 -1
  45. {praisonai-4.7.11 → praisonai-4.7.12}/PraisonAI.egg-info/SOURCES.txt +0 -0
  46. {praisonai-4.7.11 → praisonai-4.7.12}/PraisonAI.egg-info/dependency_links.txt +0 -0
  47. {praisonai-4.7.11 → praisonai-4.7.12}/PraisonAI.egg-info/entry_points.txt +0 -0
  48. {praisonai-4.7.11 → praisonai-4.7.12}/PraisonAI.egg-info/top_level.txt +0 -0
  49. {praisonai-4.7.11 → praisonai-4.7.12}/README.md +0 -0
  50. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/__init__.py +0 -0
  51. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/__main__.py +0 -0
  52. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_approval_spec.py +0 -0
  53. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_bootstrap.py +0 -0
  54. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_dev/__init__.py +0 -0
  55. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_dev/api_md.py +0 -0
  56. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_framework_availability.py +0 -0
  57. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_lazy_cache.py +0 -0
  58. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_logging.py +0 -0
  59. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_registry.py +0 -0
  60. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/_safe_loader.py +0 -0
  61. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/acp/__init__.py +0 -0
  62. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/acp/config.py +0 -0
  63. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/acp/safe_edit.py +0 -0
  64. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/acp/server.py +0 -0
  65. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/acp/session.py +0 -0
  66. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/adapters/__init__.py +0 -0
  67. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/adapters/readers.py +0 -0
  68. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/adapters/rerankers.py +0 -0
  69. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/adapters/retrievers.py +0 -0
  70. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/adapters/vector_stores.py +0 -0
  71. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/agent.py +0 -0
  72. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/agent_scheduler.py +0 -0
  73. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/app/__init__.py +0 -0
  74. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/async_agent_scheduler.py +0 -0
  75. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/audit/__init__.py +0 -0
  76. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/audit/agent_centric.py +0 -0
  77. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/bots/__init__.py +0 -0
  78. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/browser/__init__.py +0 -0
  79. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/__init__.py +0 -0
  80. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/a2a.py +0 -0
  81. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/assistants.py +0 -0
  82. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/audio.py +0 -0
  83. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/batches.py +0 -0
  84. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/completions.py +0 -0
  85. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/container_files.py +0 -0
  86. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/containers.py +0 -0
  87. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/embeddings.py +0 -0
  88. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/files.py +0 -0
  89. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/fine_tuning.py +0 -0
  90. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/images.py +0 -0
  91. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/mcp.py +0 -0
  92. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/messages.py +0 -0
  93. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/moderations.py +0 -0
  94. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/ocr.py +0 -0
  95. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/passthrough.py +0 -0
  96. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/rag.py +0 -0
  97. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/realtime.py +0 -0
  98. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/rerank.py +0 -0
  99. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/responses.py +0 -0
  100. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/search.py +0 -0
  101. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/skills.py +0 -0
  102. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/vector_store_files.py +0 -0
  103. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/vector_stores.py +0 -0
  104. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/capabilities/videos.py +0 -0
  105. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/claw/__init__.py +0 -0
  106. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/__init__.py +0 -0
  107. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/_paths.py +0 -0
  108. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/_shim.py +0 -0
  109. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/_warnings.py +0 -0
  110. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/app.py +0 -0
  111. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/approval_backend.py +0 -0
  112. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/branding.py +0 -0
  113. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/__init__.py +0 -0
  114. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/_profiling.py +0 -0
  115. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/acp.py +0 -0
  116. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/agent.py +0 -0
  117. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/agents.py +0 -0
  118. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/app.py +0 -0
  119. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/attach.py +0 -0
  120. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/audit.py +0 -0
  121. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/auth.py +0 -0
  122. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/batch.py +0 -0
  123. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/benchmark.py +0 -0
  124. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/bot.py +0 -0
  125. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/browser.py +0 -0
  126. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/call.py +0 -0
  127. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/chat.py +0 -0
  128. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/checkpoint.py +0 -0
  129. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/claw.py +0 -0
  130. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/code.py +0 -0
  131. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/command.py +0 -0
  132. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/commit.py +0 -0
  133. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/completion.py +0 -0
  134. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/config.py +0 -0
  135. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/context.py +0 -0
  136. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/daemon.py +0 -0
  137. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/dashboard.py +0 -0
  138. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/debug.py +0 -0
  139. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/deploy.py +0 -0
  140. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/diag.py +0 -0
  141. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/docs.py +0 -0
  142. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/doctor.py +0 -0
  143. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/endpoints.py +0 -0
  144. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/environment.py +0 -0
  145. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/eval.py +0 -0
  146. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/examples.py +0 -0
  147. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/flow.py +0 -0
  148. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/gateway.py +0 -0
  149. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/github.py +0 -0
  150. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/hooks.py +0 -0
  151. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/identity.py +0 -0
  152. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/init.py +0 -0
  153. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/kanban.py +0 -0
  154. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/knowledge.py +0 -0
  155. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/langextract.py +0 -0
  156. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/langfuse.py +0 -0
  157. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/loop.py +0 -0
  158. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/lsp.py +0 -0
  159. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/mcp.py +0 -0
  160. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/memory.py +0 -0
  161. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/mint_link.py +0 -0
  162. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/models.py +0 -0
  163. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/n8n.py +0 -0
  164. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/obs.py +0 -0
  165. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/onboard.py +0 -0
  166. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/package.py +0 -0
  167. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/pairing.py +0 -0
  168. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/paths.py +0 -0
  169. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/permissions.py +0 -0
  170. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/plugins.py +0 -0
  171. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/port.py +0 -0
  172. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/profile.py +0 -0
  173. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/publish.py +0 -0
  174. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/rag.py +0 -0
  175. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/realtime.py +0 -0
  176. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/recipe.py +0 -0
  177. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/registry.py +0 -0
  178. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/replay.py +0 -0
  179. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/research.py +0 -0
  180. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/retrieval.py +0 -0
  181. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/rules.py +0 -0
  182. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/run.py +0 -0
  183. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/sandbox.py +0 -0
  184. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/schedule.py +0 -0
  185. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/serve.py +0 -0
  186. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/session.py +0 -0
  187. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/setup.py +0 -0
  188. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/skills.py +0 -0
  189. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/templates.py +0 -0
  190. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/test.py +0 -0
  191. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/todo.py +0 -0
  192. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/tools.py +0 -0
  193. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/traces.py +0 -0
  194. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/tracker.py +0 -0
  195. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/train.py +0 -0
  196. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/ui.py +0 -0
  197. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/up.py +0 -0
  198. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/validate.py +0 -0
  199. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/version.py +0 -0
  200. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/commands/workflow.py +0 -0
  201. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/config_loader.py +0 -0
  202. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/configuration/__init__.py +0 -0
  203. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/configuration/config.schema.json +0 -0
  204. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/execution/__init__.py +0 -0
  205. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/fallback_schema.py +0 -0
  206. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/__init__.py +0 -0
  207. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/acp.py +0 -0
  208. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/agent_scheduler.py +0 -0
  209. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/agent_tools.py +0 -0
  210. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/approval.py +0 -0
  211. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/bots_cli.py +0 -0
  212. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/deploy.py +0 -0
  213. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/endpoints.py +0 -0
  214. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/eval.py +0 -0
  215. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/gateway.py +0 -0
  216. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/ollama.py +0 -0
  217. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/onboard.py +0 -0
  218. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/persistence.py +0 -0
  219. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/recipe.py +0 -0
  220. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/recipe_optimizer.py +0 -0
  221. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/registry.py +0 -0
  222. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/serve.py +0 -0
  223. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/templates.py +0 -0
  224. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/tools.py +0 -0
  225. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/tui/__init__.py +0 -0
  226. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/tui/app.py +0 -0
  227. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/features/workflow.py +0 -0
  228. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/interactive/__init__.py +0 -0
  229. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/interactive/async_tui.py +0 -0
  230. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/interactive/config.py +0 -0
  231. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/interactive/core.py +0 -0
  232. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/interactive/events.py +0 -0
  233. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/langfuse_client.py +0 -0
  234. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/legacy/__init__.py +0 -0
  235. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
  236. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
  237. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
  238. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/legacy/framework_run.py +0 -0
  239. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
  240. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/legacy/subcommand_handlers.py +0 -0
  241. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/legacy/workflow_commands.py +0 -0
  242. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/main.py +0 -0
  243. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/output/__init__.py +0 -0
  244. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/schedule_cli.py +0 -0
  245. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/schema_provider.py +0 -0
  246. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/session/__init__.py +0 -0
  247. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/state/__init__.py +0 -0
  248. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/ui/__init__.py +0 -0
  249. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/unified_schema.py +0 -0
  250. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli/utils/__init__.py +0 -0
  251. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/cli_backends/__init__.py +0 -0
  252. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/__init__.py +0 -0
  253. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/agent_tools.py +0 -0
  254. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/diff/__init__.py +0 -0
  255. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/diff/diff_strategy.py +0 -0
  256. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/tools/__init__.py +0 -0
  257. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/tools/apply_diff.py +0 -0
  258. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/tools/execute_command.py +0 -0
  259. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/tools/list_files.py +0 -0
  260. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/tools/read_file.py +0 -0
  261. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/tools/search_replace.py +0 -0
  262. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/tools/write_file.py +0 -0
  263. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/utils/__init__.py +0 -0
  264. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/utils/file_utils.py +0 -0
  265. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/utils/ignore_utils.py +0 -0
  266. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/code/utils/text_utils.py +0 -0
  267. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/config/__init__.py +0 -0
  268. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/config/agents.schema.json +0 -0
  269. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/config/schema.py +0 -0
  270. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/config/validator.py +0 -0
  271. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/context/__init__.py +0 -0
  272. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/context/_storage_path.py +0 -0
  273. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/context/artifact_store.py +0 -0
  274. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/context/config.py +0 -0
  275. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/context/history_store.py +0 -0
  276. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/context/queue.py +0 -0
  277. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/context/setup.py +0 -0
  278. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/context/terminal_logger.py +0 -0
  279. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/daemon/__init__.py +0 -0
  280. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/db/__init__.py +0 -0
  281. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/deploy/__init__.py +0 -0
  282. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/__init__.py +0 -0
  283. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/a2u_server.py +0 -0
  284. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/discovery.py +0 -0
  285. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/providers/__init__.py +0 -0
  286. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/providers/a2a.py +0 -0
  287. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/providers/a2u.py +0 -0
  288. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/providers/agents_api.py +0 -0
  289. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/providers/base.py +0 -0
  290. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/providers/mcp.py +0 -0
  291. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/providers/openai_compat.py +0 -0
  292. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/providers/recipe.py +0 -0
  293. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  294. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/registry.py +0 -0
  295. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/endpoints/server.py +0 -0
  296. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/flow/__init__.py +0 -0
  297. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/flow/client.py +0 -0
  298. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  299. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  300. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/flow/components/__init__.py +0 -0
  301. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/flow/converter.py +0 -0
  302. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/flow/helpers.py +0 -0
  303. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/framework_adapters/__init__.py +0 -0
  304. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/framework_adapters/_config_builder.py +0 -0
  305. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/framework_adapters/base.py +0 -0
  306. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  307. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  308. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/framework_adapters/validators.py +0 -0
  309. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/framework_adapters/workflow_framework.py +0 -0
  310. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/gateway/__init__.py +0 -0
  311. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/inc/__init__.py +0 -0
  312. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/inc/config.py +0 -0
  313. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/inc/models.py +0 -0
  314. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/bridges/__init__.py +0 -0
  315. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  316. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/bridges/hooks_query.py +0 -0
  317. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  318. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/bridges/schedules_runner.py +0 -0
  319. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/bridges/usage_bridge.py +0 -0
  320. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/bridges/workflows_service.py +0 -0
  321. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/context_files.py +0 -0
  322. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/gateway_host.py +0 -0
  323. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/host_app.py +0 -0
  324. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/pages/__init__.py +0 -0
  325. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/pages/bot_health.py +0 -0
  326. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integration/pages/workflow_runs.py +0 -0
  327. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/__init__.py +0 -0
  328. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/_cli_loaders.py +0 -0
  329. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/_managed_base.py +0 -0
  330. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/_session_info.py +0 -0
  331. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/_tool_aliases.py +0 -0
  332. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/backend_registry.py +0 -0
  333. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/base.py +0 -0
  334. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/claude_code.py +0 -0
  335. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/codex_cli.py +0 -0
  336. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/compute/__init__.py +0 -0
  337. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/compute/_sync_base.py +0 -0
  338. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/compute/daytona.py +0 -0
  339. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/compute/docker.py +0 -0
  340. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/compute/e2b.py +0 -0
  341. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/compute/flyio.py +0 -0
  342. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/compute/local.py +0 -0
  343. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/compute/modal_compute.py +0 -0
  344. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/compute/tenki.py +0 -0
  345. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/cursor_cli.py +0 -0
  346. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/db_session_adapter.py +0 -0
  347. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/gemini_cli.py +0 -0
  348. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/hosted_agent.py +0 -0
  349. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/local_agent.py +0 -0
  350. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/managed_agents.py +0 -0
  351. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/managed_local.py +0 -0
  352. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/integrations/sandboxed_agent.py +0 -0
  353. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/jobs/__init__.py +0 -0
  354. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/jobs/executor.py +0 -0
  355. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/jobs/models.py +0 -0
  356. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/jobs/path_validation.py +0 -0
  357. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/jobs/router.py +0 -0
  358. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/jobs/server.py +0 -0
  359. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/jobs/store.py +0 -0
  360. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/kanban/__init__.py +0 -0
  361. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/llm/__init__.py +0 -0
  362. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/llm/catalogue.py +0 -0
  363. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/llm/config.py +0 -0
  364. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/llm/credentials.py +0 -0
  365. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/llm/env.py +0 -0
  366. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/llm/gateways.py +0 -0
  367. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/llm/registry.py +0 -0
  368. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/mcp_server/__init__.py +0 -0
  369. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/n8n/__init__.py +0 -0
  370. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/n8n/client.py +0 -0
  371. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/n8n/converter.py +0 -0
  372. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/n8n/preview.py +0 -0
  373. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/n8n/reverse_converter.py +0 -0
  374. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/observability/__init__.py +0 -0
  375. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/observability/hooks.py +0 -0
  376. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/observability/langextract.py +0 -0
  377. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/observability/langfuse.py +0 -0
  378. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/config.py +0 -0
  379. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/__init__.py +0 -0
  380. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/_ops.py +0 -0
  381. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/_sql_base.py +0 -0
  382. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
  383. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/async_mysql.py +0 -0
  384. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/async_postgres.py +0 -0
  385. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  386. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/base.py +0 -0
  387. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/json_store.py +0 -0
  388. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/mysql.py +0 -0
  389. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/postgres.py +0 -0
  390. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/singlestore.py +0 -0
  391. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/sqlite.py +0 -0
  392. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/supabase.py +0 -0
  393. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/surrealdb.py +0 -0
  394. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  395. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/conversation/turso.py +0 -0
  396. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/factory.py +0 -0
  397. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/hooks/__init__.py +0 -0
  398. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  399. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/cassandra.py +0 -0
  400. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/chroma.py +0 -0
  401. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  402. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  403. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/couchbase.py +0 -0
  404. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/lancedb.py +0 -0
  405. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  406. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  407. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  408. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/milvus.py +0 -0
  409. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  410. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/pgvector.py +0 -0
  411. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/pinecone.py +0 -0
  412. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/qdrant.py +0 -0
  413. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  414. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  415. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  416. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  417. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  418. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/knowledge/weaviate.py +0 -0
  419. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/migrations/__init__.py +0 -0
  420. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/migrations/manager.py +0 -0
  421. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/registry.py +0 -0
  422. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/async_mongodb.py +0 -0
  423. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/dynamodb.py +0 -0
  424. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/firestore.py +0 -0
  425. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/gcs.py +0 -0
  426. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/memory.py +0 -0
  427. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/mongodb.py +0 -0
  428. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/redis.py +0 -0
  429. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/upstash.py +0 -0
  430. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/persistence/state/valkey.py +0 -0
  431. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/profiler.py +0 -0
  432. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/push/__init__.py +0 -0
  433. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/push/client.py +0 -0
  434. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/push/transports.py +0 -0
  435. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/__init__.py +0 -0
  436. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/bridge.py +0 -0
  437. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/core.py +0 -0
  438. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/exceptions.py +0 -0
  439. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/history.py +0 -0
  440. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/models.py +0 -0
  441. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/operations.py +0 -0
  442. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/policy.py +0 -0
  443. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/registry.py +0 -0
  444. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/runtime.py +0 -0
  445. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/security.py +0 -0
  446. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/recipe/server.py +0 -0
  447. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/replay/__init__.py +0 -0
  448. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/replay/analyzer.py +0 -0
  449. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/replay/applier.py +0 -0
  450. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/replay/judge.py +0 -0
  451. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/replay/plan.py +0 -0
  452. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/replay/player.py +0 -0
  453. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/replay/reader.py +0 -0
  454. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/replay/storage.py +0 -0
  455. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/replay/writer.py +0 -0
  456. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/runtime/__init__.py +0 -0
  457. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/runtime/__main__.py +0 -0
  458. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/sandbox/__init__.py +0 -0
  459. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/sandbox/_registry.py +0 -0
  460. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/__init__.py +0 -0
  461. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/_delivery.py +0 -0
  462. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/_dispatch.py +0 -0
  463. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/agent_scheduler.py +0 -0
  464. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/base.py +0 -0
  465. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/blueprint_catalogue.py +0 -0
  466. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/condition_gate.py +0 -0
  467. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/daemon_manager.py +0 -0
  468. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/deployment.py +0 -0
  469. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/executor.py +0 -0
  470. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/shared.py +0 -0
  471. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/state_manager.py +0 -0
  472. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/suggestion_engine.py +0 -0
  473. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/scheduler/yaml_loader.py +0 -0
  474. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/security/audit.py +0 -0
  475. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/security/injection.py +0 -0
  476. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/security/protected.py +0 -0
  477. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/setup/__init__.py +0 -0
  478. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/setup/build.py +0 -0
  479. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/setup/post_install.py +0 -0
  480. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/setup/setup_conda_env.py +0 -0
  481. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/setup.py +0 -0
  482. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/__init__.py +0 -0
  483. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/ai_generator.py +0 -0
  484. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/config.py +0 -0
  485. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/dedupe.py +0 -0
  486. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/discovery.py +0 -0
  487. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/drift.py +0 -0
  488. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/engine.py +0 -0
  489. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/example_verifier.py +0 -0
  490. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/models.py +0 -0
  491. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/reports.py +0 -0
  492. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/templates.py +0 -0
  493. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/undo_redo.py +0 -0
  494. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/standardise/validator.py +0 -0
  495. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/storage/__init__.py +0 -0
  496. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/storage/dynamodb_adapter.py +0 -0
  497. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/storage/mongodb_adapter.py +0 -0
  498. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/storage/postgresql_adapter.py +0 -0
  499. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/storage/redis_adapter.py +0 -0
  500. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/storage/valkey_adapter.py +0 -0
  501. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/__init__.py +0 -0
  502. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/batch_source.py +0 -0
  503. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/cli_docs_source.py +0 -0
  504. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/discovery.py +0 -0
  505. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/docs_source.py +0 -0
  506. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/examples_source.py +0 -0
  507. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/executor.py +0 -0
  508. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/models.py +0 -0
  509. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/report_viewer.py +0 -0
  510. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/reporter.py +0 -0
  511. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/suite_runner/runner.py +0 -0
  512. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/__init__.py +0 -0
  513. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/_tool_sources.py +0 -0
  514. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/cache.py +0 -0
  515. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/dependency_checker.py +0 -0
  516. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/discovery.py +0 -0
  517. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/loader.py +0 -0
  518. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/registry.py +0 -0
  519. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/resolver.py +0 -0
  520. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/security.py +0 -0
  521. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/tool_override.py +0 -0
  522. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/templates/tools_doctor.py +0 -0
  523. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/tool_registry.py +0 -0
  524. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/tool_resolver.py +0 -0
  525. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/tools/__init__.py +0 -0
  526. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/tools/audio.py +0 -0
  527. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/tools/glob_tool.py +0 -0
  528. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/tools/grep_tool.py +0 -0
  529. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/tools/kanban_tools.py +0 -0
  530. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/tools/skill_manage.py +0 -0
  531. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/train/__init__.py +0 -0
  532. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/train.py +0 -0
  533. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/train_vision.py +0 -0
  534. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui/_aiui_datastore.py +0 -0
  535. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui/_external_agents.py +0 -0
  536. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui/context.py +0 -0
  537. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui/database_config.py +0 -0
  538. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui_agents/__init__.py +0 -0
  539. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui_agents/default_app.py +0 -0
  540. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui_bot/__init__.py +0 -0
  541. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui_bot/default_app.py +0 -0
  542. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui_chat/__init__.py +0 -0
  543. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui_chat/default_app.py +0 -0
  544. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui_dashboard/__init__.py +0 -0
  545. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui_dashboard/default_app.py +0 -0
  546. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui_realtime/__init__.py +0 -0
  547. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/ui_realtime/default_app.py +0 -0
  548. {praisonai-4.7.11 → praisonai-4.7.12}/praisonai/upload_vision.py +0 -0
  549. {praisonai-4.7.11 → praisonai-4.7.12}/setup.cfg +0 -0
  550. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test.py +0 -0
  551. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_agents_playbook.py +0 -0
  552. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_approval_system.py +0 -0
  553. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_basic.py +0 -0
  554. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_cli_features.py +0 -0
  555. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_custom_tools_fix.py +0 -0
  556. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_double_api_fix.py +0 -0
  557. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_n8n_agent_invoke.py +0 -0
  558. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_n8n_cli_feature.py +0 -0
  559. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_n8n_integration.py +0 -0
  560. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_phase2_refactor.py +0 -0
  561. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_recipe.py +0 -0
  562. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_registry.py +0 -0
  563. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_runner.py +0 -0
  564. {praisonai-4.7.11 → praisonai-4.7.12}/tests/test_sandboxed_agent_compatibility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.7.11
3
+ Version: 4.7.12
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.9
15
- Requires-Dist: praisonai-code>=0.1.8
16
- Requires-Dist: praisonai-bot>=0.1.8
17
- Requires-Dist: praisonai-train>=0.1.8
18
- Requires-Dist: praisonai-browser>=0.1.8
19
- Requires-Dist: praisonai-mcp>=0.1.10
20
- Requires-Dist: praisonai-sandbox>=0.1.8
21
- Requires-Dist: praisonai-deploy>=0.1.8
14
+ Requires-Dist: praisonaiagents>=1.7.10
15
+ Requires-Dist: praisonai-code>=0.1.9
16
+ Requires-Dist: praisonai-bot>=0.1.9
17
+ Requires-Dist: praisonai-train>=0.1.9
18
+ Requires-Dist: praisonai-browser>=0.1.9
19
+ Requires-Dist: praisonai-mcp>=0.1.11
20
+ Requires-Dist: praisonai-sandbox>=0.1.9
21
+ Requires-Dist: praisonai-deploy>=0.1.9
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
@@ -182,7 +182,7 @@ Requires-Dist: psycopg2-binary>=2.9.0; extra == "postgresql"
182
182
  Provides-Extra: dynamodb
183
183
  Requires-Dist: boto3>=1.35.0; extra == "dynamodb"
184
184
  Provides-Extra: valkey
185
- Requires-Dist: valkey-glide-sync>=2.3.1; extra == "valkey"
185
+ Requires-Dist: valkey-glide-sync>=2.5.2; extra == "valkey"
186
186
  Provides-Extra: neon
187
187
  Requires-Dist: psycopg2-binary>=2.9.0; extra == "neon"
188
188
  Provides-Extra: turso
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.7.11
3
+ Version: 4.7.12
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.9
15
- Requires-Dist: praisonai-code>=0.1.8
16
- Requires-Dist: praisonai-bot>=0.1.8
17
- Requires-Dist: praisonai-train>=0.1.8
18
- Requires-Dist: praisonai-browser>=0.1.8
19
- Requires-Dist: praisonai-mcp>=0.1.10
20
- Requires-Dist: praisonai-sandbox>=0.1.8
21
- Requires-Dist: praisonai-deploy>=0.1.8
14
+ Requires-Dist: praisonaiagents>=1.7.10
15
+ Requires-Dist: praisonai-code>=0.1.9
16
+ Requires-Dist: praisonai-bot>=0.1.9
17
+ Requires-Dist: praisonai-train>=0.1.9
18
+ Requires-Dist: praisonai-browser>=0.1.9
19
+ Requires-Dist: praisonai-mcp>=0.1.11
20
+ Requires-Dist: praisonai-sandbox>=0.1.9
21
+ Requires-Dist: praisonai-deploy>=0.1.9
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
@@ -182,7 +182,7 @@ Requires-Dist: psycopg2-binary>=2.9.0; extra == "postgresql"
182
182
  Provides-Extra: dynamodb
183
183
  Requires-Dist: boto3>=1.35.0; extra == "dynamodb"
184
184
  Provides-Extra: valkey
185
- Requires-Dist: valkey-glide-sync>=2.3.1; extra == "valkey"
185
+ Requires-Dist: valkey-glide-sync>=2.5.2; extra == "valkey"
186
186
  Provides-Extra: neon
187
187
  Requires-Dist: psycopg2-binary>=2.9.0; extra == "neon"
188
188
  Provides-Extra: turso
@@ -1,14 +1,14 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.7.9
5
- praisonai-code>=0.1.8
6
- praisonai-bot>=0.1.8
7
- praisonai-train>=0.1.8
8
- praisonai-browser>=0.1.8
9
- praisonai-mcp>=0.1.10
10
- praisonai-sandbox>=0.1.8
11
- praisonai-deploy>=0.1.8
4
+ praisonaiagents>=1.7.10
5
+ praisonai-code>=0.1.9
6
+ praisonai-bot>=0.1.9
7
+ praisonai-train>=0.1.9
8
+ praisonai-browser>=0.1.9
9
+ praisonai-mcp>=0.1.11
10
+ praisonai-sandbox>=0.1.9
11
+ praisonai-deploy>=0.1.9
12
12
  python-dotenv>=0.19.0
13
13
  litellm<2,>=1.83.14
14
14
  PyYAML>=6.0
@@ -249,7 +249,7 @@ libsql-experimental>=0.0.50
249
249
  aiui<0.4,>=0.3.121
250
250
 
251
251
  [valkey]
252
- valkey-glide-sync>=2.3.1
252
+ valkey-glide-sync>=2.5.2
253
253
 
254
254
  [xata]
255
255
  psycopg2-binary>=2.9.0
@@ -15,8 +15,11 @@ def build_api_key_middleware(api_key: str, public_paths: Optional[Iterable[str]]
15
15
  api_key: The expected API key; requests must present it via a
16
16
  ``Bearer`` ``Authorization`` header or ``X-API-Key`` header.
17
17
  public_paths: Paths that bypass authentication. Any request whose path
18
- is in this set, or starts with ``/__praisonai__/``, is allowed
19
- through without a token.
18
+ is in this set, or is exactly ``/__praisonai__/discovery`` (the
19
+ unauthenticated capability document), is allowed through without a
20
+ token. The discovery path is matched exactly -- never by prefix --
21
+ so a server whose ``api_prefix`` happens to sit under
22
+ ``/__praisonai__`` does not silently expose its routes.
20
23
 
21
24
  Imports of ``hmac``/``starlette`` are kept inside this function so callers
22
25
  stay lazy-import friendly.
@@ -26,11 +29,12 @@ def build_api_key_middleware(api_key: str, public_paths: Optional[Iterable[str]]
26
29
  from starlette.responses import JSONResponse
27
30
 
28
31
  public = set(public_paths or ())
32
+ public.add("/__praisonai__/discovery")
29
33
 
30
34
  class _APIKeyMiddleware(BaseHTTPMiddleware):
31
35
  async def dispatch(self, request, call_next):
32
36
  path = request.url.path
33
- if path in public or path.startswith("/__praisonai__/"):
37
+ if path in public:
34
38
  return await call_next(request)
35
39
  auth = request.headers.get("Authorization", "")
36
40
  header_key = request.headers.get("X-API-Key", "")
@@ -384,6 +384,37 @@ def run_sync(coro: Awaitable[T], *, timeout: "float | None | _Unset" = _UNSET) -
384
384
  return _default_bridge().run_sync(coro, timeout=timeout)
385
385
 
386
386
 
387
+ def run_cli_coro(coro: Awaitable[T], *, timeout: "float | None | _Unset" = None) -> T:
388
+ """Preferred entry point for CLI subcommands running a coroutine.
389
+
390
+ Routes through the shared :class:`AsyncBridge` (via :func:`run_sync`) so
391
+ per-loop connection pools survive across calls, any embedder-installed
392
+ ``scoped_bridge()`` is honoured, and a fresh event loop is NOT spawned on
393
+ every invocation. This replaces bare ``asyncio.run(...)`` at CLI leaves,
394
+ which tears down the loop each call and breaks per-loop cached clients
395
+ (e.g. ``httpx.AsyncClient``) with ``RuntimeError: Event loop is closed``.
396
+
397
+ Timeout defaults to ``None`` (**unbounded**) to preserve the prior
398
+ ``asyncio.run(...)`` semantics these leaves replaced: CLI commands own their
399
+ own runtime (an interactive sandbox shell, a multi-artifact ``standardise``
400
+ run, or a long background job must not be aborted by the 300s ``run_sync``
401
+ default). Callers that want a deadline pass an explicit ``timeout=``.
402
+
403
+ Sync context -> :func:`run_sync` on the shared background loop.
404
+ Async context -> ``RuntimeError``; the caller must ``await coro`` directly.
405
+ """
406
+ try:
407
+ asyncio.get_running_loop()
408
+ except RuntimeError:
409
+ return run_sync(coro, timeout=timeout)
410
+ with contextlib.suppress(Exception):
411
+ coro.close() # type: ignore[attr-defined]
412
+ raise RuntimeError(
413
+ "run_cli_coro() cannot be called from within a running event loop; "
414
+ "await the coroutine directly instead."
415
+ )
416
+
417
+
387
418
  def run_sync_or_offload(
388
419
  coro: Awaitable[T],
389
420
  *,
@@ -100,14 +100,9 @@ def run(agent_file: str,
100
100
  """
101
101
  from .agents_generator import AgentsGenerator
102
102
 
103
- # Wire the built-in readers/retrievers/rerankers into the core-SDK
104
- # registries so YAML/CLI declarations (e.g. `retriever: fusion`,
105
- # `reranker: llm`) resolve. Idempotent + thread-safe, and register-only-if-
106
- # absent: a custom adapter already registered under a built-in name (e.g. a
107
- # multi-tenant host's own `fusion`) is preserved, never overwritten.
108
- from .adapters import register_default_adapters
109
- register_default_adapters()
110
-
103
+ # Adapter wiring (readers/retrievers/rerankers) is single-sourced in
104
+ # AgentsGenerator.__init__ so every launch path (CLI, serve, eval, Python)
105
+ # is covered identically.
111
106
  adapter, config_list = _resolve_run_inputs(framework)
112
107
  _apply_model_override(config_list, kwargs)
113
108
  cli_config = _merge_cli_config(cli_config, kwargs)
@@ -142,11 +137,11 @@ async def arun(agent_file: str,
142
137
 
143
138
  from .agents_generator import AgentsGenerator
144
139
 
145
- # Wire the built-in readers/retrievers/rerankers into the core-SDK
146
- # registries so YAML/CLI declarations resolve. Run off the event loop since
147
- # registration performs lazy imports. Idempotent + thread-safe, and
148
- # register-only-if-absent: a custom adapter already registered under a
149
- # built-in name is preserved, never overwritten.
140
+ # Adapter wiring (readers/retrievers/rerankers) is single-sourced in
141
+ # AgentsGenerator.__init__. Pre-warm it off the caller's event loop here so
142
+ # the (lazy-import) registration does not run on the loop when the generator
143
+ # is constructed synchronously below. Idempotent: __init__ then hits the fast
144
+ # path. Every launch path is covered identically via __init__.
150
145
  from .adapters import register_default_adapters
151
146
  await asyncio.to_thread(register_default_adapters)
152
147
 
@@ -159,7 +154,8 @@ async def arun(agent_file: str,
159
154
 
160
155
  # Own the generator's lifecycle so its lazily-allocated tool-timeout
161
156
  # executor is released once the single run completes, instead of leaking
162
- # daemon threads per call in long-lived async server workers.
157
+ # daemon threads per call in long-lived async server workers. Adapter wiring
158
+ # was pre-warmed above, so __init__ hits the fast path without blocking loop.
163
159
  with AgentsGenerator(
164
160
  agent_file=agent_file,
165
161
  framework=adapter.name,
@@ -599,6 +599,15 @@ class AgentsGenerator:
599
599
  task_callback (callable, optional): A callback function to be executed after each tool run.
600
600
  tools (dict): A dictionary containing the tools to be used for the agents.
601
601
  """
602
+ # Wire the built-in readers/retrievers/rerankers into the core-SDK
603
+ # registries so YAML `retriever:` / `reader:` / `reranker:` declarations
604
+ # resolve identically on every launch path (CLI, serve, eval, Python).
605
+ # Single-sourced here so surfaces that construct AgentsGenerator directly
606
+ # (praisonai <file.yaml>, serve, eval) get the same wiring as run()/arun().
607
+ # Idempotent + thread-safe + register-only-if-absent; safe to call again.
608
+ from .adapters import register_default_adapters
609
+ register_default_adapters()
610
+
602
611
  self.agent_file = agent_file
603
612
  self.framework = framework
604
613
  self.config_list = config_list
@@ -964,9 +973,23 @@ class AgentsGenerator:
964
973
  # Canonical format conversion: 'agents' -> 'roles', 'instructions' -> 'backstory'
965
974
  # Treat an empty ``roles: {}`` the same as a missing one so populated
966
975
  # ``agents:`` is still promoted instead of running with zero agents.
967
- if 'agents' in config and not config.get('roles'):
968
- config['roles'] = {}
976
+ #
977
+ # Promotion is *authoritative*: the shorthand ``agents:`` bucket is
978
+ # removed after merging into ``roles:`` so downstream validators and the
979
+ # executor read a single source of truth. Leaving ``agents:`` in place
980
+ # let validators see a merged ``{**roles, **agents}`` view the executor
981
+ # (which reads only ``roles:``) never runs — causing double-fired
982
+ # warnings, false-positive validation rejections, and silently dropped
983
+ # ``tool_timeout``/handoff knobs for agents that never became roles.
984
+ if 'agents' in config and isinstance(config['agents'], dict):
985
+ config.setdefault('roles', {})
986
+ if not isinstance(config['roles'], dict):
987
+ config['roles'] = {}
969
988
  for agent_name, agent_config in config['agents'].items():
989
+ # An entry already present under ``roles:`` is canonical and
990
+ # wins; only agents-only entries are promoted.
991
+ if agent_name in config['roles']:
992
+ continue
970
993
  role_config = dict(agent_config) if agent_config else {}
971
994
  # Convert 'instructions' to 'backstory' if present
972
995
  if 'instructions' in role_config and 'backstory' not in role_config:
@@ -979,6 +1002,8 @@ class AgentsGenerator:
979
1002
  if 'backstory' not in role_config:
980
1003
  role_config['backstory'] = f'You are a {role_config["role"]}'
981
1004
  config['roles'][agent_name] = role_config
1005
+ # Drop the shorthand bucket so validators and the executor agree.
1006
+ del config['agents']
982
1007
 
983
1008
  # Get workflow input: 'input' is canonical, 'topic' is alias for backward compatibility
984
1009
  topic = config.get('input', config.get('topic', ''))
@@ -697,7 +697,11 @@ if FASTAPI_AVAILABLE and APIRouter is not None:
697
697
  if hasattr(agent, 'name'):
698
698
  info["name"] = agent.name
699
699
  if hasattr(agent, 'instructions'):
700
- info["instructions"] = agent.instructions[:200] + "..." if len(agent.instructions) > 200 else agent.instructions
700
+ instructions = agent.instructions
701
+ if isinstance(instructions, str) and len(instructions) > 200:
702
+ info["instructions"] = instructions[:200] + "..."
703
+ else:
704
+ info["instructions"] = instructions
701
705
  if hasattr(agent, 'tools') and agent.tools:
702
706
  info["tools"] = [getattr(tool, 'name', str(tool)) for tool in agent.tools[:5]] # First 5 tools
703
707
  if len(agent.tools) > 5:
@@ -10,7 +10,7 @@ import importlib.util
10
10
  import threading
11
11
  import time
12
12
  from typing import Optional
13
- from collections import defaultdict
13
+ from collections import OrderedDict
14
14
 
15
15
  # Heavy, optional dependencies (websockets, fastapi, twilio, uvicorn, pyngrok,
16
16
  # rich) are imported lazily inside the functions that need them. Importing this
@@ -93,15 +93,6 @@ MAX_CONCURRENT_CONNECTIONS = int(os.getenv('MAX_CONCURRENT_CONNECTIONS', '5'))
93
93
  MAX_REQUESTS_PER_WINDOW = int(os.getenv('MAX_REQUESTS_PER_WINDOW', '100'))
94
94
  RATE_LIMIT_WINDOW = 3600
95
95
 
96
- active_connections = 0
97
- client_ips = defaultdict(list)
98
-
99
- # Guard the shared, async-mutated counters so concurrent WebSocket handlers
100
- # can't over-commit MAX_CONCURRENT_CONNECTIONS / MAX_REQUESTS_PER_WINDOW via a
101
- # check-then-mutate TOCTOU across ``await`` points.
102
- _conn_lock = asyncio.Lock()
103
- _ips_lock = asyncio.Lock()
104
-
105
96
  # One-shot, short-lived session tokens handed to the Twilio media-stream client
106
97
  # so the shared server secret is never embedded in a URL (which leaks into
107
98
  # access logs / referrers / history).
@@ -114,16 +105,69 @@ class CallAppState:
114
105
  Replaces the previous module-level ``tools`` / ``_pending_stream_sessions``
115
106
  globals so co-hosted / multi-tenant ``build_call_app()`` instances in one
116
107
  process never share a tool schema or cross-consume each other's stream
117
- tokens. FastAPI hands this to handlers via ``request.app.state`` /
118
- ``websocket.app.state``.
108
+ tokens. The rate-limit / capacity primitives (``active_connections``,
109
+ ``client_ips``) live here too so co-hosted tenants never cross-consume each
110
+ other's connection budget, and the IP map is LRU-bounded so a caller behind
111
+ rotating IPs cannot grow it without bound. FastAPI hands this to handlers via
112
+ ``request.app.state`` / ``websocket.app.state``.
119
113
  """
120
114
 
121
- __slots__ = ("tools", "pending_sessions", "_lock")
115
+ __slots__ = (
116
+ "tools", "pending_sessions", "_lock",
117
+ "active_connections", "conn_lock",
118
+ "client_ips", "ips_lock", "max_ips",
119
+ )
122
120
 
123
- def __init__(self):
121
+ def __init__(self, max_tracked_ips: int = 10_000):
124
122
  self.tools: list = []
125
123
  self.pending_sessions: "dict[str, float]" = {}
126
124
  self._lock = threading.Lock()
125
+ self.active_connections = 0
126
+ self.conn_lock = asyncio.Lock()
127
+ self.client_ips: "OrderedDict[str, list[float]]" = OrderedDict()
128
+ self.ips_lock = asyncio.Lock()
129
+ self.max_ips = max_tracked_ips
130
+
131
+ def touch_ip(self, ip: str, now: float) -> "list[float]":
132
+ """Return this IP's live request timestamps (window), LRU-bounded.
133
+
134
+ Only prunes expired timestamps out of the returned window — it does NOT
135
+ record the current request. The caller inspects the returned window
136
+ against ``MAX_REQUESTS_PER_WINDOW`` and, if admitted, calls
137
+ :meth:`record_ip` to append the new timestamp. Empty entries are dropped
138
+ eagerly so the map cannot grow from IPs whose windows have all expired.
139
+ Callers hold ``ips_lock`` across ``touch_ip`` + ``record_ip`` so the
140
+ check-then-record stays atomic across ``await`` points.
141
+ """
142
+ window = [t for t in self.client_ips.get(ip, ()) if now - t < RATE_LIMIT_WINDOW]
143
+ if window:
144
+ self.client_ips[ip] = window
145
+ self.client_ips.move_to_end(ip)
146
+ else:
147
+ # No live timestamps: drop the stale entry now. It is only re-added
148
+ # by record_ip() if this request is admitted, so a rejected caller
149
+ # never leaves a residue.
150
+ self.client_ips.pop(ip, None)
151
+ return window
152
+
153
+ def record_ip(self, ip: str, window: "list[float]", now: float) -> None:
154
+ """Append ``now`` to this IP's admitted-request window and enforce the cap.
155
+
156
+ Pins ``ip`` as the most-recently-used entry, then evicts the oldest
157
+ entries so the map holds at most ``max_ips`` keys *after* this insert.
158
+ Eviction runs post-insert so the live caller is never the victim and the
159
+ map never transiently exceeds ``max_ips`` — the cap it promises. Because
160
+ eviction can drop another IP whose window is still open, ``max_ips``
161
+ should be provisioned above the realistic distinct-IP working set (the
162
+ 10k default), so eviction only bites under a rotating-IP flood — exactly
163
+ the unbounded-growth case the bound exists to contain.
164
+ """
165
+ window.append(now)
166
+ self.client_ips[ip] = window
167
+ self.client_ips.move_to_end(ip)
168
+ while len(self.client_ips) > self.max_ips:
169
+ # last=False evicts the oldest (LRU); the just-touched ip is MRU.
170
+ self.client_ips.popitem(last=False)
127
171
 
128
172
  def mint_stream_token(self) -> str:
129
173
  """Create a single-use, TTL-bound token for the media-stream handshake."""
@@ -456,8 +500,6 @@ async def handle_media_stream(websocket):
456
500
  import websockets
457
501
  from fastapi.websockets import WebSocketDisconnect
458
502
 
459
- global active_connections
460
-
461
503
  # 1. Authentication — accept a one-shot, per-connection session token
462
504
  # (from the ``session`` query param minted by the incoming-call handler,
463
505
  # or an ``x-call-token`` header). The shared CALL_SERVER_TOKEN is never
@@ -481,22 +523,20 @@ async def handle_media_stream(websocket):
481
523
  # over-commit the window via a check-then-mutate race across ``await``.
482
524
  client_ip = websocket.client.host if websocket.client else "unknown"
483
525
  now = time.time()
484
- async with _ips_lock:
485
- window = [t for t in client_ips[client_ip] if now - t < RATE_LIMIT_WINDOW]
526
+ async with state.ips_lock:
527
+ window = state.touch_ip(client_ip, now)
486
528
  if len(window) >= MAX_REQUESTS_PER_WINDOW:
487
- client_ips[client_ip] = window
488
529
  await websocket.close(code=4029, reason="Rate limit exceeded")
489
530
  return
490
- window.append(now)
491
- client_ips[client_ip] = window
531
+ state.record_ip(client_ip, window, now)
492
532
 
493
533
  # 3. Connection Limiting — atomically check-and-increment under the lock so
494
534
  # MAX_CONCURRENT_CONNECTIONS is never over-committed.
495
- async with _conn_lock:
496
- if active_connections >= MAX_CONCURRENT_CONNECTIONS:
535
+ async with state.conn_lock:
536
+ if state.active_connections >= MAX_CONCURRENT_CONNECTIONS:
497
537
  await websocket.close(code=1013, reason="Server busy")
498
538
  return
499
- active_connections += 1
539
+ state.active_connections += 1
500
540
  try:
501
541
  print("Client connected")
502
542
  await websocket.accept()
@@ -570,8 +610,8 @@ async def handle_media_stream(websocket):
570
610
 
571
611
  await asyncio.gather(receive_from_twilio(), send_to_twilio())
572
612
  finally:
573
- async with _conn_lock:
574
- active_connections -= 1
613
+ async with state.conn_lock:
614
+ state.active_connections -= 1
575
615
 
576
616
  async def handle_response_done(state, response, openai_ws):
577
617
  """Handle the response.done event and process any function calls."""
@@ -128,22 +128,8 @@ class AgentOS:
128
128
 
129
129
  launch_token = self.config.api_key or os.environ.get("PRAISONAI_AGENTOS_API_KEY")
130
130
  if launch_token:
131
- from starlette.middleware.base import BaseHTTPMiddleware
132
- from starlette.responses import JSONResponse
133
-
134
- expected = launch_token
135
-
136
- class _AgentOSAuthMiddleware(BaseHTTPMiddleware):
137
- async def dispatch(self, request, call_next):
138
- if request.url.path in ("/health", "/"):
139
- return await call_next(request)
140
- auth = request.headers.get("Authorization", "")
141
- token = auth[7:] if auth.startswith("Bearer ") else request.headers.get("X-API-Key", "")
142
- if token != expected:
143
- return JSONResponse({"error": "Unauthorized"}, status_code=401)
144
- return await call_next(request)
145
-
146
- app.add_middleware(_AgentOSAuthMiddleware)
131
+ from .._api_auth import build_api_key_middleware
132
+ app.add_middleware(build_api_key_middleware(launch_token, {"/health", "/"}))
147
133
 
148
134
  return app
149
135
 
@@ -16,6 +16,7 @@ import json
16
16
  import re
17
17
  import asyncio
18
18
  import threading
19
+ import warnings
19
20
  from praisonai._logging import get_logger
20
21
 
21
22
  # Type variable for Pydantic models - will be bound at runtime
@@ -1046,7 +1047,9 @@ class AutoGenerator(BaseAutoGenerator):
1046
1047
  generate → run round-trip agrees on defaults.
1047
1048
  config_list: Optional LLM configuration
1048
1049
  pattern: Workflow pattern (sequential, parallel, routing, orchestrator-workers, evaluator-optimizer)
1049
- single_agent: If True, generate a single agent instead of a team
1050
+ single_agent: Deprecated and inert. Single-agent generation is not
1051
+ implemented; a team structure is always generated. Passing a
1052
+ truthy value emits a ``DeprecationWarning``.
1050
1053
 
1051
1054
  Note: autogen framework is different from this AutoGenerator class.
1052
1055
  """
@@ -1077,6 +1080,12 @@ class AutoGenerator(BaseAutoGenerator):
1077
1080
  # Authoritative framework name comes from the resolved adapter.
1078
1081
  self.framework = adapter.name
1079
1082
  self.pattern = pattern
1083
+ if single_agent:
1084
+ warnings.warn(
1085
+ "single_agent generation is not implemented; a team structure "
1086
+ "is generated instead. This parameter is deprecated and inert.",
1087
+ DeprecationWarning, stacklevel=2,
1088
+ )
1080
1089
  self.single_agent = single_agent
1081
1090
 
1082
1091
 
@@ -1638,7 +1647,9 @@ class WorkflowAutoGenerator(BaseAutoGenerator):
1638
1647
  the generate → run round-trip agrees on defaults. The adapter
1639
1648
  is validated here rather than deferring the failure to a later
1640
1649
  ``praisonai run`` invocation.
1641
- single_agent: If True, generate a single agent workflow
1650
+ single_agent: Deprecated and inert. Single-agent workflow generation
1651
+ is not implemented; a workflow structure is always generated.
1652
+ Passing a truthy value emits a ``DeprecationWarning``.
1642
1653
  workspace: Optional workspace root; when set, ``workflow_file`` is
1643
1654
  contained to it to reject path traversal (see BaseAutoGenerator).
1644
1655
  """
@@ -1657,6 +1668,13 @@ class WorkflowAutoGenerator(BaseAutoGenerator):
1657
1668
  self.topic = topic
1658
1669
  self.workflow_file = self._safe_join(workflow_file)
1659
1670
  self.framework = adapter.name
1671
+ if single_agent:
1672
+ warnings.warn(
1673
+ "single_agent generation is not implemented; a workflow "
1674
+ "structure is generated instead. This parameter is deprecated "
1675
+ "and inert.",
1676
+ DeprecationWarning, stacklevel=2,
1677
+ )
1660
1678
  self.single_agent = single_agent
1661
1679
 
1662
1680
  def recommend_pattern_llm(self, topic: Optional[str] = None) -> Any: