PraisonAI 4.6.53__tar.gz → 4.6.55__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 (826) hide show
  1. {praisonai-4.6.53 → praisonai-4.6.55}/PKG-INFO +2 -2
  2. {praisonai-4.6.53 → praisonai-4.6.55}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.53 → praisonai-4.6.55}/PraisonAI.egg-info/SOURCES.txt +2 -0
  4. {praisonai-4.6.53 → praisonai-4.6.55}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_registry.py +38 -0
  6. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/agents_generator.py +184 -140
  7. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/email.py +23 -5
  8. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/main.py +48 -0
  9. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/db/adapter.py +10 -0
  10. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy.py +1 -1
  11. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/framework_adapters/autogen_adapter.py +18 -0
  12. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/framework_adapters/base.py +23 -17
  13. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/framework_adapters/crewai_adapter.py +8 -35
  14. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/framework_adapters/praisonai_adapter.py +6 -14
  15. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/framework_adapters/registry.py +2 -12
  16. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/llm/registry.py +5 -14
  17. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/observability/hooks.py +32 -0
  18. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/__init__.py +3 -2
  19. praisonai-4.6.55/praisonai/persistence/conversation/_sql_base.py +498 -0
  20. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/async_postgres.py +11 -52
  21. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/async_sqlite.py +27 -59
  22. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/base.py +81 -0
  23. praisonai-4.6.55/praisonai/persistence/conversation/mysql_new.py +157 -0
  24. praisonai-4.6.55/praisonai/persistence/conversation/postgres.py +250 -0
  25. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/orchestrator.py +21 -25
  26. praisonai-4.6.55/praisonai/version.py +1 -0
  27. {praisonai-4.6.53 → praisonai-4.6.55}/pyproject.toml +1 -1
  28. praisonai-4.6.53/praisonai/persistence/conversation/postgres.py +0 -485
  29. praisonai-4.6.53/praisonai/version.py +0 -1
  30. {praisonai-4.6.53 → praisonai-4.6.55}/PraisonAI.egg-info/dependency_links.txt +0 -0
  31. {praisonai-4.6.53 → praisonai-4.6.55}/PraisonAI.egg-info/entry_points.txt +0 -0
  32. {praisonai-4.6.53 → praisonai-4.6.55}/PraisonAI.egg-info/top_level.txt +0 -0
  33. {praisonai-4.6.53 → praisonai-4.6.55}/README.md +0 -0
  34. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/__init__.py +0 -0
  35. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/__main__.py +0 -0
  36. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_approval_spec.py +0 -0
  37. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_async_bridge.py +0 -0
  38. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/__init__.py +0 -0
  39. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/api_md.py +0 -0
  40. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/__init__.py +0 -0
  41. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/docs_extractor.py +0 -0
  42. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/docs_generator.py +0 -0
  43. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/generator.py +0 -0
  44. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  45. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/python_extractor.py +0 -0
  46. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  47. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/rust_extractor.py +0 -0
  48. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  49. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  50. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  51. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_entrypoint.py +0 -0
  52. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_framework_availability.py +0 -0
  53. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_logging.py +0 -0
  54. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/_safe_loader.py +0 -0
  55. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/acp/__init__.py +0 -0
  56. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/acp/config.py +0 -0
  57. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/acp/safe_edit.py +0 -0
  58. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/acp/server.py +0 -0
  59. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/acp/session.py +0 -0
  60. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/adapters/__init__.py +0 -0
  61. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/adapters/readers.py +0 -0
  62. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/adapters/rerankers.py +0 -0
  63. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/adapters/retrievers.py +0 -0
  64. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/adapters/vector_stores.py +0 -0
  65. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/agent.py +0 -0
  66. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/agent_scheduler.py +0 -0
  67. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/api/agent_invoke.py +0 -0
  68. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/api/call.py +0 -0
  69. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/app/__init__.py +0 -0
  70. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/app/agentos.py +0 -0
  71. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/async_agent_scheduler.py +0 -0
  72. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/audit/__init__.py +0 -0
  73. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/audit/agent_centric.py +0 -0
  74. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/auto.py +0 -0
  75. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/__init__.py +0 -0
  76. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_ack.py +0 -0
  77. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_approval.py +0 -0
  78. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_approval_base.py +0 -0
  79. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_auth.py +0 -0
  80. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_chunk.py +0 -0
  81. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_commands.py +0 -0
  82. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_config_schema.py +0 -0
  83. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_debounce.py +0 -0
  84. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_defaults.py +0 -0
  85. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_discord_approval.py +0 -0
  86. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_dlq.py +0 -0
  87. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_email_utils.py +0 -0
  88. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_http_approval.py +0 -0
  89. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_mirror.py +0 -0
  90. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_pairing_ui.py +0 -0
  91. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_protocol_mixin.py +0 -0
  92. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_rate_limit.py +0 -0
  93. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_registry.py +0 -0
  94. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_resilience.py +0 -0
  95. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_session.py +0 -0
  96. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_slack_approval.py +0 -0
  97. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_telegram_approval.py +0 -0
  98. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_typing_indicator.py +0 -0
  99. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_unknown_user.py +0 -0
  100. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_webhook_approval.py +0 -0
  101. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  102. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/agentmail.py +0 -0
  103. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/bot.py +0 -0
  104. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/botos.py +0 -0
  105. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/discord.py +0 -0
  106. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/linear.py +0 -0
  107. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/media.py +0 -0
  108. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/slack.py +0 -0
  109. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/telegram.py +0 -0
  110. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/bots/whatsapp.py +0 -0
  111. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/__init__.py +0 -0
  112. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/agent.py +0 -0
  113. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/benchmark.py +0 -0
  114. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/cdp_agent.py +0 -0
  115. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/cdp_utils.py +0 -0
  116. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/cli.py +0 -0
  117. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/diagnostics.py +0 -0
  118. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/launcher.py +0 -0
  119. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/playwright_agent.py +0 -0
  120. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/profiling.py +0 -0
  121. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/protocol.py +0 -0
  122. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/report.py +0 -0
  123. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/server.py +0 -0
  124. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/sessions.py +0 -0
  125. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/browser/video.py +0 -0
  126. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/__init__.py +0 -0
  127. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/a2a.py +0 -0
  128. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/assistants.py +0 -0
  129. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/audio.py +0 -0
  130. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/batches.py +0 -0
  131. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/completions.py +0 -0
  132. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/container_files.py +0 -0
  133. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/containers.py +0 -0
  134. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/embeddings.py +0 -0
  135. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/files.py +0 -0
  136. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/fine_tuning.py +0 -0
  137. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/guardrails.py +0 -0
  138. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/images.py +0 -0
  139. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/mcp.py +0 -0
  140. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/messages.py +0 -0
  141. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/moderations.py +0 -0
  142. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/ocr.py +0 -0
  143. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/passthrough.py +0 -0
  144. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/rag.py +0 -0
  145. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/realtime.py +0 -0
  146. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/rerank.py +0 -0
  147. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/responses.py +0 -0
  148. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/search.py +0 -0
  149. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/skills.py +0 -0
  150. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/vector_store_files.py +0 -0
  151. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/vector_stores.py +0 -0
  152. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/capabilities/videos.py +0 -0
  153. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/claw/__init__.py +0 -0
  154. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/claw/default_app.py +0 -0
  155. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/__init__.py +0 -0
  156. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/_paths.py +0 -0
  157. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/app.py +0 -0
  158. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/branding.py +0 -0
  159. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/__init__.py +0 -0
  160. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/acp.py +0 -0
  161. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/agents.py +0 -0
  162. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/app.py +0 -0
  163. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/audit.py +0 -0
  164. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/batch.py +0 -0
  165. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/benchmark.py +0 -0
  166. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/bot.py +0 -0
  167. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/browser.py +0 -0
  168. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/call.py +0 -0
  169. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/chat.py +0 -0
  170. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/claw.py +0 -0
  171. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/code.py +0 -0
  172. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/commit.py +0 -0
  173. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/completion.py +0 -0
  174. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/config.py +0 -0
  175. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/context.py +0 -0
  176. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/dashboard.py +0 -0
  177. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/debug.py +0 -0
  178. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/deploy.py +0 -0
  179. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/diag.py +0 -0
  180. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/docs.py +0 -0
  181. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/doctor.py +0 -0
  182. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/endpoints.py +0 -0
  183. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/environment.py +0 -0
  184. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/eval.py +0 -0
  185. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/examples.py +0 -0
  186. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/flow.py +0 -0
  187. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/gateway.py +0 -0
  188. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/github.py +0 -0
  189. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/hooks.py +0 -0
  190. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/kanban.py +0 -0
  191. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/knowledge.py +0 -0
  192. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/langextract.py +0 -0
  193. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/langfuse.py +0 -0
  194. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/loop.py +0 -0
  195. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/lsp.py +0 -0
  196. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/managed.py +0 -0
  197. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/mcp.py +0 -0
  198. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/memory.py +0 -0
  199. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/mint_link.py +0 -0
  200. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/n8n.py +0 -0
  201. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/obs.py +0 -0
  202. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/onboard.py +0 -0
  203. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/package.py +0 -0
  204. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/pairing.py +0 -0
  205. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/paths.py +0 -0
  206. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/plugins.py +0 -0
  207. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/port.py +0 -0
  208. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/profile.py +0 -0
  209. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/publish.py +0 -0
  210. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/rag.py +0 -0
  211. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/realtime.py +0 -0
  212. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/recipe.py +0 -0
  213. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/registry.py +0 -0
  214. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/replay.py +0 -0
  215. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/research.py +0 -0
  216. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/retrieval.py +0 -0
  217. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/rules.py +0 -0
  218. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/run.py +0 -0
  219. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/sandbox.py +0 -0
  220. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/schedule.py +0 -0
  221. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/serve.py +0 -0
  222. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/session.py +0 -0
  223. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/setup.py +0 -0
  224. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/skills.py +0 -0
  225. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/standardise.py +0 -0
  226. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/templates.py +0 -0
  227. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/test.py +0 -0
  228. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/todo.py +0 -0
  229. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/tools.py +0 -0
  230. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/traces.py +0 -0
  231. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/tracker.py +0 -0
  232. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/train.py +0 -0
  233. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/ui.py +0 -0
  234. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/up.py +0 -0
  235. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/version.py +0 -0
  236. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/commands/workflow.py +0 -0
  237. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/config_loader.py +0 -0
  238. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/configuration/__init__.py +0 -0
  239. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/configuration/loader.py +0 -0
  240. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/configuration/paths.py +0 -0
  241. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/configuration/schema.py +0 -0
  242. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/execution/__init__.py +0 -0
  243. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/execution/core.py +0 -0
  244. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/execution/profiler.py +0 -0
  245. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/execution/request.py +0 -0
  246. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/execution/result.py +0 -0
  247. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/fallback_schema.py +0 -0
  248. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/__init__.py +0 -0
  249. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/acp.py +0 -0
  250. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/action_orchestrator.py +0 -0
  251. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/agent_scheduler.py +0 -0
  252. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/agent_tools.py +0 -0
  253. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/agents.py +0 -0
  254. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/approval.py +0 -0
  255. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/at_mentions.py +0 -0
  256. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/audit_cli.py +0 -0
  257. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/auto_memory.py +0 -0
  258. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/auto_mode.py +0 -0
  259. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/autonomy_mode.py +0 -0
  260. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/background.py +0 -0
  261. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/base.py +0 -0
  262. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/benchmark.py +0 -0
  263. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/bots_cli.py +0 -0
  264. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/capabilities.py +0 -0
  265. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/checkpoints.py +0 -0
  266. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/cli_profiler.py +0 -0
  267. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/code_intelligence.py +0 -0
  268. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/compaction.py +0 -0
  269. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/compare.py +0 -0
  270. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/config_hierarchy.py +0 -0
  271. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/context_manager.py +0 -0
  272. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/cost_tracker.py +0 -0
  273. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/csv_test_runner.py +0 -0
  274. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/debug.py +0 -0
  275. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/deploy.py +0 -0
  276. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/diag.py +0 -0
  277. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/display_jsonl.py +0 -0
  278. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/__init__.py +0 -0
  279. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  280. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  281. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  282. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  283. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  284. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  285. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  286. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  287. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  288. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  289. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  290. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  291. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  292. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  293. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  294. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  295. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  296. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  297. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/engine.py +0 -0
  298. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/formatters.py +0 -0
  299. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/handler.py +0 -0
  300. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/models.py +0 -0
  301. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/doctor/registry.py +0 -0
  302. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/endpoints.py +0 -0
  303. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/eval.py +0 -0
  304. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/examples.py +0 -0
  305. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/external_agents.py +0 -0
  306. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/fast_context.py +0 -0
  307. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/file_history.py +0 -0
  308. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/flow_display.py +0 -0
  309. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/gateway.py +0 -0
  310. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/git_attribution.py +0 -0
  311. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/git_integration.py +0 -0
  312. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/guardrail.py +0 -0
  313. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/handoff.py +0 -0
  314. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/hooks.py +0 -0
  315. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/hybrid_workflow.py +0 -0
  316. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/image.py +0 -0
  317. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/interactive_core_headless.py +0 -0
  318. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/interactive_runtime.py +0 -0
  319. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/interactive_test_harness.py +0 -0
  320. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/interactive_tools.py +0 -0
  321. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/interactive_tui.py +0 -0
  322. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/job_workflow.py +0 -0
  323. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/jobs.py +0 -0
  324. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/knowledge.py +0 -0
  325. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/knowledge_cli.py +0 -0
  326. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/lite.py +0 -0
  327. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/logs.py +0 -0
  328. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/lsp_cli.py +0 -0
  329. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  330. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/mcp.py +0 -0
  331. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/message_queue.py +0 -0
  332. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/metrics.py +0 -0
  333. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/migrate.py +0 -0
  334. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/migration_flow.py +0 -0
  335. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/migration_spec.py +0 -0
  336. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/n8n.py +0 -0
  337. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/observability.py +0 -0
  338. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/ollama.py +0 -0
  339. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/onboard.py +0 -0
  340. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/output_modes.py +0 -0
  341. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/output_style.py +0 -0
  342. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/package.py +0 -0
  343. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/performance.py +0 -0
  344. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/persistence.py +0 -0
  345. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/plugin_cli.py +0 -0
  346. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/profile.py +0 -0
  347. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/profiler/__init__.py +0 -0
  348. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/profiler/core.py +0 -0
  349. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/profiler/optimizations.py +0 -0
  350. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/profiler/suite.py +0 -0
  351. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/profiling.py +0 -0
  352. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/queue/__init__.py +0 -0
  353. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/queue/manager.py +0 -0
  354. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/queue/models.py +0 -0
  355. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/queue/persistence.py +0 -0
  356. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/queue/scheduler.py +0 -0
  357. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/queue/worker.py +0 -0
  358. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/recipe.py +0 -0
  359. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/recipe_creator.py +0 -0
  360. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/recipe_optimizer.py +0 -0
  361. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/recipe_prompts.py +0 -0
  362. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/recipes.py +0 -0
  363. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/registry.py +0 -0
  364. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/repo_map.py +0 -0
  365. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/router.py +0 -0
  366. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/safe_shell.py +0 -0
  367. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/sandbox_cli.py +0 -0
  368. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/sandbox_executor.py +0 -0
  369. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/sdk_knowledge.py +0 -0
  370. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/serve.py +0 -0
  371. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/session.py +0 -0
  372. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/setup/__init__.py +0 -0
  373. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/setup/handler.py +0 -0
  374. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/setup/templates.py +0 -0
  375. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/skills.py +0 -0
  376. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/slash_commands.py +0 -0
  377. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/telemetry.py +0 -0
  378. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/templates.py +0 -0
  379. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/thinking.py +0 -0
  380. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/todo.py +0 -0
  381. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tools.py +0 -0
  382. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/__init__.py +0 -0
  383. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/app.py +0 -0
  384. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/cli.py +0 -0
  385. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/config.py +0 -0
  386. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/debug.py +0 -0
  387. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/events.py +0 -0
  388. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/mock_provider.py +0 -0
  389. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/orchestrator.py +0 -0
  390. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  391. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/screens/help.py +0 -0
  392. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/screens/main.py +0 -0
  393. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/screens/queue.py +0 -0
  394. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/screens/session.py +0 -0
  395. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/screens/settings.py +0 -0
  396. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/session_store.py +0 -0
  397. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  398. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  399. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  400. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  401. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  402. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  403. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/widgets/status.py +0 -0
  404. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  405. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/wizard.py +0 -0
  406. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/workflow.py +0 -0
  407. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/features/yaml_utils.py +0 -0
  408. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/__init__.py +0 -0
  409. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/async_tui.py +0 -0
  410. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/config.py +0 -0
  411. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/core.py +0 -0
  412. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/events.py +0 -0
  413. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  414. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  415. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  416. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/praison_io.py +0 -0
  417. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/repl.py +0 -0
  418. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/split_tui.py +0 -0
  419. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/interactive/tui_app.py +0 -0
  420. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/langfuse_client.py +0 -0
  421. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/legacy.py +0 -0
  422. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/output/__init__.py +0 -0
  423. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/output/console.py +0 -0
  424. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/schedule_cli.py +0 -0
  425. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/schema_provider.py +0 -0
  426. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/session/__init__.py +0 -0
  427. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/session/unified.py +0 -0
  428. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/state/__init__.py +0 -0
  429. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/state/identifiers.py +0 -0
  430. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/state/sessions.py +0 -0
  431. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/ui/__init__.py +0 -0
  432. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/ui/config.py +0 -0
  433. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/ui/events.py +0 -0
  434. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/ui/mg_backend.py +0 -0
  435. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/ui/plain.py +0 -0
  436. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/ui/rich_backend.py +0 -0
  437. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli/unified_schema.py +0 -0
  438. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli_backends/__init__.py +0 -0
  439. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli_backends/claude.py +0 -0
  440. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/cli_backends/registry.py +0 -0
  441. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/__init__.py +0 -0
  442. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/agent_tools.py +0 -0
  443. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/diff/__init__.py +0 -0
  444. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/diff/diff_strategy.py +0 -0
  445. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/tools/__init__.py +0 -0
  446. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/tools/apply_diff.py +0 -0
  447. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/tools/execute_command.py +0 -0
  448. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/tools/list_files.py +0 -0
  449. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/tools/read_file.py +0 -0
  450. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/tools/search_replace.py +0 -0
  451. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/tools/write_file.py +0 -0
  452. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/utils/__init__.py +0 -0
  453. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/utils/file_utils.py +0 -0
  454. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/utils/ignore_utils.py +0 -0
  455. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/code/utils/text_utils.py +0 -0
  456. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/context/__init__.py +0 -0
  457. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/context/artifact_store.py +0 -0
  458. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/context/config.py +0 -0
  459. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/context/history_store.py +0 -0
  460. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/context/queue.py +0 -0
  461. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/context/setup.py +0 -0
  462. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/context/terminal_logger.py +0 -0
  463. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/daemon/__init__.py +0 -0
  464. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/daemon/launchd.py +0 -0
  465. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/daemon/systemd.py +0 -0
  466. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/daemon/windows.py +0 -0
  467. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/db/__init__.py +0 -0
  468. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/__init__.py +0 -0
  469. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/api.py +0 -0
  470. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/docker.py +0 -0
  471. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/doctor.py +0 -0
  472. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/main.py +0 -0
  473. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/models.py +0 -0
  474. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/providers/__init__.py +0 -0
  475. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/providers/aws.py +0 -0
  476. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/providers/azure.py +0 -0
  477. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/providers/base.py +0 -0
  478. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/providers/gcp.py +0 -0
  479. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/deploy/schema.py +0 -0
  480. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/docs_runner/__init__.py +0 -0
  481. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/docs_runner/classifier.py +0 -0
  482. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/docs_runner/executor.py +0 -0
  483. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/docs_runner/extractor.py +0 -0
  484. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/docs_runner/reporter.py +0 -0
  485. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/docs_runner/runner.py +0 -0
  486. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/docs_runner/workspace.py +0 -0
  487. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/__init__.py +0 -0
  488. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/a2u_server.py +0 -0
  489. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/discovery.py +0 -0
  490. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/providers/__init__.py +0 -0
  491. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/providers/a2a.py +0 -0
  492. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/providers/a2u.py +0 -0
  493. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/providers/agents_api.py +0 -0
  494. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/providers/base.py +0 -0
  495. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/providers/mcp.py +0 -0
  496. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/providers/recipe.py +0 -0
  497. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  498. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/registry.py +0 -0
  499. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/endpoints/server.py +0 -0
  500. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/flow/__init__.py +0 -0
  501. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/flow/client.py +0 -0
  502. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  503. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  504. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/flow/components/__init__.py +0 -0
  505. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/flow/converter.py +0 -0
  506. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/flow/helpers.py +0 -0
  507. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/framework_adapters/__init__.py +0 -0
  508. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/framework_adapters/validators.py +0 -0
  509. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/__init__.py +0 -0
  510. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/auth.py +0 -0
  511. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/cookie_auth.py +0 -0
  512. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/exec_approval.py +0 -0
  513. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/gateway_approval.py +0 -0
  514. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/kanban_dispatcher.py +0 -0
  515. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/magic_link.py +0 -0
  516. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/origin_check.py +0 -0
  517. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/pairing.py +0 -0
  518. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/pairing_routes.py +0 -0
  519. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/port_utils.py +0 -0
  520. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/push_channels.py +0 -0
  521. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/push_delivery.py +0 -0
  522. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/push_polling.py +0 -0
  523. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/push_presence.py +0 -0
  524. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/rate_limiter.py +0 -0
  525. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/redis_pubsub.py +0 -0
  526. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/server.py +0 -0
  527. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/gateway/unicode_utils.py +0 -0
  528. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/inbuilt_tools/__init__.py +0 -0
  529. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  530. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/inc/__init__.py +0 -0
  531. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/inc/config.py +0 -0
  532. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/inc/models.py +0 -0
  533. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/__init__.py +0 -0
  534. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/_legacy_handlers.py +0 -0
  535. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/bridges/__init__.py +0 -0
  536. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  537. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/bridges/hooks_query.py +0 -0
  538. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  539. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/bridges/schedules_runner.py +0 -0
  540. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/bridges/usage_bridge.py +0 -0
  541. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/bridges/workflows_service.py +0 -0
  542. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/context_files.py +0 -0
  543. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/gateway_host.py +0 -0
  544. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/host_app.py +0 -0
  545. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/pages/__init__.py +0 -0
  546. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/pages/bot_health.py +0 -0
  547. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integration/pages/workflow_runs.py +0 -0
  548. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/__init__.py +0 -0
  549. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/_session_info.py +0 -0
  550. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/_tool_aliases.py +0 -0
  551. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/_unified_registry.py +0 -0
  552. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/base.py +0 -0
  553. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/claude_code.py +0 -0
  554. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/codex_cli.py +0 -0
  555. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/compute/__init__.py +0 -0
  556. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/compute/daytona.py +0 -0
  557. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/compute/docker.py +0 -0
  558. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/compute/e2b.py +0 -0
  559. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/compute/flyio.py +0 -0
  560. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/compute/local.py +0 -0
  561. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/compute/modal_compute.py +0 -0
  562. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/cursor_cli.py +0 -0
  563. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/db_session_adapter.py +0 -0
  564. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/gemini_cli.py +0 -0
  565. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/hosted_agent.py +0 -0
  566. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/local_agent.py +0 -0
  567. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/managed_agents.py +0 -0
  568. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/managed_local.py +0 -0
  569. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/registry.py +0 -0
  570. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/integrations/sandboxed_agent.py +0 -0
  571. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/jobs/__init__.py +0 -0
  572. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/jobs/executor.py +0 -0
  573. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/jobs/models.py +0 -0
  574. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/jobs/router.py +0 -0
  575. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/jobs/server.py +0 -0
  576. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/jobs/store.py +0 -0
  577. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/kanban/__init__.py +0 -0
  578. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/kanban/models.py +0 -0
  579. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/kanban/paths.py +0 -0
  580. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/kanban/sqlite_store.py +0 -0
  581. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/llm/__init__.py +0 -0
  582. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/llm/env.py +0 -0
  583. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/__init__.py +0 -0
  584. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/adapters/__init__.py +0 -0
  585. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/adapters/agents.py +0 -0
  586. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  587. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  588. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  589. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  590. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/adapters/memory.py +0 -0
  591. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/adapters/prompts.py +0 -0
  592. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/adapters/resources.py +0 -0
  593. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  594. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/auth/__init__.py +0 -0
  595. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/auth/api_key.py +0 -0
  596. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/auth/oauth.py +0 -0
  597. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/auth/oidc.py +0 -0
  598. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/auth/scopes.py +0 -0
  599. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/cli.py +0 -0
  600. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/elicitation.py +0 -0
  601. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/icons.py +0 -0
  602. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/recipe_adapter.py +0 -0
  603. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/recipe_cli.py +0 -0
  604. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/registry.py +0 -0
  605. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/sampling.py +0 -0
  606. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/server.py +0 -0
  607. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/tasks.py +0 -0
  608. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/tool_index.py +0 -0
  609. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/transports/__init__.py +0 -0
  610. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/transports/http_stream.py +0 -0
  611. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/mcp_server/transports/stdio.py +0 -0
  612. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/n8n/__init__.py +0 -0
  613. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/n8n/client.py +0 -0
  614. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/n8n/converter.py +0 -0
  615. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/n8n/preview.py +0 -0
  616. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/n8n/reverse_converter.py +0 -0
  617. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/observability/__init__.py +0 -0
  618. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/observability/langextract.py +0 -0
  619. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/observability/langfuse.py +0 -0
  620. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/__init__.py +0 -0
  621. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/_valkey_client.py +0 -0
  622. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/config.py +0 -0
  623. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/async_mysql.py +0 -0
  624. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/json_store.py +0 -0
  625. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/mysql.py +0 -0
  626. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/singlestore.py +0 -0
  627. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/sqlite.py +0 -0
  628. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/supabase.py +0 -0
  629. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/surrealdb.py +0 -0
  630. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  631. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/conversation/turso.py +0 -0
  632. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/factory.py +0 -0
  633. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/hooks/__init__.py +0 -0
  634. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  635. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/__init__.py +0 -0
  636. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/base.py +0 -0
  637. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/cassandra.py +0 -0
  638. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/chroma.py +0 -0
  639. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  640. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  641. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/couchbase.py +0 -0
  642. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/lancedb.py +0 -0
  643. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  644. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  645. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  646. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/milvus.py +0 -0
  647. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  648. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/pgvector.py +0 -0
  649. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/pinecone.py +0 -0
  650. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/qdrant.py +0 -0
  651. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  652. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  653. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  654. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  655. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  656. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/knowledge/weaviate.py +0 -0
  657. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/migrations/__init__.py +0 -0
  658. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/migrations/manager.py +0 -0
  659. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/registry.py +0 -0
  660. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/__init__.py +0 -0
  661. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/async_mongodb.py +0 -0
  662. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/base.py +0 -0
  663. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/dynamodb.py +0 -0
  664. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/firestore.py +0 -0
  665. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/gcs.py +0 -0
  666. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/memory.py +0 -0
  667. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/mongodb.py +0 -0
  668. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/redis.py +0 -0
  669. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/upstash.py +0 -0
  670. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/state/valkey.py +0 -0
  671. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/tests/__init__.py +0 -0
  672. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/tests/test_all_backends.py +0 -0
  673. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  674. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/profiler.py +0 -0
  675. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/push/__init__.py +0 -0
  676. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/push/client.py +0 -0
  677. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/push/transports.py +0 -0
  678. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/__init__.py +0 -0
  679. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/bridge.py +0 -0
  680. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/core.py +0 -0
  681. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/exceptions.py +0 -0
  682. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/history.py +0 -0
  683. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/models.py +0 -0
  684. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/operations.py +0 -0
  685. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/policy.py +0 -0
  686. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/registry.py +0 -0
  687. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/runtime.py +0 -0
  688. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/security.py +0 -0
  689. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/serve.py +0 -0
  690. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/recipe/server.py +0 -0
  691. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/replay/__init__.py +0 -0
  692. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/replay/analyzer.py +0 -0
  693. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/replay/applier.py +0 -0
  694. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/replay/judge.py +0 -0
  695. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/replay/plan.py +0 -0
  696. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/replay/player.py +0 -0
  697. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/replay/reader.py +0 -0
  698. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/replay/storage.py +0 -0
  699. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/replay/writer.py +0 -0
  700. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/sandbox/__init__.py +0 -0
  701. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/sandbox/_compat.py +0 -0
  702. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/sandbox/_shell.py +0 -0
  703. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/sandbox/daytona.py +0 -0
  704. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/sandbox/docker.py +0 -0
  705. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/sandbox/e2b.py +0 -0
  706. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/sandbox/modal.py +0 -0
  707. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/sandbox/sandlock.py +0 -0
  708. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/sandbox/ssh.py +0 -0
  709. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/sandbox/subprocess.py +0 -0
  710. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/__init__.py +0 -0
  711. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/_base_scheduler.py +0 -0
  712. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/agent_scheduler.py +0 -0
  713. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  714. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/base.py +0 -0
  715. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/daemon_manager.py +0 -0
  716. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/deployment.py +0 -0
  717. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/executor.py +0 -0
  718. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/shared.py +0 -0
  719. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/state_manager.py +0 -0
  720. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/scheduler/yaml_loader.py +0 -0
  721. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/security/__init__.py +0 -0
  722. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/security/audit.py +0 -0
  723. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/security/injection.py +0 -0
  724. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/security/protected.py +0 -0
  725. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/setup/__init__.py +0 -0
  726. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/setup/build.py +0 -0
  727. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/setup/post_install.py +0 -0
  728. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/setup/setup_conda_env.py +0 -0
  729. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/setup.py +0 -0
  730. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/__init__.py +0 -0
  731. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/ai_generator.py +0 -0
  732. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/config.py +0 -0
  733. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/dedupe.py +0 -0
  734. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/discovery.py +0 -0
  735. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/drift.py +0 -0
  736. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/engine.py +0 -0
  737. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/enhanced_templates.py +0 -0
  738. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/example_verifier.py +0 -0
  739. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/manifest.py +0 -0
  740. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/models.py +0 -0
  741. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/reports.py +0 -0
  742. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/templates.py +0 -0
  743. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/undo_redo.py +0 -0
  744. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/standardise/validator.py +0 -0
  745. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/storage/__init__.py +0 -0
  746. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/storage/dynamodb_adapter.py +0 -0
  747. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/storage/mongodb_adapter.py +0 -0
  748. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/storage/postgresql_adapter.py +0 -0
  749. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/storage/redis_adapter.py +0 -0
  750. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/storage/valkey_adapter.py +0 -0
  751. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/__init__.py +0 -0
  752. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/batch_source.py +0 -0
  753. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/cli_docs_source.py +0 -0
  754. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/discovery.py +0 -0
  755. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/docs_source.py +0 -0
  756. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/examples_source.py +0 -0
  757. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/executor.py +0 -0
  758. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/models.py +0 -0
  759. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/report_viewer.py +0 -0
  760. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/reporter.py +0 -0
  761. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/suite_runner/runner.py +0 -0
  762. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/templates/__init__.py +0 -0
  763. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/templates/cache.py +0 -0
  764. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/templates/dependency_checker.py +0 -0
  765. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/templates/discovery.py +0 -0
  766. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/templates/loader.py +0 -0
  767. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/templates/registry.py +0 -0
  768. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/templates/resolver.py +0 -0
  769. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/templates/security.py +0 -0
  770. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/templates/tool_override.py +0 -0
  771. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/templates/tools_doctor.py +0 -0
  772. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/test.py +0 -0
  773. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/tool_registry.py +0 -0
  774. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/tool_resolver.py +0 -0
  775. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/tools/__init__.py +0 -0
  776. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/tools/audio.py +0 -0
  777. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/tools/glob_tool.py +0 -0
  778. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/tools/grep_tool.py +0 -0
  779. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/tools/kanban_tools.py +0 -0
  780. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/tools/multiedit.py +0 -0
  781. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/tools/skill_manage.py +0 -0
  782. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train/__init__.py +0 -0
  783. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train/_ollama.py +0 -0
  784. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train/agents/__init__.py +0 -0
  785. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train/agents/grader.py +0 -0
  786. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train/agents/hook.py +0 -0
  787. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train/agents/models.py +0 -0
  788. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train/agents/orchestrator.py +0 -0
  789. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train/agents/storage.py +0 -0
  790. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train/llm/__init__.py +0 -0
  791. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train/llm/trainer.py +0 -0
  792. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train.py +0 -0
  793. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/train_vision.py +0 -0
  794. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui/_aiui_datastore.py +0 -0
  795. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui/_external_agents.py +0 -0
  796. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui/callbacks.py +0 -0
  797. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui/components/aicoder.py +0 -0
  798. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui/context.py +0 -0
  799. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui/database_config.py +0 -0
  800. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui_agents/__init__.py +0 -0
  801. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui_agents/default_app.py +0 -0
  802. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui_bot/__init__.py +0 -0
  803. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui_bot/default_app.py +0 -0
  804. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui_chat/__init__.py +0 -0
  805. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui_chat/default_app.py +0 -0
  806. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui_dashboard/default_app.py +0 -0
  807. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui_realtime/__init__.py +0 -0
  808. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/ui_realtime/default_app.py +0 -0
  809. {praisonai-4.6.53 → praisonai-4.6.55}/praisonai/upload_vision.py +0 -0
  810. {praisonai-4.6.53 → praisonai-4.6.55}/setup.cfg +0 -0
  811. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test.py +0 -0
  812. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_agents_playbook.py +0 -0
  813. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_approval_system.py +0 -0
  814. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_basic.py +0 -0
  815. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_cli_features.py +0 -0
  816. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_custom_tools_fix.py +0 -0
  817. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_double_api_fix.py +0 -0
  818. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_n8n_agent_invoke.py +0 -0
  819. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_n8n_cli_feature.py +0 -0
  820. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_n8n_integration.py +0 -0
  821. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_phase2_refactor.py +0 -0
  822. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_recipe.py +0 -0
  823. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_registry.py +0 -0
  824. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_runner.py +0 -0
  825. {praisonai-4.6.53 → praisonai-4.6.55}/tests/test_sandboxed_agent_compatibility.py +0 -0
  826. {praisonai-4.6.53 → praisonai-4.6.55}/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.53
3
+ Version: 4.6.55
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.53
14
+ Requires-Dist: praisonaiagents>=1.6.55
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<2,>=1.83.14
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.53
3
+ Version: 4.6.55
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.53
14
+ Requires-Dist: praisonaiagents>=1.6.55
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<2,>=1.83.14
17
17
  Requires-Dist: PyYAML>=6.0
@@ -621,12 +621,14 @@ praisonai/persistence/factory.py
621
621
  praisonai/persistence/orchestrator.py
622
622
  praisonai/persistence/registry.py
623
623
  praisonai/persistence/conversation/__init__.py
624
+ praisonai/persistence/conversation/_sql_base.py
624
625
  praisonai/persistence/conversation/async_mysql.py
625
626
  praisonai/persistence/conversation/async_postgres.py
626
627
  praisonai/persistence/conversation/async_sqlite.py
627
628
  praisonai/persistence/conversation/base.py
628
629
  praisonai/persistence/conversation/json_store.py
629
630
  praisonai/persistence/conversation/mysql.py
631
+ praisonai/persistence/conversation/mysql_new.py
630
632
  praisonai/persistence/conversation/postgres.py
631
633
  praisonai/persistence/conversation/singlestore.py
632
634
  praisonai/persistence/conversation/sqlite.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.53
4
+ praisonaiagents>=1.6.55
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -17,6 +17,8 @@ logger = logging.getLogger(__name__)
17
17
 
18
18
 
19
19
  class PluginRegistry(Generic[T]):
20
+ # Guards creation of per-subclass default-instance locks
21
+ _default_locks_guard = threading.Lock()
20
22
  """Generic plugin registry: builtins + entry points + runtime register().
21
23
 
22
24
  This replaces the singleton pattern with dependency injection while maintaining
@@ -254,6 +256,42 @@ class PluginRegistry(Generic[T]):
254
256
  except ValueError:
255
257
  raise AttributeError(f"module {module_name!r} has no attribute {attr_name!r}")
256
258
 
259
+ @classmethod
260
+ def default(cls) -> "PluginRegistry[T]":
261
+ """
262
+ Process-default registry. Prefer DI; use this only at the edge.
263
+
264
+ Provides thread-safe lazy initialization of default instances per-subclass.
265
+ Each subclass gets its own default instance cache.
266
+ """
267
+ # Use a class-level cache stored in the subclass's __dict__
268
+ cache_key = "_default_instance"
269
+ lock_key = "_default_instance_lock"
270
+
271
+ # Get or create lock in subclass __dict__ (not shared across inheritance hierarchy)
272
+ if lock_key not in cls.__dict__:
273
+ # Thread-safe initialization of the per-subclass lock itself
274
+ with PluginRegistry._default_locks_guard:
275
+ if lock_key not in cls.__dict__:
276
+ # Store directly in the class __dict__ to avoid inheritance sharing
277
+ setattr(cls, lock_key, threading.Lock())
278
+
279
+ lock = getattr(cls, lock_key)
280
+
281
+ # Check cache first (without lock for performance)
282
+ cache = cls.__dict__.get(cache_key)
283
+ if cache is not None:
284
+ return cache
285
+
286
+ # Double-checked locking pattern
287
+ with lock:
288
+ cache = cls.__dict__.get(cache_key)
289
+ if cache is None:
290
+ cache = cls()
291
+ # Store directly in the class __dict__ to ensure per-subclass isolation
292
+ setattr(cls, cache_key, cache)
293
+ return cache
294
+
257
295
 
258
296
  def create_lazy_getattr(registry: PluginRegistry[T]) -> Callable[[str], T]:
259
297
  """Create a __getattr__ function backed by a PluginRegistry.
@@ -235,8 +235,9 @@ class AgentsGenerator:
235
235
  # CLI users get the process default.
236
236
  self._adapter_registry = adapter_registry or get_default_registry()
237
237
 
238
- # Get framework adapter (availability already validated at CLI entry)
239
- self.framework_adapter = self._get_framework_adapter(framework)
238
+ # Defer framework adapter creation until YAML is loaded
239
+ # This fixes the issue where empty framework string fails before YAML framework is read
240
+ self.framework_adapter = None
240
241
 
241
242
  def _get_framework_adapter(self, framework: str) -> FrameworkAdapter:
242
243
  """
@@ -281,7 +282,7 @@ class AgentsGenerator:
281
282
  self.logger.debug(f"CLI override: lsp = {cli_config['lsp']}")
282
283
 
283
284
  # Handle agent-level overrides using unified approach
284
- agent_level_fields = ['tool_timeout', 'planning_tools', 'autonomy', 'planning', 'web', 'web_fetch']
285
+ agent_level_fields = ['tool_timeout', 'tool_retry_policy', 'planning_tools', 'autonomy', 'planning', 'web', 'web_fetch']
285
286
  agent_overrides = {k: v for k, v in cli_config.items() if k in agent_level_fields}
286
287
 
287
288
  # Handle handoff configuration - convert CLI flags into handoff dict
@@ -343,6 +344,168 @@ class AgentsGenerator:
343
344
  agent_config[field] = value
344
345
  self.logger.debug(f"CLI override for agent {agent_name}: {field} = {value}")
345
346
 
347
+ def _prepare_for_run(self, config):
348
+ """
349
+ Single source of truth for YAML normalisation, validation,
350
+ CLI-backend compatibility, tool resolution, AutoGen version
351
+ selection, and adapter resolution. Used by BOTH sync and async.
352
+ """
353
+ # Canonical format conversion: 'agents' -> 'roles', 'instructions' -> 'backstory'
354
+ if 'agents' in config and 'roles' not in config:
355
+ config['roles'] = {}
356
+ for agent_name, agent_config in config['agents'].items():
357
+ role_config = dict(agent_config) if agent_config else {}
358
+ # Convert 'instructions' to 'backstory' if present
359
+ if 'instructions' in role_config and 'backstory' not in role_config:
360
+ role_config['backstory'] = role_config['instructions']
361
+ # Ensure required fields have defaults
362
+ if 'role' not in role_config:
363
+ role_config['role'] = agent_name.replace('_', ' ').title()
364
+ if 'goal' not in role_config:
365
+ role_config['goal'] = role_config.get('backstory', 'Complete the assigned task')
366
+ if 'backstory' not in role_config:
367
+ role_config['backstory'] = f'You are a {role_config["role"]}'
368
+ config['roles'][agent_name] = role_config
369
+
370
+ # Get workflow input: 'input' is canonical, 'topic' is alias for backward compatibility
371
+ topic = config.get('input', config.get('topic', ''))
372
+
373
+ # Validate agents configuration for typos in field names
374
+ self._validate_agents_config(config)
375
+
376
+ # Build tools dictionary using shared logic
377
+ tools_dict = self._build_tools_dict(config)
378
+
379
+ # Select framework with AutoGen version logic
380
+ framework = self._select_autogen_version(
381
+ self.framework or config.get('framework', 'praisonai'),
382
+ config,
383
+ )
384
+
385
+ # Get and resolve adapter
386
+ adapter = self._get_framework_adapter(framework).resolve()
387
+
388
+ # Validate framework availability
389
+ from .framework_adapters.validators import assert_framework_available
390
+ assert_framework_available(adapter.name)
391
+
392
+ # Validate cli_backend compatibility
393
+ self._validate_cli_backend_compatibility(config, framework)
394
+
395
+ # Initialize observability hooks
396
+ from .observability.hooks import init_observability
397
+ init_observability(adapter.name)
398
+
399
+ # Run adapter setup hooks
400
+ adapter.setup(framework_tag=adapter.name)
401
+
402
+ # Update framework reference if resolution changed it
403
+ self.framework = adapter.name
404
+ self.framework_adapter = adapter
405
+
406
+ return {
407
+ 'adapter': adapter,
408
+ 'config': config,
409
+ 'topic': topic,
410
+ 'tools_dict': tools_dict,
411
+ }
412
+
413
+ def _build_tools_dict(self, config):
414
+ """Shared tool resolution logic for sync and async paths."""
415
+ tools_dict = {}
416
+
417
+ # Demand-driven tool resolution - only resolve tools actually used in YAML
418
+ if is_available("crewai") or is_available("autogen") or is_available("praisonaiagents") or is_available("ag2"):
419
+ try:
420
+ # Collect all tool names mentioned in the YAML config
421
+ needed_tools: set[str] = set()
422
+ for role_cfg in config.get('roles', {}).values():
423
+ for t in role_cfg.get('tools') or []:
424
+ if isinstance(t, str) and t.strip():
425
+ needed_tools.add(t.strip())
426
+ for task_cfg in (role_cfg.get('tasks') or {}).values():
427
+ if not isinstance(task_cfg, dict):
428
+ continue
429
+ for t in task_cfg.get('tools') or []:
430
+ if isinstance(t, str) and t.strip():
431
+ needed_tools.add(t.strip())
432
+
433
+ # Resolve only the tools actually referenced in YAML
434
+ for tool_name in needed_tools:
435
+ try:
436
+ resolved_tool = self.tool_resolver.resolve(tool_name)
437
+ if resolved_tool is None:
438
+ self.logger.warning(f"Tool '{tool_name}' not found")
439
+ continue
440
+ tools_dict[tool_name] = (
441
+ resolved_tool() if inspect.isclass(resolved_tool) else resolved_tool
442
+ )
443
+ except Exception as e:
444
+ self.logger.warning(f"Failed to initialize tool '{tool_name}': {e}")
445
+ continue
446
+
447
+ except Exception as e:
448
+ self.logger.warning(f"Error collecting YAML tool references: {e}")
449
+
450
+ # Add tools from class names - use tool_resolver to check tool validity
451
+ for tool_class in self.tools:
452
+ if isinstance(tool_class, type):
453
+ try:
454
+ tool_instance = tool_class()
455
+ tool_name = tool_class.__name__
456
+ tools_dict[tool_name] = tool_instance
457
+ self.logger.debug(f"Added tool: {tool_name}")
458
+ except Exception as e:
459
+ self.logger.warning(f"Failed to instantiate tool class {tool_class.__name__}: {e}")
460
+
461
+ root_directory = os.getcwd()
462
+ tools_py_path = os.path.join(root_directory, 'tools.py')
463
+ tools_dir_path = Path(root_directory) / 'tools'
464
+
465
+ # Use consolidated ToolResolver for tools.py loading
466
+ tools_dict.update(self.tool_resolver.get_local_tool_classes())
467
+ if os.path.isfile(tools_py_path):
468
+ self.logger.debug("tools.py exists in the root directory. Loading tools.py and skipping tools folder.")
469
+ elif tools_dir_path.is_dir():
470
+ tools_dict.update(self.tool_resolver.get_local_tool_classes_from_dir(tools_dir_path))
471
+ if tools_dict:
472
+ self.logger.debug("tools folder exists in the root directory")
473
+
474
+ return tools_dict
475
+
476
+ def _select_autogen_version(self, framework, config):
477
+ """Shared AutoGen version selection logic for sync and async paths."""
478
+ if framework == "autogen":
479
+ autogen_v4_adapter = self._get_framework_adapter("autogen_v4")
480
+ autogen_v2_adapter = self._get_framework_adapter("autogen")
481
+
482
+ autogen_version = str(
483
+ config.get('autogen_version', os.environ.get("AUTOGEN_VERSION", "auto"))
484
+ ).lower()
485
+ use_v4 = False
486
+
487
+ if autogen_version == "v0.4" and autogen_v4_adapter.is_available():
488
+ use_v4 = True
489
+ elif autogen_version == "v0.2" and autogen_v2_adapter.is_available():
490
+ use_v4 = False
491
+ elif autogen_version == "auto":
492
+ use_v4 = autogen_v4_adapter.is_available()
493
+ else:
494
+ use_v4 = autogen_v4_adapter.is_available() and not autogen_v2_adapter.is_available()
495
+
496
+ framework = "autogen_v4" if use_v4 else "autogen"
497
+
498
+ # Initialize AgentOps if configured
499
+ agentops_api_key = os.getenv("AGENTOPS_API_KEY")
500
+ if agentops_api_key:
501
+ try:
502
+ import agentops
503
+ agentops.init(agentops_api_key, default_tags=[framework])
504
+ except ImportError:
505
+ pass
506
+
507
+ return framework
508
+
346
509
  def _validate_cli_backend_compatibility(self, config, framework):
347
510
  """Validate that cli_backend is only used with compatible frameworks."""
348
511
  # Check if any agent/role defines cli_backend (support both key names)
@@ -375,8 +538,8 @@ class AgentsGenerator:
375
538
  'role', 'goal', 'instructions', 'backstory', 'tools', 'toolsets', 'tasks', 'llm',
376
539
  'function_calling_llm', 'allow_delegation', 'max_iter', 'max_rpm',
377
540
  'max_execution_time', 'verbose', 'cache', 'system_template',
378
- 'prompt_template', 'response_template', 'tool_timeout', 'planning_tools',
379
- 'planning', 'autonomy', 'guardrails', 'streaming', 'stream',
541
+ 'prompt_template', 'response_template', 'tool_timeout', 'tool_retry_policy',
542
+ 'planning_tools', 'planning', 'autonomy', 'guardrails', 'streaming', 'stream',
380
543
  'approval', 'skills', 'cli_backend', 'reflection', 'handoff', 'web', 'web_fetch'
381
544
  }
382
545
 
@@ -512,141 +675,19 @@ class AgentsGenerator:
512
675
  # Route to YAMLWorkflowParser for advanced workflow patterns
513
676
  return self._run_yaml_workflow(config)
514
677
 
515
- config, adapter, tools_dict, topic = self._prepare(config)
516
- return adapter.run(
517
- config,
678
+ # Use shared preparation logic
679
+ prep = self._prepare_for_run(config)
680
+
681
+ self.logger.info(f"Using framework: {prep['adapter'].name}")
682
+ return prep['adapter'].run(
683
+ prep['config'],
518
684
  self.config_list,
519
- topic,
520
- tools_dict=tools_dict,
685
+ prep['topic'],
686
+ tools_dict=prep['tools_dict'],
521
687
  agent_callback=getattr(self, 'agent_callback', None),
522
688
  task_callback=getattr(self, 'task_callback', None),
523
689
  cli_config=getattr(self, 'cli_config', None),
524
690
  )
525
-
526
- def _prepare(self, config):
527
- """Shared preparation logic for both sync and async entry points."""
528
- # Canonical format conversion: 'agents' -> 'roles', 'instructions' -> 'backstory'
529
- if 'agents' in config and 'roles' not in config:
530
- config['roles'] = {}
531
- for agent_name, agent_config in config['agents'].items():
532
- role_config = dict(agent_config) if agent_config else {}
533
- if 'instructions' in role_config and 'backstory' not in role_config:
534
- role_config['backstory'] = role_config['instructions']
535
- if 'role' not in role_config:
536
- role_config['role'] = agent_name.replace('_', ' ').title()
537
- if 'goal' not in role_config:
538
- role_config['goal'] = role_config.get('backstory', 'Complete the assigned task')
539
- if 'backstory' not in role_config:
540
- role_config['backstory'] = f'You are a {role_config["role"]}'
541
- config['roles'][agent_name] = role_config
542
-
543
- # Get workflow input: 'input' is canonical, 'topic' is alias for backward compatibility
544
- topic = config.get('input', config.get('topic', ''))
545
-
546
- # Validate agents configuration for typos in field names
547
- self._validate_agents_config(config)
548
-
549
- tools_dict = {}
550
-
551
- # Demand-driven tool resolution - only resolve tools actually used in YAML
552
- if is_available("crewai") or is_available("autogen") or is_available("praisonaiagents") or is_available("ag2"):
553
- try:
554
- # Collect all tool names mentioned in the YAML config
555
- needed_tools: set[str] = set()
556
- for role_cfg in config.get('roles', {}).values():
557
- for t in role_cfg.get('tools') or []:
558
- if isinstance(t, str) and t.strip():
559
- needed_tools.add(t.strip())
560
- for task_cfg in (role_cfg.get('tasks') or {}).values():
561
- if not isinstance(task_cfg, dict):
562
- continue
563
- for t in task_cfg.get('tools') or []:
564
- if isinstance(t, str) and t.strip():
565
- needed_tools.add(t.strip())
566
-
567
- # Resolve only the tools actually referenced in YAML
568
- for tool_name in needed_tools:
569
- try:
570
- resolved_tool = self.tool_resolver.resolve(tool_name, instantiate=True)
571
- if resolved_tool is not None:
572
- tools_dict[tool_name] = resolved_tool
573
- except Exception as e:
574
- self.logger.warning(f"Failed to initialize tool '{tool_name}': {e}")
575
- continue
576
-
577
- except Exception as e:
578
- self.logger.warning(f"Error collecting YAML tool references: {e}")
579
-
580
- # Add tools from class names - use tool_resolver to check tool validity
581
- for tool_class in self.tools:
582
- if isinstance(tool_class, type):
583
- try:
584
- tool_instance = tool_class()
585
- tool_name = tool_class.__name__
586
- tools_dict[tool_name] = tool_instance
587
- self.logger.debug(f"Added tool: {tool_name}")
588
- except Exception as e:
589
- self.logger.warning(f"Failed to instantiate tool class {tool_class.__name__}: {e}")
590
-
591
- root_directory = os.getcwd()
592
- tools_py_path = os.path.join(root_directory, 'tools.py')
593
- tools_dir_path = Path(root_directory) / 'tools'
594
-
595
- # Use consolidated ToolResolver for tools.py loading
596
- tools_dict.update(self.tool_resolver.get_local_tool_classes())
597
- if os.path.isfile(tools_py_path):
598
- self.logger.debug("tools.py exists in the root directory. Loading tools.py and skipping tools folder.")
599
- elif tools_dir_path.is_dir():
600
- tools_dict.update(self.tool_resolver.get_local_tool_classes_from_dir(tools_dir_path))
601
- if tools_dict:
602
- self.logger.debug("tools folder exists in the root directory")
603
-
604
- framework = self.framework or config.get('framework', 'crewai')
605
-
606
- # AutoGen version selection logic
607
- if framework == "autogen":
608
- autogen_v4_adapter = self._get_framework_adapter("autogen_v4")
609
- autogen_v2_adapter = self._get_framework_adapter("autogen")
610
-
611
- autogen_version = str(
612
- config.get('autogen_version', os.environ.get("AUTOGEN_VERSION", "auto"))
613
- ).lower()
614
- use_v4 = False
615
-
616
- if autogen_version == "v0.4" and autogen_v4_adapter.is_available():
617
- use_v4 = True
618
- elif autogen_version == "v0.2" and autogen_v2_adapter.is_available():
619
- use_v4 = False
620
- elif autogen_version == "auto":
621
- use_v4 = autogen_v4_adapter.is_available()
622
- else:
623
- use_v4 = autogen_v4_adapter.is_available() and not autogen_v2_adapter.is_available()
624
-
625
- framework = "autogen_v4" if use_v4 else "autogen"
626
-
627
- # Validate cli_backend compatibility
628
- self._validate_cli_backend_compatibility(config, framework)
629
-
630
- # Get framework adapter and resolve to concrete variant
631
- adapter = self._get_framework_adapter(framework).resolve()
632
-
633
- # Validate framework availability early
634
- from .framework_adapters.validators import assert_framework_available
635
- assert_framework_available(adapter.name)
636
-
637
- # Initialize observability hooks
638
- from .observability.hooks import init_observability
639
- init_observability(adapter.name)
640
-
641
- # Run adapter setup hooks
642
- adapter.setup(framework_tag=adapter.name)
643
-
644
- # Update framework reference if resolution changed it
645
- self.framework = adapter.name
646
- self.framework_adapter = adapter
647
-
648
- self.logger.info(f"Using framework: {adapter.name}")
649
- return config, adapter, tools_dict, topic
650
691
 
651
692
  async def agenerate_crew_and_kickoff(self):
652
693
  """
@@ -682,12 +723,15 @@ class AgentsGenerator:
682
723
 
683
724
  async def _arun_framework(self, config):
684
725
  """Async version of _run_framework with shared preparation logic."""
685
- config, adapter, tools_dict, topic = self._prepare(config)
686
- return await adapter.arun(
687
- config,
726
+ # Use shared preparation logic
727
+ prep = self._prepare_for_run(config)
728
+
729
+ self.logger.info(f"Using framework: {prep['adapter'].name}")
730
+ return await prep['adapter'].arun(
731
+ prep['config'],
688
732
  self.config_list,
689
- topic,
690
- tools_dict=tools_dict,
733
+ prep['topic'],
734
+ tools_dict=prep['tools_dict'],
691
735
  agent_callback=getattr(self, 'agent_callback', None),
692
736
  task_callback=getattr(self, 'task_callback', None),
693
737
  cli_config=getattr(self, 'cli_config', None),
@@ -419,11 +419,13 @@ class EmailBot(ChatCommandMixin, MessageHookMixin):
419
419
  reply_to: Optional[str] = None,
420
420
  thread_id: Optional[str] = None,
421
421
  ) -> BotMessage:
422
- """Send an email message.
422
+ """Send an email message with optional CC and BCC recipients.
423
423
 
424
424
  Args:
425
425
  channel_id: Recipient email address
426
- content: Message content (str or {"subject": ..., "body": ...})
426
+ content: Message content. Can be:
427
+ - str: Plain text message body
428
+ - dict: {"subject": str, "body": str, "html": str, "cc": str/list, "bcc": str/list}
427
429
  reply_to: Message-ID to reply to (sets In-Reply-To header)
428
430
  thread_id: References chain (sets References header)
429
431
 
@@ -439,10 +441,14 @@ class EmailBot(ChatCommandMixin, MessageHookMixin):
439
441
  subject = content.get("subject", "Message from PraisonAI")
440
442
  body = content.get("body", "")
441
443
  html = content.get("html")
444
+ cc = content.get("cc")
445
+ bcc = content.get("bcc")
442
446
  else:
443
447
  subject = "Message from PraisonAI"
444
448
  body = str(content)
445
449
  html = None
450
+ cc = None
451
+ bcc = None
446
452
 
447
453
  # Build email
448
454
  if html:
@@ -456,6 +462,18 @@ class EmailBot(ChatCommandMixin, MessageHookMixin):
456
462
  msg["To"] = channel_id
457
463
  msg["Subject"] = subject
458
464
 
465
+ # Add CC and BCC headers if provided
466
+ from praisonaiagents.tools.email_tools import _parse_email_list
467
+ all_recipients = [channel_id]
468
+ if cc:
469
+ cc_list = _parse_email_list(cc)
470
+ msg["CC"] = ", ".join(cc_list)
471
+ all_recipients.extend(cc_list)
472
+ if bcc:
473
+ bcc_list = _parse_email_list(bcc)
474
+ all_recipients.extend(bcc_list)
475
+ # Note: BCC is not added to headers (by design)
476
+
459
477
  # Generate unique Message-ID
460
478
  domain = self._email_address.split("@")[-1]
461
479
  message_id = f"<{hashlib.sha256(f'{time.time()}{channel_id}'.encode()).hexdigest()}@{domain}>"
@@ -473,7 +491,7 @@ class EmailBot(ChatCommandMixin, MessageHookMixin):
473
491
 
474
492
  # Send via SMTP
475
493
  loop = asyncio.get_event_loop()
476
- await loop.run_in_executor(None, self._send_smtp, msg)
494
+ await loop.run_in_executor(None, self._send_smtp, msg, all_recipients)
477
495
 
478
496
  # Create BotMessage for return
479
497
  bot_message = BotMessage(
@@ -492,12 +510,12 @@ class EmailBot(ChatCommandMixin, MessageHookMixin):
492
510
 
493
511
  return bot_message
494
512
 
495
- def _send_smtp(self, msg: MIMEText) -> None:
513
+ def _send_smtp(self, msg: MIMEText, to_addrs: List[str]) -> None:
496
514
  """Send email via SMTP (sync, runs in executor)."""
497
515
  with smtplib.SMTP(self._smtp_server, self._smtp_port) as server:
498
516
  server.starttls()
499
517
  server.login(self._email_address, self._token)
500
- server.send_message(msg)
518
+ server.send_message(msg, to_addrs=to_addrs)
501
519
 
502
520
  async def edit_message(
503
521
  self,
@@ -989,6 +989,7 @@ class PraisonAI:
989
989
  # Memory arguments
990
990
  parser.add_argument("--memory", action="store_true", help="Enable file-based memory for agent")
991
991
  parser.add_argument("--user-id", type=str, help="User ID for memory isolation")
992
+ parser.add_argument("--message-steering", action="store_true", help="Enable real-time message steering for agents during execution")
992
993
 
993
994
  # Session management arguments
994
995
  parser.add_argument("--auto-save", type=str, metavar="NAME", help="Auto-save session with given name after each run")
@@ -1095,6 +1096,16 @@ class PraisonAI:
1095
1096
  parser.add_argument("--tool-timeout", type=int, default=60,
1096
1097
  help="Timeout in seconds for each tool call (default: 60)")
1097
1098
 
1099
+ # Tool retry policy - handle transient failures with exponential backoff
1100
+ parser.add_argument("--tool-retry-attempts", type=int, default=3,
1101
+ help="Maximum retry attempts for tool failures (default: 3)")
1102
+ parser.add_argument("--tool-retry-delay", type=int, default=1000,
1103
+ help="Initial retry delay in milliseconds (default: 1000)")
1104
+ parser.add_argument("--tool-retry-backoff", type=float, default=2.0,
1105
+ help="Retry backoff multiplier (default: 2.0)")
1106
+ parser.add_argument("--tool-retry-on", type=str, default="timeout,rate_limit,connection_error",
1107
+ help="Error types to retry (comma-separated, default: timeout,rate_limit,connection_error)")
1108
+
1098
1109
  # Tool Approval - control tool execution approval
1099
1110
  parser.add_argument("--trust", action="store_true", help="Auto-approve all tool executions (skip approval prompts)")
1100
1111
  parser.add_argument("--approve-level", type=str, choices=["low", "medium", "high", "critical"],
@@ -4137,6 +4148,22 @@ Do NOT add any explanations or formatting."""
4137
4148
  tool_timeout = getattr(self.args, 'tool_timeout', None)
4138
4149
  if tool_timeout is not None:
4139
4150
  cli_config['tool_timeout'] = tool_timeout
4151
+
4152
+ # Extract --tool-retry-* flags for retry policy
4153
+ retry_attempts = getattr(self.args, 'tool_retry_attempts', 3)
4154
+ retry_delay = getattr(self.args, 'tool_retry_delay', 1000)
4155
+ retry_backoff = getattr(self.args, 'tool_retry_backoff', 2.0)
4156
+ retry_on_str = getattr(self.args, 'tool_retry_on', "timeout,rate_limit,connection_error")
4157
+ retry_on = set(error_type.strip() for error_type in retry_on_str.split(',') if error_type.strip())
4158
+
4159
+ if retry_attempts > 1: # Only create retry policy if retries are enabled
4160
+ from praisonaiagents.tools.retry import RetryPolicy
4161
+ cli_config['tool_retry_policy'] = RetryPolicy(
4162
+ max_attempts=retry_attempts,
4163
+ initial_delay_ms=retry_delay,
4164
+ backoff_factor=retry_backoff,
4165
+ retry_on=retry_on
4166
+ )
4140
4167
 
4141
4168
  # Extract --planning-tools flag
4142
4169
  planning_tools = getattr(self.args, 'planning_tools', None)
@@ -4395,6 +4422,22 @@ Do NOT add any explanations or formatting."""
4395
4422
  if tool_timeout and tool_timeout > 0:
4396
4423
  agent_config["tool_timeout"] = tool_timeout
4397
4424
 
4425
+ # Tool retry policy - handle transient failures with exponential backoff
4426
+ retry_attempts = getattr(self.args, 'tool_retry_attempts', 3)
4427
+ retry_delay = getattr(self.args, 'tool_retry_delay', 1000)
4428
+ retry_backoff = getattr(self.args, 'tool_retry_backoff', 2.0)
4429
+ retry_on_str = getattr(self.args, 'tool_retry_on', "timeout,rate_limit,connection_error")
4430
+ retry_on = set(error_type.strip() for error_type in retry_on_str.split(',') if error_type.strip())
4431
+
4432
+ if retry_attempts > 1: # Only create retry policy if retries are enabled
4433
+ from praisonaiagents.tools.retry import RetryPolicy
4434
+ agent_config["tool_retry_policy"] = RetryPolicy(
4435
+ max_attempts=retry_attempts,
4436
+ initial_delay_ms=retry_delay,
4437
+ backoff_factor=retry_backoff,
4438
+ retry_on=retry_on
4439
+ )
4440
+
4398
4441
  # Memory
4399
4442
  if getattr(self.args, 'memory', False):
4400
4443
  memory_kwargs = {}
@@ -4434,6 +4477,11 @@ Do NOT add any explanations or formatting."""
4434
4477
  else:
4435
4478
  print("[yellow]Warning: --claude-memory requires an Anthropic model (--llm anthropic/...)[/yellow]")
4436
4479
 
4480
+ # Message Steering
4481
+ if getattr(self.args, 'message_steering', False):
4482
+ agent_config["message_steering"] = True
4483
+ print("[bold cyan]Message steering enabled - agent can receive guidance during execution[/bold cyan]")
4484
+
4437
4485
  # ===== NEW CLI FEATURES INTEGRATION =====
4438
4486
 
4439
4487
  # Tool Approval - Auto-approve tools based on --trust or --approve-level