PraisonAI 4.6.28__tar.gz → 4.6.30__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 (785) hide show
  1. {praisonai-4.6.28 → praisonai-4.6.30}/PKG-INFO +2 -2
  2. {praisonai-4.6.28 → praisonai-4.6.30}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.28 → praisonai-4.6.30}/PraisonAI.egg-info/SOURCES.txt +17 -15
  4. {praisonai-4.6.28 → praisonai-4.6.30}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/__init__.py +14 -2
  6. praisonai-4.6.30/praisonai/_async_bridge.py +101 -0
  7. praisonai-4.6.30/praisonai/agent.py +63 -0
  8. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/agents_generator.py +83 -25
  9. praisonai-4.6.30/praisonai/bots/_auth.py +140 -0
  10. praisonai-4.6.30/praisonai/bots/_defaults.py +322 -0
  11. praisonai-4.6.30/praisonai/bots/_pairing_ui.py +263 -0
  12. praisonai-4.6.30/praisonai/bots/_unknown_user.py +172 -0
  13. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/bot.py +13 -72
  14. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/discord.py +130 -2
  15. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/slack.py +115 -2
  16. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/telegram.py +107 -3
  17. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/app.py +2 -0
  18. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/gateway.py +41 -0
  19. praisonai-4.6.30/praisonai/cli/commands/mint_link.py +63 -0
  20. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/onboard.py +21 -1
  21. praisonai-4.6.30/praisonai/cli/commands/pairing.py +169 -0
  22. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/realtime.py +17 -13
  23. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/serve.py +5 -5
  24. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/ui.py +2 -3
  25. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/env_checks.py +1 -1
  26. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/onboard.py +124 -23
  27. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/main.py +63 -116
  28. praisonai-4.6.30/praisonai/cli_backends/__init__.py +31 -0
  29. praisonai-4.6.30/praisonai/cli_backends/claude.py +349 -0
  30. praisonai-4.6.30/praisonai/cli_backends/registry.py +101 -0
  31. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy.py +1 -1
  32. praisonai-4.6.30/praisonai/gateway/auth.py +125 -0
  33. praisonai-4.6.30/praisonai/gateway/cookie_auth.py +241 -0
  34. praisonai-4.6.30/praisonai/gateway/magic_link.py +390 -0
  35. praisonai-4.6.30/praisonai/gateway/origin_check.py +77 -0
  36. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/pairing.py +130 -9
  37. praisonai-4.6.30/praisonai/gateway/pairing_routes.py +147 -0
  38. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/server.py +262 -10
  39. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/__init__.py +12 -4
  40. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/managed_agents.py +340 -10
  41. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/managed_local.py +9 -0
  42. praisonai-4.6.30/praisonai/integrations/sandboxed_agent.py +40 -0
  43. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui/_external_agents.py +2 -68
  44. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui_realtime/default_app.py +15 -17
  45. praisonai-4.6.30/praisonai/version.py +1 -0
  46. {praisonai-4.6.28 → praisonai-4.6.30}/pyproject.toml +1 -1
  47. praisonai-4.6.30/tests/test_sandboxed_agent_compatibility.py +92 -0
  48. praisonai-4.6.28/praisonai/_async_bridge.py +0 -61
  49. praisonai-4.6.28/praisonai/chainlit_ui.py +0 -304
  50. praisonai-4.6.28/praisonai/chat/__init__.py +0 -106
  51. praisonai-4.6.28/praisonai/chat/app.py +0 -125
  52. praisonai-4.6.28/praisonai/ui/agents.py +0 -877
  53. praisonai-4.6.28/praisonai/ui/bot.py +0 -426
  54. praisonai-4.6.28/praisonai/ui/chainlit_compat.py +0 -246
  55. praisonai-4.6.28/praisonai/ui/chat.py +0 -889
  56. praisonai-4.6.28/praisonai/ui/code.py +0 -789
  57. praisonai-4.6.28/praisonai/ui/colab.py +0 -474
  58. praisonai-4.6.28/praisonai/ui/colab_chainlit.py +0 -81
  59. praisonai-4.6.28/praisonai/ui/db.py +0 -294
  60. praisonai-4.6.28/praisonai/ui/realtime.py +0 -494
  61. praisonai-4.6.28/praisonai/ui/realtimeclient/__init__.py +0 -756
  62. praisonai-4.6.28/praisonai/ui/realtimeclient/tools.py +0 -242
  63. praisonai-4.6.28/praisonai/ui/sql_alchemy.py +0 -715
  64. praisonai-4.6.28/praisonai/version.py +0 -1
  65. {praisonai-4.6.28 → praisonai-4.6.30}/PraisonAI.egg-info/dependency_links.txt +0 -0
  66. {praisonai-4.6.28 → praisonai-4.6.30}/PraisonAI.egg-info/entry_points.txt +0 -0
  67. {praisonai-4.6.28 → praisonai-4.6.30}/PraisonAI.egg-info/top_level.txt +0 -0
  68. {praisonai-4.6.28 → praisonai-4.6.30}/README.md +0 -0
  69. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/__main__.py +0 -0
  70. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_approval_spec.py +0 -0
  71. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/__init__.py +0 -0
  72. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/api_md.py +0 -0
  73. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/__init__.py +0 -0
  74. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/docs_extractor.py +0 -0
  75. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/docs_generator.py +0 -0
  76. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/generator.py +0 -0
  77. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  78. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/python_extractor.py +0 -0
  79. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  80. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/rust_extractor.py +0 -0
  81. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  82. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  83. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  84. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/_logging.py +0 -0
  85. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/acp/__init__.py +0 -0
  86. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/acp/config.py +0 -0
  87. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/acp/safe_edit.py +0 -0
  88. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/acp/server.py +0 -0
  89. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/acp/session.py +0 -0
  90. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/adapters/__init__.py +0 -0
  91. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/adapters/readers.py +0 -0
  92. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/adapters/rerankers.py +0 -0
  93. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/adapters/retrievers.py +0 -0
  94. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/adapters/vector_stores.py +0 -0
  95. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/agent_scheduler.py +0 -0
  96. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/api/agent_invoke.py +0 -0
  97. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/api/call.py +0 -0
  98. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/app/__init__.py +0 -0
  99. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/app/agentos.py +0 -0
  100. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/async_agent_scheduler.py +0 -0
  101. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/audit/__init__.py +0 -0
  102. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/audit/agent_centric.py +0 -0
  103. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/auto.py +0 -0
  104. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/__init__.py +0 -0
  105. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_ack.py +0 -0
  106. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_approval.py +0 -0
  107. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_approval_base.py +0 -0
  108. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_chunk.py +0 -0
  109. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_commands.py +0 -0
  110. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_config_schema.py +0 -0
  111. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_debounce.py +0 -0
  112. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_discord_approval.py +0 -0
  113. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_email_utils.py +0 -0
  114. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_http_approval.py +0 -0
  115. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_protocol_mixin.py +0 -0
  116. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_rate_limit.py +0 -0
  117. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_registry.py +0 -0
  118. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_resilience.py +0 -0
  119. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_session.py +0 -0
  120. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_slack_approval.py +0 -0
  121. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_telegram_approval.py +0 -0
  122. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_webhook_approval.py +0 -0
  123. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  124. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/agentmail.py +0 -0
  125. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/botos.py +0 -0
  126. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/email.py +0 -0
  127. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/media.py +0 -0
  128. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/bots/whatsapp.py +0 -0
  129. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/__init__.py +0 -0
  130. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/agent.py +0 -0
  131. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/benchmark.py +0 -0
  132. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/cdp_agent.py +0 -0
  133. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/cdp_utils.py +0 -0
  134. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/cli.py +0 -0
  135. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/diagnostics.py +0 -0
  136. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/launcher.py +0 -0
  137. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/playwright_agent.py +0 -0
  138. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/profiling.py +0 -0
  139. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/protocol.py +0 -0
  140. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/report.py +0 -0
  141. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/server.py +0 -0
  142. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/sessions.py +0 -0
  143. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/browser/video.py +0 -0
  144. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/__init__.py +0 -0
  145. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/a2a.py +0 -0
  146. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/assistants.py +0 -0
  147. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/audio.py +0 -0
  148. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/batches.py +0 -0
  149. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/completions.py +0 -0
  150. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/container_files.py +0 -0
  151. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/containers.py +0 -0
  152. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/embeddings.py +0 -0
  153. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/files.py +0 -0
  154. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/fine_tuning.py +0 -0
  155. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/guardrails.py +0 -0
  156. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/images.py +0 -0
  157. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/mcp.py +0 -0
  158. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/messages.py +0 -0
  159. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/moderations.py +0 -0
  160. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/ocr.py +0 -0
  161. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/passthrough.py +0 -0
  162. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/rag.py +0 -0
  163. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/realtime.py +0 -0
  164. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/rerank.py +0 -0
  165. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/responses.py +0 -0
  166. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/search.py +0 -0
  167. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/skills.py +0 -0
  168. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/vector_store_files.py +0 -0
  169. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/vector_stores.py +0 -0
  170. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/capabilities/videos.py +0 -0
  171. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/claw/__init__.py +0 -0
  172. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/claw/default_app.py +0 -0
  173. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/__init__.py +0 -0
  174. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/_paths.py +0 -0
  175. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/branding.py +0 -0
  176. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/__init__.py +0 -0
  177. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/acp.py +0 -0
  178. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/agents.py +0 -0
  179. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/app.py +0 -0
  180. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/audit.py +0 -0
  181. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/batch.py +0 -0
  182. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/benchmark.py +0 -0
  183. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/bot.py +0 -0
  184. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/browser.py +0 -0
  185. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/call.py +0 -0
  186. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/chat.py +0 -0
  187. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/claw.py +0 -0
  188. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/code.py +0 -0
  189. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/commit.py +0 -0
  190. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/completion.py +0 -0
  191. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/config.py +0 -0
  192. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/context.py +0 -0
  193. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/dashboard.py +0 -0
  194. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/debug.py +0 -0
  195. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/deploy.py +0 -0
  196. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/diag.py +0 -0
  197. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/docs.py +0 -0
  198. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/doctor.py +0 -0
  199. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/endpoints.py +0 -0
  200. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/environment.py +0 -0
  201. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/eval.py +0 -0
  202. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/examples.py +0 -0
  203. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/flow.py +0 -0
  204. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/github.py +0 -0
  205. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/hooks.py +0 -0
  206. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/knowledge.py +0 -0
  207. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/langextract.py +0 -0
  208. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/langfuse.py +0 -0
  209. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/loop.py +0 -0
  210. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/lsp.py +0 -0
  211. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/managed.py +0 -0
  212. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/mcp.py +0 -0
  213. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/memory.py +0 -0
  214. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/n8n.py +0 -0
  215. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/obs.py +0 -0
  216. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/package.py +0 -0
  217. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/paths.py +0 -0
  218. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/plugins.py +0 -0
  219. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/port.py +0 -0
  220. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/profile.py +0 -0
  221. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/publish.py +0 -0
  222. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/rag.py +0 -0
  223. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/recipe.py +0 -0
  224. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/registry.py +0 -0
  225. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/replay.py +0 -0
  226. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/research.py +0 -0
  227. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/retrieval.py +0 -0
  228. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/rules.py +0 -0
  229. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/run.py +0 -0
  230. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/sandbox.py +0 -0
  231. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/schedule.py +0 -0
  232. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/session.py +0 -0
  233. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/setup.py +0 -0
  234. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/skills.py +0 -0
  235. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/standardise.py +0 -0
  236. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/templates.py +0 -0
  237. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/test.py +0 -0
  238. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/todo.py +0 -0
  239. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/tools.py +0 -0
  240. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/traces.py +0 -0
  241. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/tracker.py +0 -0
  242. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/train.py +0 -0
  243. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/up.py +0 -0
  244. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/version.py +0 -0
  245. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/commands/workflow.py +0 -0
  246. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/config_loader.py +0 -0
  247. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/configuration/__init__.py +0 -0
  248. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/configuration/loader.py +0 -0
  249. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/configuration/paths.py +0 -0
  250. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/configuration/schema.py +0 -0
  251. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/execution/__init__.py +0 -0
  252. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/execution/core.py +0 -0
  253. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/execution/profiler.py +0 -0
  254. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/execution/request.py +0 -0
  255. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/execution/result.py +0 -0
  256. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/fallback_schema.py +0 -0
  257. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/__init__.py +0 -0
  258. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/acp.py +0 -0
  259. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/action_orchestrator.py +0 -0
  260. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/agent_scheduler.py +0 -0
  261. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/agent_tools.py +0 -0
  262. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/agents.py +0 -0
  263. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/approval.py +0 -0
  264. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/at_mentions.py +0 -0
  265. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/audit_cli.py +0 -0
  266. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/auto_memory.py +0 -0
  267. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/auto_mode.py +0 -0
  268. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/autonomy_mode.py +0 -0
  269. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/background.py +0 -0
  270. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/base.py +0 -0
  271. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/benchmark.py +0 -0
  272. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/bots_cli.py +0 -0
  273. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/capabilities.py +0 -0
  274. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/checkpoints.py +0 -0
  275. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/cli_profiler.py +0 -0
  276. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/code_intelligence.py +0 -0
  277. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/compaction.py +0 -0
  278. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/compare.py +0 -0
  279. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/config_hierarchy.py +0 -0
  280. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/context_manager.py +0 -0
  281. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/cost_tracker.py +0 -0
  282. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/csv_test_runner.py +0 -0
  283. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/debug.py +0 -0
  284. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/deploy.py +0 -0
  285. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/diag.py +0 -0
  286. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/display_jsonl.py +0 -0
  287. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/__init__.py +0 -0
  288. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  289. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  290. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  291. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  292. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  293. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  294. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  295. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  296. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  297. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  298. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  299. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  300. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  301. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  302. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  303. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  304. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/engine.py +0 -0
  305. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/formatters.py +0 -0
  306. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/handler.py +0 -0
  307. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/models.py +0 -0
  308. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/doctor/registry.py +0 -0
  309. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/endpoints.py +0 -0
  310. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/eval.py +0 -0
  311. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/examples.py +0 -0
  312. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/external_agents.py +0 -0
  313. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/fast_context.py +0 -0
  314. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/file_history.py +0 -0
  315. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/flow_display.py +0 -0
  316. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/gateway.py +0 -0
  317. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/git_attribution.py +0 -0
  318. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/git_integration.py +0 -0
  319. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/guardrail.py +0 -0
  320. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/handoff.py +0 -0
  321. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/hooks.py +0 -0
  322. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/hybrid_workflow.py +0 -0
  323. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/image.py +0 -0
  324. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/interactive_core_headless.py +0 -0
  325. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/interactive_runtime.py +0 -0
  326. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/interactive_test_harness.py +0 -0
  327. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/interactive_tools.py +0 -0
  328. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/interactive_tui.py +0 -0
  329. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/job_workflow.py +0 -0
  330. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/jobs.py +0 -0
  331. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/knowledge.py +0 -0
  332. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/knowledge_cli.py +0 -0
  333. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/lite.py +0 -0
  334. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/logs.py +0 -0
  335. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/lsp_cli.py +0 -0
  336. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  337. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/mcp.py +0 -0
  338. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/message_queue.py +0 -0
  339. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/metrics.py +0 -0
  340. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/migrate.py +0 -0
  341. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/migration_flow.py +0 -0
  342. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/migration_spec.py +0 -0
  343. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/n8n.py +0 -0
  344. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/observability.py +0 -0
  345. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/ollama.py +0 -0
  346. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/output_modes.py +0 -0
  347. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/output_style.py +0 -0
  348. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/package.py +0 -0
  349. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/performance.py +0 -0
  350. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/persistence.py +0 -0
  351. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/plugin_cli.py +0 -0
  352. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/profile.py +0 -0
  353. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/profiler/__init__.py +0 -0
  354. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/profiler/core.py +0 -0
  355. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/profiler/optimizations.py +0 -0
  356. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/profiler/suite.py +0 -0
  357. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/profiling.py +0 -0
  358. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/queue/__init__.py +0 -0
  359. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/queue/manager.py +0 -0
  360. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/queue/models.py +0 -0
  361. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/queue/persistence.py +0 -0
  362. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/queue/scheduler.py +0 -0
  363. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/queue/worker.py +0 -0
  364. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/recipe.py +0 -0
  365. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/recipe_creator.py +0 -0
  366. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/recipe_optimizer.py +0 -0
  367. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/recipe_prompts.py +0 -0
  368. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/recipes.py +0 -0
  369. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/registry.py +0 -0
  370. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/repo_map.py +0 -0
  371. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/router.py +0 -0
  372. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/safe_shell.py +0 -0
  373. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/sandbox_cli.py +0 -0
  374. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/sandbox_executor.py +0 -0
  375. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/sdk_knowledge.py +0 -0
  376. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/serve.py +0 -0
  377. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/session.py +0 -0
  378. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/setup/__init__.py +0 -0
  379. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/setup/handler.py +0 -0
  380. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/setup/templates.py +0 -0
  381. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/skills.py +0 -0
  382. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/slash_commands.py +0 -0
  383. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/telemetry.py +0 -0
  384. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/templates.py +0 -0
  385. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/thinking.py +0 -0
  386. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/todo.py +0 -0
  387. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tools.py +0 -0
  388. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/__init__.py +0 -0
  389. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/app.py +0 -0
  390. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/cli.py +0 -0
  391. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/config.py +0 -0
  392. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/debug.py +0 -0
  393. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/events.py +0 -0
  394. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/mock_provider.py +0 -0
  395. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/orchestrator.py +0 -0
  396. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  397. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/screens/help.py +0 -0
  398. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/screens/main.py +0 -0
  399. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/screens/queue.py +0 -0
  400. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/screens/session.py +0 -0
  401. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/screens/settings.py +0 -0
  402. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/session_store.py +0 -0
  403. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  404. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  405. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  406. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  407. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  408. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  409. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/widgets/status.py +0 -0
  410. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  411. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/wizard.py +0 -0
  412. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/workflow.py +0 -0
  413. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/features/yaml_utils.py +0 -0
  414. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/__init__.py +0 -0
  415. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/async_tui.py +0 -0
  416. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/config.py +0 -0
  417. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/core.py +0 -0
  418. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/events.py +0 -0
  419. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  420. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  421. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  422. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/praison_io.py +0 -0
  423. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/repl.py +0 -0
  424. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/split_tui.py +0 -0
  425. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/interactive/tui_app.py +0 -0
  426. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/langfuse_client.py +0 -0
  427. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/legacy.py +0 -0
  428. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/output/__init__.py +0 -0
  429. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/output/console.py +0 -0
  430. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/schedule_cli.py +0 -0
  431. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/schema_provider.py +0 -0
  432. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/session/__init__.py +0 -0
  433. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/session/unified.py +0 -0
  434. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/state/__init__.py +0 -0
  435. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/state/identifiers.py +0 -0
  436. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/state/sessions.py +0 -0
  437. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/ui/__init__.py +0 -0
  438. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/ui/config.py +0 -0
  439. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/ui/events.py +0 -0
  440. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/ui/mg_backend.py +0 -0
  441. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/ui/plain.py +0 -0
  442. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/ui/rich_backend.py +0 -0
  443. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/cli/unified_schema.py +0 -0
  444. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/__init__.py +0 -0
  445. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/agent_tools.py +0 -0
  446. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/diff/__init__.py +0 -0
  447. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/diff/diff_strategy.py +0 -0
  448. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/tools/__init__.py +0 -0
  449. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/tools/apply_diff.py +0 -0
  450. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/tools/execute_command.py +0 -0
  451. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/tools/list_files.py +0 -0
  452. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/tools/read_file.py +0 -0
  453. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/tools/search_replace.py +0 -0
  454. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/tools/write_file.py +0 -0
  455. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/utils/__init__.py +0 -0
  456. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/utils/file_utils.py +0 -0
  457. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/utils/ignore_utils.py +0 -0
  458. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/code/utils/text_utils.py +0 -0
  459. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/context/__init__.py +0 -0
  460. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/context/artifact_store.py +0 -0
  461. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/context/config.py +0 -0
  462. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/context/history_store.py +0 -0
  463. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/context/queue.py +0 -0
  464. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/context/setup.py +0 -0
  465. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/context/terminal_logger.py +0 -0
  466. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/daemon/__init__.py +0 -0
  467. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/daemon/launchd.py +0 -0
  468. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/daemon/systemd.py +0 -0
  469. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/daemon/windows.py +0 -0
  470. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/db/__init__.py +0 -0
  471. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/db/adapter.py +0 -0
  472. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/__init__.py +0 -0
  473. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/api.py +0 -0
  474. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/docker.py +0 -0
  475. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/doctor.py +0 -0
  476. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/main.py +0 -0
  477. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/models.py +0 -0
  478. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/providers/__init__.py +0 -0
  479. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/providers/aws.py +0 -0
  480. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/providers/azure.py +0 -0
  481. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/providers/base.py +0 -0
  482. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/providers/gcp.py +0 -0
  483. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/deploy/schema.py +0 -0
  484. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/docs_runner/__init__.py +0 -0
  485. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/docs_runner/classifier.py +0 -0
  486. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/docs_runner/executor.py +0 -0
  487. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/docs_runner/extractor.py +0 -0
  488. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/docs_runner/reporter.py +0 -0
  489. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/docs_runner/runner.py +0 -0
  490. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/docs_runner/workspace.py +0 -0
  491. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/__init__.py +0 -0
  492. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/a2u_server.py +0 -0
  493. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/discovery.py +0 -0
  494. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/providers/__init__.py +0 -0
  495. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/providers/a2a.py +0 -0
  496. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/providers/a2u.py +0 -0
  497. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/providers/agents_api.py +0 -0
  498. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/providers/base.py +0 -0
  499. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/providers/mcp.py +0 -0
  500. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/providers/recipe.py +0 -0
  501. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  502. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/registry.py +0 -0
  503. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/endpoints/server.py +0 -0
  504. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/flow/__init__.py +0 -0
  505. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/flow/client.py +0 -0
  506. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  507. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  508. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/flow/components/__init__.py +0 -0
  509. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/flow/converter.py +0 -0
  510. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/flow/helpers.py +0 -0
  511. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/framework_adapters/__init__.py +0 -0
  512. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  513. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/framework_adapters/base.py +0 -0
  514. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  515. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  516. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/__init__.py +0 -0
  517. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/exec_approval.py +0 -0
  518. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/gateway_approval.py +0 -0
  519. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/push_channels.py +0 -0
  520. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/push_delivery.py +0 -0
  521. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/push_polling.py +0 -0
  522. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/push_presence.py +0 -0
  523. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/rate_limiter.py +0 -0
  524. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/gateway/redis_pubsub.py +0 -0
  525. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/inbuilt_tools/__init__.py +0 -0
  526. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  527. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/inc/__init__.py +0 -0
  528. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/inc/config.py +0 -0
  529. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/inc/models.py +0 -0
  530. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/_session_info.py +0 -0
  531. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/_tool_aliases.py +0 -0
  532. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/base.py +0 -0
  533. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/claude_code.py +0 -0
  534. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/codex_cli.py +0 -0
  535. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/compute/__init__.py +0 -0
  536. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/compute/daytona.py +0 -0
  537. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/compute/docker.py +0 -0
  538. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/compute/e2b.py +0 -0
  539. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/compute/flyio.py +0 -0
  540. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/compute/local.py +0 -0
  541. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/compute/modal_compute.py +0 -0
  542. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/cursor_cli.py +0 -0
  543. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/db_session_adapter.py +0 -0
  544. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/gemini_cli.py +0 -0
  545. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/integrations/registry.py +0 -0
  546. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/jobs/__init__.py +0 -0
  547. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/jobs/executor.py +0 -0
  548. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/jobs/models.py +0 -0
  549. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/jobs/router.py +0 -0
  550. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/jobs/server.py +0 -0
  551. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/jobs/store.py +0 -0
  552. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/llm/__init__.py +0 -0
  553. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/llm/registry.py +0 -0
  554. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/__init__.py +0 -0
  555. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/adapters/__init__.py +0 -0
  556. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/adapters/agents.py +0 -0
  557. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  558. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  559. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  560. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  561. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/adapters/memory.py +0 -0
  562. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/adapters/prompts.py +0 -0
  563. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/adapters/resources.py +0 -0
  564. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  565. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/auth/__init__.py +0 -0
  566. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/auth/api_key.py +0 -0
  567. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/auth/oauth.py +0 -0
  568. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/auth/oidc.py +0 -0
  569. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/auth/scopes.py +0 -0
  570. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/cli.py +0 -0
  571. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/elicitation.py +0 -0
  572. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/icons.py +0 -0
  573. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/recipe_adapter.py +0 -0
  574. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/recipe_cli.py +0 -0
  575. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/registry.py +0 -0
  576. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/sampling.py +0 -0
  577. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/server.py +0 -0
  578. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/tasks.py +0 -0
  579. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/tool_index.py +0 -0
  580. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/transports/__init__.py +0 -0
  581. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/transports/http_stream.py +0 -0
  582. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/mcp_server/transports/stdio.py +0 -0
  583. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/n8n/__init__.py +0 -0
  584. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/n8n/client.py +0 -0
  585. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/n8n/converter.py +0 -0
  586. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/n8n/preview.py +0 -0
  587. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/n8n/reverse_converter.py +0 -0
  588. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/observability/__init__.py +0 -0
  589. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/observability/langextract.py +0 -0
  590. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/observability/langfuse.py +0 -0
  591. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/__init__.py +0 -0
  592. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/config.py +0 -0
  593. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/__init__.py +0 -0
  594. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/async_mysql.py +0 -0
  595. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/async_postgres.py +0 -0
  596. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  597. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/base.py +0 -0
  598. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/json_store.py +0 -0
  599. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/mysql.py +0 -0
  600. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/postgres.py +0 -0
  601. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/singlestore.py +0 -0
  602. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/sqlite.py +0 -0
  603. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/supabase.py +0 -0
  604. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/surrealdb.py +0 -0
  605. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/conversation/turso.py +0 -0
  606. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/factory.py +0 -0
  607. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/hooks/__init__.py +0 -0
  608. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  609. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/__init__.py +0 -0
  610. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/base.py +0 -0
  611. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/cassandra.py +0 -0
  612. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/chroma.py +0 -0
  613. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  614. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  615. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/couchbase.py +0 -0
  616. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/lancedb.py +0 -0
  617. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  618. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  619. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  620. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/milvus.py +0 -0
  621. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  622. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/pgvector.py +0 -0
  623. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/pinecone.py +0 -0
  624. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/qdrant.py +0 -0
  625. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  626. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  627. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  628. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  629. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/knowledge/weaviate.py +0 -0
  630. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/migrations/__init__.py +0 -0
  631. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/migrations/manager.py +0 -0
  632. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/orchestrator.py +0 -0
  633. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/state/__init__.py +0 -0
  634. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/state/async_mongodb.py +0 -0
  635. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/state/base.py +0 -0
  636. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/state/dynamodb.py +0 -0
  637. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/state/firestore.py +0 -0
  638. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/state/gcs.py +0 -0
  639. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/state/memory.py +0 -0
  640. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/state/mongodb.py +0 -0
  641. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/state/redis.py +0 -0
  642. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/state/upstash.py +0 -0
  643. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/tests/__init__.py +0 -0
  644. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/persistence/tests/test_all_backends.py +0 -0
  645. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/profiler.py +0 -0
  646. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/push/__init__.py +0 -0
  647. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/push/client.py +0 -0
  648. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/push/transports.py +0 -0
  649. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/__init__.py +0 -0
  650. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/bridge.py +0 -0
  651. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/core.py +0 -0
  652. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/exceptions.py +0 -0
  653. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/history.py +0 -0
  654. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/models.py +0 -0
  655. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/operations.py +0 -0
  656. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/policy.py +0 -0
  657. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/registry.py +0 -0
  658. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/runtime.py +0 -0
  659. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/security.py +0 -0
  660. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/serve.py +0 -0
  661. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/recipe/server.py +0 -0
  662. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/replay/__init__.py +0 -0
  663. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/replay/analyzer.py +0 -0
  664. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/replay/applier.py +0 -0
  665. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/replay/judge.py +0 -0
  666. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/replay/plan.py +0 -0
  667. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/replay/player.py +0 -0
  668. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/replay/reader.py +0 -0
  669. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/replay/storage.py +0 -0
  670. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/replay/writer.py +0 -0
  671. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/sandbox/__init__.py +0 -0
  672. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/sandbox/daytona.py +0 -0
  673. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/sandbox/docker.py +0 -0
  674. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/sandbox/modal.py +0 -0
  675. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/sandbox/sandlock.py +0 -0
  676. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/sandbox/ssh.py +0 -0
  677. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/sandbox/subprocess.py +0 -0
  678. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/scheduler/__init__.py +0 -0
  679. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/scheduler/agent_scheduler.py +0 -0
  680. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/scheduler/base.py +0 -0
  681. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/scheduler/daemon_manager.py +0 -0
  682. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/scheduler/executor.py +0 -0
  683. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/scheduler/shared.py +0 -0
  684. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/scheduler/state_manager.py +0 -0
  685. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/scheduler/yaml_loader.py +0 -0
  686. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/scheduler.py +0 -0
  687. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/security/__init__.py +0 -0
  688. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/security/audit.py +0 -0
  689. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/security/injection.py +0 -0
  690. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/security/protected.py +0 -0
  691. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/setup/__init__.py +0 -0
  692. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/setup/build.py +0 -0
  693. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/setup/post_install.py +0 -0
  694. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/setup/setup_conda_env.py +0 -0
  695. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/setup.py +0 -0
  696. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/__init__.py +0 -0
  697. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/ai_generator.py +0 -0
  698. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/config.py +0 -0
  699. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/dedupe.py +0 -0
  700. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/discovery.py +0 -0
  701. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/drift.py +0 -0
  702. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/engine.py +0 -0
  703. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/enhanced_templates.py +0 -0
  704. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/example_verifier.py +0 -0
  705. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/manifest.py +0 -0
  706. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/models.py +0 -0
  707. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/reports.py +0 -0
  708. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/templates.py +0 -0
  709. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/undo_redo.py +0 -0
  710. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/standardise/validator.py +0 -0
  711. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/storage/__init__.py +0 -0
  712. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/storage/dynamodb_adapter.py +0 -0
  713. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/storage/mongodb_adapter.py +0 -0
  714. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/storage/postgresql_adapter.py +0 -0
  715. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/storage/redis_adapter.py +0 -0
  716. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/__init__.py +0 -0
  717. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/batch_source.py +0 -0
  718. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/cli_docs_source.py +0 -0
  719. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/discovery.py +0 -0
  720. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/docs_source.py +0 -0
  721. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/examples_source.py +0 -0
  722. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/executor.py +0 -0
  723. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/models.py +0 -0
  724. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/report_viewer.py +0 -0
  725. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/reporter.py +0 -0
  726. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/suite_runner/runner.py +0 -0
  727. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/templates/__init__.py +0 -0
  728. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/templates/cache.py +0 -0
  729. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/templates/dependency_checker.py +0 -0
  730. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/templates/discovery.py +0 -0
  731. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/templates/loader.py +0 -0
  732. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/templates/registry.py +0 -0
  733. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/templates/resolver.py +0 -0
  734. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/templates/security.py +0 -0
  735. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/templates/tool_override.py +0 -0
  736. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/templates/tools_doctor.py +0 -0
  737. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/test.py +0 -0
  738. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/tool_registry.py +0 -0
  739. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/tool_resolver.py +0 -0
  740. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/tools/__init__.py +0 -0
  741. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/tools/audio.py +0 -0
  742. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/tools/glob_tool.py +0 -0
  743. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/tools/grep_tool.py +0 -0
  744. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/tools/multiedit.py +0 -0
  745. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/tools/skill_manage.py +0 -0
  746. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train/__init__.py +0 -0
  747. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train/agents/__init__.py +0 -0
  748. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train/agents/grader.py +0 -0
  749. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train/agents/hook.py +0 -0
  750. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train/agents/models.py +0 -0
  751. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train/agents/orchestrator.py +0 -0
  752. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train/agents/storage.py +0 -0
  753. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train/llm/__init__.py +0 -0
  754. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train/llm/trainer.py +0 -0
  755. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train.py +0 -0
  756. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/train_vision.py +0 -0
  757. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui/_aiui_datastore.py +0 -0
  758. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui/callbacks.py +0 -0
  759. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui/components/aicoder.py +0 -0
  760. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui/context.py +0 -0
  761. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui/database_config.py +0 -0
  762. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui_agents/__init__.py +0 -0
  763. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui_agents/default_app.py +0 -0
  764. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui_bot/__init__.py +0 -0
  765. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui_bot/default_app.py +0 -0
  766. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui_chat/__init__.py +0 -0
  767. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui_chat/default_app.py +0 -0
  768. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/ui_realtime/__init__.py +0 -0
  769. {praisonai-4.6.28 → praisonai-4.6.30}/praisonai/upload_vision.py +0 -0
  770. {praisonai-4.6.28 → praisonai-4.6.30}/setup.cfg +0 -0
  771. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test.py +0 -0
  772. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_agents_playbook.py +0 -0
  773. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_approval_system.py +0 -0
  774. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_basic.py +0 -0
  775. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_cli_features.py +0 -0
  776. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_custom_tools_fix.py +0 -0
  777. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_double_api_fix.py +0 -0
  778. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_n8n_agent_invoke.py +0 -0
  779. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_n8n_cli_feature.py +0 -0
  780. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_n8n_integration.py +0 -0
  781. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_phase2_refactor.py +0 -0
  782. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_recipe.py +0 -0
  783. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_registry.py +0 -0
  784. {praisonai-4.6.28 → praisonai-4.6.30}/tests/test_runner.py +0 -0
  785. {praisonai-4.6.28 → praisonai-4.6.30}/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.28
3
+ Version: 4.6.30
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.28
14
+ Requires-Dist: praisonaiagents>=1.6.30
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<=1.82.6,>=1.81.0
17
17
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.28
3
+ Version: 4.6.30
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.28
14
+ Requires-Dist: praisonaiagents>=1.6.30
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<=1.82.6,>=1.81.0
17
17
  Requires-Dist: PyYAML>=6.0
@@ -11,11 +11,11 @@ praisonai/__main__.py
11
11
  praisonai/_approval_spec.py
12
12
  praisonai/_async_bridge.py
13
13
  praisonai/_logging.py
14
+ praisonai/agent.py
14
15
  praisonai/agent_scheduler.py
15
16
  praisonai/agents_generator.py
16
17
  praisonai/async_agent_scheduler.py
17
18
  praisonai/auto.py
18
- praisonai/chainlit_ui.py
19
19
  praisonai/deploy.py
20
20
  praisonai/profiler.py
21
21
  praisonai/scheduler.py
@@ -60,13 +60,16 @@ praisonai/bots/__init__.py
60
60
  praisonai/bots/_ack.py
61
61
  praisonai/bots/_approval.py
62
62
  praisonai/bots/_approval_base.py
63
+ praisonai/bots/_auth.py
63
64
  praisonai/bots/_chunk.py
64
65
  praisonai/bots/_commands.py
65
66
  praisonai/bots/_config_schema.py
66
67
  praisonai/bots/_debounce.py
68
+ praisonai/bots/_defaults.py
67
69
  praisonai/bots/_discord_approval.py
68
70
  praisonai/bots/_email_utils.py
69
71
  praisonai/bots/_http_approval.py
72
+ praisonai/bots/_pairing_ui.py
70
73
  praisonai/bots/_protocol_mixin.py
71
74
  praisonai/bots/_rate_limit.py
72
75
  praisonai/bots/_registry.py
@@ -74,6 +77,7 @@ praisonai/bots/_resilience.py
74
77
  praisonai/bots/_session.py
75
78
  praisonai/bots/_slack_approval.py
76
79
  praisonai/bots/_telegram_approval.py
80
+ praisonai/bots/_unknown_user.py
77
81
  praisonai/bots/_webhook_approval.py
78
82
  praisonai/bots/_whatsapp_web_adapter.py
79
83
  praisonai/bots/agentmail.py
@@ -127,8 +131,6 @@ praisonai/capabilities/skills.py
127
131
  praisonai/capabilities/vector_store_files.py
128
132
  praisonai/capabilities/vector_stores.py
129
133
  praisonai/capabilities/videos.py
130
- praisonai/chat/__init__.py
131
- praisonai/chat/app.py
132
134
  praisonai/claw/__init__.py
133
135
  praisonai/claw/default_app.py
134
136
  praisonai/cli/__init__.py
@@ -182,10 +184,12 @@ praisonai/cli/commands/lsp.py
182
184
  praisonai/cli/commands/managed.py
183
185
  praisonai/cli/commands/mcp.py
184
186
  praisonai/cli/commands/memory.py
187
+ praisonai/cli/commands/mint_link.py
185
188
  praisonai/cli/commands/n8n.py
186
189
  praisonai/cli/commands/obs.py
187
190
  praisonai/cli/commands/onboard.py
188
191
  praisonai/cli/commands/package.py
192
+ praisonai/cli/commands/pairing.py
189
193
  praisonai/cli/commands/paths.py
190
194
  praisonai/cli/commands/plugins.py
191
195
  praisonai/cli/commands/port.py
@@ -411,6 +415,9 @@ praisonai/cli/ui/events.py
411
415
  praisonai/cli/ui/mg_backend.py
412
416
  praisonai/cli/ui/plain.py
413
417
  praisonai/cli/ui/rich_backend.py
418
+ praisonai/cli_backends/__init__.py
419
+ praisonai/cli_backends/claude.py
420
+ praisonai/cli_backends/registry.py
414
421
  praisonai/code/__init__.py
415
422
  praisonai/code/agent_tools.py
416
423
  praisonai/code/diff/__init__.py
@@ -484,9 +491,14 @@ praisonai/framework_adapters/base.py
484
491
  praisonai/framework_adapters/crewai_adapter.py
485
492
  praisonai/framework_adapters/praisonai_adapter.py
486
493
  praisonai/gateway/__init__.py
494
+ praisonai/gateway/auth.py
495
+ praisonai/gateway/cookie_auth.py
487
496
  praisonai/gateway/exec_approval.py
488
497
  praisonai/gateway/gateway_approval.py
498
+ praisonai/gateway/magic_link.py
499
+ praisonai/gateway/origin_check.py
489
500
  praisonai/gateway/pairing.py
501
+ praisonai/gateway/pairing_routes.py
490
502
  praisonai/gateway/push_channels.py
491
503
  praisonai/gateway/push_delivery.py
492
504
  praisonai/gateway/push_polling.py
@@ -511,6 +523,7 @@ praisonai/integrations/gemini_cli.py
511
523
  praisonai/integrations/managed_agents.py
512
524
  praisonai/integrations/managed_local.py
513
525
  praisonai/integrations/registry.py
526
+ praisonai/integrations/sandboxed_agent.py
514
527
  praisonai/integrations/compute/__init__.py
515
528
  praisonai/integrations/compute/daytona.py
516
529
  praisonai/integrations/compute/docker.py
@@ -723,22 +736,10 @@ praisonai/train/llm/__init__.py
723
736
  praisonai/train/llm/trainer.py
724
737
  praisonai/ui/_aiui_datastore.py
725
738
  praisonai/ui/_external_agents.py
726
- praisonai/ui/agents.py
727
- praisonai/ui/bot.py
728
739
  praisonai/ui/callbacks.py
729
- praisonai/ui/chainlit_compat.py
730
- praisonai/ui/chat.py
731
- praisonai/ui/code.py
732
- praisonai/ui/colab.py
733
- praisonai/ui/colab_chainlit.py
734
740
  praisonai/ui/context.py
735
741
  praisonai/ui/database_config.py
736
- praisonai/ui/db.py
737
- praisonai/ui/realtime.py
738
- praisonai/ui/sql_alchemy.py
739
742
  praisonai/ui/components/aicoder.py
740
- praisonai/ui/realtimeclient/__init__.py
741
- praisonai/ui/realtimeclient/tools.py
742
743
  praisonai/ui_agents/__init__.py
743
744
  praisonai/ui_agents/default_app.py
744
745
  praisonai/ui_bot/__init__.py
@@ -761,4 +762,5 @@ tests/test_phase2_refactor.py
761
762
  tests/test_recipe.py
762
763
  tests/test_registry.py
763
764
  tests/test_runner.py
765
+ tests/test_sandboxed_agent_compatibility.py
764
766
  tests/test_serve_features.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.28
4
+ praisonaiagents>=1.6.30
5
5
  python-dotenv>=0.19.0
6
6
  litellm<=1.82.6,>=1.81.0
7
7
  PyYAML>=6.0
@@ -15,6 +15,7 @@ __all__ = [
15
15
  'CloudProvider',
16
16
  'AgentOS', # Production deployment platform (v0.14.16+)
17
17
  'AgentApp', # Silent alias for AgentOS (backward compat)
18
+ 'Agent', # Wrapper Agent with CLI backend string resolution
18
19
  'recipe',
19
20
  'embed',
20
21
  'embedding',
@@ -22,8 +23,10 @@ __all__ = [
22
23
  'ManagedAgent',
23
24
  'ManagedConfig',
24
25
  'AnthropicManagedAgent',
25
- 'LocalManagedAgent',
26
- 'LocalManagedConfig',
26
+ 'LocalManagedAgent', # backward compat alias
27
+ 'LocalManagedConfig', # backward compat alias
28
+ 'SandboxedAgent', # new honest name
29
+ 'SandboxedAgentConfig', # new honest name
27
30
  ]
28
31
 
29
32
  # Telemetry initialization state
@@ -57,6 +60,9 @@ def __getattr__(name):
57
60
  if name == 'PraisonAI':
58
61
  from .cli import PraisonAI
59
62
  return PraisonAI
63
+ elif name == 'Agent':
64
+ from .agent import Agent
65
+ return Agent
60
66
  elif name == 'Deploy':
61
67
  from .deploy import Deploy
62
68
  return Deploy
@@ -108,6 +114,12 @@ def __getattr__(name):
108
114
  elif name == 'LocalManagedConfig':
109
115
  from .integrations.managed_local import LocalManagedConfig
110
116
  return LocalManagedConfig
117
+ elif name == 'SandboxedAgent':
118
+ from .integrations.sandboxed_agent import SandboxedAgent
119
+ return SandboxedAgent
120
+ elif name == 'SandboxedAgentConfig':
121
+ from .integrations.sandboxed_agent import SandboxedAgentConfig
122
+ return SandboxedAgentConfig
111
123
  elif name in ('ManagedConfig', 'ManagedBackendConfig'):
112
124
  from .integrations.managed_agents import ManagedConfig
113
125
  return ManagedConfig
@@ -0,0 +1,101 @@
1
+ """
2
+ Async bridge module - single source of truth for running coroutines synchronously.
3
+
4
+ This module provides a safe way to run async functions from sync contexts,
5
+ handling nested event loop scenarios without creating a new event loop
6
+ on every call (which is expensive and breaks multi-agent workflows).
7
+ """
8
+ import asyncio
9
+ import atexit
10
+ import os
11
+ import threading
12
+ from concurrent.futures import Future
13
+ from typing import Awaitable, TypeVar
14
+
15
+ T = TypeVar("T")
16
+
17
+ _DEFAULT_TIMEOUT = float(os.environ.get("PRAISONAI_RUN_SYNC_TIMEOUT", "300"))
18
+
19
+ class _BackgroundLoop:
20
+ def __init__(self) -> None:
21
+ self._loop: asyncio.AbstractEventLoop | None = None
22
+ self._thread: threading.Thread | None = None
23
+ self._lock = threading.Lock()
24
+
25
+ def get(self) -> asyncio.AbstractEventLoop:
26
+ with self._lock:
27
+ if self._loop is None or self._loop.is_closed():
28
+ self._loop = asyncio.new_event_loop()
29
+ # non-daemon so shutdown must be explicit and clean
30
+ self._thread = threading.Thread(
31
+ target=self._loop.run_forever,
32
+ name="praisonai-async",
33
+ daemon=False,
34
+ )
35
+ self._thread.start()
36
+ return self._loop
37
+
38
+ def shutdown(self, timeout: float = 5.0) -> None:
39
+ with self._lock:
40
+ loop, thread = self._loop, self._thread
41
+ if loop is None:
42
+ return
43
+ # Cancel outstanding tasks, then stop the loop.
44
+ async def _cancel_all() -> None:
45
+ tasks = [t for t in asyncio.all_tasks(loop) if not t.done()]
46
+ for t in tasks:
47
+ t.cancel()
48
+ await asyncio.gather(*tasks, return_exceptions=True)
49
+ try:
50
+ asyncio.run_coroutine_threadsafe(_cancel_all(), loop).result(timeout)
51
+ finally:
52
+ loop.call_soon_threadsafe(loop.stop)
53
+ if thread is not None:
54
+ thread.join(timeout)
55
+ if not loop.is_closed():
56
+ loop.close()
57
+ self._loop = None
58
+ self._thread = None
59
+
60
+ _BG = _BackgroundLoop()
61
+ atexit.register(_BG.shutdown)
62
+
63
+
64
+ def run_sync(coro: Awaitable[T], *, timeout: float | None = _DEFAULT_TIMEOUT) -> T:
65
+ """
66
+ Run a coroutine synchronously, safe inside a running loop.
67
+
68
+ This function automatically detects if there's already a running event loop
69
+ and handles the execution appropriately:
70
+ - If no loop is running: uses background loop (consistent behavior)
71
+ - If a loop is running: schedules on background loop (safe path)
72
+
73
+ Args:
74
+ coro: The coroutine to run
75
+ timeout: Maximum time to wait for completion (seconds)
76
+
77
+ Returns:
78
+ The result of the coroutine
79
+
80
+ Raises:
81
+ TimeoutError: If timeout is exceeded
82
+ Any exception raised by the coroutine
83
+ """
84
+ try:
85
+ asyncio.get_running_loop()
86
+ running = True
87
+ except RuntimeError:
88
+ running = False
89
+
90
+ if not running:
91
+ # Reuse the background loop instead of creating a new one per call.
92
+ fut: Future = asyncio.run_coroutine_threadsafe(coro, _BG.get())
93
+ return fut.result(timeout=timeout)
94
+
95
+ fut = asyncio.run_coroutine_threadsafe(coro, _BG.get())
96
+ return fut.result(timeout=timeout)
97
+
98
+
99
+ def shutdown() -> None:
100
+ """Public hook for servers (gateway, a2u, mcp_server) to stop the bridge cleanly."""
101
+ _BG.shutdown()
@@ -0,0 +1,63 @@
1
+ """Wrapper Agent class with CLI backend resolution support.
2
+
3
+ This module provides a wrapper around praisonaiagents.Agent that handles
4
+ CLI backend string resolution in the wrapper layer, maintaining proper
5
+ dependency direction per AGENTS.md.
6
+ """
7
+
8
+ from typing import Union, Optional, Any
9
+ from praisonaiagents import Agent as CoreAgent
10
+
11
+
12
+ class Agent(CoreAgent):
13
+ """Agent wrapper with CLI backend string resolution support.
14
+
15
+ This class extends the core Agent to handle CLI backend string resolution
16
+ in the wrapper layer, maintaining proper architectural separation between
17
+ core protocols and heavy implementations.
18
+ """
19
+
20
+ def __init__(self, *args, cli_backend: Optional[Union[str, Any]] = None, **kwargs):
21
+ """Initialize Agent with CLI backend string resolution.
22
+
23
+ Args:
24
+ *args: Positional arguments for core Agent
25
+ cli_backend: CLI backend for delegating full turns. Accepts:
26
+ - str: Backend ID ("claude-code", "codex-cli") - resolved in wrapper
27
+ - CliBackendProtocol: Pre-resolved backend instance
28
+ - callable: Factory function returning CliBackendProtocol
29
+ - None: No CLI backend
30
+ **kwargs: Keyword arguments for core Agent
31
+ """
32
+ # Resolve string CLI backends to instances in wrapper layer
33
+ if isinstance(cli_backend, str):
34
+ cli_backend = self._resolve_string_backend(cli_backend)
35
+
36
+ # Pass resolved backend to core Agent
37
+ super().__init__(*args, cli_backend=cli_backend, **kwargs)
38
+
39
+ def _resolve_string_backend(self, backend_id: str) -> Any:
40
+ """Resolve string backend ID to CliBackendProtocol instance.
41
+
42
+ Args:
43
+ backend_id: Backend identifier (e.g., "claude-code")
44
+
45
+ Returns:
46
+ CliBackendProtocol instance
47
+
48
+ Raises:
49
+ ImportError: If CLI backends module not available
50
+ ValueError: If backend_id is not registered
51
+ """
52
+ try:
53
+ from .cli_backends import resolve_cli_backend
54
+ return resolve_cli_backend(backend_id)
55
+ except ImportError:
56
+ raise ImportError(
57
+ f"CLI backend '{backend_id}' requested but CLI backends not available. "
58
+ "This may indicate a packaging or installation issue."
59
+ )
60
+
61
+
62
+ # Export the wrapper Agent as the default for import from praisonai
63
+ __all__ = ["Agent"]
@@ -140,6 +140,51 @@ def sanitize_agent_name_for_autogen_v4(name):
140
140
 
141
141
  return sanitized
142
142
 
143
+ def _resolve_yaml_cli_backend(cli_backend_config, logger):
144
+ """Resolve a YAML ``cli_backend`` field to a CliBackendProtocol instance.
145
+
146
+ Accepts ``None`` (no backend), a string id (e.g. ``"claude-code"``), or a
147
+ dict of shape ``{"id": "claude-code", "overrides": {...}}``. Returns
148
+ ``None`` on any error after logging a warning, so YAML parsing never raises.
149
+
150
+ Kept at module scope so it is unit-testable without constructing a full
151
+ ``AgentsGenerator`` instance.
152
+ """
153
+ if not cli_backend_config:
154
+ return None
155
+
156
+ # Pre-seed label from config before import so we can show it in error logs
157
+ if isinstance(cli_backend_config, str):
158
+ label = cli_backend_config
159
+ elif isinstance(cli_backend_config, dict):
160
+ label = cli_backend_config.get('id') or "<missing>"
161
+ else:
162
+ label = type(cli_backend_config).__name__
163
+
164
+ try:
165
+ from praisonai.cli_backends import resolve_cli_backend
166
+ if isinstance(cli_backend_config, str):
167
+ return resolve_cli_backend(cli_backend_config)
168
+ if isinstance(cli_backend_config, dict):
169
+ backend_id = cli_backend_config.get('id')
170
+ if not backend_id:
171
+ raise ValueError("cli_backend dict must contain an 'id' field")
172
+ overrides = cli_backend_config.get('overrides') or {}
173
+ return resolve_cli_backend(backend_id, overrides=overrides)
174
+ raise ValueError(
175
+ f"cli_backend must be string or dict, got: {type(cli_backend_config).__name__}"
176
+ )
177
+ except ImportError:
178
+ logger.warning(
179
+ "CLI backend '%s' requested but not available", label
180
+ )
181
+ except Exception as e:
182
+ logger.warning(
183
+ "Failed to resolve CLI backend '%s': %s", label, e
184
+ )
185
+ return None
186
+
187
+
143
188
  class AgentsGenerator:
144
189
  def __init__(self, agent_file, framework, config_list, log_level=None, agent_callback=None, task_callback=None, agent_yaml=None, tools=None, cli_config=None):
145
190
  """
@@ -187,7 +232,11 @@ class AgentsGenerator:
187
232
  elif os.environ.get('LOGLEVEL'):
188
233
  self.logger.setLevel(getattr(logging, os.environ.get('LOGLEVEL', 'INFO').upper(), logging.INFO))
189
234
 
190
- # Initialize tool registry (replaces globals() pattern)
235
+ # Initialize tool resolver (single source of truth for tool resolution)
236
+ from .tool_resolver import ToolResolver
237
+ self.tool_resolver = ToolResolver()
238
+
239
+ # Keep tool registry for backward compatibility with autogen adapters
191
240
  self.tool_registry = ToolRegistry()
192
241
  self.tool_registry.register_builtin_autogen_adapters()
193
242
 
@@ -456,27 +505,32 @@ class AgentsGenerator:
456
505
  topic = config.get('input', config.get('topic', ''))
457
506
  tools_dict = {}
458
507
 
459
- # Only try to use praisonai_tools if it's available and needed
508
+ # Use ToolResolver to get available tools (consistent tool resolution)
460
509
  if PRAISONAI_TOOLS_AVAILABLE and (CREWAI_AVAILABLE or AUTOGEN_AVAILABLE or PRAISONAI_AVAILABLE or AG2_AVAILABLE):
461
- tools_dict = {
462
- 'CodeDocsSearchTool': CodeDocsSearchTool(),
463
- 'CSVSearchTool': CSVSearchTool(),
464
- 'DirectorySearchTool': DirectorySearchTool(),
465
- 'DOCXSearchTool': DOCXSearchTool(),
466
- 'DirectoryReadTool': DirectoryReadTool(),
467
- 'FileReadTool': FileReadTool(),
468
- 'TXTSearchTool': TXTSearchTool(),
469
- 'JSONSearchTool': JSONSearchTool(),
470
- 'MDXSearchTool': MDXSearchTool(),
471
- 'PDFSearchTool': PDFSearchTool(),
472
- 'RagTool': RagTool(),
473
- 'ScrapeElementFromWebsiteTool': ScrapeElementFromWebsiteTool(),
474
- 'ScrapeWebsiteTool': ScrapeWebsiteTool(),
475
- 'WebsiteSearchTool': WebsiteSearchTool(),
476
- 'XMLSearchTool': XMLSearchTool(),
477
- 'YoutubeChannelSearchTool': YoutubeChannelSearchTool(),
478
- 'YoutubeVideoSearchTool': YoutubeVideoSearchTool(),
479
- }
510
+ try:
511
+ # Get available tools from the resolver
512
+ available_tools = self.tool_resolver.list_available()
513
+ tools_dict = {}
514
+
515
+ # Standard praisonai-tools tool names
516
+ standard_tools = [
517
+ 'CodeDocsSearchTool', 'CSVSearchTool', 'DirectorySearchTool', 'DOCXSearchTool',
518
+ 'DirectoryReadTool', 'FileReadTool', 'TXTSearchTool', 'JSONSearchTool',
519
+ 'MDXSearchTool', 'PDFSearchTool', 'RagTool', 'ScrapeElementFromWebsiteTool',
520
+ 'ScrapeWebsiteTool', 'WebsiteSearchTool', 'XMLSearchTool',
521
+ 'YoutubeChannelSearchTool', 'YoutubeVideoSearchTool',
522
+ ]
523
+
524
+ # Resolve only tools that are actually available
525
+ for tool_name in standard_tools:
526
+ if tool_name in available_tools:
527
+ resolved_tool = self.tool_resolver.resolve(tool_name)
528
+ if resolved_tool is not None:
529
+ tools_dict[tool_name] = resolved_tool() if inspect.isclass(resolved_tool) else resolved_tool
530
+
531
+ except Exception as e:
532
+ self.logger.debug(f"Error resolving praisonai_tools: {e}")
533
+ tools_dict = {}
480
534
 
481
535
  # Add tools from class names
482
536
  for tool_class in self.tools:
@@ -1066,9 +1120,7 @@ class AgentsGenerator:
1066
1120
  tasks = []
1067
1121
  tasks_dict = {}
1068
1122
 
1069
- # Import tool resolver (lazy import to avoid circular deps)
1070
- from praisonai.tool_resolver import ToolResolver
1071
- tool_resolver = ToolResolver()
1123
+ # Use existing tool resolver instance
1072
1124
 
1073
1125
  # Load tools from local tools.py (backward compat)
1074
1126
  tools_list = self.load_tools_from_tools_py()
@@ -1144,7 +1196,7 @@ class AgentsGenerator:
1144
1196
  )
1145
1197
 
1146
1198
  if not already_loaded:
1147
- resolved_tool = tool_resolver.resolve(tool_name)
1199
+ resolved_tool = self.tool_resolver.resolve(tool_name)
1148
1200
  if resolved_tool is not None:
1149
1201
  agent_tools.append(resolved_tool)
1150
1202
  self.logger.debug(f"Resolved tool '{tool_name}' for agent {role}")
@@ -1240,6 +1292,11 @@ class AgentsGenerator:
1240
1292
  # string, or a full SkillsConfig dict (paths/dirs/auto_discover).
1241
1293
  agent_skills = details.get('skills')
1242
1294
 
1295
+ # H17: CLI Backend support - delegates full turns to external CLI tools
1296
+ cli_backend_resolved = _resolve_yaml_cli_backend(
1297
+ details.get('cli_backend'), self.logger
1298
+ )
1299
+
1243
1300
  agent = PraisonAgent(
1244
1301
  name=role_filled,
1245
1302
  role=role_filled,
@@ -1257,6 +1314,7 @@ class AgentsGenerator:
1257
1314
  approval=approval_config,
1258
1315
  output=output_config,
1259
1316
  skills=agent_skills,
1317
+ cli_backend=cli_backend_resolved,
1260
1318
  )
1261
1319
 
1262
1320
  if self.agent_callback:
@@ -0,0 +1,140 @@
1
+ """
2
+ Unknown User Handler for PraisonAI Bots.
3
+
4
+ Handles unknown users according to the configured policy:
5
+ - deny: Drop messages silently (backward compatible)
6
+ - allow: Allow all users
7
+ - pair: Use pairing flow for owner approval
8
+
9
+ Shared across all bot adapters (Telegram, Discord, Slack, WhatsApp).
10
+ """
11
+
12
+ import logging
13
+ import time
14
+ from typing import Optional, Literal, Dict, Any, Callable, TYPE_CHECKING
15
+
16
+ if TYPE_CHECKING:
17
+ from praisonaiagents.bots import BotConfig, BotMessage
18
+ from praisonai.gateway.pairing import PairingStore
19
+
20
+ logger = logging.getLogger(__name__)
21
+
22
+
23
+ class UnknownUserHandler:
24
+ """Handler for unknown users in bot interactions.
25
+
26
+ Provides centralized logic for handling users not in the allowed_users list.
27
+ Supports rate limiting and pairing flow for secure user approval.
28
+ """
29
+
30
+ def __init__(
31
+ self,
32
+ config: "BotConfig",
33
+ pairing_store: Optional["PairingStore"] = None,
34
+ send_message_callback: Optional[Callable] = None
35
+ ):
36
+ self.config = config
37
+ self.pairing_store = pairing_store
38
+ self.send_message_callback = send_message_callback
39
+
40
+ # Rate limiting: user_id -> last_code_generation_time
41
+ self._rate_limits: Dict[str, float] = {}
42
+ self._rate_limit_window = 600 # 10 minutes
43
+
44
+ async def handle(self, message: "BotMessage") -> Literal["allow", "drop"]:
45
+ """Handle an unknown user message according to policy.
46
+
47
+ Args:
48
+ message: The bot message from unknown user
49
+
50
+ Returns:
51
+ "allow" if message should be processed, "drop" if it should be ignored
52
+ """
53
+ user_id = message.sender.user_id if message.sender else ""
54
+ platform = message.channel.channel_type if message.channel else "unknown"
55
+
56
+ # Check if user is actually allowed
57
+ if self.config.is_user_allowed(user_id):
58
+ return "allow"
59
+
60
+ # Apply policy
61
+ if self.config.unknown_user_policy == "deny":
62
+ logger.debug(f"Dropping message from unknown user {user_id} (policy: deny)")
63
+ return "drop"
64
+
65
+ if self.config.unknown_user_policy == "allow":
66
+ return "allow"
67
+
68
+ if self.config.unknown_user_policy == "pair":
69
+ return await self._handle_pairing(message, user_id, platform)
70
+
71
+ # Fallback to deny
72
+ logger.warning(f"Unknown policy '{self.config.unknown_user_policy}', falling back to deny")
73
+ return "drop"
74
+
75
+ async def _handle_pairing(self, message: "BotMessage", user_id: str, platform: str) -> Literal["allow", "drop"]:
76
+ """Handle pairing flow for unknown user.
77
+
78
+ Returns:
79
+ "allow" if user is already paired, "drop" after sending pairing code
80
+ """
81
+ if not self.pairing_store:
82
+ logger.warning("Pairing policy set but no pairing store available")
83
+ return "drop"
84
+
85
+ # Use channel_id for pairing, not user_id
86
+ channel_id = message.channel.channel_id if message.channel else user_id
87
+
88
+ # Check if already paired
89
+ if self.pairing_store.is_paired(channel_id, platform):
90
+ logger.debug(f"Channel {channel_id} already paired for {platform}")
91
+ return "allow"
92
+
93
+ # Rate limiting check - also key by channel_id
94
+ now = time.time()
95
+
96
+ # Evict stale entries to keep the dict bounded
97
+ cutoff = now - self._rate_limit_window
98
+ self._rate_limits = {
99
+ cid: ts for cid, ts in self._rate_limits.items() if ts >= cutoff
100
+ }
101
+
102
+ last_code_time = self._rate_limits.get(channel_id, 0)
103
+ if now - last_code_time < self._rate_limit_window:
104
+ logger.debug(f"Rate limited channel {channel_id} (last code: {now - last_code_time:.1f}s ago)")
105
+ return "drop"
106
+
107
+ # Generate pairing code and send to user
108
+ try:
109
+ code = self.pairing_store.generate_code(channel_type=platform, channel_id=channel_id)
110
+ self._rate_limits[channel_id] = now
111
+
112
+ # Send pairing instructions to user
113
+ await self._send_pairing_instructions(message, code, platform)
114
+
115
+ logger.info(f"Generated pairing code for {user_id} on {platform}: {code}")
116
+
117
+ except Exception as e:
118
+ logger.error(f"Failed to generate pairing code for {user_id}: {e}")
119
+
120
+ return "drop" # Always drop after pairing flow
121
+
122
+ async def _send_pairing_instructions(self, message: "BotMessage", code: str, platform: str):
123
+ """Send pairing instructions to the user.
124
+
125
+ Uses the callback provided during initialization, or logs if not available.
126
+ """
127
+ instructions = (
128
+ f"Your pairing code: `{code}`\n"
129
+ f"Owner: `praisonai pairing approve {platform} {code}`"
130
+ )
131
+
132
+ # Try to use the send message callback
133
+ if self.send_message_callback and message.channel:
134
+ try:
135
+ await self.send_message_callback(message.channel.channel_id, instructions)
136
+ except Exception as e:
137
+ logger.warning(f"Failed to send pairing instructions: {e}")
138
+ else:
139
+ logger.warning("Cannot send pairing instructions - no callback available")
140
+ logger.info(f"Pairing instructions for {message.sender.user_id if message.sender else 'unknown'}: {instructions}")