PraisonAI 4.7.11__tar.gz → 4.7.13__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 (565) hide show
  1. {praisonai-4.7.11 → praisonai-4.7.13}/PKG-INFO +10 -10
  2. {praisonai-4.7.11 → praisonai-4.7.13}/PraisonAI.egg-info/PKG-INFO +10 -10
  3. {praisonai-4.7.11 → praisonai-4.7.13}/PraisonAI.egg-info/SOURCES.txt +1 -0
  4. {praisonai-4.7.11 → praisonai-4.7.13}/PraisonAI.egg-info/requires.txt +9 -9
  5. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_api_auth.py +7 -3
  6. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_async_bridge.py +31 -0
  7. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_entrypoint.py +10 -14
  8. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/acp/session.py +55 -12
  9. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/agents_generator.py +107 -6
  10. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/api/agent_invoke.py +5 -1
  11. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/api/call.py +66 -26
  12. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/app/agentos.py +2 -16
  13. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/auto.py +20 -2
  14. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/__init__.py +12 -0
  15. praisonai-4.7.13/praisonai/capabilities/decisions.py +31 -0
  16. praisonai-4.7.13/praisonai/capabilities/guardrails.py +192 -0
  17. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/managed.py +4 -2
  18. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/schedule.py +1 -1
  19. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/standardise.py +3 -2
  20. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/agent_scheduler.py +26 -9
  21. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/background.py +6 -4
  22. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/sandbox_cli.py +38 -29
  23. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/legacy/direct_prompt.py +2 -2
  24. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/legacy/interactive_legacy.py +5 -3
  25. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/db/adapter.py +226 -64
  26. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/framework_adapters/autogen_adapter.py +46 -0
  27. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/framework_adapters/praisonai_adapter.py +31 -1
  28. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/framework_adapters/registry.py +55 -24
  29. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/inbuilt_tools/__init__.py +6 -2
  30. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/inbuilt_tools/autogen_tools.py +4 -4
  31. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/__init__.py +8 -1
  32. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/compute_managed_agent.py +108 -18
  33. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/registry.py +8 -3
  34. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/__init__.py +7 -5
  35. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/_valkey_client.py +3 -0
  36. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/json_store.py +57 -14
  37. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/__init__.py +3 -2
  38. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/base.py +105 -0
  39. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/orchestrator.py +57 -10
  40. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/__init__.py +4 -3
  41. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/base.py +98 -0
  42. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/serve.py +146 -29
  43. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/_base_scheduler.py +25 -2
  44. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/async_agent_scheduler.py +3 -22
  45. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/daemon_manager.py +35 -2
  46. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/run_policy.py +13 -0
  47. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/state_manager.py +87 -17
  48. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/security/__init__.py +2 -2
  49. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/tools/multiedit.py +117 -32
  50. praisonai-4.7.13/praisonai/version.py +1 -0
  51. {praisonai-4.7.11 → praisonai-4.7.13}/pyproject.toml +9 -9
  52. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_serve_features.py +40 -1
  53. praisonai-4.7.11/praisonai/capabilities/guardrails.py +0 -186
  54. praisonai-4.7.11/praisonai/version.py +0 -1
  55. {praisonai-4.7.11 → praisonai-4.7.13}/PraisonAI.egg-info/dependency_links.txt +0 -0
  56. {praisonai-4.7.11 → praisonai-4.7.13}/PraisonAI.egg-info/entry_points.txt +0 -0
  57. {praisonai-4.7.11 → praisonai-4.7.13}/PraisonAI.egg-info/top_level.txt +0 -0
  58. {praisonai-4.7.11 → praisonai-4.7.13}/README.md +0 -0
  59. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/__init__.py +0 -0
  60. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/__main__.py +0 -0
  61. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_approval_spec.py +0 -0
  62. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_bootstrap.py +0 -0
  63. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_dev/__init__.py +0 -0
  64. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_dev/api_md.py +0 -0
  65. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_framework_availability.py +0 -0
  66. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_lazy_cache.py +0 -0
  67. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_logging.py +0 -0
  68. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_registry.py +0 -0
  69. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/_safe_loader.py +0 -0
  70. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/acp/__init__.py +0 -0
  71. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/acp/config.py +0 -0
  72. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/acp/safe_edit.py +0 -0
  73. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/acp/server.py +0 -0
  74. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/adapters/__init__.py +0 -0
  75. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/adapters/readers.py +0 -0
  76. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/adapters/rerankers.py +0 -0
  77. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/adapters/retrievers.py +0 -0
  78. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/adapters/vector_stores.py +0 -0
  79. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/agent.py +0 -0
  80. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/agent_scheduler.py +0 -0
  81. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/app/__init__.py +0 -0
  82. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/async_agent_scheduler.py +0 -0
  83. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/audit/__init__.py +0 -0
  84. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/audit/agent_centric.py +0 -0
  85. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/bots/__init__.py +0 -0
  86. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/browser/__init__.py +0 -0
  87. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/a2a.py +0 -0
  88. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/assistants.py +0 -0
  89. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/audio.py +0 -0
  90. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/batches.py +0 -0
  91. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/completions.py +0 -0
  92. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/container_files.py +0 -0
  93. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/containers.py +0 -0
  94. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/embeddings.py +0 -0
  95. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/files.py +0 -0
  96. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/fine_tuning.py +0 -0
  97. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/images.py +0 -0
  98. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/mcp.py +0 -0
  99. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/messages.py +0 -0
  100. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/moderations.py +0 -0
  101. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/ocr.py +0 -0
  102. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/passthrough.py +0 -0
  103. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/rag.py +0 -0
  104. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/realtime.py +0 -0
  105. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/rerank.py +0 -0
  106. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/responses.py +0 -0
  107. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/search.py +0 -0
  108. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/skills.py +0 -0
  109. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/vector_store_files.py +0 -0
  110. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/vector_stores.py +0 -0
  111. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/capabilities/videos.py +0 -0
  112. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/claw/__init__.py +0 -0
  113. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/__init__.py +0 -0
  114. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/_paths.py +0 -0
  115. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/_shim.py +0 -0
  116. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/_warnings.py +0 -0
  117. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/app.py +0 -0
  118. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/approval_backend.py +0 -0
  119. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/branding.py +0 -0
  120. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/__init__.py +0 -0
  121. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/_profiling.py +0 -0
  122. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/acp.py +0 -0
  123. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/agent.py +0 -0
  124. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/agents.py +0 -0
  125. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/app.py +0 -0
  126. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/attach.py +0 -0
  127. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/audit.py +0 -0
  128. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/auth.py +0 -0
  129. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/batch.py +0 -0
  130. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/benchmark.py +0 -0
  131. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/bot.py +0 -0
  132. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/browser.py +0 -0
  133. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/call.py +0 -0
  134. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/chat.py +0 -0
  135. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/checkpoint.py +0 -0
  136. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/claw.py +0 -0
  137. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/code.py +0 -0
  138. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/command.py +0 -0
  139. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/commit.py +0 -0
  140. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/completion.py +0 -0
  141. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/config.py +0 -0
  142. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/context.py +0 -0
  143. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/daemon.py +0 -0
  144. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/dashboard.py +0 -0
  145. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/debug.py +0 -0
  146. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/deploy.py +0 -0
  147. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/diag.py +0 -0
  148. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/docs.py +0 -0
  149. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/doctor.py +0 -0
  150. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/endpoints.py +0 -0
  151. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/environment.py +0 -0
  152. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/eval.py +0 -0
  153. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/examples.py +0 -0
  154. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/flow.py +0 -0
  155. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/gateway.py +0 -0
  156. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/github.py +0 -0
  157. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/hooks.py +0 -0
  158. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/identity.py +0 -0
  159. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/init.py +0 -0
  160. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/kanban.py +0 -0
  161. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/knowledge.py +0 -0
  162. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/langextract.py +0 -0
  163. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/langfuse.py +0 -0
  164. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/loop.py +0 -0
  165. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/lsp.py +0 -0
  166. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/mcp.py +0 -0
  167. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/memory.py +0 -0
  168. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/mint_link.py +0 -0
  169. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/models.py +0 -0
  170. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/n8n.py +0 -0
  171. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/obs.py +0 -0
  172. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/onboard.py +0 -0
  173. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/package.py +0 -0
  174. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/pairing.py +0 -0
  175. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/paths.py +0 -0
  176. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/permissions.py +0 -0
  177. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/plugins.py +0 -0
  178. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/port.py +0 -0
  179. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/profile.py +0 -0
  180. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/publish.py +0 -0
  181. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/rag.py +0 -0
  182. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/realtime.py +0 -0
  183. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/recipe.py +0 -0
  184. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/registry.py +0 -0
  185. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/replay.py +0 -0
  186. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/research.py +0 -0
  187. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/retrieval.py +0 -0
  188. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/rules.py +0 -0
  189. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/run.py +0 -0
  190. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/sandbox.py +0 -0
  191. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/serve.py +0 -0
  192. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/session.py +0 -0
  193. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/setup.py +0 -0
  194. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/skills.py +0 -0
  195. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/templates.py +0 -0
  196. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/test.py +0 -0
  197. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/todo.py +0 -0
  198. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/tools.py +0 -0
  199. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/traces.py +0 -0
  200. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/tracker.py +0 -0
  201. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/train.py +0 -0
  202. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/ui.py +0 -0
  203. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/up.py +0 -0
  204. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/validate.py +0 -0
  205. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/version.py +0 -0
  206. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/commands/workflow.py +0 -0
  207. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/config_loader.py +0 -0
  208. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/configuration/__init__.py +0 -0
  209. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/configuration/config.schema.json +0 -0
  210. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/execution/__init__.py +0 -0
  211. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/fallback_schema.py +0 -0
  212. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/__init__.py +0 -0
  213. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/acp.py +0 -0
  214. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/agent_tools.py +0 -0
  215. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/approval.py +0 -0
  216. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/bots_cli.py +0 -0
  217. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/deploy.py +0 -0
  218. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/endpoints.py +0 -0
  219. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/eval.py +0 -0
  220. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/gateway.py +0 -0
  221. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/ollama.py +0 -0
  222. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/onboard.py +0 -0
  223. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/persistence.py +0 -0
  224. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/recipe.py +0 -0
  225. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/recipe_optimizer.py +0 -0
  226. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/registry.py +0 -0
  227. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/serve.py +0 -0
  228. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/templates.py +0 -0
  229. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/tools.py +0 -0
  230. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/tui/__init__.py +0 -0
  231. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/tui/app.py +0 -0
  232. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/features/workflow.py +0 -0
  233. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/interactive/__init__.py +0 -0
  234. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/interactive/async_tui.py +0 -0
  235. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/interactive/config.py +0 -0
  236. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/interactive/core.py +0 -0
  237. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/interactive/events.py +0 -0
  238. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/langfuse_client.py +0 -0
  239. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/legacy/__init__.py +0 -0
  240. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
  241. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
  242. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
  243. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/legacy/framework_run.py +0 -0
  244. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
  245. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/legacy/subcommand_handlers.py +0 -0
  246. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/legacy/workflow_commands.py +0 -0
  247. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/main.py +0 -0
  248. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/output/__init__.py +0 -0
  249. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/schedule_cli.py +0 -0
  250. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/schema_provider.py +0 -0
  251. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/session/__init__.py +0 -0
  252. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/state/__init__.py +0 -0
  253. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/ui/__init__.py +0 -0
  254. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/unified_schema.py +0 -0
  255. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli/utils/__init__.py +0 -0
  256. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/cli_backends/__init__.py +0 -0
  257. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/__init__.py +0 -0
  258. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/agent_tools.py +0 -0
  259. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/diff/__init__.py +0 -0
  260. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/diff/diff_strategy.py +0 -0
  261. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/tools/__init__.py +0 -0
  262. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/tools/apply_diff.py +0 -0
  263. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/tools/execute_command.py +0 -0
  264. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/tools/list_files.py +0 -0
  265. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/tools/read_file.py +0 -0
  266. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/tools/search_replace.py +0 -0
  267. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/tools/write_file.py +0 -0
  268. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/utils/__init__.py +0 -0
  269. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/utils/file_utils.py +0 -0
  270. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/utils/ignore_utils.py +0 -0
  271. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/code/utils/text_utils.py +0 -0
  272. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/config/__init__.py +0 -0
  273. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/config/agents.schema.json +0 -0
  274. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/config/schema.py +0 -0
  275. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/config/validator.py +0 -0
  276. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/context/__init__.py +0 -0
  277. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/context/_storage_path.py +0 -0
  278. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/context/artifact_store.py +0 -0
  279. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/context/config.py +0 -0
  280. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/context/history_store.py +0 -0
  281. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/context/queue.py +0 -0
  282. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/context/setup.py +0 -0
  283. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/context/terminal_logger.py +0 -0
  284. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/daemon/__init__.py +0 -0
  285. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/db/__init__.py +0 -0
  286. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/deploy/__init__.py +0 -0
  287. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/__init__.py +0 -0
  288. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/a2u_server.py +0 -0
  289. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/discovery.py +0 -0
  290. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/providers/__init__.py +0 -0
  291. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/providers/a2a.py +0 -0
  292. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/providers/a2u.py +0 -0
  293. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/providers/agents_api.py +0 -0
  294. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/providers/base.py +0 -0
  295. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/providers/mcp.py +0 -0
  296. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/providers/openai_compat.py +0 -0
  297. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/providers/recipe.py +0 -0
  298. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  299. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/registry.py +0 -0
  300. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/endpoints/server.py +0 -0
  301. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/flow/__init__.py +0 -0
  302. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/flow/client.py +0 -0
  303. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  304. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  305. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/flow/components/__init__.py +0 -0
  306. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/flow/converter.py +0 -0
  307. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/flow/helpers.py +0 -0
  308. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/framework_adapters/__init__.py +0 -0
  309. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/framework_adapters/_config_builder.py +0 -0
  310. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/framework_adapters/base.py +0 -0
  311. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  312. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/framework_adapters/validators.py +0 -0
  313. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/framework_adapters/workflow_framework.py +0 -0
  314. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/gateway/__init__.py +0 -0
  315. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/inc/__init__.py +0 -0
  316. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/inc/config.py +0 -0
  317. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/inc/models.py +0 -0
  318. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/bridges/__init__.py +0 -0
  319. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  320. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/bridges/hooks_query.py +0 -0
  321. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  322. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/bridges/schedules_runner.py +0 -0
  323. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/bridges/usage_bridge.py +0 -0
  324. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/bridges/workflows_service.py +0 -0
  325. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/context_files.py +0 -0
  326. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/gateway_host.py +0 -0
  327. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/host_app.py +0 -0
  328. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/pages/__init__.py +0 -0
  329. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/pages/bot_health.py +0 -0
  330. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integration/pages/workflow_runs.py +0 -0
  331. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/__init__.py +0 -0
  332. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/_cli_loaders.py +0 -0
  333. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/_managed_base.py +0 -0
  334. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/_session_info.py +0 -0
  335. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/_tool_aliases.py +0 -0
  336. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/backend_registry.py +0 -0
  337. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/base.py +0 -0
  338. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/claude_code.py +0 -0
  339. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/codex_cli.py +0 -0
  340. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/compute/__init__.py +0 -0
  341. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/compute/_sync_base.py +0 -0
  342. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/compute/daytona.py +0 -0
  343. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/compute/docker.py +0 -0
  344. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/compute/e2b.py +0 -0
  345. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/compute/flyio.py +0 -0
  346. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/compute/local.py +0 -0
  347. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/compute/modal_compute.py +0 -0
  348. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/compute/tenki.py +0 -0
  349. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/cursor_cli.py +0 -0
  350. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/db_session_adapter.py +0 -0
  351. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/gemini_cli.py +0 -0
  352. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/hosted_agent.py +0 -0
  353. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/local_agent.py +0 -0
  354. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/managed_agents.py +0 -0
  355. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/managed_local.py +0 -0
  356. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/integrations/sandboxed_agent.py +0 -0
  357. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/jobs/__init__.py +0 -0
  358. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/jobs/executor.py +0 -0
  359. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/jobs/models.py +0 -0
  360. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/jobs/path_validation.py +0 -0
  361. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/jobs/router.py +0 -0
  362. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/jobs/server.py +0 -0
  363. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/jobs/store.py +0 -0
  364. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/kanban/__init__.py +0 -0
  365. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/llm/__init__.py +0 -0
  366. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/llm/catalogue.py +0 -0
  367. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/llm/config.py +0 -0
  368. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/llm/credentials.py +0 -0
  369. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/llm/env.py +0 -0
  370. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/llm/gateways.py +0 -0
  371. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/llm/registry.py +0 -0
  372. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/mcp_server/__init__.py +0 -0
  373. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/n8n/__init__.py +0 -0
  374. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/n8n/client.py +0 -0
  375. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/n8n/converter.py +0 -0
  376. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/n8n/preview.py +0 -0
  377. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/n8n/reverse_converter.py +0 -0
  378. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/observability/__init__.py +0 -0
  379. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/observability/hooks.py +0 -0
  380. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/observability/langextract.py +0 -0
  381. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/observability/langfuse.py +0 -0
  382. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/config.py +0 -0
  383. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/__init__.py +0 -0
  384. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/_ops.py +0 -0
  385. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/_sql_base.py +0 -0
  386. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
  387. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/async_mysql.py +0 -0
  388. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/async_postgres.py +0 -0
  389. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  390. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/base.py +0 -0
  391. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/mysql.py +0 -0
  392. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/postgres.py +0 -0
  393. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/singlestore.py +0 -0
  394. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/sqlite.py +0 -0
  395. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/supabase.py +0 -0
  396. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/surrealdb.py +0 -0
  397. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  398. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/conversation/turso.py +0 -0
  399. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/factory.py +0 -0
  400. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/hooks/__init__.py +0 -0
  401. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  402. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/cassandra.py +0 -0
  403. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/chroma.py +0 -0
  404. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  405. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  406. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/couchbase.py +0 -0
  407. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/lancedb.py +0 -0
  408. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  409. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  410. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  411. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/milvus.py +0 -0
  412. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  413. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/pgvector.py +0 -0
  414. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/pinecone.py +0 -0
  415. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/qdrant.py +0 -0
  416. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  417. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  418. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  419. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  420. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  421. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/knowledge/weaviate.py +0 -0
  422. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/migrations/__init__.py +0 -0
  423. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/migrations/manager.py +0 -0
  424. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/registry.py +0 -0
  425. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/async_mongodb.py +0 -0
  426. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/dynamodb.py +0 -0
  427. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/firestore.py +0 -0
  428. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/gcs.py +0 -0
  429. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/memory.py +0 -0
  430. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/mongodb.py +0 -0
  431. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/redis.py +0 -0
  432. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/upstash.py +0 -0
  433. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/persistence/state/valkey.py +0 -0
  434. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/profiler.py +0 -0
  435. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/push/__init__.py +0 -0
  436. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/push/client.py +0 -0
  437. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/push/transports.py +0 -0
  438. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/__init__.py +0 -0
  439. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/bridge.py +0 -0
  440. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/core.py +0 -0
  441. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/exceptions.py +0 -0
  442. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/history.py +0 -0
  443. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/models.py +0 -0
  444. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/operations.py +0 -0
  445. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/policy.py +0 -0
  446. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/registry.py +0 -0
  447. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/runtime.py +0 -0
  448. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/security.py +0 -0
  449. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/recipe/server.py +0 -0
  450. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/replay/__init__.py +0 -0
  451. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/replay/analyzer.py +0 -0
  452. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/replay/applier.py +0 -0
  453. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/replay/judge.py +0 -0
  454. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/replay/plan.py +0 -0
  455. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/replay/player.py +0 -0
  456. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/replay/reader.py +0 -0
  457. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/replay/storage.py +0 -0
  458. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/replay/writer.py +0 -0
  459. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/runtime/__init__.py +0 -0
  460. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/runtime/__main__.py +0 -0
  461. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/sandbox/__init__.py +0 -0
  462. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/sandbox/_registry.py +0 -0
  463. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/__init__.py +0 -0
  464. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/_delivery.py +0 -0
  465. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/_dispatch.py +0 -0
  466. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/agent_scheduler.py +0 -0
  467. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/base.py +0 -0
  468. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/blueprint_catalogue.py +0 -0
  469. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/condition_gate.py +0 -0
  470. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/deployment.py +0 -0
  471. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/executor.py +0 -0
  472. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/shared.py +0 -0
  473. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/suggestion_engine.py +0 -0
  474. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/scheduler/yaml_loader.py +0 -0
  475. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/security/audit.py +0 -0
  476. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/security/injection.py +0 -0
  477. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/security/protected.py +0 -0
  478. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/setup/__init__.py +0 -0
  479. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/setup/build.py +0 -0
  480. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/setup/post_install.py +0 -0
  481. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/setup/setup_conda_env.py +0 -0
  482. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/setup.py +0 -0
  483. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/__init__.py +0 -0
  484. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/ai_generator.py +0 -0
  485. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/config.py +0 -0
  486. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/dedupe.py +0 -0
  487. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/discovery.py +0 -0
  488. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/drift.py +0 -0
  489. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/engine.py +0 -0
  490. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/example_verifier.py +0 -0
  491. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/models.py +0 -0
  492. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/reports.py +0 -0
  493. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/templates.py +0 -0
  494. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/undo_redo.py +0 -0
  495. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/standardise/validator.py +0 -0
  496. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/storage/__init__.py +0 -0
  497. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/storage/dynamodb_adapter.py +0 -0
  498. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/storage/mongodb_adapter.py +0 -0
  499. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/storage/postgresql_adapter.py +0 -0
  500. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/storage/redis_adapter.py +0 -0
  501. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/storage/valkey_adapter.py +0 -0
  502. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/__init__.py +0 -0
  503. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/batch_source.py +0 -0
  504. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/cli_docs_source.py +0 -0
  505. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/discovery.py +0 -0
  506. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/docs_source.py +0 -0
  507. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/examples_source.py +0 -0
  508. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/executor.py +0 -0
  509. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/models.py +0 -0
  510. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/report_viewer.py +0 -0
  511. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/reporter.py +0 -0
  512. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/suite_runner/runner.py +0 -0
  513. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/__init__.py +0 -0
  514. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/_tool_sources.py +0 -0
  515. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/cache.py +0 -0
  516. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/dependency_checker.py +0 -0
  517. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/discovery.py +0 -0
  518. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/loader.py +0 -0
  519. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/registry.py +0 -0
  520. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/resolver.py +0 -0
  521. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/security.py +0 -0
  522. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/tool_override.py +0 -0
  523. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/templates/tools_doctor.py +0 -0
  524. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/tool_registry.py +0 -0
  525. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/tool_resolver.py +0 -0
  526. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/tools/__init__.py +0 -0
  527. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/tools/audio.py +0 -0
  528. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/tools/glob_tool.py +0 -0
  529. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/tools/grep_tool.py +0 -0
  530. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/tools/kanban_tools.py +0 -0
  531. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/tools/skill_manage.py +0 -0
  532. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/train/__init__.py +0 -0
  533. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/train.py +0 -0
  534. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/train_vision.py +0 -0
  535. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui/_aiui_datastore.py +0 -0
  536. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui/_external_agents.py +0 -0
  537. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui/context.py +0 -0
  538. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui/database_config.py +0 -0
  539. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui_agents/__init__.py +0 -0
  540. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui_agents/default_app.py +0 -0
  541. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui_bot/__init__.py +0 -0
  542. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui_bot/default_app.py +0 -0
  543. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui_chat/__init__.py +0 -0
  544. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui_chat/default_app.py +0 -0
  545. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui_dashboard/__init__.py +0 -0
  546. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui_dashboard/default_app.py +0 -0
  547. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui_realtime/__init__.py +0 -0
  548. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/ui_realtime/default_app.py +0 -0
  549. {praisonai-4.7.11 → praisonai-4.7.13}/praisonai/upload_vision.py +0 -0
  550. {praisonai-4.7.11 → praisonai-4.7.13}/setup.cfg +0 -0
  551. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test.py +0 -0
  552. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_agents_playbook.py +0 -0
  553. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_approval_system.py +0 -0
  554. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_basic.py +0 -0
  555. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_cli_features.py +0 -0
  556. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_custom_tools_fix.py +0 -0
  557. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_double_api_fix.py +0 -0
  558. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_n8n_agent_invoke.py +0 -0
  559. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_n8n_cli_feature.py +0 -0
  560. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_n8n_integration.py +0 -0
  561. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_phase2_refactor.py +0 -0
  562. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_recipe.py +0 -0
  563. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_registry.py +0 -0
  564. {praisonai-4.7.11 → praisonai-4.7.13}/tests/test_runner.py +0 -0
  565. {praisonai-4.7.11 → praisonai-4.7.13}/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.13
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.11
15
+ Requires-Dist: praisonai-code>=0.1.10
16
+ Requires-Dist: praisonai-bot>=0.1.10
17
+ Requires-Dist: praisonai-train>=0.1.10
18
+ Requires-Dist: praisonai-browser>=0.1.10
19
+ Requires-Dist: praisonai-mcp>=0.1.12
20
+ Requires-Dist: praisonai-sandbox>=0.1.10
21
+ Requires-Dist: praisonai-deploy>=0.1.10
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.13
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.11
15
+ Requires-Dist: praisonai-code>=0.1.10
16
+ Requires-Dist: praisonai-bot>=0.1.10
17
+ Requires-Dist: praisonai-train>=0.1.10
18
+ Requires-Dist: praisonai-browser>=0.1.10
19
+ Requires-Dist: praisonai-mcp>=0.1.12
20
+ Requires-Dist: praisonai-sandbox>=0.1.10
21
+ Requires-Dist: praisonai-deploy>=0.1.10
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
@@ -59,6 +59,7 @@ praisonai/capabilities/batches.py
59
59
  praisonai/capabilities/completions.py
60
60
  praisonai/capabilities/container_files.py
61
61
  praisonai/capabilities/containers.py
62
+ praisonai/capabilities/decisions.py
62
63
  praisonai/capabilities/embeddings.py
63
64
  praisonai/capabilities/files.py
64
65
  praisonai/capabilities/fine_tuning.py
@@ -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.11
5
+ praisonai-code>=0.1.10
6
+ praisonai-bot>=0.1.10
7
+ praisonai-train>=0.1.10
8
+ praisonai-browser>=0.1.10
9
+ praisonai-mcp>=0.1.12
10
+ praisonai-sandbox>=0.1.10
11
+ praisonai-deploy>=0.1.10
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,
@@ -6,6 +6,9 @@ Handles session creation, persistence, and resume functionality.
6
6
 
7
7
  import json
8
8
  import logging
9
+ import os
10
+ import re
11
+ import tempfile
9
12
  import time
10
13
  import uuid
11
14
  from dataclasses import dataclass, field
@@ -14,6 +17,23 @@ from typing import Any, Dict, List, Optional
14
17
 
15
18
  logger = logging.getLogger(__name__)
16
19
 
20
+ # Matches the ids minted by ``ACPSession.create`` (``sess_`` + 16 hex chars).
21
+ # Allowing up to 32 hex chars keeps forward-compat if the id width grows.
22
+ _SESSION_ID_RE = re.compile(r"^sess_[0-9a-f]{1,32}$")
23
+
24
+
25
+ def _validate_session_id(session_id: str) -> str:
26
+ """Reject anything that is not a server-minted session id.
27
+
28
+ ``session_id`` arrives over JSON-RPC from an external peer and is
29
+ interpolated into a filesystem path, so an unvalidated value like
30
+ ``"../../tmp/secret"`` would let the peer read or delete arbitrary
31
+ ``*.json`` files. Only ids matching the ``create()`` format are allowed.
32
+ """
33
+ if not isinstance(session_id, str) or not _SESSION_ID_RE.match(session_id):
34
+ raise ValueError(f"invalid session_id: {session_id!r}")
35
+ return session_id
36
+
17
37
 
18
38
  @dataclass
19
39
  class ACPSession:
@@ -124,23 +144,46 @@ class SessionStore:
124
144
  self._last_session_file = self.storage_dir / ".last_session"
125
145
 
126
146
  def _session_path(self, session_id: str) -> Path:
127
- """Get path for session file."""
128
- return self.storage_dir / f"{session_id}.json"
129
-
147
+ """Get path for session file (validated against traversal)."""
148
+ _validate_session_id(session_id)
149
+ # ``resolve`` anchors the path so a future id-format change can't
150
+ # silently re-open the traversal hole.
151
+ return (self.storage_dir / f"{session_id}.json").resolve()
152
+
153
+ @staticmethod
154
+ def _atomic_write(path: Path, text: str) -> None:
155
+ """Write ``text`` to ``path`` atomically via a temp file + os.replace.
156
+
157
+ A crash or Ctrl-C mid-write can never leave the target empty or
158
+ half-written — the old content survives until the rename succeeds.
159
+ """
160
+ path.parent.mkdir(parents=True, exist_ok=True)
161
+ fd, tmp = tempfile.mkstemp(prefix=".sess-", suffix=".tmp", dir=str(path.parent))
162
+ try:
163
+ with os.fdopen(fd, "w") as f:
164
+ f.write(text)
165
+ f.flush()
166
+ os.fsync(f.fileno())
167
+ os.replace(tmp, path)
168
+ except BaseException:
169
+ try:
170
+ os.unlink(tmp)
171
+ except OSError:
172
+ pass
173
+ raise
174
+
130
175
  def save(self, session: ACPSession) -> None:
131
- """Save session to disk."""
176
+ """Save session to disk atomically."""
132
177
  try:
133
178
  path = self._session_path(session.session_id)
134
- with open(path, "w") as f:
135
- json.dump(session.to_dict(), f, indent=2)
136
-
137
- # Update last session pointer
138
- with open(self._last_session_file, "w") as f:
139
- f.write(session.session_id)
140
-
179
+ self._atomic_write(path, json.dumps(session.to_dict(), indent=2))
180
+
181
+ # Update last session pointer ONLY after the payload is durable.
182
+ self._atomic_write(self._last_session_file, session.session_id)
183
+
141
184
  logger.debug(f"Saved session {session.session_id}")
142
185
  except Exception as e:
143
- logger.error(f"Failed to save session: {e}")
186
+ logger.error(f"Failed to save session {session.session_id}: {e}")
144
187
 
145
188
  def load(self, session_id: str) -> Optional[ACPSession]:
146
189
  """Load session from disk."""
@@ -373,7 +373,7 @@ def _make_timeout_proxy(inner, wrapped_run=None, wrapped__run=None):
373
373
  return proxy
374
374
 
375
375
 
376
- def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked=None, owner_key=None):
376
+ def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked=None, owner_key=None, native_delegates_to_core=False):
377
377
  """Enforce a per-call timeout on a tool, sync or async.
378
378
 
379
379
  For async tools the underlying task is cancelled on timeout. For sync tools
@@ -387,10 +387,33 @@ def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked
387
387
  On timeout the wrapper raises :class:`ToolTimeoutError` rather than returning
388
388
  a JSON string, so a tool's declared return-type contract is never silently
389
389
  downgraded; the framework adapter decides how to surface the timeout.
390
+
391
+ ``native_delegates_to_core``: when True, a *plain native callable* (not a
392
+ framework tool object) is returned unwrapped so core's own per-tool timeout
393
+ enforcement (``praisonaiagents`` ``agent/tool_execution.py`` /
394
+ ``tools/call_executor.py``, configured via the agent's ``tool_config``
395
+ timeout) owns it — avoiding a second, duplicated abandon-on-timeout thread
396
+ pool for tools that already flow through core (#5650). Framework tool
397
+ objects (CrewAI/AutoGen/LangChain ``BaseTool``) never reach core's executor,
398
+ so they are *always* wrapped here to preserve their ``args_schema``.
390
399
  """
391
400
  if timeout_seconds is None or timeout_seconds <= 0:
392
401
  return tool
393
402
 
403
+ # praisonai-native path: a plain callable already flows through core's tool
404
+ # executor, which enforces the resolved per-tool timeout. Returning it
405
+ # unwrapped lets core own the abandon-on-expiry semantics instead of the
406
+ # wrapper standing up a second thread pool with the same behaviour. Only
407
+ # framework tool objects (which bypass core) still need wrapper wrapping, so
408
+ # they fall through to the logic below.
409
+ if (
410
+ native_delegates_to_core
411
+ and callable(tool)
412
+ and not isinstance(tool, type)
413
+ and not _looks_like_framework_tool(tool)
414
+ ):
415
+ return tool
416
+
394
417
  import asyncio
395
418
  import concurrent.futures
396
419
  import functools
@@ -599,6 +622,15 @@ class AgentsGenerator:
599
622
  task_callback (callable, optional): A callback function to be executed after each tool run.
600
623
  tools (dict): A dictionary containing the tools to be used for the agents.
601
624
  """
625
+ # Wire the built-in readers/retrievers/rerankers into the core-SDK
626
+ # registries so YAML `retriever:` / `reader:` / `reranker:` declarations
627
+ # resolve identically on every launch path (CLI, serve, eval, Python).
628
+ # Single-sourced here so surfaces that construct AgentsGenerator directly
629
+ # (praisonai <file.yaml>, serve, eval) get the same wiring as run()/arun().
630
+ # Idempotent + thread-safe + register-only-if-absent; safe to call again.
631
+ from .adapters import register_default_adapters
632
+ register_default_adapters()
633
+
602
634
  self.agent_file = agent_file
603
635
  self.framework = framework
604
636
  self.config_list = config_list
@@ -766,14 +798,31 @@ class AgentsGenerator:
766
798
  with self._tool_timeout_executor_lock:
767
799
  self._leaked_workers += 1
768
800
 
769
- def _wrap_tool_with_timeout(self, tool, timeout_seconds):
770
- """Wrap a tool with this generator's instance-owned timeout executor."""
801
+ def _wrap_tool_with_timeout(self, tool, timeout_seconds, native_delegates_to_core=None):
802
+ """Wrap a tool with this generator's instance-owned timeout executor.
803
+
804
+ On the praisonai-native framework the resolved per-tool timeout is
805
+ enforced by core (``praisonaiagents`` ``agent/tool_execution.py``, wired
806
+ via the agent's ``tool_config`` timeout), so a *native* callable is left
807
+ unwrapped here instead of being bound to a second wrapper-owned thread
808
+ pool with the same abandon-on-expiry semantics (#5650). Framework tool
809
+ objects (CrewAI/AutoGen/LangChain ``BaseTool``) bypass core, so they are
810
+ still wrapped.
811
+
812
+ ``native_delegates_to_core``: callers that already know the resolved
813
+ framework (the per-run wrap/resolver closures) pass it explicitly;
814
+ otherwise it is inferred from ``self.framework`` (resolved to the chosen
815
+ adapter name by the time an adapter invokes a wrap closure at run time).
816
+ """
817
+ if native_delegates_to_core is None:
818
+ native_delegates_to_core = (getattr(self, "framework", None) or "") == "praisonai"
771
819
  return _wrap_with_timeout(
772
820
  tool,
773
821
  timeout_seconds,
774
822
  self._get_tool_timeout_executor,
775
823
  on_leaked=self._note_leaked_worker,
776
824
  owner_key=self._timeout_owner_key,
825
+ native_delegates_to_core=native_delegates_to_core,
777
826
  )
778
827
 
779
828
  def close(self):
@@ -964,9 +1013,23 @@ class AgentsGenerator:
964
1013
  # Canonical format conversion: 'agents' -> 'roles', 'instructions' -> 'backstory'
965
1014
  # Treat an empty ``roles: {}`` the same as a missing one so populated
966
1015
  # ``agents:`` is still promoted instead of running with zero agents.
967
- if 'agents' in config and not config.get('roles'):
968
- config['roles'] = {}
1016
+ #
1017
+ # Promotion is *authoritative*: the shorthand ``agents:`` bucket is
1018
+ # removed after merging into ``roles:`` so downstream validators and the
1019
+ # executor read a single source of truth. Leaving ``agents:`` in place
1020
+ # let validators see a merged ``{**roles, **agents}`` view the executor
1021
+ # (which reads only ``roles:``) never runs — causing double-fired
1022
+ # warnings, false-positive validation rejections, and silently dropped
1023
+ # ``tool_timeout``/handoff knobs for agents that never became roles.
1024
+ if 'agents' in config and isinstance(config['agents'], dict):
1025
+ config.setdefault('roles', {})
1026
+ if not isinstance(config['roles'], dict):
1027
+ config['roles'] = {}
969
1028
  for agent_name, agent_config in config['agents'].items():
1029
+ # An entry already present under ``roles:`` is canonical and
1030
+ # wins; only agents-only entries are promoted.
1031
+ if agent_name in config['roles']:
1032
+ continue
970
1033
  role_config = dict(agent_config) if agent_config else {}
971
1034
  # Convert 'instructions' to 'backstory' if present
972
1035
  if 'instructions' in role_config and 'backstory' not in role_config:
@@ -979,6 +1042,8 @@ class AgentsGenerator:
979
1042
  if 'backstory' not in role_config:
980
1043
  role_config['backstory'] = f'You are a {role_config["role"]}'
981
1044
  config['roles'][agent_name] = role_config
1045
+ # Drop the shorthand bucket so validators and the executor agree.
1046
+ del config['agents']
982
1047
 
983
1048
  # Get workflow input: 'input' is canonical, 'topic' is alias for backward compatibility
984
1049
  topic = config.get('input', config.get('topic', ''))
@@ -1055,11 +1120,35 @@ class AgentsGenerator:
1055
1120
  # that when the *same* generator instance is reused with a different
1056
1121
  # timeout layout, a stale closure from a previous run can never leak into
1057
1122
  # the adapters and apply the wrong budget to the current run.
1123
+ # Resolve the chosen framework now (the same registry resolution the
1124
+ # run prep uses) so native-vs-framework tool handling is decided BEFORE
1125
+ # the uniform wrap is applied eagerly below — ``self.framework`` is not
1126
+ # yet updated to the resolved adapter name at this point in the run.
1127
+ _requested_framework = getattr(self, "framework", None) or config.get('framework')
1128
+ registry = getattr(self, "_adapter_registry", None)
1129
+ try:
1130
+ resolved_framework = (
1131
+ registry.resolve_or_default(_requested_framework)
1132
+ if registry is not None else _requested_framework
1133
+ )
1134
+ except Exception:
1135
+ resolved_framework = _requested_framework
1136
+ native = resolved_framework == "praisonai"
1137
+
1058
1138
  uniform = self._resolve_uniform_tool_timeout(config)
1059
1139
  wrap = None
1060
1140
  resolver = None
1061
1141
  if uniform and uniform > 0:
1062
- wrap = lambda t, _sec=uniform: self._wrap_tool_with_timeout(t, _sec)
1142
+ # On the native framework a *plain callable* is left unwrapped so
1143
+ # core enforces the budget (#5650) — the raw value is exposed below
1144
+ # so the native adapter configures each agent's tool_config timeout.
1145
+ # Framework tool *objects* are still wrapped here regardless, so
1146
+ # their args_schema survives for the LLM. ``native`` is passed
1147
+ # explicitly because ``self.framework`` is not yet resolved here.
1148
+ wrap = (
1149
+ lambda t, _sec=uniform, _n=native:
1150
+ self._wrap_tool_with_timeout(t, _sec, native_delegates_to_core=_n)
1151
+ )
1063
1152
  tools_dict = {name: wrap(tool) for name, tool in tools_dict.items()}
1064
1153
  else:
1065
1154
  # No single uniform timeout. If any agent declared a per-agent
@@ -1080,9 +1169,21 @@ class AgentsGenerator:
1080
1169
  # so adapters still read them via the same keys. Both are written every
1081
1170
  # time so the inactive path is cleared rather than left holding a prior
1082
1171
  # closure.
1172
+ # On the native framework, plain callables are no longer wrapped by the
1173
+ # wrapper's own executor (above) — core enforces the timeout instead
1174
+ # (#5650). Expose the resolved per-agent timeout (float seconds) so the
1175
+ # native adapter can configure each core Agent's ``tool_config`` timeout.
1176
+ # ``None`` for non-native frameworks, which keep wrapper-side wrapping.
1177
+ native_tool_timeout_resolver = None
1178
+ if native:
1179
+ native_tool_timeout_resolver = (
1180
+ lambda agent_key, _cfg=config: self.resolve_agent_tool_timeout(agent_key, _cfg)
1181
+ )
1182
+
1083
1183
  self._run_ctx = {
1084
1184
  "_tool_timeout_wrap": wrap,
1085
1185
  "_agent_tool_wrap_resolver": resolver,
1186
+ "_native_tool_timeout_resolver": native_tool_timeout_resolver,
1086
1187
  }
1087
1188
  return tools_dict
1088
1189
 
@@ -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: