PraisonAI 4.6.145__tar.gz → 4.6.146__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 (644) hide show
  1. {praisonai-4.6.145 → praisonai-4.6.146}/PKG-INFO +4 -4
  2. {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/PKG-INFO +4 -4
  3. {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/SOURCES.txt +1 -0
  4. {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/requires.txt +3 -3
  5. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_entrypoint.py +30 -19
  6. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/agents_generator.py +93 -41
  7. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/agent_scheduler.py +25 -4
  8. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/direct_prompt.py +124 -72
  9. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/subcommand_handlers.py +10 -11
  10. praisonai-4.6.146/praisonai/framework_adapters/base.py +138 -0
  11. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/crewai_adapter.py +11 -2
  12. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/cli.py +48 -2
  13. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/server.py +73 -1
  14. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/transports/http_stream.py +120 -27
  15. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/observability/hooks.py +169 -31
  16. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/_base_scheduler.py +7 -0
  17. praisonai-4.6.146/praisonai/scheduler/_delivery.py +204 -0
  18. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/agent_scheduler.py +44 -3
  19. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/async_agent_scheduler.py +39 -1
  20. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/daemon_manager.py +8 -1
  21. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/yaml_loader.py +8 -2
  22. praisonai-4.6.146/praisonai/version.py +1 -0
  23. {praisonai-4.6.145 → praisonai-4.6.146}/pyproject.toml +3 -3
  24. praisonai-4.6.145/praisonai/framework_adapters/base.py +0 -66
  25. praisonai-4.6.145/praisonai/version.py +0 -1
  26. {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/dependency_links.txt +0 -0
  27. {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/entry_points.txt +0 -0
  28. {praisonai-4.6.145 → praisonai-4.6.146}/PraisonAI.egg-info/top_level.txt +0 -0
  29. {praisonai-4.6.145 → praisonai-4.6.146}/README.md +0 -0
  30. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/__init__.py +0 -0
  31. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/__main__.py +0 -0
  32. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_approval_spec.py +0 -0
  33. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_async_bridge.py +0 -0
  34. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_bootstrap.py +0 -0
  35. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/__init__.py +0 -0
  36. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/api_md.py +0 -0
  37. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/__init__.py +0 -0
  38. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/docs_extractor.py +0 -0
  39. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/docs_generator.py +0 -0
  40. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/generator.py +0 -0
  41. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  42. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/python_extractor.py +0 -0
  43. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  44. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/rust_extractor.py +0 -0
  45. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  46. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  47. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  48. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_framework_availability.py +0 -0
  49. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_lazy_cache.py +0 -0
  50. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_logging.py +0 -0
  51. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_registry.py +0 -0
  52. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/_safe_loader.py +0 -0
  53. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/acp/__init__.py +0 -0
  54. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/acp/config.py +0 -0
  55. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/acp/safe_edit.py +0 -0
  56. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/acp/server.py +0 -0
  57. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/acp/session.py +0 -0
  58. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/adapters/__init__.py +0 -0
  59. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/adapters/readers.py +0 -0
  60. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/adapters/rerankers.py +0 -0
  61. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/adapters/retrievers.py +0 -0
  62. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/adapters/vector_stores.py +0 -0
  63. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/agent.py +0 -0
  64. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/agent_scheduler.py +0 -0
  65. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/api/agent_invoke.py +0 -0
  66. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/api/call.py +0 -0
  67. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/app/__init__.py +0 -0
  68. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/app/agentos.py +0 -0
  69. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/async_agent_scheduler.py +0 -0
  70. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/audit/__init__.py +0 -0
  71. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/audit/agent_centric.py +0 -0
  72. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/auto.py +0 -0
  73. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/bots/__init__.py +0 -0
  74. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/__init__.py +0 -0
  75. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/agent.py +0 -0
  76. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/benchmark.py +0 -0
  77. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/cdp_agent.py +0 -0
  78. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/cdp_utils.py +0 -0
  79. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/cli.py +0 -0
  80. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/diagnostics.py +0 -0
  81. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/launcher.py +0 -0
  82. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/playwright_agent.py +0 -0
  83. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/profiling.py +0 -0
  84. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/protocol.py +0 -0
  85. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/report.py +0 -0
  86. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/server.py +0 -0
  87. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/sessions.py +0 -0
  88. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/browser/video.py +0 -0
  89. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/__init__.py +0 -0
  90. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/a2a.py +0 -0
  91. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/assistants.py +0 -0
  92. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/audio.py +0 -0
  93. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/batches.py +0 -0
  94. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/completions.py +0 -0
  95. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/container_files.py +0 -0
  96. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/containers.py +0 -0
  97. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/embeddings.py +0 -0
  98. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/files.py +0 -0
  99. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/fine_tuning.py +0 -0
  100. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/guardrails.py +0 -0
  101. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/images.py +0 -0
  102. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/mcp.py +0 -0
  103. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/messages.py +0 -0
  104. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/moderations.py +0 -0
  105. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/ocr.py +0 -0
  106. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/passthrough.py +0 -0
  107. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/rag.py +0 -0
  108. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/realtime.py +0 -0
  109. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/rerank.py +0 -0
  110. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/responses.py +0 -0
  111. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/search.py +0 -0
  112. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/skills.py +0 -0
  113. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/vector_store_files.py +0 -0
  114. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/vector_stores.py +0 -0
  115. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/capabilities/videos.py +0 -0
  116. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/claw/__init__.py +0 -0
  117. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/__init__.py +0 -0
  118. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/_paths.py +0 -0
  119. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/_shim.py +0 -0
  120. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/_warnings.py +0 -0
  121. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/app.py +0 -0
  122. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/approval_backend.py +0 -0
  123. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/branding.py +0 -0
  124. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/__init__.py +0 -0
  125. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/acp.py +0 -0
  126. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/agent.py +0 -0
  127. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/agents.py +0 -0
  128. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/app.py +0 -0
  129. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/attach.py +0 -0
  130. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/audit.py +0 -0
  131. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/auth.py +0 -0
  132. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/batch.py +0 -0
  133. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/benchmark.py +0 -0
  134. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/bot.py +0 -0
  135. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/browser.py +0 -0
  136. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/call.py +0 -0
  137. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/chat.py +0 -0
  138. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/checkpoint.py +0 -0
  139. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/claw.py +0 -0
  140. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/code.py +0 -0
  141. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/command.py +0 -0
  142. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/commit.py +0 -0
  143. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/completion.py +0 -0
  144. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/config.py +0 -0
  145. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/context.py +0 -0
  146. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/daemon.py +0 -0
  147. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/dashboard.py +0 -0
  148. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/debug.py +0 -0
  149. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/deploy.py +0 -0
  150. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/diag.py +0 -0
  151. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/docs.py +0 -0
  152. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/doctor.py +0 -0
  153. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/endpoints.py +0 -0
  154. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/environment.py +0 -0
  155. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/eval.py +0 -0
  156. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/examples.py +0 -0
  157. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/flow.py +0 -0
  158. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/gateway.py +0 -0
  159. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/github.py +0 -0
  160. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/hooks.py +0 -0
  161. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/identity.py +0 -0
  162. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/init.py +0 -0
  163. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/kanban.py +0 -0
  164. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/knowledge.py +0 -0
  165. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/langextract.py +0 -0
  166. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/langfuse.py +0 -0
  167. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/loop.py +0 -0
  168. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/lsp.py +0 -0
  169. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/managed.py +0 -0
  170. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/mcp.py +0 -0
  171. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/memory.py +0 -0
  172. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/mint_link.py +0 -0
  173. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/models.py +0 -0
  174. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/n8n.py +0 -0
  175. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/obs.py +0 -0
  176. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/onboard.py +0 -0
  177. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/package.py +0 -0
  178. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/pairing.py +0 -0
  179. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/paths.py +0 -0
  180. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/permissions.py +0 -0
  181. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/plugins.py +0 -0
  182. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/port.py +0 -0
  183. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/profile.py +0 -0
  184. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/publish.py +0 -0
  185. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/rag.py +0 -0
  186. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/realtime.py +0 -0
  187. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/recipe.py +0 -0
  188. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/registry.py +0 -0
  189. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/replay.py +0 -0
  190. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/research.py +0 -0
  191. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/retrieval.py +0 -0
  192. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/rules.py +0 -0
  193. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/run.py +0 -0
  194. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/sandbox.py +0 -0
  195. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/schedule.py +0 -0
  196. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/serve.py +0 -0
  197. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/session.py +0 -0
  198. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/setup.py +0 -0
  199. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/skills.py +0 -0
  200. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/standardise.py +0 -0
  201. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/templates.py +0 -0
  202. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/test.py +0 -0
  203. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/todo.py +0 -0
  204. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/tools.py +0 -0
  205. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/traces.py +0 -0
  206. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/tracker.py +0 -0
  207. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/train.py +0 -0
  208. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/ui.py +0 -0
  209. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/up.py +0 -0
  210. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/validate.py +0 -0
  211. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/version.py +0 -0
  212. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/commands/workflow.py +0 -0
  213. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/config_loader.py +0 -0
  214. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/configuration/__init__.py +0 -0
  215. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/configuration/config.schema.json +0 -0
  216. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/execution/__init__.py +0 -0
  217. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/fallback_schema.py +0 -0
  218. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/__init__.py +0 -0
  219. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/acp.py +0 -0
  220. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/agent_tools.py +0 -0
  221. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/approval.py +0 -0
  222. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/background.py +0 -0
  223. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/bots_cli.py +0 -0
  224. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/deploy.py +0 -0
  225. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/endpoints.py +0 -0
  226. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/eval.py +0 -0
  227. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/gateway.py +0 -0
  228. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/ollama.py +0 -0
  229. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/onboard.py +0 -0
  230. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/persistence.py +0 -0
  231. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/recipe.py +0 -0
  232. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/recipe_optimizer.py +0 -0
  233. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/registry.py +0 -0
  234. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/sandbox_cli.py +0 -0
  235. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/serve.py +0 -0
  236. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/templates.py +0 -0
  237. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/tools.py +0 -0
  238. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/tui/__init__.py +0 -0
  239. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/tui/app.py +0 -0
  240. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/features/workflow.py +0 -0
  241. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/interactive/__init__.py +0 -0
  242. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/interactive/async_tui.py +0 -0
  243. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/interactive/core.py +0 -0
  244. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/langfuse_client.py +0 -0
  245. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/__init__.py +0 -0
  246. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/dispatch/__init__.py +0 -0
  247. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/dispatch/argparse_builder.py +0 -0
  248. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/dispatch/legacy_dispatch.py +0 -0
  249. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/framework_run.py +0 -0
  250. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/inbuilt_tools.py +0 -0
  251. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/interactive_legacy.py +0 -0
  252. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/legacy/workflow_commands.py +0 -0
  253. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/main.py +0 -0
  254. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/output/__init__.py +0 -0
  255. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/schedule_cli.py +0 -0
  256. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/schema_provider.py +0 -0
  257. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/session/__init__.py +0 -0
  258. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/state/__init__.py +0 -0
  259. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/ui/__init__.py +0 -0
  260. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/unified_schema.py +0 -0
  261. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli/utils/__init__.py +0 -0
  262. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/cli_backends/__init__.py +0 -0
  263. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/__init__.py +0 -0
  264. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/agent_tools.py +0 -0
  265. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/diff/__init__.py +0 -0
  266. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/diff/diff_strategy.py +0 -0
  267. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/__init__.py +0 -0
  268. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/apply_diff.py +0 -0
  269. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/execute_command.py +0 -0
  270. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/list_files.py +0 -0
  271. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/read_file.py +0 -0
  272. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/search_replace.py +0 -0
  273. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/tools/write_file.py +0 -0
  274. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/utils/__init__.py +0 -0
  275. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/utils/file_utils.py +0 -0
  276. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/utils/ignore_utils.py +0 -0
  277. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/code/utils/text_utils.py +0 -0
  278. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/config/__init__.py +0 -0
  279. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/config/schema.py +0 -0
  280. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/config/validator.py +0 -0
  281. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/__init__.py +0 -0
  282. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/_storage_path.py +0 -0
  283. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/artifact_store.py +0 -0
  284. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/config.py +0 -0
  285. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/history_store.py +0 -0
  286. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/queue.py +0 -0
  287. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/setup.py +0 -0
  288. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/context/terminal_logger.py +0 -0
  289. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/daemon/__init__.py +0 -0
  290. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/db/__init__.py +0 -0
  291. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/db/adapter.py +0 -0
  292. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/__init__.py +0 -0
  293. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/api.py +0 -0
  294. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/docker.py +0 -0
  295. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/doctor.py +0 -0
  296. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/main.py +0 -0
  297. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/models.py +0 -0
  298. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/__init__.py +0 -0
  299. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/_registry.py +0 -0
  300. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/aws.py +0 -0
  301. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/azure.py +0 -0
  302. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/base.py +0 -0
  303. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/providers/gcp.py +0 -0
  304. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/deploy/schema.py +0 -0
  305. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/__init__.py +0 -0
  306. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/a2u_server.py +0 -0
  307. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/discovery.py +0 -0
  308. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/__init__.py +0 -0
  309. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/a2a.py +0 -0
  310. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/a2u.py +0 -0
  311. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/agents_api.py +0 -0
  312. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/base.py +0 -0
  313. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/mcp.py +0 -0
  314. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/openai_compat.py +0 -0
  315. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/recipe.py +0 -0
  316. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  317. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/registry.py +0 -0
  318. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/endpoints/server.py +0 -0
  319. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/__init__.py +0 -0
  320. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/client.py +0 -0
  321. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  322. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  323. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/components/__init__.py +0 -0
  324. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/converter.py +0 -0
  325. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/flow/helpers.py +0 -0
  326. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/__init__.py +0 -0
  327. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/_config_builder.py +0 -0
  328. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  329. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  330. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/registry.py +0 -0
  331. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/validators.py +0 -0
  332. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/framework_adapters/workflow_framework.py +0 -0
  333. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/gateway/__init__.py +0 -0
  334. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/inbuilt_tools/__init__.py +0 -0
  335. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  336. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/inc/__init__.py +0 -0
  337. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/inc/config.py +0 -0
  338. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/inc/models.py +0 -0
  339. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/__init__.py +0 -0
  340. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/__init__.py +0 -0
  341. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  342. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/hooks_query.py +0 -0
  343. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  344. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/schedules_runner.py +0 -0
  345. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/usage_bridge.py +0 -0
  346. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/bridges/workflows_service.py +0 -0
  347. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/context_files.py +0 -0
  348. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/gateway_host.py +0 -0
  349. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/host_app.py +0 -0
  350. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/pages/__init__.py +0 -0
  351. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/pages/bot_health.py +0 -0
  352. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integration/pages/workflow_runs.py +0 -0
  353. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/__init__.py +0 -0
  354. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/_cli_loaders.py +0 -0
  355. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/_session_info.py +0 -0
  356. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/_tool_aliases.py +0 -0
  357. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/_unified_registry.py +0 -0
  358. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/backend_registry.py +0 -0
  359. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/base.py +0 -0
  360. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/claude_code.py +0 -0
  361. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/codex_cli.py +0 -0
  362. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/__init__.py +0 -0
  363. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/daytona.py +0 -0
  364. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/docker.py +0 -0
  365. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/e2b.py +0 -0
  366. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/flyio.py +0 -0
  367. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/local.py +0 -0
  368. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/compute/modal_compute.py +0 -0
  369. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/cursor_cli.py +0 -0
  370. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/db_session_adapter.py +0 -0
  371. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/gemini_cli.py +0 -0
  372. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/hosted_agent.py +0 -0
  373. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/local_agent.py +0 -0
  374. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/managed_agents.py +0 -0
  375. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/managed_local.py +0 -0
  376. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/registry.py +0 -0
  377. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/integrations/sandboxed_agent.py +0 -0
  378. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/__init__.py +0 -0
  379. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/executor.py +0 -0
  380. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/models.py +0 -0
  381. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/path_validation.py +0 -0
  382. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/router.py +0 -0
  383. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/server.py +0 -0
  384. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/jobs/store.py +0 -0
  385. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/kanban/__init__.py +0 -0
  386. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/__init__.py +0 -0
  387. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/catalogue.py +0 -0
  388. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/config.py +0 -0
  389. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/credentials.py +0 -0
  390. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/env.py +0 -0
  391. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/gateways.py +0 -0
  392. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/llm/registry.py +0 -0
  393. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/__init__.py +0 -0
  394. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/__init__.py +0 -0
  395. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/agents.py +0 -0
  396. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  397. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  398. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  399. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  400. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/memory.py +0 -0
  401. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/prompts.py +0 -0
  402. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/resources.py +0 -0
  403. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  404. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/auth/__init__.py +0 -0
  405. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/auth/api_key.py +0 -0
  406. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/auth/oauth.py +0 -0
  407. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/auth/oidc.py +0 -0
  408. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/auth/scopes.py +0 -0
  409. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/elicitation.py +0 -0
  410. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/icons.py +0 -0
  411. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/recipe_adapter.py +0 -0
  412. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/recipe_cli.py +0 -0
  413. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/registry.py +0 -0
  414. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/sampling.py +0 -0
  415. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/tasks.py +0 -0
  416. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/tool_index.py +0 -0
  417. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/transports/__init__.py +0 -0
  418. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/mcp_server/transports/stdio.py +0 -0
  419. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/n8n/__init__.py +0 -0
  420. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/n8n/client.py +0 -0
  421. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/n8n/converter.py +0 -0
  422. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/n8n/preview.py +0 -0
  423. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/n8n/reverse_converter.py +0 -0
  424. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/observability/__init__.py +0 -0
  425. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/observability/langextract.py +0 -0
  426. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/observability/langfuse.py +0 -0
  427. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/__init__.py +0 -0
  428. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/_valkey_client.py +0 -0
  429. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/config.py +0 -0
  430. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/__init__.py +0 -0
  431. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/_sql_base.py +0 -0
  432. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
  433. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/async_mysql.py +0 -0
  434. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/async_postgres.py +0 -0
  435. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  436. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/base.py +0 -0
  437. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/json_store.py +0 -0
  438. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/mysql.py +0 -0
  439. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/postgres.py +0 -0
  440. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/singlestore.py +0 -0
  441. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/sqlite.py +0 -0
  442. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/supabase.py +0 -0
  443. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/surrealdb.py +0 -0
  444. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  445. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/conversation/turso.py +0 -0
  446. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/factory.py +0 -0
  447. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/hooks/__init__.py +0 -0
  448. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  449. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/__init__.py +0 -0
  450. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/base.py +0 -0
  451. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/cassandra.py +0 -0
  452. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/chroma.py +0 -0
  453. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  454. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  455. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/couchbase.py +0 -0
  456. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/lancedb.py +0 -0
  457. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  458. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  459. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  460. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/milvus.py +0 -0
  461. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  462. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/pgvector.py +0 -0
  463. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/pinecone.py +0 -0
  464. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/qdrant.py +0 -0
  465. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  466. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  467. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  468. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  469. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  470. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/knowledge/weaviate.py +0 -0
  471. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/migrations/__init__.py +0 -0
  472. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/migrations/manager.py +0 -0
  473. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/orchestrator.py +0 -0
  474. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/registry.py +0 -0
  475. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/__init__.py +0 -0
  476. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/async_mongodb.py +0 -0
  477. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/base.py +0 -0
  478. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/dynamodb.py +0 -0
  479. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/firestore.py +0 -0
  480. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/gcs.py +0 -0
  481. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/memory.py +0 -0
  482. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/mongodb.py +0 -0
  483. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/redis.py +0 -0
  484. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/upstash.py +0 -0
  485. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/state/valkey.py +0 -0
  486. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/tests/__init__.py +0 -0
  487. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/tests/test_all_backends.py +0 -0
  488. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/tests/test_registry_lazy.py +0 -0
  489. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  490. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/profiler.py +0 -0
  491. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/push/__init__.py +0 -0
  492. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/push/client.py +0 -0
  493. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/push/transports.py +0 -0
  494. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/__init__.py +0 -0
  495. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/bridge.py +0 -0
  496. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/core.py +0 -0
  497. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/exceptions.py +0 -0
  498. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/history.py +0 -0
  499. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/models.py +0 -0
  500. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/operations.py +0 -0
  501. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/policy.py +0 -0
  502. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/registry.py +0 -0
  503. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/runtime.py +0 -0
  504. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/security.py +0 -0
  505. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/serve.py +0 -0
  506. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/recipe/server.py +0 -0
  507. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/__init__.py +0 -0
  508. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/analyzer.py +0 -0
  509. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/applier.py +0 -0
  510. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/judge.py +0 -0
  511. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/plan.py +0 -0
  512. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/player.py +0 -0
  513. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/reader.py +0 -0
  514. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/storage.py +0 -0
  515. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/replay/writer.py +0 -0
  516. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/runtime/__init__.py +0 -0
  517. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/runtime/__main__.py +0 -0
  518. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/__init__.py +0 -0
  519. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/_compat.py +0 -0
  520. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/_registry.py +0 -0
  521. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/_shell.py +0 -0
  522. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/daytona.py +0 -0
  523. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/docker.py +0 -0
  524. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/e2b.py +0 -0
  525. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/modal.py +0 -0
  526. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/sandlock.py +0 -0
  527. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/ssh.py +0 -0
  528. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/sandbox/subprocess.py +0 -0
  529. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/__init__.py +0 -0
  530. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/_dispatch.py +0 -0
  531. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/base.py +0 -0
  532. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/blueprint_catalogue.py +0 -0
  533. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/condition_gate.py +0 -0
  534. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/deployment.py +0 -0
  535. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/executor.py +0 -0
  536. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/run_policy.py +0 -0
  537. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/shared.py +0 -0
  538. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/state_manager.py +0 -0
  539. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/scheduler/suggestion_engine.py +0 -0
  540. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/security/__init__.py +0 -0
  541. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/security/audit.py +0 -0
  542. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/security/injection.py +0 -0
  543. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/security/protected.py +0 -0
  544. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/setup/__init__.py +0 -0
  545. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/setup/build.py +0 -0
  546. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/setup/post_install.py +0 -0
  547. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/setup/setup_conda_env.py +0 -0
  548. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/setup.py +0 -0
  549. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/__init__.py +0 -0
  550. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/ai_generator.py +0 -0
  551. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/config.py +0 -0
  552. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/dedupe.py +0 -0
  553. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/discovery.py +0 -0
  554. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/drift.py +0 -0
  555. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/engine.py +0 -0
  556. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/enhanced_templates.py +0 -0
  557. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/example_verifier.py +0 -0
  558. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/manifest.py +0 -0
  559. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/models.py +0 -0
  560. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/reports.py +0 -0
  561. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/templates.py +0 -0
  562. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/undo_redo.py +0 -0
  563. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/standardise/validator.py +0 -0
  564. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/__init__.py +0 -0
  565. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/dynamodb_adapter.py +0 -0
  566. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/mongodb_adapter.py +0 -0
  567. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/postgresql_adapter.py +0 -0
  568. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/redis_adapter.py +0 -0
  569. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/storage/valkey_adapter.py +0 -0
  570. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/__init__.py +0 -0
  571. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/batch_source.py +0 -0
  572. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/cli_docs_source.py +0 -0
  573. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/discovery.py +0 -0
  574. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/docs_source.py +0 -0
  575. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/examples_source.py +0 -0
  576. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/executor.py +0 -0
  577. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/models.py +0 -0
  578. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/report_viewer.py +0 -0
  579. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/reporter.py +0 -0
  580. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/suite_runner/runner.py +0 -0
  581. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/__init__.py +0 -0
  582. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/cache.py +0 -0
  583. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/dependency_checker.py +0 -0
  584. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/discovery.py +0 -0
  585. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/loader.py +0 -0
  586. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/registry.py +0 -0
  587. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/resolver.py +0 -0
  588. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/security.py +0 -0
  589. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/tool_override.py +0 -0
  590. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/templates/tools_doctor.py +0 -0
  591. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tool_registry.py +0 -0
  592. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tool_resolver.py +0 -0
  593. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/__init__.py +0 -0
  594. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/audio.py +0 -0
  595. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/glob_tool.py +0 -0
  596. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/grep_tool.py +0 -0
  597. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/kanban_tools.py +0 -0
  598. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/multiedit.py +0 -0
  599. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/tools/skill_manage.py +0 -0
  600. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/__init__.py +0 -0
  601. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/_ollama.py +0 -0
  602. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/__init__.py +0 -0
  603. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/grader.py +0 -0
  604. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/hook.py +0 -0
  605. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/models.py +0 -0
  606. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/orchestrator.py +0 -0
  607. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/agents/storage.py +0 -0
  608. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/llm/__init__.py +0 -0
  609. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train/llm/trainer.py +0 -0
  610. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train.py +0 -0
  611. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/train_vision.py +0 -0
  612. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/_aiui_datastore.py +0 -0
  613. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/_external_agents.py +0 -0
  614. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/callbacks.py +0 -0
  615. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/components/aicoder.py +0 -0
  616. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/context.py +0 -0
  617. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui/database_config.py +0 -0
  618. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_agents/__init__.py +0 -0
  619. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_agents/default_app.py +0 -0
  620. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_bot/__init__.py +0 -0
  621. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_bot/default_app.py +0 -0
  622. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_chat/__init__.py +0 -0
  623. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_chat/default_app.py +0 -0
  624. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_dashboard/default_app.py +0 -0
  625. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_realtime/__init__.py +0 -0
  626. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/ui_realtime/default_app.py +0 -0
  627. {praisonai-4.6.145 → praisonai-4.6.146}/praisonai/upload_vision.py +0 -0
  628. {praisonai-4.6.145 → praisonai-4.6.146}/setup.cfg +0 -0
  629. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test.py +0 -0
  630. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_agents_playbook.py +0 -0
  631. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_approval_system.py +0 -0
  632. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_basic.py +0 -0
  633. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_cli_features.py +0 -0
  634. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_custom_tools_fix.py +0 -0
  635. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_double_api_fix.py +0 -0
  636. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_n8n_agent_invoke.py +0 -0
  637. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_n8n_cli_feature.py +0 -0
  638. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_n8n_integration.py +0 -0
  639. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_phase2_refactor.py +0 -0
  640. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_recipe.py +0 -0
  641. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_registry.py +0 -0
  642. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_runner.py +0 -0
  643. {praisonai-4.6.145 → praisonai-4.6.146}/tests/test_sandboxed_agent_compatibility.py +0 -0
  644. {praisonai-4.6.145 → praisonai-4.6.146}/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.145
3
+ Version: 4.6.146
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,9 +11,9 @@ 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.148
15
- Requires-Dist: praisonai-code>=0.0.44
16
- Requires-Dist: praisonai-bot>=0.0.29
14
+ Requires-Dist: praisonaiagents>=1.6.149
15
+ Requires-Dist: praisonai-code>=0.0.45
16
+ Requires-Dist: praisonai-bot>=0.0.30
17
17
  Requires-Dist: python-dotenv>=0.19.0
18
18
  Requires-Dist: litellm<2,>=1.83.14
19
19
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.145
3
+ Version: 4.6.146
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,9 +11,9 @@ 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.148
15
- Requires-Dist: praisonai-code>=0.0.44
16
- Requires-Dist: praisonai-bot>=0.0.29
14
+ Requires-Dist: praisonaiagents>=1.6.149
15
+ Requires-Dist: praisonai-code>=0.0.45
16
+ Requires-Dist: praisonai-bot>=0.0.30
17
17
  Requires-Dist: python-dotenv>=0.19.0
18
18
  Requires-Dist: litellm<2,>=1.83.14
19
19
  Requires-Dist: PyYAML>=6.0
@@ -525,6 +525,7 @@ praisonai/sandbox/ssh.py
525
525
  praisonai/sandbox/subprocess.py
526
526
  praisonai/scheduler/__init__.py
527
527
  praisonai/scheduler/_base_scheduler.py
528
+ praisonai/scheduler/_delivery.py
528
529
  praisonai/scheduler/_dispatch.py
529
530
  praisonai/scheduler/agent_scheduler.py
530
531
  praisonai/scheduler/async_agent_scheduler.py
@@ -1,9 +1,9 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.6.148
5
- praisonai-code>=0.0.44
6
- praisonai-bot>=0.0.29
4
+ praisonaiagents>=1.6.149
5
+ praisonai-code>=0.0.45
6
+ praisonai-bot>=0.0.30
7
7
  python-dotenv>=0.19.0
8
8
  litellm<2,>=1.83.14
9
9
  PyYAML>=6.0
@@ -14,14 +14,14 @@ def _build_config_list() -> list[dict[str, Any]]:
14
14
  return build_config_list()
15
15
 
16
16
 
17
- def run(agent_file: str,
18
- framework: str | None = None,
19
- *,
20
- tools: list | None = None,
21
- agent_yaml: str | None = None,
22
- cli_config: dict | None = None) -> str:
23
- """One-line Python entry point. Equivalent to `praisonai <agent_file>`."""
24
- from .agents_generator import AgentsGenerator
17
+ def _resolve_run_inputs(framework: str | None) -> tuple[str, list[dict[str, Any]]]:
18
+ """Single source of truth for wrapper entry-point resolution.
19
+
20
+ Resolves the framework (default selection or explicit validation) and builds
21
+ the LLM config list. This performs synchronous work — including credential /
22
+ config file I/O via ``_build_config_list`` so async callers must invoke it
23
+ off the event loop (see ``arun``).
24
+ """
25
25
  from .framework_adapters.registry import get_default_registry
26
26
 
27
27
  if framework is None:
@@ -33,10 +33,24 @@ def run(agent_file: str,
33
33
  from .framework_adapters.validators import assert_framework_available
34
34
  assert_framework_available(framework)
35
35
 
36
+ return framework, _build_config_list()
37
+
38
+
39
+ def run(agent_file: str,
40
+ framework: str | None = None,
41
+ *,
42
+ tools: list | None = None,
43
+ agent_yaml: str | None = None,
44
+ cli_config: dict | None = None) -> str:
45
+ """One-line Python entry point. Equivalent to `praisonai <agent_file>`."""
46
+ from .agents_generator import AgentsGenerator
47
+
48
+ framework, config_list = _resolve_run_inputs(framework)
49
+
36
50
  gen = AgentsGenerator(
37
51
  agent_file=agent_file,
38
52
  framework=framework,
39
- config_list=_build_config_list(),
53
+ config_list=config_list,
40
54
  tools=tools,
41
55
  agent_yaml=agent_yaml,
42
56
  cli_config=cli_config,
@@ -51,22 +65,19 @@ async def arun(agent_file: str,
51
65
  agent_yaml: str | None = None,
52
66
  cli_config: dict | None = None) -> str:
53
67
  """Async equivalent of `run()` using native async framework adapters."""
68
+ import asyncio
69
+
54
70
  from .agents_generator import AgentsGenerator
55
- from .framework_adapters.registry import get_default_registry
56
71
 
57
- if framework is None:
58
- # Single source of truth for default selection: the registry, which
59
- # honours entry-point plugins as well as the built-in priority order.
60
- framework = get_default_registry().pick_default()
61
- else:
62
- # Validate explicit framework like CLI does
63
- from .framework_adapters.validators import assert_framework_available
64
- assert_framework_available(framework)
72
+ # Resolve framework + build config_list off the caller's event loop so the
73
+ # synchronous credential/config-file I/O does not block it. This is the
74
+ # reason arun exists: a FastAPI handler awaiting arun must not stall the loop.
75
+ framework, config_list = await asyncio.to_thread(_resolve_run_inputs, framework)
65
76
 
66
77
  gen = AgentsGenerator(
67
78
  agent_file=agent_file,
68
79
  framework=framework,
69
- config_list=_build_config_list(),
80
+ config_list=config_list,
70
81
  tools=tools,
71
82
  agent_yaml=agent_yaml,
72
83
  cli_config=cli_config,
@@ -182,6 +182,26 @@ def _resolve_tool_timeout_workers():
182
182
  return workers
183
183
 
184
184
 
185
+ def _looks_like_framework_tool(tool) -> bool:
186
+ """Whether ``tool`` is a framework tool object carrying a typed schema.
187
+
188
+ CrewAI / LangChain ``BaseTool`` instances and praisonai ``@tool`` objects
189
+ expose ``name``/``description`` plus an ``args_schema`` (or a dedicated
190
+ ``_run``/``run`` execution method). Such metadata is what the downstream
191
+ framework uses to advertise the tool to the LLM, so it must survive
192
+ timeout-wrapping. A bare function or a plain class returns False.
193
+ """
194
+ if isinstance(tool, type):
195
+ return False
196
+ has_schema = any(
197
+ hasattr(tool, attr) for attr in ("args_schema", "name", "description")
198
+ )
199
+ has_exec_method = any(
200
+ callable(getattr(tool, m, None)) for m in ("_run", "run")
201
+ )
202
+ return has_schema and has_exec_method
203
+
204
+
185
205
  def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked=None):
186
206
  """Enforce a per-call timeout on a tool, sync or async.
187
207
 
@@ -197,56 +217,88 @@ def _wrap_with_timeout(tool, timeout_seconds: float, executor_factory, on_leaked
197
217
  a JSON string, so a tool's declared return-type contract is never silently
198
218
  downgraded; the framework adapter decides how to surface the timeout.
199
219
  """
200
- if timeout_seconds is None or timeout_seconds <= 0 or not callable(tool):
220
+ if timeout_seconds is None or timeout_seconds <= 0:
201
221
  return tool
202
-
222
+
203
223
  import asyncio
204
224
  import concurrent.futures
205
225
  import functools
206
226
  import inspect
207
-
208
- if inspect.iscoroutinefunction(tool):
209
- @functools.wraps(tool)
210
- async def _async_wrapped(*args, **kwargs):
227
+
228
+ def _wrap_callable(fn):
229
+ """Return a timeout-enforcing wrapper around a bare callable."""
230
+ if not callable(fn):
231
+ return fn
232
+
233
+ if inspect.iscoroutinefunction(fn):
234
+ @functools.wraps(fn)
235
+ async def _async_wrapped(*args, **kwargs):
236
+ try:
237
+ return await asyncio.wait_for(fn(*args, **kwargs), timeout=timeout_seconds)
238
+ except asyncio.TimeoutError:
239
+ # asyncio.wait_for cancels the underlying task, so no work leaks.
240
+ raise ToolTimeoutError(
241
+ tool_name=getattr(fn, "__name__", repr(fn)),
242
+ timeout_seconds=timeout_seconds,
243
+ background_work_may_continue=False,
244
+ )
245
+ return _async_wrapped
246
+
247
+ @functools.wraps(fn)
248
+ def _sync_wrapped(*args, **kwargs):
249
+ executor = executor_factory()
250
+ future = executor.submit(fn, *args, **kwargs)
211
251
  try:
212
- return await asyncio.wait_for(tool(*args, **kwargs), timeout=timeout_seconds)
213
- except asyncio.TimeoutError:
214
- # asyncio.wait_for cancels the underlying task, so no work leaks.
252
+ return future.result(timeout=timeout_seconds)
253
+ except concurrent.futures.TimeoutError:
254
+ # Best-effort cancel; only effective if the future has not started.
255
+ # A started sync call cannot be interrupted, so warn operators that
256
+ # the worker may keep running (and its side effects may still occur).
257
+ cancelled = future.cancel()
258
+ if not cancelled and on_leaked is not None:
259
+ # The worker is stuck and OS-owned; let the generator recycle
260
+ # the pool so new submissions are not permanently queued behind
261
+ # leaked threads.
262
+ on_leaked()
263
+ logger.warning(
264
+ "Tool %r exceeded %.1fs (cancel=%s); worker may continue "
265
+ "executing in the background.",
266
+ getattr(fn, "__name__", repr(fn)),
267
+ timeout_seconds, cancelled,
268
+ )
215
269
  raise ToolTimeoutError(
216
- tool_name=getattr(tool, "__name__", repr(tool)),
270
+ tool_name=getattr(fn, "__name__", repr(fn)),
217
271
  timeout_seconds=timeout_seconds,
218
- background_work_may_continue=False,
272
+ background_work_may_continue=not cancelled,
219
273
  )
220
- return _async_wrapped
221
-
222
- @functools.wraps(tool)
223
- def _sync_wrapped(*args, **kwargs):
224
- executor = executor_factory()
225
- future = executor.submit(tool, *args, **kwargs)
226
- try:
227
- return future.result(timeout=timeout_seconds)
228
- except concurrent.futures.TimeoutError:
229
- # Best-effort cancel; only effective if the future has not started.
230
- # A started sync call cannot be interrupted, so warn operators that
231
- # the worker may keep running (and its side effects may still occur).
232
- cancelled = future.cancel()
233
- if not cancelled and on_leaked is not None:
234
- # The worker is stuck and OS-owned; let the generator recycle
235
- # the pool so new submissions are not permanently queued behind
236
- # leaked threads.
237
- on_leaked()
238
- logger.warning(
239
- "Tool %r exceeded %.1fs (cancel=%s); worker may continue "
240
- "executing in the background.",
241
- getattr(tool, "__name__", repr(tool)),
242
- timeout_seconds, cancelled,
243
- )
244
- raise ToolTimeoutError(
245
- tool_name=getattr(tool, "__name__", repr(tool)),
246
- timeout_seconds=timeout_seconds,
247
- background_work_may_continue=not cancelled,
248
- )
249
- return _sync_wrapped
274
+ return _sync_wrapped
275
+
276
+ # Framework tool object (CrewAI/LangChain BaseTool, praisonai @tool). These
277
+ # carry name / description / args_schema that the downstream framework needs
278
+ # to advertise the tool to the LLM. Replacing them with a bare function
279
+ # (functools.wraps copies only __name__/__doc__ etc., NOT args_schema) makes
280
+ # the framework infer a (*args, **kwargs) schema and the LLM emits malformed
281
+ # tool_calls. Instead, wrap only the execution method IN PLACE so the object
282
+ # — and its schema — survive.
283
+ if not callable(tool) or _looks_like_framework_tool(tool):
284
+ for method_name in ("_run", "run"):
285
+ method = getattr(tool, method_name, None)
286
+ if callable(method):
287
+ wrapped = _wrap_callable(method)
288
+ if wrapped is method:
289
+ continue
290
+ try:
291
+ object.__setattr__(tool, method_name, wrapped) # bypass pydantic frozen
292
+ return tool
293
+ except (AttributeError, TypeError):
294
+ break # fall through to callable wrapping below
295
+ # No patchable execution method or non-callable object; return as-is so
296
+ # we never silently drop a tool object we couldn't safely wrap.
297
+ if not callable(tool):
298
+ return tool
299
+
300
+ # Plain callable — safe to wrap as a function.
301
+ return _wrap_callable(tool)
250
302
 
251
303
 
252
304
  def noop(*args, **kwargs):
@@ -94,6 +94,7 @@ class AgentSchedulerHandler:
94
94
  max_retries = getattr(args, 'schedule_max_retries', None) or 3
95
95
  timeout = getattr(args, 'timeout', None)
96
96
  max_cost = getattr(args, 'max_cost', None)
97
+ deliver = getattr(args, 'schedule_deliver', None) or ''
97
98
 
98
99
  # Check if name already exists
99
100
  existing = state_manager.load_state(name)
@@ -121,7 +122,8 @@ class AgentSchedulerHandler:
121
122
  interval=interval,
122
123
  max_cost=max_cost,
123
124
  timeout=timeout,
124
- max_retries=max_retries
125
+ max_retries=max_retries,
126
+ deliver=deliver
125
127
  )
126
128
 
127
129
  # Save state
@@ -134,6 +136,7 @@ class AgentSchedulerHandler:
134
136
  "timeout": timeout,
135
137
  "max_cost": max_cost,
136
138
  "max_retries": max_retries,
139
+ "deliver": deliver,
137
140
  "status": "running",
138
141
  "started_at": datetime.now().isoformat(),
139
142
  "executions": 0,
@@ -370,10 +373,12 @@ class AgentSchedulerHandler:
370
373
  new_pid = daemon_manager.start_scheduler_daemon(
371
374
  name=name,
372
375
  task=state['task'],
376
+ recipe_name=state.get('recipe_name'),
373
377
  interval=state['interval'],
374
378
  max_cost=state.get('max_cost'),
375
379
  timeout=state.get('timeout'),
376
- max_retries=state.get('max_retries', 3)
380
+ max_retries=state.get('max_retries', 3),
381
+ deliver=state.get('deliver', '')
377
382
  )
378
383
 
379
384
  state['pid'] = new_pid
@@ -557,6 +562,7 @@ class AgentSchedulerHandler:
557
562
  max_retries_override = getattr(args, 'schedule_max_retries', None) or 3
558
563
  timeout_override = getattr(args, 'timeout', None)
559
564
  max_cost_override = getattr(args, 'max_cost', None)
565
+ deliver_override = getattr(args, 'schedule_deliver', None) or ''
560
566
  verbose = getattr(args, 'verbose', False)
561
567
 
562
568
  # Set up logging - only show logs if verbose
@@ -630,9 +636,14 @@ class AgentSchedulerHandler:
630
636
  agent=agent,
631
637
  task=task,
632
638
  timeout=timeout_override,
633
- max_cost=max_cost_override
639
+ max_cost=max_cost_override,
640
+ deliver=deliver_override
634
641
  )
635
-
642
+
643
+ # A CLI --deliver overrides any target resolved from YAML/recipe.
644
+ if deliver_override:
645
+ scheduler.deliver = deliver_override
646
+
636
647
  # Get configuration
637
648
  interval = interval_override
638
649
  max_retries = max_retries_override
@@ -754,6 +765,16 @@ schedule:
754
765
  help='Override maximum retry attempts (default: from YAML or 3)'
755
766
  )
756
767
 
768
+ schedule_parser.add_argument(
769
+ '--deliver', '-d',
770
+ dest='schedule_deliver',
771
+ type=str,
772
+ help=(
773
+ "Deliver each result to a chat target "
774
+ "(e.g. 'telegram:123456', 'telegram', 'telegram:123:thread')"
775
+ ),
776
+ )
777
+
757
778
  schedule_parser.add_argument(
758
779
  '--verbose', '-v',
759
780
  action='store_true',
@@ -54,17 +54,18 @@ def _rewrite_query(self, query: str, rewrite_tools: str = None, verbose: bool =
54
54
  if os.path.isfile(rewrite_tools):
55
55
  # Load from file
56
56
  try:
57
- import inspect
58
- from praisonai_code._safe_loader import load_user_module
59
- module = load_user_module(rewrite_tools, name="rewrite_tools_module", allow_outside_cwd=True)
60
- if module is not None:
61
- for name, obj in inspect.getmembers(module):
62
- if inspect.isfunction(obj) and not name.startswith('_'):
63
- rewrite_tools_list.append(obj)
64
- if rewrite_tools_list:
65
- print(f"[cyan]Loaded {len(rewrite_tools_list)} tools for query rewriter[/cyan]")
57
+ from praisonai_code.tool_resolver import ToolResolver
58
+ funcs = ToolResolver().load_functions_from_module(
59
+ rewrite_tools,
60
+ functions_only=True,
61
+ skip_private=True,
62
+ module_name="rewrite_tools_module",
63
+ )
64
+ if funcs:
65
+ rewrite_tools_list.extend(funcs.values())
66
+ print(f"[cyan]Loaded {len(rewrite_tools_list)} tools for query rewriter[/cyan]")
66
67
  else:
67
- print(f"[yellow]Warning: Rewrite tools loading disabled. Set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable.[/yellow]")
68
+ print(f"[yellow]Warning: No rewrite tools loaded from {rewrite_tools} (module has no public functions, or local tools loading is disabled set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable).[/yellow]")
68
69
  except Exception as e:
69
70
  print(f"[yellow]Warning: Failed to load rewrite tools: {e}[/yellow]")
70
71
  else:
@@ -149,17 +150,18 @@ def _expand_prompt(self, prompt: str, expand_tools: str = None, verbose: bool =
149
150
  if os.path.isfile(expand_tools):
150
151
  # Load from file
151
152
  try:
152
- import inspect
153
- from praisonai_code._safe_loader import load_user_module
154
- module = load_user_module(expand_tools, name="expand_tools_module", allow_outside_cwd=True)
155
- if module is not None:
156
- for name, obj in inspect.getmembers(module):
157
- if inspect.isfunction(obj) and not name.startswith('_'):
158
- expand_tools_list.append(obj)
159
- if expand_tools_list:
160
- print(f"[cyan]Loaded {len(expand_tools_list)} tools for prompt expander[/cyan]")
153
+ from praisonai_code.tool_resolver import ToolResolver
154
+ funcs = ToolResolver().load_functions_from_module(
155
+ expand_tools,
156
+ functions_only=True,
157
+ skip_private=True,
158
+ module_name="expand_tools_module",
159
+ )
160
+ if funcs:
161
+ expand_tools_list.extend(funcs.values())
162
+ print(f"[cyan]Loaded {len(expand_tools_list)} tools for prompt expander[/cyan]")
161
163
  else:
162
- print(f"[yellow]Warning: Expand tools loading disabled. Set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable.[/yellow]")
164
+ print(f"[yellow]Warning: No expand tools loaded from {expand_tools} (module has no public functions, or local tools loading is disabled set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable).[/yellow]")
163
165
  except Exception as e:
164
166
  print(f"[yellow]Warning: Failed to load expand tools: {e}[/yellow]")
165
167
  else:
@@ -237,17 +239,17 @@ def _load_tools(self, tools_path: str) -> list:
237
239
  if os.path.isfile(tools_path):
238
240
  # Load from file
239
241
  try:
240
- import inspect
241
- from praisonai_code._safe_loader import load_user_module
242
- module = load_user_module(tools_path, name="tools_module", allow_outside_cwd=True)
243
- if module is not None:
244
- for name, obj in inspect.getmembers(module):
245
- if inspect.isfunction(obj) and not name.startswith('_'):
246
- tools_list.append(obj)
247
- if tools_list:
248
- print(f"[cyan]Loaded {len(tools_list)} tools from {tools_path}[/cyan]")
242
+ from praisonai_code.tool_resolver import ToolResolver
243
+ funcs = ToolResolver().load_functions_from_module(
244
+ tools_path,
245
+ functions_only=True,
246
+ skip_private=True,
247
+ )
248
+ if funcs:
249
+ tools_list.extend(funcs.values())
250
+ print(f"[cyan]Loaded {len(tools_list)} tools from {tools_path}[/cyan]")
249
251
  else:
250
- print(f"[yellow]Warning: Tools loading disabled. Set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable.[/yellow]")
252
+ print(f"[yellow]Warning: No tools loaded from {tools_path} (module has no public functions, or local tools loading is disabled set PRAISONAI_ALLOW_LOCAL_TOOLS=true to enable).[/yellow]")
251
253
  except Exception as e:
252
254
  print(f"[yellow]Warning: Failed to load tools from {tools_path}: {e}[/yellow]")
253
255
  else:
@@ -326,6 +328,68 @@ def _save_output(self, prompt: str, result: str):
326
328
 
327
329
  print(f"[green]✅ Output saved to: {filepath}[/green]")
328
330
 
331
+ def _run_direct_prompt_via_adapter(self, prompt):
332
+ """Run a one-shot direct prompt through the FrameworkAdapterRegistry.
333
+
334
+ This keeps default framework selection in a single place (the registry's
335
+ priority + entry-point discovery) and routes execution through the adapter
336
+ contract so telemetry suppression, ``_resolve_llm`` normalisation and
337
+ ``expected_output`` handling all apply — none of which the previous
338
+ hardcoded ``from crewai import ...`` / ``from autogen import ...`` chain did.
339
+ """
340
+ from praisonai.framework_adapters.registry import get_default_registry
341
+
342
+ registry = get_default_registry()
343
+ try:
344
+ framework = registry.pick_default()
345
+ except RuntimeError as e:
346
+ print(f"[red]ERROR: {e}[/red]")
347
+ sys.exit(1)
348
+
349
+ adapter = registry.create(framework)
350
+ # AutoGen exposes a family router that resolves to a concrete version.
351
+ if hasattr(adapter, "resolve"):
352
+ adapter = adapter.resolve(config={})
353
+
354
+ llm = getattr(getattr(self, "args", None), "llm", None)
355
+ config_list = getattr(self, "config_list", None) or [{"model": llm or "gpt-4o"}]
356
+ # Preserve the full first config entry so credentials/endpoint fields
357
+ # (base_url, api_key, api_type, ...) that the adapter's _resolve_llm and the
358
+ # AutoGen config_list depend on survive. Only the explicit --llm override
359
+ # replaces the model; a missing model falls back to a sane default.
360
+ llm_config = [dict(config_list[0])]
361
+ if llm:
362
+ llm_config[0]["model"] = llm
363
+ llm_config[0].setdefault("model", "gpt-4o")
364
+
365
+ # Canonical one-shot config shape shared with the YAML path; the adapter's
366
+ # spec builder turns this into agents/tasks with a proper expected_output.
367
+ config = {
368
+ "roles": {
369
+ "director": {
370
+ "role": "Assistant",
371
+ "goal": "Complete the given task",
372
+ "backstory": "You are a helpful AI assistant",
373
+ "tasks": {
374
+ "direct_task": {
375
+ "description": prompt,
376
+ "expected_output": "A complete response to the task.",
377
+ }
378
+ },
379
+ "tools": [],
380
+ }
381
+ }
382
+ }
383
+
384
+ return adapter.run(
385
+ config,
386
+ llm_config,
387
+ prompt,
388
+ tools_dict={},
389
+ cli_config=vars(self.args) if hasattr(self, "args") and self.args else None,
390
+ )
391
+
392
+
329
393
  def handle_direct_prompt(self, prompt):
330
394
  """
331
395
  Handle direct prompt by creating a single agent and running it.
@@ -523,7 +587,29 @@ def handle_direct_prompt(self, prompt):
523
587
  agent_config["tools"] = existing_tools
524
588
  else:
525
589
  agent_config["tools"] = tools_list
526
-
590
+
591
+ # Auto-discover project-local .praisonai/tools/*.py (additive; mirrors
592
+ # the agents/commands convention). Explicit --tools above take
593
+ # precedence; discovery is gated by PRAISONAI_ALLOW_LOCAL_TOOLS and
594
+ # skipped when --no-tools is set.
595
+ if not getattr(self.args, 'no_tools', False):
596
+ try:
597
+ from praisonai_code.cli.features.custom_definitions import (
598
+ discover_project_tools,
599
+ )
600
+ project_tools = discover_project_tools()
601
+ except Exception:
602
+ project_tools = []
603
+ if project_tools:
604
+ existing_tools = agent_config.get('tools', [])
605
+ if not isinstance(existing_tools, list):
606
+ existing_tools = [existing_tools] if existing_tools else []
607
+ seen = {id(t) for t in existing_tools}
608
+ existing_tools.extend(
609
+ t for t in project_tools if id(t) not in seen
610
+ )
611
+ agent_config["tools"] = existing_tools
612
+
527
613
  # Load toolsets if specified (--toolset flag)
528
614
  if getattr(self.args, 'toolset', None):
529
615
  toolset_names = [name.strip() for name in self.args.toolset.split(',') if name.strip()]
@@ -1243,47 +1329,13 @@ Now, {final_instruction.lower()}:"""
1243
1329
  print(json.dumps({"cost_usd": 0.0, "tokens_in": 0, "tokens_out": 0, "model": "unknown", "request_count": 0}))
1244
1330
 
1245
1331
  return result
1246
- elif _availability_flag("CREWAI_AVAILABLE"):
1247
- from crewai import Agent, Task, Crew
1248
- agent_config = {
1249
- "name": "DirectAgent",
1250
- "role": "Assistant",
1251
- "goal": "Complete the given task",
1252
- "backstory": "You are a helpful AI assistant"
1253
- }
1254
-
1255
- # Add llm if specified
1256
- if hasattr(self, 'args') and self.args.llm:
1257
- agent_config["llm"] = self.args.llm
1258
-
1259
- agent = Agent(**agent_config)
1260
- task = Task(
1261
- description=prompt,
1262
- agent=agent
1263
- )
1264
- crew = Crew(
1265
- agents=[agent],
1266
- tasks=[task]
1267
- )
1268
- return crew.kickoff()
1269
- elif _availability_flag("AUTOGEN_AVAILABLE"):
1270
- # Lazy import autogen only when needed
1271
- autogen = _get_autogen()
1272
- config_list = self.config_list
1273
- # Add llm if specified
1274
- if hasattr(self, 'args') and self.args.llm:
1275
- config_list[0]['model'] = self.args.llm
1276
-
1277
- assistant = autogen.AssistantAgent(
1278
- name="DirectAgent",
1279
- llm_config={"config_list": config_list}
1280
- )
1281
- user_proxy = autogen.UserProxyAgent(
1282
- name="UserProxy",
1283
- code_execution_config={"work_dir": "coding"}
1284
- )
1285
- user_proxy.initiate_chat(assistant, message=prompt)
1286
- return "Task completed"
1332
+ elif _availability_flag("CREWAI_AVAILABLE") or _availability_flag("AUTOGEN_AVAILABLE"):
1333
+ # Route non-praisonai frameworks through the FrameworkAdapterRegistry so
1334
+ # the single source of truth for selection (priority + entry-point
1335
+ # plugins) and the full adapter contract (scoped_telemetry_disable,
1336
+ # _resolve_llm, expected_output, cli_config/callbacks) apply here too —
1337
+ # instead of a hardcoded chain that bypassed every adapter.
1338
+ return _run_direct_prompt_via_adapter(self, prompt)
1287
1339
  else:
1288
1340
  print("[red]ERROR: No framework is installed. Please install at least one framework:[/red]")
1289
1341
  print("\npip install \"praisonai-frameworks\\[crewai]\" # For CrewAI")