PraisonAI 4.6.32__tar.gz → 4.6.34__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 (773) hide show
  1. {praisonai-4.6.32 → praisonai-4.6.34}/PKG-INFO +2 -2
  2. {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/SOURCES.txt +1 -0
  4. {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/requires.txt +1 -1
  5. praisonai-4.6.34/praisonai/_safe_loader.py +100 -0
  6. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/agents_generator.py +37 -12
  7. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/api/call.py +19 -5
  8. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/async_agent_scheduler.py +18 -12
  9. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/auto.py +22 -36
  10. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_http_approval.py +8 -13
  11. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_webhook_approval.py +8 -13
  12. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/job_workflow.py +74 -8
  13. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/main.py +30 -26
  14. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/api.py +20 -7
  15. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/models.py +1 -1
  16. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/schema.py +2 -2
  17. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy.py +1 -1
  18. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/autogen_adapter.py +6 -10
  19. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/base.py +18 -0
  20. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/crewai_adapter.py +2 -10
  21. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/praisonai_adapter.py +2 -10
  22. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/pairing_routes.py +6 -0
  23. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/base.py +2 -20
  24. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/cli_tools.py +50 -16
  25. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/base.py +23 -0
  26. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/cassandra.py +13 -1
  27. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/pgvector.py +9 -1
  28. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/singlestore_vector.py +14 -1
  29. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/test.py +6 -2
  30. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train.py +35 -8
  31. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train_vision.py +33 -7
  32. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/components/aicoder.py +24 -5
  33. praisonai-4.6.34/praisonai/version.py +1 -0
  34. {praisonai-4.6.32 → praisonai-4.6.34}/pyproject.toml +1 -1
  35. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_custom_tools_fix.py +1 -1
  36. praisonai-4.6.32/praisonai/version.py +0 -1
  37. {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/dependency_links.txt +0 -0
  38. {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/entry_points.txt +0 -0
  39. {praisonai-4.6.32 → praisonai-4.6.34}/PraisonAI.egg-info/top_level.txt +0 -0
  40. {praisonai-4.6.32 → praisonai-4.6.34}/README.md +0 -0
  41. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/__init__.py +0 -0
  42. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/__main__.py +0 -0
  43. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_approval_spec.py +0 -0
  44. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_async_bridge.py +0 -0
  45. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/__init__.py +0 -0
  46. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/api_md.py +0 -0
  47. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/__init__.py +0 -0
  48. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/docs_extractor.py +0 -0
  49. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/docs_generator.py +0 -0
  50. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/generator.py +0 -0
  51. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  52. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/python_extractor.py +0 -0
  53. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  54. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/rust_extractor.py +0 -0
  55. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  56. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  57. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  58. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/_logging.py +0 -0
  59. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/acp/__init__.py +0 -0
  60. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/acp/config.py +0 -0
  61. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/acp/safe_edit.py +0 -0
  62. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/acp/server.py +0 -0
  63. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/acp/session.py +0 -0
  64. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/adapters/__init__.py +0 -0
  65. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/adapters/readers.py +0 -0
  66. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/adapters/rerankers.py +0 -0
  67. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/adapters/retrievers.py +0 -0
  68. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/adapters/vector_stores.py +0 -0
  69. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/agent.py +0 -0
  70. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/agent_scheduler.py +0 -0
  71. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/api/agent_invoke.py +0 -0
  72. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/app/__init__.py +0 -0
  73. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/app/agentos.py +0 -0
  74. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/audit/__init__.py +0 -0
  75. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/audit/agent_centric.py +0 -0
  76. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/__init__.py +0 -0
  77. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_ack.py +0 -0
  78. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_approval.py +0 -0
  79. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_approval_base.py +0 -0
  80. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_auth.py +0 -0
  81. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_chunk.py +0 -0
  82. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_commands.py +0 -0
  83. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_config_schema.py +0 -0
  84. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_debounce.py +0 -0
  85. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_defaults.py +0 -0
  86. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_discord_approval.py +0 -0
  87. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_email_utils.py +0 -0
  88. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_pairing_ui.py +0 -0
  89. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_protocol_mixin.py +0 -0
  90. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_rate_limit.py +0 -0
  91. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_registry.py +0 -0
  92. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_resilience.py +0 -0
  93. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_session.py +0 -0
  94. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_slack_approval.py +0 -0
  95. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_telegram_approval.py +0 -0
  96. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_unknown_user.py +0 -0
  97. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  98. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/agentmail.py +0 -0
  99. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/bot.py +0 -0
  100. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/botos.py +0 -0
  101. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/discord.py +0 -0
  102. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/email.py +0 -0
  103. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/media.py +0 -0
  104. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/slack.py +0 -0
  105. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/telegram.py +0 -0
  106. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/bots/whatsapp.py +0 -0
  107. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/__init__.py +0 -0
  108. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/agent.py +0 -0
  109. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/benchmark.py +0 -0
  110. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/cdp_agent.py +0 -0
  111. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/cdp_utils.py +0 -0
  112. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/cli.py +0 -0
  113. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/diagnostics.py +0 -0
  114. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/launcher.py +0 -0
  115. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/playwright_agent.py +0 -0
  116. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/profiling.py +0 -0
  117. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/protocol.py +0 -0
  118. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/report.py +0 -0
  119. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/server.py +0 -0
  120. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/sessions.py +0 -0
  121. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/browser/video.py +0 -0
  122. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/__init__.py +0 -0
  123. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/a2a.py +0 -0
  124. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/assistants.py +0 -0
  125. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/audio.py +0 -0
  126. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/batches.py +0 -0
  127. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/completions.py +0 -0
  128. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/container_files.py +0 -0
  129. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/containers.py +0 -0
  130. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/embeddings.py +0 -0
  131. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/files.py +0 -0
  132. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/fine_tuning.py +0 -0
  133. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/guardrails.py +0 -0
  134. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/images.py +0 -0
  135. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/mcp.py +0 -0
  136. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/messages.py +0 -0
  137. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/moderations.py +0 -0
  138. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/ocr.py +0 -0
  139. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/passthrough.py +0 -0
  140. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/rag.py +0 -0
  141. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/realtime.py +0 -0
  142. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/rerank.py +0 -0
  143. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/responses.py +0 -0
  144. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/search.py +0 -0
  145. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/skills.py +0 -0
  146. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/vector_store_files.py +0 -0
  147. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/vector_stores.py +0 -0
  148. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/capabilities/videos.py +0 -0
  149. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/claw/__init__.py +0 -0
  150. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/claw/default_app.py +0 -0
  151. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/__init__.py +0 -0
  152. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/_paths.py +0 -0
  153. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/app.py +0 -0
  154. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/branding.py +0 -0
  155. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/__init__.py +0 -0
  156. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/acp.py +0 -0
  157. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/agents.py +0 -0
  158. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/app.py +0 -0
  159. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/audit.py +0 -0
  160. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/batch.py +0 -0
  161. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/benchmark.py +0 -0
  162. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/bot.py +0 -0
  163. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/browser.py +0 -0
  164. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/call.py +0 -0
  165. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/chat.py +0 -0
  166. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/claw.py +0 -0
  167. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/code.py +0 -0
  168. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/commit.py +0 -0
  169. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/completion.py +0 -0
  170. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/config.py +0 -0
  171. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/context.py +0 -0
  172. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/dashboard.py +0 -0
  173. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/debug.py +0 -0
  174. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/deploy.py +0 -0
  175. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/diag.py +0 -0
  176. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/docs.py +0 -0
  177. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/doctor.py +0 -0
  178. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/endpoints.py +0 -0
  179. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/environment.py +0 -0
  180. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/eval.py +0 -0
  181. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/examples.py +0 -0
  182. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/flow.py +0 -0
  183. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/gateway.py +0 -0
  184. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/github.py +0 -0
  185. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/hooks.py +0 -0
  186. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/knowledge.py +0 -0
  187. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/langextract.py +0 -0
  188. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/langfuse.py +0 -0
  189. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/loop.py +0 -0
  190. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/lsp.py +0 -0
  191. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/managed.py +0 -0
  192. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/mcp.py +0 -0
  193. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/memory.py +0 -0
  194. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/mint_link.py +0 -0
  195. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/n8n.py +0 -0
  196. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/obs.py +0 -0
  197. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/onboard.py +0 -0
  198. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/package.py +0 -0
  199. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/pairing.py +0 -0
  200. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/paths.py +0 -0
  201. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/plugins.py +0 -0
  202. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/port.py +0 -0
  203. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/profile.py +0 -0
  204. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/publish.py +0 -0
  205. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/rag.py +0 -0
  206. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/realtime.py +0 -0
  207. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/recipe.py +0 -0
  208. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/registry.py +0 -0
  209. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/replay.py +0 -0
  210. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/research.py +0 -0
  211. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/retrieval.py +0 -0
  212. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/rules.py +0 -0
  213. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/run.py +0 -0
  214. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/sandbox.py +0 -0
  215. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/schedule.py +0 -0
  216. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/serve.py +0 -0
  217. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/session.py +0 -0
  218. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/setup.py +0 -0
  219. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/skills.py +0 -0
  220. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/standardise.py +0 -0
  221. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/templates.py +0 -0
  222. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/test.py +0 -0
  223. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/todo.py +0 -0
  224. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/tools.py +0 -0
  225. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/traces.py +0 -0
  226. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/tracker.py +0 -0
  227. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/train.py +0 -0
  228. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/ui.py +0 -0
  229. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/up.py +0 -0
  230. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/version.py +0 -0
  231. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/commands/workflow.py +0 -0
  232. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/config_loader.py +0 -0
  233. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/configuration/__init__.py +0 -0
  234. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/configuration/loader.py +0 -0
  235. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/configuration/paths.py +0 -0
  236. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/configuration/schema.py +0 -0
  237. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/execution/__init__.py +0 -0
  238. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/execution/core.py +0 -0
  239. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/execution/profiler.py +0 -0
  240. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/execution/request.py +0 -0
  241. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/execution/result.py +0 -0
  242. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/fallback_schema.py +0 -0
  243. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/__init__.py +0 -0
  244. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/acp.py +0 -0
  245. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/action_orchestrator.py +0 -0
  246. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/agent_scheduler.py +0 -0
  247. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/agent_tools.py +0 -0
  248. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/agents.py +0 -0
  249. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/approval.py +0 -0
  250. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/at_mentions.py +0 -0
  251. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/audit_cli.py +0 -0
  252. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/auto_memory.py +0 -0
  253. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/auto_mode.py +0 -0
  254. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/autonomy_mode.py +0 -0
  255. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/background.py +0 -0
  256. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/base.py +0 -0
  257. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/benchmark.py +0 -0
  258. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/bots_cli.py +0 -0
  259. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/capabilities.py +0 -0
  260. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/checkpoints.py +0 -0
  261. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/cli_profiler.py +0 -0
  262. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/code_intelligence.py +0 -0
  263. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/compaction.py +0 -0
  264. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/compare.py +0 -0
  265. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/config_hierarchy.py +0 -0
  266. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/context_manager.py +0 -0
  267. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/cost_tracker.py +0 -0
  268. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/csv_test_runner.py +0 -0
  269. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/debug.py +0 -0
  270. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/deploy.py +0 -0
  271. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/diag.py +0 -0
  272. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/display_jsonl.py +0 -0
  273. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/__init__.py +0 -0
  274. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  275. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  276. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  277. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  278. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  279. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  280. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  281. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  282. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  283. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  284. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  285. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  286. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  287. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  288. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  289. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  290. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  291. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/engine.py +0 -0
  292. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/formatters.py +0 -0
  293. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/handler.py +0 -0
  294. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/models.py +0 -0
  295. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/doctor/registry.py +0 -0
  296. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/endpoints.py +0 -0
  297. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/eval.py +0 -0
  298. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/examples.py +0 -0
  299. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/external_agents.py +0 -0
  300. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/fast_context.py +0 -0
  301. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/file_history.py +0 -0
  302. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/flow_display.py +0 -0
  303. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/gateway.py +0 -0
  304. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/git_attribution.py +0 -0
  305. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/git_integration.py +0 -0
  306. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/guardrail.py +0 -0
  307. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/handoff.py +0 -0
  308. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/hooks.py +0 -0
  309. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/hybrid_workflow.py +0 -0
  310. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/image.py +0 -0
  311. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/interactive_core_headless.py +0 -0
  312. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/interactive_runtime.py +0 -0
  313. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/interactive_test_harness.py +0 -0
  314. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/interactive_tools.py +0 -0
  315. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/interactive_tui.py +0 -0
  316. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/jobs.py +0 -0
  317. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/knowledge.py +0 -0
  318. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/knowledge_cli.py +0 -0
  319. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/lite.py +0 -0
  320. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/logs.py +0 -0
  321. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/lsp_cli.py +0 -0
  322. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  323. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/mcp.py +0 -0
  324. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/message_queue.py +0 -0
  325. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/metrics.py +0 -0
  326. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/migrate.py +0 -0
  327. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/migration_flow.py +0 -0
  328. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/migration_spec.py +0 -0
  329. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/n8n.py +0 -0
  330. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/observability.py +0 -0
  331. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/ollama.py +0 -0
  332. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/onboard.py +0 -0
  333. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/output_modes.py +0 -0
  334. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/output_style.py +0 -0
  335. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/package.py +0 -0
  336. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/performance.py +0 -0
  337. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/persistence.py +0 -0
  338. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/plugin_cli.py +0 -0
  339. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profile.py +0 -0
  340. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profiler/__init__.py +0 -0
  341. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profiler/core.py +0 -0
  342. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profiler/optimizations.py +0 -0
  343. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profiler/suite.py +0 -0
  344. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/profiling.py +0 -0
  345. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/__init__.py +0 -0
  346. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/manager.py +0 -0
  347. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/models.py +0 -0
  348. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/persistence.py +0 -0
  349. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/scheduler.py +0 -0
  350. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/queue/worker.py +0 -0
  351. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/recipe.py +0 -0
  352. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/recipe_creator.py +0 -0
  353. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/recipe_optimizer.py +0 -0
  354. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/recipe_prompts.py +0 -0
  355. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/recipes.py +0 -0
  356. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/registry.py +0 -0
  357. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/repo_map.py +0 -0
  358. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/router.py +0 -0
  359. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/safe_shell.py +0 -0
  360. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/sandbox_cli.py +0 -0
  361. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/sandbox_executor.py +0 -0
  362. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/sdk_knowledge.py +0 -0
  363. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/serve.py +0 -0
  364. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/session.py +0 -0
  365. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/setup/__init__.py +0 -0
  366. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/setup/handler.py +0 -0
  367. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/setup/templates.py +0 -0
  368. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/skills.py +0 -0
  369. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/slash_commands.py +0 -0
  370. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/telemetry.py +0 -0
  371. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/templates.py +0 -0
  372. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/thinking.py +0 -0
  373. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/todo.py +0 -0
  374. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tools.py +0 -0
  375. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/__init__.py +0 -0
  376. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/app.py +0 -0
  377. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/cli.py +0 -0
  378. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/config.py +0 -0
  379. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/debug.py +0 -0
  380. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/events.py +0 -0
  381. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/mock_provider.py +0 -0
  382. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/orchestrator.py +0 -0
  383. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  384. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/help.py +0 -0
  385. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/main.py +0 -0
  386. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/queue.py +0 -0
  387. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/session.py +0 -0
  388. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/screens/settings.py +0 -0
  389. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/session_store.py +0 -0
  390. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  391. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  392. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  393. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  394. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  395. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  396. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/status.py +0 -0
  397. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  398. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/wizard.py +0 -0
  399. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/workflow.py +0 -0
  400. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/features/yaml_utils.py +0 -0
  401. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/__init__.py +0 -0
  402. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/async_tui.py +0 -0
  403. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/config.py +0 -0
  404. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/core.py +0 -0
  405. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/events.py +0 -0
  406. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  407. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  408. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  409. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/praison_io.py +0 -0
  410. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/repl.py +0 -0
  411. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/split_tui.py +0 -0
  412. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/interactive/tui_app.py +0 -0
  413. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/langfuse_client.py +0 -0
  414. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/legacy.py +0 -0
  415. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/output/__init__.py +0 -0
  416. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/output/console.py +0 -0
  417. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/schedule_cli.py +0 -0
  418. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/schema_provider.py +0 -0
  419. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/session/__init__.py +0 -0
  420. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/session/unified.py +0 -0
  421. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/state/__init__.py +0 -0
  422. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/state/identifiers.py +0 -0
  423. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/state/sessions.py +0 -0
  424. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/__init__.py +0 -0
  425. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/config.py +0 -0
  426. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/events.py +0 -0
  427. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/mg_backend.py +0 -0
  428. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/plain.py +0 -0
  429. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/ui/rich_backend.py +0 -0
  430. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli/unified_schema.py +0 -0
  431. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli_backends/__init__.py +0 -0
  432. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli_backends/claude.py +0 -0
  433. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/cli_backends/registry.py +0 -0
  434. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/__init__.py +0 -0
  435. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/agent_tools.py +0 -0
  436. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/diff/__init__.py +0 -0
  437. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/diff/diff_strategy.py +0 -0
  438. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/__init__.py +0 -0
  439. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/apply_diff.py +0 -0
  440. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/execute_command.py +0 -0
  441. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/list_files.py +0 -0
  442. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/read_file.py +0 -0
  443. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/search_replace.py +0 -0
  444. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/tools/write_file.py +0 -0
  445. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/utils/__init__.py +0 -0
  446. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/utils/file_utils.py +0 -0
  447. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/utils/ignore_utils.py +0 -0
  448. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/code/utils/text_utils.py +0 -0
  449. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/__init__.py +0 -0
  450. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/artifact_store.py +0 -0
  451. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/config.py +0 -0
  452. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/history_store.py +0 -0
  453. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/queue.py +0 -0
  454. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/setup.py +0 -0
  455. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/context/terminal_logger.py +0 -0
  456. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/daemon/__init__.py +0 -0
  457. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/daemon/launchd.py +0 -0
  458. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/daemon/systemd.py +0 -0
  459. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/daemon/windows.py +0 -0
  460. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/db/__init__.py +0 -0
  461. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/db/adapter.py +0 -0
  462. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/__init__.py +0 -0
  463. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/docker.py +0 -0
  464. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/doctor.py +0 -0
  465. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/main.py +0 -0
  466. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/providers/__init__.py +0 -0
  467. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/providers/aws.py +0 -0
  468. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/providers/azure.py +0 -0
  469. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/providers/base.py +0 -0
  470. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/deploy/providers/gcp.py +0 -0
  471. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/__init__.py +0 -0
  472. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/classifier.py +0 -0
  473. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/executor.py +0 -0
  474. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/extractor.py +0 -0
  475. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/reporter.py +0 -0
  476. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/runner.py +0 -0
  477. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/docs_runner/workspace.py +0 -0
  478. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/__init__.py +0 -0
  479. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/a2u_server.py +0 -0
  480. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/discovery.py +0 -0
  481. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/__init__.py +0 -0
  482. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/a2a.py +0 -0
  483. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/a2u.py +0 -0
  484. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/agents_api.py +0 -0
  485. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/base.py +0 -0
  486. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/mcp.py +0 -0
  487. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/recipe.py +0 -0
  488. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  489. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/registry.py +0 -0
  490. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/endpoints/server.py +0 -0
  491. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/__init__.py +0 -0
  492. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/client.py +0 -0
  493. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  494. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  495. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/components/__init__.py +0 -0
  496. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/converter.py +0 -0
  497. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/flow/helpers.py +0 -0
  498. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/__init__.py +0 -0
  499. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/framework_adapters/registry.py +0 -0
  500. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/__init__.py +0 -0
  501. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/auth.py +0 -0
  502. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/cookie_auth.py +0 -0
  503. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/exec_approval.py +0 -0
  504. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/gateway_approval.py +0 -0
  505. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/magic_link.py +0 -0
  506. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/origin_check.py +0 -0
  507. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/pairing.py +0 -0
  508. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/push_channels.py +0 -0
  509. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/push_delivery.py +0 -0
  510. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/push_polling.py +0 -0
  511. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/push_presence.py +0 -0
  512. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/rate_limiter.py +0 -0
  513. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/redis_pubsub.py +0 -0
  514. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/gateway/server.py +0 -0
  515. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/inbuilt_tools/__init__.py +0 -0
  516. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  517. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/inc/__init__.py +0 -0
  518. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/inc/config.py +0 -0
  519. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/inc/models.py +0 -0
  520. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/__init__.py +0 -0
  521. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/_session_info.py +0 -0
  522. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/_tool_aliases.py +0 -0
  523. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/claude_code.py +0 -0
  524. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/codex_cli.py +0 -0
  525. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/__init__.py +0 -0
  526. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/daytona.py +0 -0
  527. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/docker.py +0 -0
  528. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/e2b.py +0 -0
  529. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/flyio.py +0 -0
  530. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/local.py +0 -0
  531. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/compute/modal_compute.py +0 -0
  532. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/cursor_cli.py +0 -0
  533. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/db_session_adapter.py +0 -0
  534. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/gemini_cli.py +0 -0
  535. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/hosted_agent.py +0 -0
  536. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/local_agent.py +0 -0
  537. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/managed_agents.py +0 -0
  538. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/managed_local.py +0 -0
  539. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/registry.py +0 -0
  540. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/integrations/sandboxed_agent.py +0 -0
  541. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/__init__.py +0 -0
  542. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/executor.py +0 -0
  543. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/models.py +0 -0
  544. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/router.py +0 -0
  545. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/server.py +0 -0
  546. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/jobs/store.py +0 -0
  547. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/llm/__init__.py +0 -0
  548. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/llm/registry.py +0 -0
  549. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/__init__.py +0 -0
  550. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/__init__.py +0 -0
  551. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/agents.py +0 -0
  552. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  553. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  554. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  555. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/memory.py +0 -0
  556. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/prompts.py +0 -0
  557. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/resources.py +0 -0
  558. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  559. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/auth/__init__.py +0 -0
  560. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/auth/api_key.py +0 -0
  561. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/auth/oauth.py +0 -0
  562. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/auth/oidc.py +0 -0
  563. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/auth/scopes.py +0 -0
  564. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/cli.py +0 -0
  565. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/elicitation.py +0 -0
  566. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/icons.py +0 -0
  567. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/recipe_adapter.py +0 -0
  568. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/recipe_cli.py +0 -0
  569. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/registry.py +0 -0
  570. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/sampling.py +0 -0
  571. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/server.py +0 -0
  572. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/tasks.py +0 -0
  573. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/tool_index.py +0 -0
  574. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/transports/__init__.py +0 -0
  575. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/transports/http_stream.py +0 -0
  576. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/mcp_server/transports/stdio.py +0 -0
  577. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/n8n/__init__.py +0 -0
  578. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/n8n/client.py +0 -0
  579. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/n8n/converter.py +0 -0
  580. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/n8n/preview.py +0 -0
  581. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/n8n/reverse_converter.py +0 -0
  582. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/observability/__init__.py +0 -0
  583. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/observability/langextract.py +0 -0
  584. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/observability/langfuse.py +0 -0
  585. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/__init__.py +0 -0
  586. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/config.py +0 -0
  587. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/__init__.py +0 -0
  588. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/async_mysql.py +0 -0
  589. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/async_postgres.py +0 -0
  590. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  591. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/base.py +0 -0
  592. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/json_store.py +0 -0
  593. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/mysql.py +0 -0
  594. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/postgres.py +0 -0
  595. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/singlestore.py +0 -0
  596. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/sqlite.py +0 -0
  597. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/supabase.py +0 -0
  598. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/surrealdb.py +0 -0
  599. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/conversation/turso.py +0 -0
  600. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/factory.py +0 -0
  601. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/hooks/__init__.py +0 -0
  602. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  603. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/__init__.py +0 -0
  604. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/chroma.py +0 -0
  605. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  606. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  607. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/couchbase.py +0 -0
  608. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/lancedb.py +0 -0
  609. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  610. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  611. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  612. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/milvus.py +0 -0
  613. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  614. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/pinecone.py +0 -0
  615. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/qdrant.py +0 -0
  616. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  617. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  618. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  619. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/knowledge/weaviate.py +0 -0
  620. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/migrations/__init__.py +0 -0
  621. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/migrations/manager.py +0 -0
  622. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/orchestrator.py +0 -0
  623. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/__init__.py +0 -0
  624. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/async_mongodb.py +0 -0
  625. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/base.py +0 -0
  626. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/dynamodb.py +0 -0
  627. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/firestore.py +0 -0
  628. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/gcs.py +0 -0
  629. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/memory.py +0 -0
  630. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/mongodb.py +0 -0
  631. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/redis.py +0 -0
  632. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/state/upstash.py +0 -0
  633. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/tests/__init__.py +0 -0
  634. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/persistence/tests/test_all_backends.py +0 -0
  635. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/profiler.py +0 -0
  636. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/push/__init__.py +0 -0
  637. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/push/client.py +0 -0
  638. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/push/transports.py +0 -0
  639. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/__init__.py +0 -0
  640. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/bridge.py +0 -0
  641. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/core.py +0 -0
  642. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/exceptions.py +0 -0
  643. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/history.py +0 -0
  644. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/models.py +0 -0
  645. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/operations.py +0 -0
  646. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/policy.py +0 -0
  647. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/registry.py +0 -0
  648. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/runtime.py +0 -0
  649. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/security.py +0 -0
  650. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/serve.py +0 -0
  651. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/recipe/server.py +0 -0
  652. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/__init__.py +0 -0
  653. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/analyzer.py +0 -0
  654. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/applier.py +0 -0
  655. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/judge.py +0 -0
  656. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/plan.py +0 -0
  657. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/player.py +0 -0
  658. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/reader.py +0 -0
  659. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/storage.py +0 -0
  660. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/replay/writer.py +0 -0
  661. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/__init__.py +0 -0
  662. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/daytona.py +0 -0
  663. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/docker.py +0 -0
  664. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/modal.py +0 -0
  665. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/sandlock.py +0 -0
  666. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/ssh.py +0 -0
  667. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/sandbox/subprocess.py +0 -0
  668. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/__init__.py +0 -0
  669. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/agent_scheduler.py +0 -0
  670. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/base.py +0 -0
  671. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/daemon_manager.py +0 -0
  672. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/executor.py +0 -0
  673. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/shared.py +0 -0
  674. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/state_manager.py +0 -0
  675. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler/yaml_loader.py +0 -0
  676. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/scheduler.py +0 -0
  677. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/security/__init__.py +0 -0
  678. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/security/audit.py +0 -0
  679. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/security/injection.py +0 -0
  680. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/security/protected.py +0 -0
  681. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/setup/__init__.py +0 -0
  682. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/setup/build.py +0 -0
  683. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/setup/post_install.py +0 -0
  684. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/setup/setup_conda_env.py +0 -0
  685. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/setup.py +0 -0
  686. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/__init__.py +0 -0
  687. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/ai_generator.py +0 -0
  688. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/config.py +0 -0
  689. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/dedupe.py +0 -0
  690. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/discovery.py +0 -0
  691. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/drift.py +0 -0
  692. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/engine.py +0 -0
  693. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/enhanced_templates.py +0 -0
  694. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/example_verifier.py +0 -0
  695. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/manifest.py +0 -0
  696. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/models.py +0 -0
  697. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/reports.py +0 -0
  698. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/templates.py +0 -0
  699. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/undo_redo.py +0 -0
  700. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/standardise/validator.py +0 -0
  701. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/storage/__init__.py +0 -0
  702. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/storage/dynamodb_adapter.py +0 -0
  703. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/storage/mongodb_adapter.py +0 -0
  704. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/storage/postgresql_adapter.py +0 -0
  705. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/storage/redis_adapter.py +0 -0
  706. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/__init__.py +0 -0
  707. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/batch_source.py +0 -0
  708. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/cli_docs_source.py +0 -0
  709. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/discovery.py +0 -0
  710. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/docs_source.py +0 -0
  711. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/examples_source.py +0 -0
  712. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/executor.py +0 -0
  713. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/models.py +0 -0
  714. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/report_viewer.py +0 -0
  715. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/reporter.py +0 -0
  716. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/suite_runner/runner.py +0 -0
  717. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/__init__.py +0 -0
  718. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/cache.py +0 -0
  719. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/dependency_checker.py +0 -0
  720. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/discovery.py +0 -0
  721. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/loader.py +0 -0
  722. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/registry.py +0 -0
  723. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/resolver.py +0 -0
  724. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/security.py +0 -0
  725. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/tool_override.py +0 -0
  726. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/templates/tools_doctor.py +0 -0
  727. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tool_registry.py +0 -0
  728. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tool_resolver.py +0 -0
  729. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/__init__.py +0 -0
  730. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/audio.py +0 -0
  731. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/glob_tool.py +0 -0
  732. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/grep_tool.py +0 -0
  733. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/multiedit.py +0 -0
  734. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/tools/skill_manage.py +0 -0
  735. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/__init__.py +0 -0
  736. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/__init__.py +0 -0
  737. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/grader.py +0 -0
  738. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/hook.py +0 -0
  739. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/models.py +0 -0
  740. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/orchestrator.py +0 -0
  741. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/agents/storage.py +0 -0
  742. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/llm/__init__.py +0 -0
  743. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/train/llm/trainer.py +0 -0
  744. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/_aiui_datastore.py +0 -0
  745. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/_external_agents.py +0 -0
  746. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/callbacks.py +0 -0
  747. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/context.py +0 -0
  748. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui/database_config.py +0 -0
  749. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_agents/__init__.py +0 -0
  750. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_agents/default_app.py +0 -0
  751. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_bot/__init__.py +0 -0
  752. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_bot/default_app.py +0 -0
  753. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_chat/__init__.py +0 -0
  754. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_chat/default_app.py +0 -0
  755. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_realtime/__init__.py +0 -0
  756. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/ui_realtime/default_app.py +0 -0
  757. {praisonai-4.6.32 → praisonai-4.6.34}/praisonai/upload_vision.py +0 -0
  758. {praisonai-4.6.32 → praisonai-4.6.34}/setup.cfg +0 -0
  759. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test.py +0 -0
  760. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_agents_playbook.py +0 -0
  761. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_approval_system.py +0 -0
  762. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_basic.py +0 -0
  763. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_cli_features.py +0 -0
  764. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_double_api_fix.py +0 -0
  765. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_n8n_agent_invoke.py +0 -0
  766. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_n8n_cli_feature.py +0 -0
  767. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_n8n_integration.py +0 -0
  768. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_phase2_refactor.py +0 -0
  769. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_recipe.py +0 -0
  770. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_registry.py +0 -0
  771. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_runner.py +0 -0
  772. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_sandboxed_agent_compatibility.py +0 -0
  773. {praisonai-4.6.32 → praisonai-4.6.34}/tests/test_serve_features.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.32
3
+ Version: 4.6.34
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,7 +11,7 @@ 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.6.32
14
+ Requires-Dist: praisonaiagents>=1.6.34
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<=1.82.6,>=1.81.0
17
17
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.32
3
+ Version: 4.6.34
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,7 +11,7 @@ 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.6.32
14
+ Requires-Dist: praisonaiagents>=1.6.34
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<=1.82.6,>=1.81.0
17
17
  Requires-Dist: PyYAML>=6.0
@@ -11,6 +11,7 @@ praisonai/__main__.py
11
11
  praisonai/_approval_spec.py
12
12
  praisonai/_async_bridge.py
13
13
  praisonai/_logging.py
14
+ praisonai/_safe_loader.py
14
15
  praisonai/agent.py
15
16
  praisonai/agent_scheduler.py
16
17
  praisonai/agents_generator.py
@@ -1,7 +1,7 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.6.32
4
+ praisonaiagents>=1.6.34
5
5
  python-dotenv>=0.19.0
6
6
  litellm<=1.82.6,>=1.81.0
7
7
  PyYAML>=6.0
@@ -0,0 +1,100 @@
1
+ """
2
+ Safe module loader with PRAISONAI_ALLOW_LOCAL_TOOLS opt-in.
3
+
4
+ This module provides a safe way to load user-supplied .py files with the same
5
+ security posture as tool_resolver.py. All exec_module() calls should route
6
+ through this helper to ensure consistent opt-in behavior.
7
+ """
8
+ import importlib.util
9
+ import logging
10
+ import os
11
+ from pathlib import Path
12
+ from types import ModuleType
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class LocalToolsDisabled(RuntimeError):
18
+ """Raised when local tools loading is disabled but required."""
19
+ pass
20
+
21
+
22
+ def load_user_module(module_path: str | Path, *, name: str) -> ModuleType | None:
23
+ """Load a user-supplied .py file with the same opt-in tool_resolver enforces.
24
+
25
+ Args:
26
+ module_path: Path to the .py file to load
27
+ name: Module name to use for the spec
28
+
29
+ Returns:
30
+ Loaded module or None if loading is disabled or the file is missing.
31
+
32
+ Raises:
33
+ LocalToolsDisabled: If caller wants strict behavior when disabled.
34
+ """
35
+ if os.environ.get("PRAISONAI_ALLOW_LOCAL_TOOLS", "").lower() != "true":
36
+ logger.warning(
37
+ "Refusing to exec %s: set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable.",
38
+ module_path,
39
+ )
40
+ return None
41
+
42
+ path = Path(module_path).resolve()
43
+ if not path.is_file():
44
+ return None
45
+
46
+ # Optional: enforce that the path is under CWD or an explicit allowlist
47
+ # to prevent ../-style traversal from API/network inputs.
48
+ cwd = Path.cwd().resolve()
49
+ try:
50
+ path.relative_to(cwd)
51
+ except ValueError:
52
+ logger.warning("Refusing to exec %s: outside working directory.", path)
53
+ return None
54
+
55
+ spec = importlib.util.spec_from_file_location(name, str(path))
56
+ if spec is None or spec.loader is None:
57
+ return None
58
+
59
+ module = importlib.util.module_from_spec(spec)
60
+ spec.loader.exec_module(module)
61
+ return module
62
+
63
+
64
+ def load_user_module_strict(module_path: str | Path, *, name: str) -> ModuleType:
65
+ """Load a user-supplied .py file, raising LocalToolsDisabled if disabled.
66
+
67
+ Args:
68
+ module_path: Path to the .py file to load
69
+ name: Module name to use for the spec
70
+
71
+ Returns:
72
+ Loaded module
73
+
74
+ Raises:
75
+ LocalToolsDisabled: If PRAISONAI_ALLOW_LOCAL_TOOLS is not set to 'true'
76
+ FileNotFoundError: If the file doesn't exist
77
+ """
78
+ if os.environ.get("PRAISONAI_ALLOW_LOCAL_TOOLS", "").lower() != "true":
79
+ raise LocalToolsDisabled(
80
+ f"Refusing to exec {module_path}: set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable."
81
+ )
82
+
83
+ path = Path(module_path).resolve()
84
+ if not path.is_file():
85
+ raise FileNotFoundError(f"Module file not found: {path}")
86
+
87
+ # Security: enforce that the path is under CWD
88
+ cwd = Path.cwd().resolve()
89
+ try:
90
+ path.relative_to(cwd)
91
+ except ValueError:
92
+ raise LocalToolsDisabled(f"Refusing to exec {path}: outside working directory.")
93
+
94
+ spec = importlib.util.spec_from_file_location(name, str(path))
95
+ if spec is None or spec.loader is None:
96
+ raise ImportError(f"Could not create spec for {path}")
97
+
98
+ module = importlib.util.module_from_spec(spec)
99
+ spec.loader.exec_module(module)
100
+ return module
@@ -351,6 +351,24 @@ class AgentsGenerator:
351
351
  spec.loader.exec_module(module)
352
352
  return {name: obj for name, obj in inspect.getmembers(module, self.is_function_or_decorated)}
353
353
 
354
+ def _extract_tool_classes(self, module):
355
+ """
356
+ Extract tool classes from a loaded module that inherit from BaseTool
357
+ or are part of langchain_community.tools package.
358
+ """
359
+ result = {}
360
+ for name, obj in inspect.getmembers(module,
361
+ lambda x: inspect.isclass(x) and (
362
+ x.__module__.startswith('langchain_community.tools') or
363
+ (PRAISONAI_TOOLS_AVAILABLE and BaseTool and issubclass(x, BaseTool))
364
+ ) and x is not BaseTool):
365
+ try:
366
+ result[name] = obj()
367
+ except Exception as e:
368
+ self.logger.warning(f"Error instantiating tool class {name}: {e}")
369
+ continue
370
+ return result
371
+
354
372
  def load_tools_from_module_class(self, module_path):
355
373
  """
356
374
  Loads tools from a specified module path containing classes that inherit from BaseTool
@@ -403,16 +421,13 @@ class AgentsGenerator:
403
421
  """
404
422
  tools_list = []
405
423
  try:
406
- # Try to import tools.py from current directory
407
- spec = importlib.util.spec_from_file_location("tools", "tools.py")
408
- self.logger.debug(f"Spec: {spec}")
409
- if spec is None:
410
- self.logger.debug("tools.py not found in current directory")
424
+ # Try to import tools.py from current directory using safe loading
425
+ from ._safe_loader import load_user_module
426
+ module = load_user_module("tools.py", name="tools")
427
+ if module is None:
428
+ self.logger.debug("tools.py not found or local tools loading disabled")
411
429
  return tools_list
412
430
 
413
- module = importlib.util.module_from_spec(spec)
414
- spec.loader.exec_module(module)
415
-
416
431
  # Register functions in the tool registry instead of globals()
417
432
  registered_tools = self.tool_registry.register_from_module(module)
418
433
  tools_list = [self.tool_registry.get_function(name) for name in registered_tools]
@@ -532,11 +547,21 @@ class AgentsGenerator:
532
547
  tools_dir_path = Path(root_directory) / 'tools'
533
548
 
534
549
  if os.path.isfile(tools_py_path):
535
- tools_dict.update(self.load_tools_from_module_class(tools_py_path))
536
- self.logger.debug("tools.py exists in the root directory. Loading tools.py and skipping tools folder.")
550
+ from ._safe_loader import load_user_module
551
+ module = load_user_module(tools_py_path, name="tools_module")
552
+ if module is not None:
553
+ tools_dict.update(self._extract_tool_classes(module))
554
+ self.logger.debug("tools.py exists in the root directory. Loading tools.py and skipping tools folder.")
537
555
  elif tools_dir_path.is_dir():
538
- tools_dict.update(self.load_tools_from_module_class(tools_dir_path))
539
- self.logger.debug("tools folder exists in the root directory")
556
+ from ._safe_loader import load_user_module
557
+ for py_file in tools_dir_path.glob("*.py"):
558
+ if py_file.name.startswith("__"):
559
+ continue
560
+ module = load_user_module(py_file, name=f"tools_{py_file.stem}")
561
+ if module is not None:
562
+ tools_dict.update(self._extract_tool_classes(module))
563
+ if tools_dict:
564
+ self.logger.debug("tools folder exists in the root directory")
540
565
 
541
566
  framework = self.framework or config.get('framework', 'crewai')
542
567
 
@@ -69,11 +69,25 @@ tools_path = os.path.join(os.getcwd(), 'tools.py')
69
69
  logger.debug(f"Tools path: {tools_path}")
70
70
 
71
71
  def import_tools_from_file(file_path):
72
- spec = importlib.util.spec_from_file_location("custom_tools", file_path)
73
- custom_tools_module = importlib.util.module_from_spec(spec)
74
- spec.loader.exec_module(custom_tools_module)
75
- logger.debug(f"Imported tools from {file_path}")
76
- return custom_tools_module
72
+ """Import tools from file with PRAISONAI_ALLOW_LOCAL_TOOLS opt-in.
73
+
74
+ This function is reachable from network input via API requests.
75
+ Additional security: only allow files under the current working directory.
76
+ """
77
+ from .._safe_loader import load_user_module_strict, LocalToolsDisabled
78
+ try:
79
+ custom_tools_module = load_user_module_strict(file_path, name="custom_tools")
80
+ logger.debug(f"Imported tools from {file_path}")
81
+ return custom_tools_module
82
+ except LocalToolsDisabled as e:
83
+ logger.warning(f"Tools loading disabled: {e}")
84
+ raise ValueError("Local tools loading disabled. Set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable.")
85
+ except FileNotFoundError as e:
86
+ logger.warning(f"Tools file not found: {e}")
87
+ raise ValueError(f"Tools file not found: {file_path}")
88
+ except Exception as e:
89
+ logger.error("Failed to import tools from %s", file_path, exc_info=True)
90
+ raise ValueError(f"Failed to import tools from {file_path}") from e
77
91
 
78
92
  try:
79
93
  # Security: Require explicit opt-in for local tools loading
@@ -116,7 +116,6 @@ class AsyncAgentScheduler:
116
116
 
117
117
  self.is_running = False
118
118
  self._task: Optional[asyncio.Task] = None
119
- self._stop_event = asyncio.Event()
120
119
  self._executor = AsyncPraisonAgentExecutor(agent)
121
120
  self._execution_count = 0
122
121
  self._success_count = 0
@@ -124,6 +123,7 @@ class AsyncAgentScheduler:
124
123
 
125
124
  # Sync lock for async primitives creation and bound loop tracking
126
125
  self._primitives_lock = threading.Lock()
126
+ self._stop_event: Optional[asyncio.Event] = None
127
127
  self._cancel_event: Optional[asyncio.Event] = None
128
128
  self._stats_lock: Optional[asyncio.Lock] = None
129
129
  self._bound_loop: Optional[asyncio.AbstractEventLoop] = None
@@ -138,6 +138,7 @@ class AsyncAgentScheduler:
138
138
 
139
139
  with self._primitives_lock:
140
140
  if self._bound_loop is not loop:
141
+ self._stop_event = asyncio.Event()
141
142
  self._cancel_event = asyncio.Event()
142
143
  self._stats_lock = asyncio.Lock()
143
144
  self._bound_loop = loop
@@ -167,6 +168,7 @@ class AsyncAgentScheduler:
167
168
  try:
168
169
  interval = ScheduleParser.parse(schedule_expr)
169
170
  self.is_running = True
171
+ self._ensure_async_primitives() # NEW — bind to the loop start() runs on
170
172
  self._stop_event.clear()
171
173
 
172
174
  logger.info(f"Starting async agent scheduler: {getattr(self.agent, 'name', 'Agent')}")
@@ -208,19 +210,22 @@ class AsyncAgentScheduler:
208
210
  logger.info("Async scheduler is not running")
209
211
  return True
210
212
 
213
+ logger.info("Stopping async agent scheduler...")
214
+
215
+ # _stop_event is guaranteed non-None after a successful start()
216
+ if self._stop_event is None:
217
+ logger.warning("stop() called before start(); nothing to stop.")
218
+ self.is_running = False
219
+ return True
220
+
211
221
  # Ensure we're on the same loop that was bound during start()
212
- try:
213
- current_loop = asyncio.get_running_loop()
214
- if self._bound_loop is not None and current_loop is not self._bound_loop:
215
- raise RuntimeError(
216
- "stop() must be called from the same event loop as start(). "
217
- f"Expected: {self._bound_loop}, got: {current_loop}"
218
- )
219
- except RuntimeError:
220
- # No running loop - this is fine if scheduler was never started
221
- pass
222
+ current_loop = asyncio.get_running_loop()
223
+ if self._bound_loop is not None and current_loop is not self._bound_loop:
224
+ raise RuntimeError(
225
+ "stop() must be called from the same event loop as start(). "
226
+ f"Expected: {self._bound_loop}, got: {current_loop}"
227
+ )
222
228
 
223
- logger.info("Stopping async agent scheduler...")
224
229
  self._stop_event.set()
225
230
 
226
231
  try:
@@ -266,6 +271,7 @@ class AsyncAgentScheduler:
266
271
  async def _run_schedule(self, interval: int, max_retries: int):
267
272
  """Internal method to run scheduled agent executions."""
268
273
  try:
274
+ self._ensure_async_primitives()
269
275
  while not self._stop_event.is_set():
270
276
  logger.info(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Starting async scheduled agent execution")
271
277
 
@@ -649,42 +649,28 @@ class AutoGenerator(BaseAutoGenerator):
649
649
  # Initialize base class first (handles config_list and client)
650
650
  super().__init__(config_list=config_list)
651
651
 
652
- # Validate framework availability and show framework-specific messages
653
- if framework == "crewai" and not _check_crewai_available():
654
- raise ImportError("""
655
- CrewAI is not installed. Please install with:
656
- pip install "praisonai[crewai]"
657
- """)
658
- elif framework == "autogen" and not (_check_autogen_available() or _check_autogen_v4_available()):
659
- raise ImportError("""
660
- AutoGen is not installed. Please install with:
661
- pip install "praisonai[autogen]" for v0.2
662
- pip install "praisonai[autogen-v4]" for v0.4
663
- """)
664
- elif framework == "praisonai" and not _check_praisonai_available():
665
- raise ImportError("""
666
- Praisonai is not installed. Please install with:
667
- pip install praisonaiagents
668
- """)
669
- elif framework == "ag2" and not _check_ag2_available():
670
- raise ImportError("""
671
- AG2 is not installed. Please install with:
672
- pip install "praisonai[ag2]"
673
- """)
674
-
675
- # Only show tools message if using a framework and tools are needed
676
- if (framework in ["crewai", "autogen"]) and not _check_praisonai_tools_available():
677
- if framework == "autogen":
678
- logger.warning("""
679
- Tools are not available for autogen. To use tools, install:
680
- pip install "praisonai[autogen]" for v0.2
681
- pip install "praisonai[autogen-v4]" for v0.4
682
- """)
683
- else:
684
- logger.warning(f"""
685
- Tools are not available for {framework}. To use tools, install:
686
- pip install "praisonai[{framework}]"
687
- """)
652
+ # Validate framework availability using adapter registry
653
+ from .framework_adapters.registry import FrameworkAdapterRegistry
654
+
655
+ registry = FrameworkAdapterRegistry.get_instance()
656
+ try:
657
+ adapter = registry.create(framework)
658
+ except ValueError as e:
659
+ raise ImportError(
660
+ f"Unknown framework '{framework}'. Available frameworks: "
661
+ f"{', '.join(registry.list_registered())}"
662
+ ) from e
663
+
664
+ # Use safe fallbacks for new adapter attributes
665
+ install_hint = getattr(adapter, "install_hint", f"pip install {framework}")
666
+ requires_tools_extra = bool(getattr(adapter, "requires_tools_extra", False))
667
+
668
+ if not adapter.is_available():
669
+ raise ImportError(f"{adapter.name} is not installed. Please install with:\n {install_hint}")
670
+
671
+ # Check tools availability if required by this framework
672
+ if requires_tools_extra and not _check_praisonai_tools_available():
673
+ logger.warning(f"Tools are not available for {framework}. To use tools, install:\n {install_hint}")
688
674
 
689
675
  self.topic = topic
690
676
  self.agent_file = agent_file
@@ -233,19 +233,14 @@ async function decide(d) {{
233
233
  )
234
234
 
235
235
  def request_approval_sync(self, request) -> Any:
236
- """Synchronous wrapper — runs async method in a new event loop."""
237
- try:
238
- loop = asyncio.get_running_loop()
239
- except RuntimeError:
240
- loop = None
241
-
242
- if loop and loop.is_running():
243
- import concurrent.futures
244
- with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool:
245
- future = pool.submit(asyncio.run, self.request_approval(request))
246
- return future.result(timeout=self._timeout + 10)
247
- else:
248
- return asyncio.run(self.request_approval(request))
236
+ """Synchronous wrapper — delegates to the shared async bridge."""
237
+ from .._async_bridge import run_sync
238
+ # run_sync raises RuntimeError if called from a running loop, so callers
239
+ # in async contexts get a clear error instead of a silent thread cold-start.
240
+ return run_sync(
241
+ self.request_approval(request),
242
+ timeout=self._timeout + 10,
243
+ )
249
244
 
250
245
  async def shutdown(self) -> None:
251
246
  """Stop the HTTP server gracefully."""
@@ -178,19 +178,14 @@ class WebhookApproval:
178
178
  )
179
179
 
180
180
  def request_approval_sync(self, request) -> Any:
181
- """Synchronous wrapper — runs async method in a new event loop."""
182
- try:
183
- loop = asyncio.get_running_loop()
184
- except RuntimeError:
185
- loop = None
186
-
187
- if loop and loop.is_running():
188
- import concurrent.futures
189
- with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool:
190
- future = pool.submit(asyncio.run, self.request_approval(request))
191
- return future.result(timeout=self._timeout + 10)
192
- else:
193
- return asyncio.run(self.request_approval(request))
181
+ """Synchronous wrapper — delegates to the shared async bridge."""
182
+ from .._async_bridge import run_sync
183
+ # run_sync raises RuntimeError if called from a running loop, so callers
184
+ # in async contexts get a clear error instead of a silent thread cold-start.
185
+ return run_sync(
186
+ self.request_approval(request),
187
+ timeout=self._timeout + 10,
188
+ )
194
189
 
195
190
  # ── Polling ─────────────────────────────────────────────────────────
196
191
 
@@ -294,8 +294,30 @@ class JobWorkflowExecutor:
294
294
  return {"ok": True, "output": result.stdout.strip()}
295
295
 
296
296
  def _exec_inline_python(self, code: str, step: Dict, flags: Dict) -> Dict:
297
- """Execute inline Python code in an isolated namespace."""
298
- _safe_builtins = {
297
+ """Execute Python code safely using AST validation.
298
+
299
+ Supports both expressions and limited statements for backward compatibility.
300
+ """
301
+ import ast
302
+
303
+ # Allowed AST node types for safe execution
304
+ _ALLOWED_NODES = (
305
+ # Expressions
306
+ ast.Expression, ast.BoolOp, ast.BinOp, ast.UnaryOp, ast.Compare,
307
+ ast.IfExp, ast.Constant, ast.Name, ast.Load, ast.Store, ast.Subscript,
308
+ ast.List, ast.Tuple, ast.Dict, ast.Set,
309
+ ast.And, ast.Or, ast.Not, ast.Eq, ast.NotEq, ast.Lt, ast.LtE,
310
+ ast.Gt, ast.GtE, ast.In, ast.NotIn, ast.Add, ast.Sub, ast.Mult,
311
+ ast.Div, ast.Mod, ast.FloorDiv, ast.USub, ast.UAdd,
312
+ # Calls and attribute access (security enforced via safe builtins whitelist)
313
+ ast.Call, ast.Attribute, ast.keyword, ast.Starred,
314
+ # Limited statements for backward compatibility
315
+ ast.Module, ast.Assign, ast.Import, ast.ImportFrom,
316
+ ast.alias,
317
+ )
318
+
319
+ # Safe builtins whitelist — no __import__, exec, eval, open, compile
320
+ _SAFE_BUILTINS = {
299
321
  "True": True, "False": False, "None": None,
300
322
  "int": int, "float": float, "str": str, "bool": bool,
301
323
  "list": list, "dict": dict, "tuple": tuple, "set": set,
@@ -305,20 +327,64 @@ class JobWorkflowExecutor:
305
327
  "min": min, "max": max, "sum": sum, "abs": abs, "round": round,
306
328
  "isinstance": isinstance, "type": type,
307
329
  "print": print, "repr": repr,
308
- "hasattr": hasattr, "getattr": getattr, "setattr": setattr,
330
+ "hasattr": hasattr, "getattr": getattr,
331
+ }
332
+
333
+ # Safe namespace with whitelisted environment variables only
334
+ safe_env = {
335
+ k: v for k, v in os.environ.items()
336
+ if k.startswith(('PRAISON', 'HOME', 'USER', 'PATH')) and
337
+ not k.upper().endswith(('KEY', 'SECRET', 'TOKEN', 'PASSWORD'))
309
338
  }
339
+
310
340
  namespace = {
311
341
  "flags": flags,
312
342
  "vars": {k: self._resolve_var_value(v) for k, v in self._vars.items()},
313
- "env": os.environ.copy(),
343
+ "env": safe_env, # Whitelisted env vars only
314
344
  "cwd": self._cwd,
315
- "__builtins__": _safe_builtins,
345
+ "__builtins__": _SAFE_BUILTINS,
316
346
  }
347
+
317
348
  try:
318
- exec(code, namespace)
319
- return {"ok": True, "output": namespace.get("result", "")}
349
+ # First try parsing as expression
350
+ try:
351
+ tree = ast.parse(code.strip(), mode="eval")
352
+ is_expression = True
353
+ except SyntaxError:
354
+ # Fall back to exec mode for statements
355
+ tree = ast.parse(code.strip(), mode="exec")
356
+ is_expression = False
357
+
358
+ # Validate all nodes are in allowlist
359
+ for node in ast.walk(tree):
360
+ if not isinstance(node, _ALLOWED_NODES):
361
+ return {"ok": False, "error": f"Disallowed code node: {type(node).__name__}. Only safe expressions and limited statements are allowed."}
362
+
363
+ # Additional safety checks for imports
364
+ if isinstance(node, (ast.Import, ast.ImportFrom)):
365
+ # Only allow standard library modules commonly used in workflows
366
+ allowed_modules = {'os', 'datetime', 'time', 'json', 'math', 're', 'collections', 'itertools'}
367
+ if isinstance(node, ast.Import):
368
+ for alias in node.names:
369
+ if alias.name.split('.')[0] not in allowed_modules:
370
+ return {"ok": False, "error": f"Import of '{alias.name}' not allowed. Only standard library modules are permitted."}
371
+ elif node.module and node.module.split('.')[0] not in allowed_modules:
372
+ return {"ok": False, "error": f"Import of '{node.module}' not allowed. Only standard library modules are permitted."}
373
+
374
+ # Execute within safe namespace
375
+ if is_expression:
376
+ result = eval(compile(tree, "<workflow>", "eval"), namespace)
377
+ return {"ok": True, "output": str(result)}
378
+ else:
379
+ exec(compile(tree, "<workflow>", "exec"), namespace)
380
+ # Return the 'result' variable if it was set (backward compatibility)
381
+ result = namespace.get("result", "")
382
+ return {"ok": True, "output": str(result)}
383
+
384
+ except SyntaxError as e:
385
+ return {"ok": False, "error": f"Syntax error: {e}"}
320
386
  except Exception as e:
321
- return {"ok": False, "error": str(e)}
387
+ return {"ok": False, "error": f"Evaluation error: {e}"}
322
388
 
323
389
  def _exec_action(self, action_name: str, step: Dict, flags: Dict) -> Dict:
324
390
  """