PraisonAI 4.6.37__tar.gz → 4.6.39__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 (787) hide show
  1. {praisonai-4.6.37 → praisonai-4.6.39}/PKG-INFO +42 -5
  2. {praisonai-4.6.37 → praisonai-4.6.39}/PraisonAI.egg-info/PKG-INFO +42 -5
  3. {praisonai-4.6.37 → praisonai-4.6.39}/PraisonAI.egg-info/SOURCES.txt +8 -0
  4. {praisonai-4.6.37 → praisonai-4.6.39}/PraisonAI.egg-info/requires.txt +2 -2
  5. {praisonai-4.6.37 → praisonai-4.6.39}/README.md +39 -2
  6. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/__init__.py +36 -12
  7. praisonai-4.6.39/praisonai/_registry.py +228 -0
  8. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/agents_generator.py +133 -93
  9. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/async_agent_scheduler.py +78 -10
  10. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/auto.py +47 -58
  11. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/__init__.py +25 -1
  12. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_approval_base.py +6 -3
  13. praisonai-4.6.39/praisonai/bots/_dlq.py +299 -0
  14. praisonai-4.6.39/praisonai/bots/_mirror.py +134 -0
  15. praisonai-4.6.39/praisonai/bots/_registry.py +144 -0
  16. praisonai-4.6.39/praisonai/bots/_session.py +425 -0
  17. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/bot.py +26 -1
  18. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/botos.py +19 -1
  19. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/discord.py +5 -1
  20. praisonai-4.6.39/praisonai/bots/linear.py +534 -0
  21. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/slack.py +10 -2
  22. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/telegram.py +8 -1
  23. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/cli.py +3 -2
  24. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/guardrails.py +4 -0
  25. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/rag.py +2 -2
  26. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/realtime.py +13 -2
  27. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/bot.py +187 -0
  28. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/execution/profiler.py +2 -2
  29. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/agent_scheduler.py +2 -2
  30. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/bots_cli.py +68 -0
  31. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/metrics.py +17 -18
  32. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/profiler/core.py +3 -3
  33. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/profiler/suite.py +3 -3
  34. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/main.py +78 -44
  35. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/state/identifiers.py +3 -3
  36. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/state/sessions.py +4 -4
  37. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli_backends/registry.py +48 -36
  38. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/db/adapter.py +218 -11
  39. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy.py +12 -7
  40. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/framework_adapters/autogen_adapter.py +53 -14
  41. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/framework_adapters/base.py +16 -2
  42. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/framework_adapters/crewai_adapter.py +31 -6
  43. praisonai-4.6.39/praisonai/framework_adapters/praisonai_adapter.py +156 -0
  44. praisonai-4.6.39/praisonai/framework_adapters/registry.py +111 -0
  45. praisonai-4.6.39/praisonai/framework_adapters/validators.py +36 -0
  46. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/exec_approval.py +34 -9
  47. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/server.py +12 -2
  48. praisonai-4.6.39/praisonai/inbuilt_tools/__init__.py +33 -0
  49. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/registry.py +70 -89
  50. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/jobs/models.py +7 -7
  51. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/jobs/router.py +2 -2
  52. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/jobs/store.py +22 -14
  53. praisonai-4.6.39/praisonai/llm/env.py +56 -0
  54. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/llm/registry.py +179 -178
  55. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/observability/langfuse.py +44 -26
  56. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/orchestrator.py +37 -6
  57. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/registry.py +77 -91
  58. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/profiler.py +405 -516
  59. praisonai-4.6.39/praisonai/sandbox/_compat.py +185 -0
  60. praisonai-4.6.39/praisonai/sandbox/_shell.py +38 -0
  61. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/sandbox/docker.py +20 -3
  62. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/sandbox/ssh.py +37 -7
  63. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/sandbox/subprocess.py +13 -5
  64. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/scheduler/agent_scheduler.py +5 -3
  65. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/scheduler/shared.py +6 -3
  66. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/test.py +7 -3
  67. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/tool_registry.py +24 -12
  68. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/tool_resolver.py +59 -21
  69. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui/components/aicoder.py +16 -2
  70. praisonai-4.6.39/praisonai/version.py +1 -0
  71. {praisonai-4.6.37 → praisonai-4.6.39}/pyproject.toml +2 -2
  72. praisonai-4.6.37/praisonai/bots/_registry.py +0 -86
  73. praisonai-4.6.37/praisonai/bots/_session.py +0 -237
  74. praisonai-4.6.37/praisonai/framework_adapters/praisonai_adapter.py +0 -49
  75. praisonai-4.6.37/praisonai/framework_adapters/registry.py +0 -177
  76. praisonai-4.6.37/praisonai/inbuilt_tools/__init__.py +0 -49
  77. praisonai-4.6.37/praisonai/version.py +0 -1
  78. {praisonai-4.6.37 → praisonai-4.6.39}/PraisonAI.egg-info/dependency_links.txt +0 -0
  79. {praisonai-4.6.37 → praisonai-4.6.39}/PraisonAI.egg-info/entry_points.txt +0 -0
  80. {praisonai-4.6.37 → praisonai-4.6.39}/PraisonAI.egg-info/top_level.txt +0 -0
  81. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/__main__.py +0 -0
  82. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_approval_spec.py +0 -0
  83. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_async_bridge.py +0 -0
  84. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/__init__.py +0 -0
  85. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/api_md.py +0 -0
  86. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/__init__.py +0 -0
  87. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/docs_extractor.py +0 -0
  88. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/docs_generator.py +0 -0
  89. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/generator.py +0 -0
  90. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  91. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/python_extractor.py +0 -0
  92. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  93. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/rust_extractor.py +0 -0
  94. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  95. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  96. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  97. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_logging.py +0 -0
  98. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/_safe_loader.py +0 -0
  99. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/acp/__init__.py +0 -0
  100. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/acp/config.py +0 -0
  101. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/acp/safe_edit.py +0 -0
  102. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/acp/server.py +0 -0
  103. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/acp/session.py +0 -0
  104. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/adapters/__init__.py +0 -0
  105. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/adapters/readers.py +0 -0
  106. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/adapters/rerankers.py +0 -0
  107. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/adapters/retrievers.py +0 -0
  108. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/adapters/vector_stores.py +0 -0
  109. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/agent.py +0 -0
  110. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/agent_scheduler.py +0 -0
  111. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/api/agent_invoke.py +0 -0
  112. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/api/call.py +0 -0
  113. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/app/__init__.py +0 -0
  114. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/app/agentos.py +0 -0
  115. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/audit/__init__.py +0 -0
  116. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/audit/agent_centric.py +0 -0
  117. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_ack.py +0 -0
  118. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_approval.py +0 -0
  119. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_auth.py +0 -0
  120. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_chunk.py +0 -0
  121. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_commands.py +0 -0
  122. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_config_schema.py +0 -0
  123. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_debounce.py +0 -0
  124. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_defaults.py +0 -0
  125. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_discord_approval.py +0 -0
  126. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_email_utils.py +0 -0
  127. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_http_approval.py +0 -0
  128. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_pairing_ui.py +0 -0
  129. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_protocol_mixin.py +0 -0
  130. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_rate_limit.py +0 -0
  131. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_resilience.py +0 -0
  132. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_slack_approval.py +0 -0
  133. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_telegram_approval.py +0 -0
  134. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_unknown_user.py +0 -0
  135. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_webhook_approval.py +0 -0
  136. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  137. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/agentmail.py +0 -0
  138. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/email.py +0 -0
  139. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/media.py +0 -0
  140. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/bots/whatsapp.py +0 -0
  141. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/__init__.py +0 -0
  142. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/agent.py +0 -0
  143. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/benchmark.py +0 -0
  144. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/cdp_agent.py +0 -0
  145. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/cdp_utils.py +0 -0
  146. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/diagnostics.py +0 -0
  147. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/launcher.py +0 -0
  148. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/playwright_agent.py +0 -0
  149. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/profiling.py +0 -0
  150. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/protocol.py +0 -0
  151. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/report.py +0 -0
  152. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/server.py +0 -0
  153. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/sessions.py +0 -0
  154. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/browser/video.py +0 -0
  155. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/__init__.py +0 -0
  156. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/a2a.py +0 -0
  157. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/assistants.py +0 -0
  158. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/audio.py +0 -0
  159. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/batches.py +0 -0
  160. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/completions.py +0 -0
  161. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/container_files.py +0 -0
  162. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/containers.py +0 -0
  163. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/embeddings.py +0 -0
  164. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/files.py +0 -0
  165. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/fine_tuning.py +0 -0
  166. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/images.py +0 -0
  167. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/mcp.py +0 -0
  168. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/messages.py +0 -0
  169. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/moderations.py +0 -0
  170. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/ocr.py +0 -0
  171. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/passthrough.py +0 -0
  172. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/rerank.py +0 -0
  173. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/responses.py +0 -0
  174. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/search.py +0 -0
  175. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/skills.py +0 -0
  176. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/vector_store_files.py +0 -0
  177. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/vector_stores.py +0 -0
  178. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/capabilities/videos.py +0 -0
  179. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/claw/__init__.py +0 -0
  180. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/claw/default_app.py +0 -0
  181. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/__init__.py +0 -0
  182. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/_paths.py +0 -0
  183. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/app.py +0 -0
  184. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/branding.py +0 -0
  185. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/__init__.py +0 -0
  186. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/acp.py +0 -0
  187. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/agents.py +0 -0
  188. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/app.py +0 -0
  189. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/audit.py +0 -0
  190. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/batch.py +0 -0
  191. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/benchmark.py +0 -0
  192. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/browser.py +0 -0
  193. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/call.py +0 -0
  194. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/chat.py +0 -0
  195. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/claw.py +0 -0
  196. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/code.py +0 -0
  197. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/commit.py +0 -0
  198. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/completion.py +0 -0
  199. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/config.py +0 -0
  200. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/context.py +0 -0
  201. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/dashboard.py +0 -0
  202. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/debug.py +0 -0
  203. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/deploy.py +0 -0
  204. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/diag.py +0 -0
  205. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/docs.py +0 -0
  206. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/doctor.py +0 -0
  207. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/endpoints.py +0 -0
  208. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/environment.py +0 -0
  209. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/eval.py +0 -0
  210. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/examples.py +0 -0
  211. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/flow.py +0 -0
  212. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/gateway.py +0 -0
  213. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/github.py +0 -0
  214. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/hooks.py +0 -0
  215. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/knowledge.py +0 -0
  216. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/langextract.py +0 -0
  217. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/langfuse.py +0 -0
  218. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/loop.py +0 -0
  219. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/lsp.py +0 -0
  220. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/managed.py +0 -0
  221. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/mcp.py +0 -0
  222. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/memory.py +0 -0
  223. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/mint_link.py +0 -0
  224. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/n8n.py +0 -0
  225. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/obs.py +0 -0
  226. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/onboard.py +0 -0
  227. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/package.py +0 -0
  228. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/pairing.py +0 -0
  229. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/paths.py +0 -0
  230. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/plugins.py +0 -0
  231. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/port.py +0 -0
  232. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/profile.py +0 -0
  233. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/publish.py +0 -0
  234. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/rag.py +0 -0
  235. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/realtime.py +0 -0
  236. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/recipe.py +0 -0
  237. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/registry.py +0 -0
  238. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/replay.py +0 -0
  239. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/research.py +0 -0
  240. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/retrieval.py +0 -0
  241. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/rules.py +0 -0
  242. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/run.py +0 -0
  243. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/sandbox.py +0 -0
  244. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/schedule.py +0 -0
  245. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/serve.py +0 -0
  246. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/session.py +0 -0
  247. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/setup.py +0 -0
  248. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/skills.py +0 -0
  249. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/standardise.py +0 -0
  250. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/templates.py +0 -0
  251. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/test.py +0 -0
  252. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/todo.py +0 -0
  253. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/tools.py +0 -0
  254. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/traces.py +0 -0
  255. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/tracker.py +0 -0
  256. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/train.py +0 -0
  257. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/ui.py +0 -0
  258. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/up.py +0 -0
  259. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/version.py +0 -0
  260. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/commands/workflow.py +0 -0
  261. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/config_loader.py +0 -0
  262. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/configuration/__init__.py +0 -0
  263. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/configuration/loader.py +0 -0
  264. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/configuration/paths.py +0 -0
  265. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/configuration/schema.py +0 -0
  266. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/execution/__init__.py +0 -0
  267. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/execution/core.py +0 -0
  268. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/execution/request.py +0 -0
  269. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/execution/result.py +0 -0
  270. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/fallback_schema.py +0 -0
  271. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/__init__.py +0 -0
  272. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/acp.py +0 -0
  273. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/action_orchestrator.py +0 -0
  274. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/agent_tools.py +0 -0
  275. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/agents.py +0 -0
  276. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/approval.py +0 -0
  277. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/at_mentions.py +0 -0
  278. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/audit_cli.py +0 -0
  279. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/auto_memory.py +0 -0
  280. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/auto_mode.py +0 -0
  281. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/autonomy_mode.py +0 -0
  282. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/background.py +0 -0
  283. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/base.py +0 -0
  284. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/benchmark.py +0 -0
  285. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/capabilities.py +0 -0
  286. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/checkpoints.py +0 -0
  287. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/cli_profiler.py +0 -0
  288. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/code_intelligence.py +0 -0
  289. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/compaction.py +0 -0
  290. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/compare.py +0 -0
  291. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/config_hierarchy.py +0 -0
  292. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/context_manager.py +0 -0
  293. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/cost_tracker.py +0 -0
  294. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/csv_test_runner.py +0 -0
  295. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/debug.py +0 -0
  296. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/deploy.py +0 -0
  297. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/diag.py +0 -0
  298. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/display_jsonl.py +0 -0
  299. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/__init__.py +0 -0
  300. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  301. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  302. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  303. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  304. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  305. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  306. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  307. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  308. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  309. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  310. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  311. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  312. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  313. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  314. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  315. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  316. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  317. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/engine.py +0 -0
  318. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/formatters.py +0 -0
  319. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/handler.py +0 -0
  320. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/models.py +0 -0
  321. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/doctor/registry.py +0 -0
  322. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/endpoints.py +0 -0
  323. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/eval.py +0 -0
  324. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/examples.py +0 -0
  325. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/external_agents.py +0 -0
  326. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/fast_context.py +0 -0
  327. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/file_history.py +0 -0
  328. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/flow_display.py +0 -0
  329. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/gateway.py +0 -0
  330. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/git_attribution.py +0 -0
  331. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/git_integration.py +0 -0
  332. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/guardrail.py +0 -0
  333. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/handoff.py +0 -0
  334. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/hooks.py +0 -0
  335. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/hybrid_workflow.py +0 -0
  336. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/image.py +0 -0
  337. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/interactive_core_headless.py +0 -0
  338. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/interactive_runtime.py +0 -0
  339. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/interactive_test_harness.py +0 -0
  340. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/interactive_tools.py +0 -0
  341. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/interactive_tui.py +0 -0
  342. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/job_workflow.py +0 -0
  343. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/jobs.py +0 -0
  344. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/knowledge.py +0 -0
  345. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/knowledge_cli.py +0 -0
  346. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/lite.py +0 -0
  347. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/logs.py +0 -0
  348. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/lsp_cli.py +0 -0
  349. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  350. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/mcp.py +0 -0
  351. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/message_queue.py +0 -0
  352. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/migrate.py +0 -0
  353. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/migration_flow.py +0 -0
  354. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/migration_spec.py +0 -0
  355. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/n8n.py +0 -0
  356. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/observability.py +0 -0
  357. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/ollama.py +0 -0
  358. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/onboard.py +0 -0
  359. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/output_modes.py +0 -0
  360. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/output_style.py +0 -0
  361. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/package.py +0 -0
  362. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/performance.py +0 -0
  363. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/persistence.py +0 -0
  364. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/plugin_cli.py +0 -0
  365. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/profile.py +0 -0
  366. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/profiler/__init__.py +0 -0
  367. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/profiler/optimizations.py +0 -0
  368. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/profiling.py +0 -0
  369. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/queue/__init__.py +0 -0
  370. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/queue/manager.py +0 -0
  371. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/queue/models.py +0 -0
  372. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/queue/persistence.py +0 -0
  373. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/queue/scheduler.py +0 -0
  374. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/queue/worker.py +0 -0
  375. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/recipe.py +0 -0
  376. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/recipe_creator.py +0 -0
  377. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/recipe_optimizer.py +0 -0
  378. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/recipe_prompts.py +0 -0
  379. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/recipes.py +0 -0
  380. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/registry.py +0 -0
  381. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/repo_map.py +0 -0
  382. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/router.py +0 -0
  383. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/safe_shell.py +0 -0
  384. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/sandbox_cli.py +0 -0
  385. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/sandbox_executor.py +0 -0
  386. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/sdk_knowledge.py +0 -0
  387. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/serve.py +0 -0
  388. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/session.py +0 -0
  389. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/setup/__init__.py +0 -0
  390. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/setup/handler.py +0 -0
  391. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/setup/templates.py +0 -0
  392. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/skills.py +0 -0
  393. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/slash_commands.py +0 -0
  394. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/telemetry.py +0 -0
  395. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/templates.py +0 -0
  396. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/thinking.py +0 -0
  397. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/todo.py +0 -0
  398. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tools.py +0 -0
  399. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/__init__.py +0 -0
  400. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/app.py +0 -0
  401. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/cli.py +0 -0
  402. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/config.py +0 -0
  403. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/debug.py +0 -0
  404. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/events.py +0 -0
  405. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/mock_provider.py +0 -0
  406. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/orchestrator.py +0 -0
  407. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  408. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/help.py +0 -0
  409. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/main.py +0 -0
  410. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/queue.py +0 -0
  411. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/session.py +0 -0
  412. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/settings.py +0 -0
  413. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/session_store.py +0 -0
  414. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  415. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  416. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  417. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  418. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  419. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  420. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/status.py +0 -0
  421. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  422. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/wizard.py +0 -0
  423. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/workflow.py +0 -0
  424. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/features/yaml_utils.py +0 -0
  425. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/__init__.py +0 -0
  426. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/async_tui.py +0 -0
  427. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/config.py +0 -0
  428. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/core.py +0 -0
  429. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/events.py +0 -0
  430. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  431. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  432. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  433. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/praison_io.py +0 -0
  434. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/repl.py +0 -0
  435. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/split_tui.py +0 -0
  436. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/interactive/tui_app.py +0 -0
  437. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/langfuse_client.py +0 -0
  438. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/legacy.py +0 -0
  439. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/output/__init__.py +0 -0
  440. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/output/console.py +0 -0
  441. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/schedule_cli.py +0 -0
  442. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/schema_provider.py +0 -0
  443. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/session/__init__.py +0 -0
  444. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/session/unified.py +0 -0
  445. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/state/__init__.py +0 -0
  446. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/ui/__init__.py +0 -0
  447. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/ui/config.py +0 -0
  448. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/ui/events.py +0 -0
  449. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/ui/mg_backend.py +0 -0
  450. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/ui/plain.py +0 -0
  451. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/ui/rich_backend.py +0 -0
  452. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli/unified_schema.py +0 -0
  453. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli_backends/__init__.py +0 -0
  454. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/cli_backends/claude.py +0 -0
  455. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/__init__.py +0 -0
  456. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/agent_tools.py +0 -0
  457. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/diff/__init__.py +0 -0
  458. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/diff/diff_strategy.py +0 -0
  459. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/tools/__init__.py +0 -0
  460. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/tools/apply_diff.py +0 -0
  461. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/tools/execute_command.py +0 -0
  462. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/tools/list_files.py +0 -0
  463. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/tools/read_file.py +0 -0
  464. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/tools/search_replace.py +0 -0
  465. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/tools/write_file.py +0 -0
  466. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/utils/__init__.py +0 -0
  467. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/utils/file_utils.py +0 -0
  468. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/utils/ignore_utils.py +0 -0
  469. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/code/utils/text_utils.py +0 -0
  470. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/context/__init__.py +0 -0
  471. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/context/artifact_store.py +0 -0
  472. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/context/config.py +0 -0
  473. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/context/history_store.py +0 -0
  474. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/context/queue.py +0 -0
  475. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/context/setup.py +0 -0
  476. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/context/terminal_logger.py +0 -0
  477. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/daemon/__init__.py +0 -0
  478. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/daemon/launchd.py +0 -0
  479. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/daemon/systemd.py +0 -0
  480. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/daemon/windows.py +0 -0
  481. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/db/__init__.py +0 -0
  482. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/__init__.py +0 -0
  483. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/api.py +0 -0
  484. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/docker.py +0 -0
  485. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/doctor.py +0 -0
  486. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/main.py +0 -0
  487. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/models.py +0 -0
  488. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/providers/__init__.py +0 -0
  489. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/providers/aws.py +0 -0
  490. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/providers/azure.py +0 -0
  491. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/providers/base.py +0 -0
  492. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/providers/gcp.py +0 -0
  493. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/deploy/schema.py +0 -0
  494. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/docs_runner/__init__.py +0 -0
  495. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/docs_runner/classifier.py +0 -0
  496. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/docs_runner/executor.py +0 -0
  497. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/docs_runner/extractor.py +0 -0
  498. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/docs_runner/reporter.py +0 -0
  499. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/docs_runner/runner.py +0 -0
  500. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/docs_runner/workspace.py +0 -0
  501. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/__init__.py +0 -0
  502. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/a2u_server.py +0 -0
  503. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/discovery.py +0 -0
  504. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/providers/__init__.py +0 -0
  505. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/providers/a2a.py +0 -0
  506. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/providers/a2u.py +0 -0
  507. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/providers/agents_api.py +0 -0
  508. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/providers/base.py +0 -0
  509. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/providers/mcp.py +0 -0
  510. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/providers/recipe.py +0 -0
  511. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  512. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/registry.py +0 -0
  513. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/endpoints/server.py +0 -0
  514. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/flow/__init__.py +0 -0
  515. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/flow/client.py +0 -0
  516. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  517. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  518. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/flow/components/__init__.py +0 -0
  519. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/flow/converter.py +0 -0
  520. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/flow/helpers.py +0 -0
  521. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/framework_adapters/__init__.py +0 -0
  522. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/__init__.py +0 -0
  523. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/auth.py +0 -0
  524. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/cookie_auth.py +0 -0
  525. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/gateway_approval.py +0 -0
  526. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/magic_link.py +0 -0
  527. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/origin_check.py +0 -0
  528. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/pairing.py +0 -0
  529. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/pairing_routes.py +0 -0
  530. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/push_channels.py +0 -0
  531. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/push_delivery.py +0 -0
  532. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/push_polling.py +0 -0
  533. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/push_presence.py +0 -0
  534. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/rate_limiter.py +0 -0
  535. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/gateway/redis_pubsub.py +0 -0
  536. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  537. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/inc/__init__.py +0 -0
  538. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/inc/config.py +0 -0
  539. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/inc/models.py +0 -0
  540. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/__init__.py +0 -0
  541. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/_session_info.py +0 -0
  542. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/_tool_aliases.py +0 -0
  543. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/base.py +0 -0
  544. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/claude_code.py +0 -0
  545. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/codex_cli.py +0 -0
  546. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/compute/__init__.py +0 -0
  547. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/compute/daytona.py +0 -0
  548. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/compute/docker.py +0 -0
  549. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/compute/e2b.py +0 -0
  550. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/compute/flyio.py +0 -0
  551. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/compute/local.py +0 -0
  552. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/compute/modal_compute.py +0 -0
  553. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/cursor_cli.py +0 -0
  554. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/db_session_adapter.py +0 -0
  555. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/gemini_cli.py +0 -0
  556. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/hosted_agent.py +0 -0
  557. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/local_agent.py +0 -0
  558. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/managed_agents.py +0 -0
  559. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/managed_local.py +0 -0
  560. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/integrations/sandboxed_agent.py +0 -0
  561. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/jobs/__init__.py +0 -0
  562. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/jobs/executor.py +0 -0
  563. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/jobs/server.py +0 -0
  564. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/llm/__init__.py +0 -0
  565. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/__init__.py +0 -0
  566. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/adapters/__init__.py +0 -0
  567. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/adapters/agents.py +0 -0
  568. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  569. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  570. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  571. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  572. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/adapters/memory.py +0 -0
  573. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/adapters/prompts.py +0 -0
  574. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/adapters/resources.py +0 -0
  575. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  576. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/auth/__init__.py +0 -0
  577. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/auth/api_key.py +0 -0
  578. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/auth/oauth.py +0 -0
  579. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/auth/oidc.py +0 -0
  580. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/auth/scopes.py +0 -0
  581. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/cli.py +0 -0
  582. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/elicitation.py +0 -0
  583. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/icons.py +0 -0
  584. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/recipe_adapter.py +0 -0
  585. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/recipe_cli.py +0 -0
  586. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/registry.py +0 -0
  587. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/sampling.py +0 -0
  588. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/server.py +0 -0
  589. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/tasks.py +0 -0
  590. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/tool_index.py +0 -0
  591. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/transports/__init__.py +0 -0
  592. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/transports/http_stream.py +0 -0
  593. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/mcp_server/transports/stdio.py +0 -0
  594. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/n8n/__init__.py +0 -0
  595. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/n8n/client.py +0 -0
  596. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/n8n/converter.py +0 -0
  597. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/n8n/preview.py +0 -0
  598. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/n8n/reverse_converter.py +0 -0
  599. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/observability/__init__.py +0 -0
  600. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/observability/langextract.py +0 -0
  601. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/__init__.py +0 -0
  602. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/config.py +0 -0
  603. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/__init__.py +0 -0
  604. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/async_mysql.py +0 -0
  605. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/async_postgres.py +0 -0
  606. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  607. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/base.py +0 -0
  608. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/json_store.py +0 -0
  609. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/mysql.py +0 -0
  610. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/postgres.py +0 -0
  611. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/singlestore.py +0 -0
  612. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/sqlite.py +0 -0
  613. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/supabase.py +0 -0
  614. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/surrealdb.py +0 -0
  615. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/conversation/turso.py +0 -0
  616. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/factory.py +0 -0
  617. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/hooks/__init__.py +0 -0
  618. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  619. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/__init__.py +0 -0
  620. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/base.py +0 -0
  621. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/cassandra.py +0 -0
  622. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/chroma.py +0 -0
  623. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  624. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  625. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/couchbase.py +0 -0
  626. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/lancedb.py +0 -0
  627. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  628. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  629. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  630. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/milvus.py +0 -0
  631. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  632. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/pgvector.py +0 -0
  633. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/pinecone.py +0 -0
  634. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/qdrant.py +0 -0
  635. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  636. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  637. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  638. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  639. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/knowledge/weaviate.py +0 -0
  640. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/migrations/__init__.py +0 -0
  641. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/migrations/manager.py +0 -0
  642. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/state/__init__.py +0 -0
  643. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/state/async_mongodb.py +0 -0
  644. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/state/base.py +0 -0
  645. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/state/dynamodb.py +0 -0
  646. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/state/firestore.py +0 -0
  647. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/state/gcs.py +0 -0
  648. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/state/memory.py +0 -0
  649. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/state/mongodb.py +0 -0
  650. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/state/redis.py +0 -0
  651. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/state/upstash.py +0 -0
  652. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/tests/__init__.py +0 -0
  653. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/persistence/tests/test_all_backends.py +0 -0
  654. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/push/__init__.py +0 -0
  655. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/push/client.py +0 -0
  656. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/push/transports.py +0 -0
  657. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/__init__.py +0 -0
  658. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/bridge.py +0 -0
  659. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/core.py +0 -0
  660. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/exceptions.py +0 -0
  661. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/history.py +0 -0
  662. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/models.py +0 -0
  663. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/operations.py +0 -0
  664. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/policy.py +0 -0
  665. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/registry.py +0 -0
  666. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/runtime.py +0 -0
  667. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/security.py +0 -0
  668. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/serve.py +0 -0
  669. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/recipe/server.py +0 -0
  670. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/replay/__init__.py +0 -0
  671. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/replay/analyzer.py +0 -0
  672. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/replay/applier.py +0 -0
  673. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/replay/judge.py +0 -0
  674. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/replay/plan.py +0 -0
  675. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/replay/player.py +0 -0
  676. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/replay/reader.py +0 -0
  677. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/replay/storage.py +0 -0
  678. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/replay/writer.py +0 -0
  679. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/sandbox/__init__.py +0 -0
  680. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/sandbox/daytona.py +0 -0
  681. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/sandbox/modal.py +0 -0
  682. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/sandbox/sandlock.py +0 -0
  683. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/scheduler/__init__.py +0 -0
  684. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/scheduler/base.py +0 -0
  685. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/scheduler/daemon_manager.py +0 -0
  686. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/scheduler/executor.py +0 -0
  687. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/scheduler/state_manager.py +0 -0
  688. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/scheduler/yaml_loader.py +0 -0
  689. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/scheduler.py +0 -0
  690. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/security/__init__.py +0 -0
  691. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/security/audit.py +0 -0
  692. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/security/injection.py +0 -0
  693. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/security/protected.py +0 -0
  694. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/setup/__init__.py +0 -0
  695. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/setup/build.py +0 -0
  696. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/setup/post_install.py +0 -0
  697. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/setup/setup_conda_env.py +0 -0
  698. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/setup.py +0 -0
  699. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/__init__.py +0 -0
  700. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/ai_generator.py +0 -0
  701. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/config.py +0 -0
  702. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/dedupe.py +0 -0
  703. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/discovery.py +0 -0
  704. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/drift.py +0 -0
  705. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/engine.py +0 -0
  706. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/enhanced_templates.py +0 -0
  707. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/example_verifier.py +0 -0
  708. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/manifest.py +0 -0
  709. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/models.py +0 -0
  710. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/reports.py +0 -0
  711. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/templates.py +0 -0
  712. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/undo_redo.py +0 -0
  713. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/standardise/validator.py +0 -0
  714. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/storage/__init__.py +0 -0
  715. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/storage/dynamodb_adapter.py +0 -0
  716. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/storage/mongodb_adapter.py +0 -0
  717. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/storage/postgresql_adapter.py +0 -0
  718. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/storage/redis_adapter.py +0 -0
  719. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/__init__.py +0 -0
  720. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/batch_source.py +0 -0
  721. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/cli_docs_source.py +0 -0
  722. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/discovery.py +0 -0
  723. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/docs_source.py +0 -0
  724. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/examples_source.py +0 -0
  725. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/executor.py +0 -0
  726. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/models.py +0 -0
  727. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/report_viewer.py +0 -0
  728. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/reporter.py +0 -0
  729. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/suite_runner/runner.py +0 -0
  730. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/templates/__init__.py +0 -0
  731. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/templates/cache.py +0 -0
  732. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/templates/dependency_checker.py +0 -0
  733. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/templates/discovery.py +0 -0
  734. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/templates/loader.py +0 -0
  735. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/templates/registry.py +0 -0
  736. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/templates/resolver.py +0 -0
  737. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/templates/security.py +0 -0
  738. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/templates/tool_override.py +0 -0
  739. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/templates/tools_doctor.py +0 -0
  740. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/tools/__init__.py +0 -0
  741. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/tools/audio.py +0 -0
  742. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/tools/glob_tool.py +0 -0
  743. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/tools/grep_tool.py +0 -0
  744. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/tools/multiedit.py +0 -0
  745. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/tools/skill_manage.py +0 -0
  746. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train/__init__.py +0 -0
  747. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train/agents/__init__.py +0 -0
  748. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train/agents/grader.py +0 -0
  749. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train/agents/hook.py +0 -0
  750. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train/agents/models.py +0 -0
  751. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train/agents/orchestrator.py +0 -0
  752. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train/agents/storage.py +0 -0
  753. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train/llm/__init__.py +0 -0
  754. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train/llm/trainer.py +0 -0
  755. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train.py +0 -0
  756. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/train_vision.py +0 -0
  757. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui/_aiui_datastore.py +0 -0
  758. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui/_external_agents.py +0 -0
  759. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui/callbacks.py +0 -0
  760. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui/context.py +0 -0
  761. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui/database_config.py +0 -0
  762. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui_agents/__init__.py +0 -0
  763. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui_agents/default_app.py +0 -0
  764. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui_bot/__init__.py +0 -0
  765. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui_bot/default_app.py +0 -0
  766. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui_chat/__init__.py +0 -0
  767. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui_chat/default_app.py +0 -0
  768. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui_realtime/__init__.py +0 -0
  769. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/ui_realtime/default_app.py +0 -0
  770. {praisonai-4.6.37 → praisonai-4.6.39}/praisonai/upload_vision.py +0 -0
  771. {praisonai-4.6.37 → praisonai-4.6.39}/setup.cfg +0 -0
  772. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test.py +0 -0
  773. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_agents_playbook.py +0 -0
  774. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_approval_system.py +0 -0
  775. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_basic.py +0 -0
  776. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_cli_features.py +0 -0
  777. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_custom_tools_fix.py +0 -0
  778. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_double_api_fix.py +0 -0
  779. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_n8n_agent_invoke.py +0 -0
  780. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_n8n_cli_feature.py +0 -0
  781. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_n8n_integration.py +0 -0
  782. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_phase2_refactor.py +0 -0
  783. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_recipe.py +0 -0
  784. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_registry.py +0 -0
  785. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_runner.py +0 -0
  786. {praisonai-4.6.37 → praisonai-4.6.39}/tests/test_sandboxed_agent_compatibility.py +0 -0
  787. {praisonai-4.6.37 → praisonai-4.6.39}/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.37
3
+ Version: 4.6.39
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -11,9 +11,9 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=1.6.37
14
+ Requires-Dist: praisonaiagents>=1.6.39
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
- Requires-Dist: litellm<=1.82.6,>=1.81.0
16
+ Requires-Dist: litellm<2,>=1.83.14
17
17
  Requires-Dist: PyYAML>=6.0
18
18
  Requires-Dist: mcp>=1.20.0
19
19
  Requires-Dist: typer>=0.9.0
@@ -474,8 +474,35 @@ def search(query: str) -> str:
474
474
 
475
475
  @tool
476
476
  def calculate(expression: str) -> float:
477
- """Evaluate a math expression."""
478
- return eval(expression)
477
+ """Safely evaluate a numeric arithmetic expression."""
478
+ import ast
479
+ import operator
480
+
481
+ # Define allowed operations
482
+ _OPS = {
483
+ ast.Add: operator.add,
484
+ ast.Sub: operator.sub,
485
+ ast.Mult: operator.mul,
486
+ ast.Div: operator.truediv,
487
+ ast.Pow: operator.pow,
488
+ ast.USub: operator.neg,
489
+ ast.UAdd: operator.pos,
490
+ }
491
+
492
+ def _safe_eval(node):
493
+ if isinstance(node, ast.Constant) and isinstance(node.value, (int, float)):
494
+ return node.value
495
+ elif isinstance(node, ast.BinOp) and type(node.op) in _OPS:
496
+ return _OPS[type(node.op)](_safe_eval(node.left), _safe_eval(node.right))
497
+ elif isinstance(node, ast.UnaryOp) and type(node.op) in _OPS:
498
+ return _OPS[type(node.op)](_safe_eval(node.operand))
499
+ else:
500
+ raise ValueError("Unsupported expression")
501
+
502
+ try:
503
+ return _safe_eval(ast.parse(expression, mode="eval").body)
504
+ except (ValueError, SyntaxError, TypeError, ZeroDivisionError, OverflowError):
505
+ raise ValueError("Invalid arithmetic expression")
479
506
 
480
507
  agent = Agent(
481
508
  instructions="You are a helpful assistant",
@@ -484,6 +511,7 @@ agent = Agent(
484
511
  agent.start("Search for AI news and calculate 15*4")
485
512
  ```
486
513
 
514
+ > ⚠️ **Security Note:** Never use `eval()`, `exec()`, or `subprocess` in tool functions that process LLM-generated or user-supplied input. Always validate and sanitize inputs to prevent code injection attacks.
487
515
  > 📖 [Full tools docs](https://docs.praison.ai/docs/tools/tools) — BaseTool, tool packages, 100+ built-in tools
488
516
 
489
517
  ### 5. Persistence (Databases)
@@ -510,6 +538,15 @@ pip install "praisonai[claw]"
510
538
  praisonai claw
511
539
  ```
512
540
 
541
+ #### Required Environment Variables
542
+
543
+ Copy `.env.example` to `.env` and configure the following variables:
544
+
545
+ | Variable | Required | Description |
546
+ |----------|----------|-------------|
547
+ | `OPENAI_API_KEY` | Yes | OpenAI API key for all LLM calls |
548
+ | `TAVILY_API_KEY` | Yes (Claw) | Tavily key for the built-in web-search tool. Get one free at https://app.tavily.com |
549
+
513
550
  Open **http://localhost:8082** — the dashboard comes with 13 built-in pages: Chat, Agents, Memory, Knowledge, Channels, Guardrails, Cron, and more. Add messaging channels directly from the UI.
514
551
 
515
552
  > 📖 [Full Claw docs](https://docs.praison.ai/docs/concepts/claw) — platform tokens, CLI options, Docker, and YAML agent mode
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.37
3
+ Version: 4.6.39
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -11,9 +11,9 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=1.6.37
14
+ Requires-Dist: praisonaiagents>=1.6.39
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
- Requires-Dist: litellm<=1.82.6,>=1.81.0
16
+ Requires-Dist: litellm<2,>=1.83.14
17
17
  Requires-Dist: PyYAML>=6.0
18
18
  Requires-Dist: mcp>=1.20.0
19
19
  Requires-Dist: typer>=0.9.0
@@ -474,8 +474,35 @@ def search(query: str) -> str:
474
474
 
475
475
  @tool
476
476
  def calculate(expression: str) -> float:
477
- """Evaluate a math expression."""
478
- return eval(expression)
477
+ """Safely evaluate a numeric arithmetic expression."""
478
+ import ast
479
+ import operator
480
+
481
+ # Define allowed operations
482
+ _OPS = {
483
+ ast.Add: operator.add,
484
+ ast.Sub: operator.sub,
485
+ ast.Mult: operator.mul,
486
+ ast.Div: operator.truediv,
487
+ ast.Pow: operator.pow,
488
+ ast.USub: operator.neg,
489
+ ast.UAdd: operator.pos,
490
+ }
491
+
492
+ def _safe_eval(node):
493
+ if isinstance(node, ast.Constant) and isinstance(node.value, (int, float)):
494
+ return node.value
495
+ elif isinstance(node, ast.BinOp) and type(node.op) in _OPS:
496
+ return _OPS[type(node.op)](_safe_eval(node.left), _safe_eval(node.right))
497
+ elif isinstance(node, ast.UnaryOp) and type(node.op) in _OPS:
498
+ return _OPS[type(node.op)](_safe_eval(node.operand))
499
+ else:
500
+ raise ValueError("Unsupported expression")
501
+
502
+ try:
503
+ return _safe_eval(ast.parse(expression, mode="eval").body)
504
+ except (ValueError, SyntaxError, TypeError, ZeroDivisionError, OverflowError):
505
+ raise ValueError("Invalid arithmetic expression")
479
506
 
480
507
  agent = Agent(
481
508
  instructions="You are a helpful assistant",
@@ -484,6 +511,7 @@ agent = Agent(
484
511
  agent.start("Search for AI news and calculate 15*4")
485
512
  ```
486
513
 
514
+ > ⚠️ **Security Note:** Never use `eval()`, `exec()`, or `subprocess` in tool functions that process LLM-generated or user-supplied input. Always validate and sanitize inputs to prevent code injection attacks.
487
515
  > 📖 [Full tools docs](https://docs.praison.ai/docs/tools/tools) — BaseTool, tool packages, 100+ built-in tools
488
516
 
489
517
  ### 5. Persistence (Databases)
@@ -510,6 +538,15 @@ pip install "praisonai[claw]"
510
538
  praisonai claw
511
539
  ```
512
540
 
541
+ #### Required Environment Variables
542
+
543
+ Copy `.env.example` to `.env` and configure the following variables:
544
+
545
+ | Variable | Required | Description |
546
+ |----------|----------|-------------|
547
+ | `OPENAI_API_KEY` | Yes | OpenAI API key for all LLM calls |
548
+ | `TAVILY_API_KEY` | Yes (Claw) | Tavily key for the built-in web-search tool. Get one free at https://app.tavily.com |
549
+
513
550
  Open **http://localhost:8082** — the dashboard comes with 13 built-in pages: Chat, Agents, Memory, Knowledge, Channels, Guardrails, Cron, and more. Add messaging channels directly from the UI.
514
551
 
515
552
  > 📖 [Full Claw docs](https://docs.praison.ai/docs/concepts/claw) — platform tokens, CLI options, Docker, and YAML agent mode
@@ -11,6 +11,7 @@ praisonai/__main__.py
11
11
  praisonai/_approval_spec.py
12
12
  praisonai/_async_bridge.py
13
13
  praisonai/_logging.py
14
+ praisonai/_registry.py
14
15
  praisonai/_safe_loader.py
15
16
  praisonai/agent.py
16
17
  praisonai/agent_scheduler.py
@@ -68,8 +69,10 @@ praisonai/bots/_config_schema.py
68
69
  praisonai/bots/_debounce.py
69
70
  praisonai/bots/_defaults.py
70
71
  praisonai/bots/_discord_approval.py
72
+ praisonai/bots/_dlq.py
71
73
  praisonai/bots/_email_utils.py
72
74
  praisonai/bots/_http_approval.py
75
+ praisonai/bots/_mirror.py
73
76
  praisonai/bots/_pairing_ui.py
74
77
  praisonai/bots/_protocol_mixin.py
75
78
  praisonai/bots/_rate_limit.py
@@ -86,6 +89,7 @@ praisonai/bots/bot.py
86
89
  praisonai/bots/botos.py
87
90
  praisonai/bots/discord.py
88
91
  praisonai/bots/email.py
92
+ praisonai/bots/linear.py
89
93
  praisonai/bots/media.py
90
94
  praisonai/bots/slack.py
91
95
  praisonai/bots/telegram.py
@@ -492,6 +496,7 @@ praisonai/framework_adapters/base.py
492
496
  praisonai/framework_adapters/crewai_adapter.py
493
497
  praisonai/framework_adapters/praisonai_adapter.py
494
498
  praisonai/framework_adapters/registry.py
499
+ praisonai/framework_adapters/validators.py
495
500
  praisonai/gateway/__init__.py
496
501
  praisonai/gateway/auth.py
497
502
  praisonai/gateway/cookie_auth.py
@@ -542,6 +547,7 @@ praisonai/jobs/router.py
542
547
  praisonai/jobs/server.py
543
548
  praisonai/jobs/store.py
544
549
  praisonai/llm/__init__.py
550
+ praisonai/llm/env.py
545
551
  praisonai/llm/registry.py
546
552
  praisonai/mcp_server/__init__.py
547
553
  praisonai/mcp_server/cli.py
@@ -661,6 +667,8 @@ praisonai/replay/reader.py
661
667
  praisonai/replay/storage.py
662
668
  praisonai/replay/writer.py
663
669
  praisonai/sandbox/__init__.py
670
+ praisonai/sandbox/_compat.py
671
+ praisonai/sandbox/_shell.py
664
672
  praisonai/sandbox/daytona.py
665
673
  praisonai/sandbox/docker.py
666
674
  praisonai/sandbox/modal.py
@@ -1,9 +1,9 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.6.37
4
+ praisonaiagents>=1.6.39
5
5
  python-dotenv>=0.19.0
6
- litellm<=1.82.6,>=1.81.0
6
+ litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
8
8
  mcp>=1.20.0
9
9
  typer>=0.9.0
@@ -294,8 +294,35 @@ def search(query: str) -> str:
294
294
 
295
295
  @tool
296
296
  def calculate(expression: str) -> float:
297
- """Evaluate a math expression."""
298
- return eval(expression)
297
+ """Safely evaluate a numeric arithmetic expression."""
298
+ import ast
299
+ import operator
300
+
301
+ # Define allowed operations
302
+ _OPS = {
303
+ ast.Add: operator.add,
304
+ ast.Sub: operator.sub,
305
+ ast.Mult: operator.mul,
306
+ ast.Div: operator.truediv,
307
+ ast.Pow: operator.pow,
308
+ ast.USub: operator.neg,
309
+ ast.UAdd: operator.pos,
310
+ }
311
+
312
+ def _safe_eval(node):
313
+ if isinstance(node, ast.Constant) and isinstance(node.value, (int, float)):
314
+ return node.value
315
+ elif isinstance(node, ast.BinOp) and type(node.op) in _OPS:
316
+ return _OPS[type(node.op)](_safe_eval(node.left), _safe_eval(node.right))
317
+ elif isinstance(node, ast.UnaryOp) and type(node.op) in _OPS:
318
+ return _OPS[type(node.op)](_safe_eval(node.operand))
319
+ else:
320
+ raise ValueError("Unsupported expression")
321
+
322
+ try:
323
+ return _safe_eval(ast.parse(expression, mode="eval").body)
324
+ except (ValueError, SyntaxError, TypeError, ZeroDivisionError, OverflowError):
325
+ raise ValueError("Invalid arithmetic expression")
299
326
 
300
327
  agent = Agent(
301
328
  instructions="You are a helpful assistant",
@@ -304,6 +331,7 @@ agent = Agent(
304
331
  agent.start("Search for AI news and calculate 15*4")
305
332
  ```
306
333
 
334
+ > ⚠️ **Security Note:** Never use `eval()`, `exec()`, or `subprocess` in tool functions that process LLM-generated or user-supplied input. Always validate and sanitize inputs to prevent code injection attacks.
307
335
  > 📖 [Full tools docs](https://docs.praison.ai/docs/tools/tools) — BaseTool, tool packages, 100+ built-in tools
308
336
 
309
337
  ### 5. Persistence (Databases)
@@ -330,6 +358,15 @@ pip install "praisonai[claw]"
330
358
  praisonai claw
331
359
  ```
332
360
 
361
+ #### Required Environment Variables
362
+
363
+ Copy `.env.example` to `.env` and configure the following variables:
364
+
365
+ | Variable | Required | Description |
366
+ |----------|----------|-------------|
367
+ | `OPENAI_API_KEY` | Yes | OpenAI API key for all LLM calls |
368
+ | `TAVILY_API_KEY` | Yes (Claw) | Tavily key for the built-in web-search tool. Get one free at https://app.tavily.com |
369
+
333
370
  Open **http://localhost:8082** — the dashboard comes with 13 built-in pages: Chat, Agents, Memory, Knowledge, Channels, Guardrails, Cron, and more. Add messaging channels directly from the UI.
334
371
 
335
372
  > 📖 [Full Claw docs](https://docs.praison.ai/docs/concepts/claw) — platform tokens, CLI options, Docker, and YAML agent mode
@@ -1,7 +1,4 @@
1
- # Suppress crewai.cli.config logger BEFORE any imports to prevent INFO log
2
- import logging
3
1
  import threading
4
- logging.getLogger('crewai.cli.config').setLevel(logging.ERROR)
5
2
 
6
3
  # Version is lightweight, import directly
7
4
  from .version import __version__
@@ -39,10 +36,34 @@ __all__ = [
39
36
  _telemetry_lock = threading.Lock()
40
37
  _telemetry_initialized = False
41
38
 
39
+ def _get_telemetry_defaults() -> dict[str, str]:
40
+ """Get telemetry environment defaults without mutating os.environ.
41
+
42
+ Returns:
43
+ Dict of environment variable defaults for telemetry
44
+ """
45
+ import os
46
+ defaults = {}
47
+
48
+ # Respect any value the user already set
49
+ if "OTEL_SDK_DISABLED" not in os.environ:
50
+ langfuse_configured = bool(
51
+ os.getenv("LANGFUSE_PUBLIC_KEY")
52
+ or os.path.exists(os.path.expanduser("~/.praisonai/langfuse.env"))
53
+ )
54
+ defaults["OTEL_SDK_DISABLED"] = "false" if langfuse_configured else "true"
55
+
56
+ if "EC_TELEMETRY" not in os.environ:
57
+ defaults["EC_TELEMETRY"] = "false"
58
+
59
+ return defaults
60
+
61
+
42
62
  def _ensure_telemetry_defaults() -> None:
43
63
  """Apply telemetry env defaults exactly once, on first observability use.
44
64
 
45
65
  Thread-safe implementation using double-checked locking pattern.
66
+ DEPRECATED: Use _apply_telemetry_defaults() with explicit config instead.
46
67
  """
47
68
  global _telemetry_initialized
48
69
  if _telemetry_initialized: # fast path, OK without lock
@@ -50,18 +71,21 @@ def _ensure_telemetry_defaults() -> None:
50
71
  with _telemetry_lock:
51
72
  if _telemetry_initialized:
52
73
  return
53
- import os
54
- # Respect any value the user already set
55
- if "OTEL_SDK_DISABLED" not in os.environ:
56
- langfuse_configured = bool(
57
- os.getenv("LANGFUSE_PUBLIC_KEY")
58
- or os.path.exists(os.path.expanduser("~/.praisonai/langfuse.env"))
59
- )
60
- os.environ["OTEL_SDK_DISABLED"] = "false" if langfuse_configured else "true"
61
- os.environ.setdefault("EC_TELEMETRY", "false") # respect user overrides
74
+ _apply_telemetry_defaults(_get_telemetry_defaults())
62
75
  _telemetry_initialized = True
63
76
 
64
77
 
78
+ def _apply_telemetry_defaults(env_vars: dict[str, str]) -> None:
79
+ """Apply telemetry defaults to os.environ.
80
+
81
+ Args:
82
+ env_vars: Dict of environment variables to set
83
+ """
84
+ import os
85
+ for key, value in env_vars.items():
86
+ os.environ.setdefault(key, value)
87
+
88
+
65
89
  # Lazy loading for heavy imports
66
90
  def __getattr__(name):
67
91
  """Lazy load heavy modules to improve import time."""
@@ -0,0 +1,228 @@
1
+ """Generic plugin registry implementation for PraisonAI.
2
+
3
+ This module provides a unified registry pattern to replace the divergent singleton
4
+ implementations across the codebase. It supports both built-in and entry-point
5
+ based plugin discovery with thread-safe registration and dependency injection.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import threading
11
+ from importlib.metadata import entry_points
12
+ from typing import Callable, Dict, Generic, Optional, Type, TypeVar
13
+ import logging
14
+
15
+ T = TypeVar("T")
16
+ logger = logging.getLogger(__name__)
17
+
18
+
19
+ class PluginRegistry(Generic[T]):
20
+ """Generic plugin registry: builtins + entry points + runtime register().
21
+
22
+ This replaces the singleton pattern with dependency injection while maintaining
23
+ the same functionality. Supports:
24
+ - Built-in plugins with lazy loading
25
+ - Entry points discovery
26
+ - Runtime registration
27
+ - Alias support for alternative names
28
+ - Thread-safe operations
29
+ """
30
+
31
+ def __init__(
32
+ self,
33
+ *,
34
+ entry_point_group: str,
35
+ builtins: Optional[Dict[str, Callable[[], Type[T]]]] = None
36
+ ) -> None:
37
+ """Initialize the registry.
38
+
39
+ Args:
40
+ entry_point_group: Entry points group name for plugin discovery
41
+ builtins: Dict of name -> loader function for built-in plugins
42
+ """
43
+ self._entry_point_group = entry_point_group
44
+ self._items: Dict[str, Type[T]] = {}
45
+ self._aliases: Dict[str, str] = {} # alias -> canonical name
46
+ self._lock = threading.Lock()
47
+
48
+ # Load built-in plugins with error handling
49
+ if builtins:
50
+ for name, loader in builtins.items():
51
+ try:
52
+ self._items[name] = loader()
53
+ except ImportError:
54
+ # Built-in plugin dependencies not available, skip
55
+ pass
56
+ except Exception:
57
+ # Log other errors but don't crash initialization
58
+ logger.warning("Failed to load built-in plugin %r", name, exc_info=True)
59
+
60
+ self._load_entry_points()
61
+
62
+ def _load_entry_points(self) -> None:
63
+ """Load plugins from entry points."""
64
+ try:
65
+ for ep in entry_points(group=self._entry_point_group):
66
+ try:
67
+ plugin_class = ep.load()
68
+ with self._lock:
69
+ self._items[ep.name] = plugin_class
70
+ except Exception:
71
+ # Do not break plugin dispatch because one plugin is broken
72
+ logger.warning(
73
+ "Failed to load plugin %r from entry point",
74
+ ep.name,
75
+ exc_info=True,
76
+ )
77
+ except Exception:
78
+ # entry_points() might not be available in older Python versions
79
+ logger.debug("Entry points not available for group %s", self._entry_point_group)
80
+
81
+ def register(
82
+ self,
83
+ name: str,
84
+ cls: Type[T],
85
+ *,
86
+ aliases: Optional[list[str]] = None
87
+ ) -> None:
88
+ """Register a plugin at runtime.
89
+
90
+ Args:
91
+ name: Plugin name
92
+ cls: Plugin class
93
+ aliases: Optional list of alias names for this plugin
94
+ """
95
+ with self._lock:
96
+ canonical_name = name.lower()
97
+ self._items[canonical_name] = cls
98
+
99
+ # Register aliases
100
+ if aliases:
101
+ for alias in aliases:
102
+ normalized_alias = alias.lower()
103
+ self._aliases[normalized_alias] = canonical_name
104
+
105
+ def unregister(self, name: str) -> bool:
106
+ """Unregister a plugin.
107
+
108
+ Args:
109
+ name: Plugin name
110
+
111
+ Returns:
112
+ True if plugin was found and removed, False otherwise
113
+ """
114
+ with self._lock:
115
+ normalized_name = name.lower()
116
+
117
+ # Check if it's an alias
118
+ if normalized_name in self._aliases:
119
+ del self._aliases[normalized_name]
120
+ return True
121
+
122
+ # Check if it's a canonical name
123
+ if normalized_name in self._items:
124
+ # Remove all aliases pointing to this plugin
125
+ aliases_to_remove = [
126
+ alias for alias, canonical in self._aliases.items()
127
+ if canonical == normalized_name
128
+ ]
129
+ for alias in aliases_to_remove:
130
+ del self._aliases[alias]
131
+
132
+ del self._items[normalized_name]
133
+ return True
134
+
135
+ return False
136
+
137
+ def resolve(self, name: str) -> Type[T]:
138
+ """Resolve a plugin name to its class.
139
+
140
+ Args:
141
+ name: Plugin name
142
+
143
+ Returns:
144
+ Plugin class
145
+
146
+ Raises:
147
+ ValueError: If plugin is not found
148
+ """
149
+ with self._lock:
150
+ normalized_name = name.lower()
151
+
152
+ # Resolve alias to canonical name
153
+ canonical_name = self._aliases.get(normalized_name, normalized_name)
154
+ cls = self._items.get(canonical_name)
155
+
156
+ # Capture available plugins snapshot while holding lock
157
+ # to avoid race condition between check and error message
158
+ if cls is None:
159
+ available_plugins = sorted(self._items.keys())
160
+ available_aliases = sorted(self._aliases.keys())
161
+ available_snapshot = available_plugins + available_aliases
162
+ else:
163
+ available_snapshot = None
164
+
165
+ if cls is None:
166
+ raise ValueError(
167
+ f"Unknown {self._entry_point_group} plugin: {name!r}. "
168
+ f"Available: {available_snapshot}"
169
+ )
170
+ return cls
171
+
172
+ def create(self, name: str, *args, **kwargs) -> T:
173
+ """Create an instance of the specified plugin.
174
+
175
+ Args:
176
+ name: Plugin name
177
+ *args, **kwargs: Arguments to pass to plugin constructor
178
+
179
+ Returns:
180
+ Plugin instance
181
+
182
+ Raises:
183
+ ValueError: If plugin is not found
184
+ """
185
+ cls = self.resolve(name)
186
+ return cls(*args, **kwargs)
187
+
188
+ def list_names(self) -> list[str]:
189
+ """List all registered plugin names.
190
+
191
+ Returns:
192
+ Sorted list of plugin names
193
+ """
194
+ with self._lock:
195
+ return sorted(self._items.keys())
196
+
197
+ def is_available(self, name: str) -> bool:
198
+ """Check if a plugin is available.
199
+
200
+ Args:
201
+ name: Plugin name
202
+
203
+ Returns:
204
+ True if plugin exists and can be created
205
+ """
206
+ try:
207
+ self.resolve(name)
208
+ return True
209
+ except ValueError:
210
+ return False
211
+
212
+ def list_aliases(self) -> Dict[str, str]:
213
+ """List all aliases and their target plugins.
214
+
215
+ Returns:
216
+ Dict mapping alias -> canonical name
217
+ """
218
+ with self._lock:
219
+ return dict(self._aliases)
220
+
221
+ def list_all_names(self) -> list[str]:
222
+ """List all names including aliases.
223
+
224
+ Returns:
225
+ Sorted list of all registered names and aliases
226
+ """
227
+ with self._lock:
228
+ return sorted(list(self._items.keys()) + list(self._aliases.keys()))