PraisonAI 4.6.38__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 (783) hide show
  1. {praisonai-4.6.38 → praisonai-4.6.39}/PKG-INFO +2 -2
  2. {praisonai-4.6.38 → praisonai-4.6.39}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.38 → praisonai-4.6.39}/PraisonAI.egg-info/requires.txt +1 -1
  4. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/__init__.py +36 -9
  5. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_registry.py +70 -6
  6. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/agents_generator.py +21 -14
  7. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/auto.py +35 -43
  8. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/guardrails.py +4 -0
  9. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/rag.py +2 -2
  10. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli_backends/registry.py +48 -35
  11. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/db/adapter.py +156 -0
  12. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy.py +1 -1
  13. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/exec_approval.py +34 -9
  14. praisonai-4.6.39/praisonai/inbuilt_tools/__init__.py +33 -0
  15. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/jobs/store.py +22 -14
  16. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/llm/registry.py +117 -175
  17. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/registry.py +77 -91
  18. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/profiler.py +405 -516
  19. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/scheduler/agent_scheduler.py +5 -3
  20. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/tool_registry.py +24 -12
  21. praisonai-4.6.39/praisonai/version.py +1 -0
  22. {praisonai-4.6.38 → praisonai-4.6.39}/pyproject.toml +1 -1
  23. praisonai-4.6.38/praisonai/inbuilt_tools/__init__.py +0 -49
  24. praisonai-4.6.38/praisonai/version.py +0 -1
  25. {praisonai-4.6.38 → praisonai-4.6.39}/PraisonAI.egg-info/SOURCES.txt +0 -0
  26. {praisonai-4.6.38 → praisonai-4.6.39}/PraisonAI.egg-info/dependency_links.txt +0 -0
  27. {praisonai-4.6.38 → praisonai-4.6.39}/PraisonAI.egg-info/entry_points.txt +0 -0
  28. {praisonai-4.6.38 → praisonai-4.6.39}/PraisonAI.egg-info/top_level.txt +0 -0
  29. {praisonai-4.6.38 → praisonai-4.6.39}/README.md +0 -0
  30. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/__main__.py +0 -0
  31. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_approval_spec.py +0 -0
  32. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_async_bridge.py +0 -0
  33. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/__init__.py +0 -0
  34. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/api_md.py +0 -0
  35. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/__init__.py +0 -0
  36. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/docs_extractor.py +0 -0
  37. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/docs_generator.py +0 -0
  38. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/generator.py +0 -0
  39. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  40. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/python_extractor.py +0 -0
  41. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  42. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/rust_extractor.py +0 -0
  43. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  44. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  45. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  46. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_logging.py +0 -0
  47. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/_safe_loader.py +0 -0
  48. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/acp/__init__.py +0 -0
  49. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/acp/config.py +0 -0
  50. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/acp/safe_edit.py +0 -0
  51. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/acp/server.py +0 -0
  52. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/acp/session.py +0 -0
  53. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/adapters/__init__.py +0 -0
  54. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/adapters/readers.py +0 -0
  55. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/adapters/rerankers.py +0 -0
  56. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/adapters/retrievers.py +0 -0
  57. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/adapters/vector_stores.py +0 -0
  58. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/agent.py +0 -0
  59. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/agent_scheduler.py +0 -0
  60. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/api/agent_invoke.py +0 -0
  61. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/api/call.py +0 -0
  62. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/app/__init__.py +0 -0
  63. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/app/agentos.py +0 -0
  64. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/async_agent_scheduler.py +0 -0
  65. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/audit/__init__.py +0 -0
  66. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/audit/agent_centric.py +0 -0
  67. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/__init__.py +0 -0
  68. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_ack.py +0 -0
  69. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_approval.py +0 -0
  70. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_approval_base.py +0 -0
  71. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_auth.py +0 -0
  72. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_chunk.py +0 -0
  73. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_commands.py +0 -0
  74. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_config_schema.py +0 -0
  75. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_debounce.py +0 -0
  76. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_defaults.py +0 -0
  77. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_discord_approval.py +0 -0
  78. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_dlq.py +0 -0
  79. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_email_utils.py +0 -0
  80. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_http_approval.py +0 -0
  81. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_mirror.py +0 -0
  82. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_pairing_ui.py +0 -0
  83. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_protocol_mixin.py +0 -0
  84. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_rate_limit.py +0 -0
  85. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_registry.py +0 -0
  86. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_resilience.py +0 -0
  87. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_session.py +0 -0
  88. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_slack_approval.py +0 -0
  89. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_telegram_approval.py +0 -0
  90. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_unknown_user.py +0 -0
  91. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_webhook_approval.py +0 -0
  92. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  93. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/agentmail.py +0 -0
  94. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/bot.py +0 -0
  95. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/botos.py +0 -0
  96. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/discord.py +0 -0
  97. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/email.py +0 -0
  98. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/linear.py +0 -0
  99. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/media.py +0 -0
  100. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/slack.py +0 -0
  101. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/telegram.py +0 -0
  102. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/bots/whatsapp.py +0 -0
  103. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/__init__.py +0 -0
  104. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/agent.py +0 -0
  105. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/benchmark.py +0 -0
  106. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/cdp_agent.py +0 -0
  107. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/cdp_utils.py +0 -0
  108. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/cli.py +0 -0
  109. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/diagnostics.py +0 -0
  110. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/launcher.py +0 -0
  111. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/playwright_agent.py +0 -0
  112. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/profiling.py +0 -0
  113. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/protocol.py +0 -0
  114. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/report.py +0 -0
  115. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/server.py +0 -0
  116. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/sessions.py +0 -0
  117. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/browser/video.py +0 -0
  118. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/__init__.py +0 -0
  119. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/a2a.py +0 -0
  120. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/assistants.py +0 -0
  121. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/audio.py +0 -0
  122. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/batches.py +0 -0
  123. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/completions.py +0 -0
  124. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/container_files.py +0 -0
  125. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/containers.py +0 -0
  126. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/embeddings.py +0 -0
  127. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/files.py +0 -0
  128. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/fine_tuning.py +0 -0
  129. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/images.py +0 -0
  130. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/mcp.py +0 -0
  131. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/messages.py +0 -0
  132. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/moderations.py +0 -0
  133. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/ocr.py +0 -0
  134. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/passthrough.py +0 -0
  135. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/realtime.py +0 -0
  136. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/rerank.py +0 -0
  137. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/responses.py +0 -0
  138. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/search.py +0 -0
  139. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/skills.py +0 -0
  140. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/vector_store_files.py +0 -0
  141. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/vector_stores.py +0 -0
  142. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/capabilities/videos.py +0 -0
  143. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/claw/__init__.py +0 -0
  144. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/claw/default_app.py +0 -0
  145. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/__init__.py +0 -0
  146. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/_paths.py +0 -0
  147. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/app.py +0 -0
  148. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/branding.py +0 -0
  149. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/__init__.py +0 -0
  150. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/acp.py +0 -0
  151. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/agents.py +0 -0
  152. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/app.py +0 -0
  153. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/audit.py +0 -0
  154. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/batch.py +0 -0
  155. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/benchmark.py +0 -0
  156. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/bot.py +0 -0
  157. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/browser.py +0 -0
  158. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/call.py +0 -0
  159. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/chat.py +0 -0
  160. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/claw.py +0 -0
  161. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/code.py +0 -0
  162. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/commit.py +0 -0
  163. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/completion.py +0 -0
  164. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/config.py +0 -0
  165. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/context.py +0 -0
  166. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/dashboard.py +0 -0
  167. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/debug.py +0 -0
  168. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/deploy.py +0 -0
  169. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/diag.py +0 -0
  170. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/docs.py +0 -0
  171. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/doctor.py +0 -0
  172. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/endpoints.py +0 -0
  173. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/environment.py +0 -0
  174. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/eval.py +0 -0
  175. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/examples.py +0 -0
  176. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/flow.py +0 -0
  177. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/gateway.py +0 -0
  178. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/github.py +0 -0
  179. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/hooks.py +0 -0
  180. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/knowledge.py +0 -0
  181. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/langextract.py +0 -0
  182. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/langfuse.py +0 -0
  183. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/loop.py +0 -0
  184. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/lsp.py +0 -0
  185. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/managed.py +0 -0
  186. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/mcp.py +0 -0
  187. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/memory.py +0 -0
  188. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/mint_link.py +0 -0
  189. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/n8n.py +0 -0
  190. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/obs.py +0 -0
  191. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/onboard.py +0 -0
  192. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/package.py +0 -0
  193. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/pairing.py +0 -0
  194. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/paths.py +0 -0
  195. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/plugins.py +0 -0
  196. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/port.py +0 -0
  197. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/profile.py +0 -0
  198. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/publish.py +0 -0
  199. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/rag.py +0 -0
  200. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/realtime.py +0 -0
  201. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/recipe.py +0 -0
  202. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/registry.py +0 -0
  203. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/replay.py +0 -0
  204. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/research.py +0 -0
  205. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/retrieval.py +0 -0
  206. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/rules.py +0 -0
  207. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/run.py +0 -0
  208. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/sandbox.py +0 -0
  209. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/schedule.py +0 -0
  210. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/serve.py +0 -0
  211. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/session.py +0 -0
  212. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/setup.py +0 -0
  213. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/skills.py +0 -0
  214. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/standardise.py +0 -0
  215. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/templates.py +0 -0
  216. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/test.py +0 -0
  217. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/todo.py +0 -0
  218. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/tools.py +0 -0
  219. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/traces.py +0 -0
  220. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/tracker.py +0 -0
  221. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/train.py +0 -0
  222. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/ui.py +0 -0
  223. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/up.py +0 -0
  224. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/version.py +0 -0
  225. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/commands/workflow.py +0 -0
  226. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/config_loader.py +0 -0
  227. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/configuration/__init__.py +0 -0
  228. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/configuration/loader.py +0 -0
  229. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/configuration/paths.py +0 -0
  230. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/configuration/schema.py +0 -0
  231. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/execution/__init__.py +0 -0
  232. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/execution/core.py +0 -0
  233. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/execution/profiler.py +0 -0
  234. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/execution/request.py +0 -0
  235. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/execution/result.py +0 -0
  236. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/fallback_schema.py +0 -0
  237. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/__init__.py +0 -0
  238. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/acp.py +0 -0
  239. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/action_orchestrator.py +0 -0
  240. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/agent_scheduler.py +0 -0
  241. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/agent_tools.py +0 -0
  242. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/agents.py +0 -0
  243. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/approval.py +0 -0
  244. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/at_mentions.py +0 -0
  245. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/audit_cli.py +0 -0
  246. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/auto_memory.py +0 -0
  247. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/auto_mode.py +0 -0
  248. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/autonomy_mode.py +0 -0
  249. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/background.py +0 -0
  250. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/base.py +0 -0
  251. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/benchmark.py +0 -0
  252. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/bots_cli.py +0 -0
  253. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/capabilities.py +0 -0
  254. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/checkpoints.py +0 -0
  255. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/cli_profiler.py +0 -0
  256. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/code_intelligence.py +0 -0
  257. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/compaction.py +0 -0
  258. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/compare.py +0 -0
  259. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/config_hierarchy.py +0 -0
  260. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/context_manager.py +0 -0
  261. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/cost_tracker.py +0 -0
  262. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/csv_test_runner.py +0 -0
  263. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/debug.py +0 -0
  264. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/deploy.py +0 -0
  265. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/diag.py +0 -0
  266. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/display_jsonl.py +0 -0
  267. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/__init__.py +0 -0
  268. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  269. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  270. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  271. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  272. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  273. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  274. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  275. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  276. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  277. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  278. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  279. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  280. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  281. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  282. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  283. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  284. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  285. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/engine.py +0 -0
  286. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/formatters.py +0 -0
  287. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/handler.py +0 -0
  288. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/models.py +0 -0
  289. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/doctor/registry.py +0 -0
  290. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/endpoints.py +0 -0
  291. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/eval.py +0 -0
  292. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/examples.py +0 -0
  293. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/external_agents.py +0 -0
  294. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/fast_context.py +0 -0
  295. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/file_history.py +0 -0
  296. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/flow_display.py +0 -0
  297. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/gateway.py +0 -0
  298. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/git_attribution.py +0 -0
  299. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/git_integration.py +0 -0
  300. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/guardrail.py +0 -0
  301. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/handoff.py +0 -0
  302. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/hooks.py +0 -0
  303. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/hybrid_workflow.py +0 -0
  304. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/image.py +0 -0
  305. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/interactive_core_headless.py +0 -0
  306. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/interactive_runtime.py +0 -0
  307. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/interactive_test_harness.py +0 -0
  308. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/interactive_tools.py +0 -0
  309. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/interactive_tui.py +0 -0
  310. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/job_workflow.py +0 -0
  311. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/jobs.py +0 -0
  312. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/knowledge.py +0 -0
  313. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/knowledge_cli.py +0 -0
  314. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/lite.py +0 -0
  315. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/logs.py +0 -0
  316. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/lsp_cli.py +0 -0
  317. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  318. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/mcp.py +0 -0
  319. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/message_queue.py +0 -0
  320. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/metrics.py +0 -0
  321. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/migrate.py +0 -0
  322. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/migration_flow.py +0 -0
  323. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/migration_spec.py +0 -0
  324. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/n8n.py +0 -0
  325. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/observability.py +0 -0
  326. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/ollama.py +0 -0
  327. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/onboard.py +0 -0
  328. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/output_modes.py +0 -0
  329. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/output_style.py +0 -0
  330. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/package.py +0 -0
  331. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/performance.py +0 -0
  332. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/persistence.py +0 -0
  333. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/plugin_cli.py +0 -0
  334. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/profile.py +0 -0
  335. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/profiler/__init__.py +0 -0
  336. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/profiler/core.py +0 -0
  337. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/profiler/optimizations.py +0 -0
  338. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/profiler/suite.py +0 -0
  339. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/profiling.py +0 -0
  340. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/queue/__init__.py +0 -0
  341. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/queue/manager.py +0 -0
  342. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/queue/models.py +0 -0
  343. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/queue/persistence.py +0 -0
  344. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/queue/scheduler.py +0 -0
  345. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/queue/worker.py +0 -0
  346. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/recipe.py +0 -0
  347. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/recipe_creator.py +0 -0
  348. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/recipe_optimizer.py +0 -0
  349. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/recipe_prompts.py +0 -0
  350. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/recipes.py +0 -0
  351. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/registry.py +0 -0
  352. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/repo_map.py +0 -0
  353. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/router.py +0 -0
  354. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/safe_shell.py +0 -0
  355. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/sandbox_cli.py +0 -0
  356. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/sandbox_executor.py +0 -0
  357. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/sdk_knowledge.py +0 -0
  358. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/serve.py +0 -0
  359. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/session.py +0 -0
  360. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/setup/__init__.py +0 -0
  361. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/setup/handler.py +0 -0
  362. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/setup/templates.py +0 -0
  363. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/skills.py +0 -0
  364. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/slash_commands.py +0 -0
  365. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/telemetry.py +0 -0
  366. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/templates.py +0 -0
  367. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/thinking.py +0 -0
  368. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/todo.py +0 -0
  369. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tools.py +0 -0
  370. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/__init__.py +0 -0
  371. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/app.py +0 -0
  372. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/cli.py +0 -0
  373. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/config.py +0 -0
  374. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/debug.py +0 -0
  375. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/events.py +0 -0
  376. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/mock_provider.py +0 -0
  377. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/orchestrator.py +0 -0
  378. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  379. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/help.py +0 -0
  380. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/main.py +0 -0
  381. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/queue.py +0 -0
  382. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/session.py +0 -0
  383. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/screens/settings.py +0 -0
  384. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/session_store.py +0 -0
  385. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  386. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  387. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  388. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  389. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  390. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  391. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/status.py +0 -0
  392. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  393. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/wizard.py +0 -0
  394. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/workflow.py +0 -0
  395. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/features/yaml_utils.py +0 -0
  396. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/__init__.py +0 -0
  397. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/async_tui.py +0 -0
  398. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/config.py +0 -0
  399. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/core.py +0 -0
  400. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/events.py +0 -0
  401. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  402. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  403. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  404. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/praison_io.py +0 -0
  405. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/repl.py +0 -0
  406. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/split_tui.py +0 -0
  407. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/interactive/tui_app.py +0 -0
  408. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/langfuse_client.py +0 -0
  409. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/legacy.py +0 -0
  410. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/main.py +0 -0
  411. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/output/__init__.py +0 -0
  412. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/output/console.py +0 -0
  413. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/schedule_cli.py +0 -0
  414. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/schema_provider.py +0 -0
  415. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/session/__init__.py +0 -0
  416. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/session/unified.py +0 -0
  417. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/state/__init__.py +0 -0
  418. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/state/identifiers.py +0 -0
  419. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/state/sessions.py +0 -0
  420. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/ui/__init__.py +0 -0
  421. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/ui/config.py +0 -0
  422. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/ui/events.py +0 -0
  423. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/ui/mg_backend.py +0 -0
  424. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/ui/plain.py +0 -0
  425. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/ui/rich_backend.py +0 -0
  426. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli/unified_schema.py +0 -0
  427. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli_backends/__init__.py +0 -0
  428. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/cli_backends/claude.py +0 -0
  429. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/__init__.py +0 -0
  430. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/agent_tools.py +0 -0
  431. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/diff/__init__.py +0 -0
  432. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/diff/diff_strategy.py +0 -0
  433. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/tools/__init__.py +0 -0
  434. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/tools/apply_diff.py +0 -0
  435. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/tools/execute_command.py +0 -0
  436. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/tools/list_files.py +0 -0
  437. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/tools/read_file.py +0 -0
  438. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/tools/search_replace.py +0 -0
  439. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/tools/write_file.py +0 -0
  440. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/utils/__init__.py +0 -0
  441. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/utils/file_utils.py +0 -0
  442. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/utils/ignore_utils.py +0 -0
  443. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/code/utils/text_utils.py +0 -0
  444. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/context/__init__.py +0 -0
  445. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/context/artifact_store.py +0 -0
  446. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/context/config.py +0 -0
  447. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/context/history_store.py +0 -0
  448. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/context/queue.py +0 -0
  449. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/context/setup.py +0 -0
  450. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/context/terminal_logger.py +0 -0
  451. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/daemon/__init__.py +0 -0
  452. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/daemon/launchd.py +0 -0
  453. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/daemon/systemd.py +0 -0
  454. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/daemon/windows.py +0 -0
  455. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/db/__init__.py +0 -0
  456. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/__init__.py +0 -0
  457. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/api.py +0 -0
  458. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/docker.py +0 -0
  459. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/doctor.py +0 -0
  460. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/main.py +0 -0
  461. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/models.py +0 -0
  462. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/providers/__init__.py +0 -0
  463. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/providers/aws.py +0 -0
  464. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/providers/azure.py +0 -0
  465. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/providers/base.py +0 -0
  466. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/providers/gcp.py +0 -0
  467. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/deploy/schema.py +0 -0
  468. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/docs_runner/__init__.py +0 -0
  469. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/docs_runner/classifier.py +0 -0
  470. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/docs_runner/executor.py +0 -0
  471. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/docs_runner/extractor.py +0 -0
  472. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/docs_runner/reporter.py +0 -0
  473. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/docs_runner/runner.py +0 -0
  474. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/docs_runner/workspace.py +0 -0
  475. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/__init__.py +0 -0
  476. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/a2u_server.py +0 -0
  477. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/discovery.py +0 -0
  478. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/providers/__init__.py +0 -0
  479. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/providers/a2a.py +0 -0
  480. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/providers/a2u.py +0 -0
  481. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/providers/agents_api.py +0 -0
  482. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/providers/base.py +0 -0
  483. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/providers/mcp.py +0 -0
  484. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/providers/recipe.py +0 -0
  485. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  486. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/registry.py +0 -0
  487. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/endpoints/server.py +0 -0
  488. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/flow/__init__.py +0 -0
  489. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/flow/client.py +0 -0
  490. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  491. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  492. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/flow/components/__init__.py +0 -0
  493. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/flow/converter.py +0 -0
  494. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/flow/helpers.py +0 -0
  495. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/framework_adapters/__init__.py +0 -0
  496. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  497. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/framework_adapters/base.py +0 -0
  498. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  499. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  500. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/framework_adapters/registry.py +0 -0
  501. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/framework_adapters/validators.py +0 -0
  502. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/__init__.py +0 -0
  503. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/auth.py +0 -0
  504. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/cookie_auth.py +0 -0
  505. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/gateway_approval.py +0 -0
  506. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/magic_link.py +0 -0
  507. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/origin_check.py +0 -0
  508. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/pairing.py +0 -0
  509. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/pairing_routes.py +0 -0
  510. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/push_channels.py +0 -0
  511. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/push_delivery.py +0 -0
  512. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/push_polling.py +0 -0
  513. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/push_presence.py +0 -0
  514. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/rate_limiter.py +0 -0
  515. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/redis_pubsub.py +0 -0
  516. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/gateway/server.py +0 -0
  517. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  518. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/inc/__init__.py +0 -0
  519. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/inc/config.py +0 -0
  520. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/inc/models.py +0 -0
  521. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/__init__.py +0 -0
  522. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/_session_info.py +0 -0
  523. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/_tool_aliases.py +0 -0
  524. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/base.py +0 -0
  525. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/claude_code.py +0 -0
  526. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/codex_cli.py +0 -0
  527. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/compute/__init__.py +0 -0
  528. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/compute/daytona.py +0 -0
  529. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/compute/docker.py +0 -0
  530. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/compute/e2b.py +0 -0
  531. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/compute/flyio.py +0 -0
  532. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/compute/local.py +0 -0
  533. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/compute/modal_compute.py +0 -0
  534. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/cursor_cli.py +0 -0
  535. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/db_session_adapter.py +0 -0
  536. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/gemini_cli.py +0 -0
  537. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/hosted_agent.py +0 -0
  538. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/local_agent.py +0 -0
  539. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/managed_agents.py +0 -0
  540. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/managed_local.py +0 -0
  541. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/registry.py +0 -0
  542. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/integrations/sandboxed_agent.py +0 -0
  543. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/jobs/__init__.py +0 -0
  544. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/jobs/executor.py +0 -0
  545. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/jobs/models.py +0 -0
  546. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/jobs/router.py +0 -0
  547. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/jobs/server.py +0 -0
  548. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/llm/__init__.py +0 -0
  549. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/llm/env.py +0 -0
  550. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/__init__.py +0 -0
  551. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/adapters/__init__.py +0 -0
  552. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/adapters/agents.py +0 -0
  553. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  554. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  555. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  556. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  557. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/adapters/memory.py +0 -0
  558. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/adapters/prompts.py +0 -0
  559. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/adapters/resources.py +0 -0
  560. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  561. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/auth/__init__.py +0 -0
  562. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/auth/api_key.py +0 -0
  563. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/auth/oauth.py +0 -0
  564. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/auth/oidc.py +0 -0
  565. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/auth/scopes.py +0 -0
  566. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/cli.py +0 -0
  567. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/elicitation.py +0 -0
  568. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/icons.py +0 -0
  569. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/recipe_adapter.py +0 -0
  570. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/recipe_cli.py +0 -0
  571. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/registry.py +0 -0
  572. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/sampling.py +0 -0
  573. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/server.py +0 -0
  574. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/tasks.py +0 -0
  575. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/tool_index.py +0 -0
  576. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/transports/__init__.py +0 -0
  577. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/transports/http_stream.py +0 -0
  578. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/mcp_server/transports/stdio.py +0 -0
  579. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/n8n/__init__.py +0 -0
  580. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/n8n/client.py +0 -0
  581. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/n8n/converter.py +0 -0
  582. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/n8n/preview.py +0 -0
  583. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/n8n/reverse_converter.py +0 -0
  584. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/observability/__init__.py +0 -0
  585. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/observability/langextract.py +0 -0
  586. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/observability/langfuse.py +0 -0
  587. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/__init__.py +0 -0
  588. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/config.py +0 -0
  589. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/__init__.py +0 -0
  590. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/async_mysql.py +0 -0
  591. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/async_postgres.py +0 -0
  592. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  593. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/base.py +0 -0
  594. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/json_store.py +0 -0
  595. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/mysql.py +0 -0
  596. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/postgres.py +0 -0
  597. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/singlestore.py +0 -0
  598. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/sqlite.py +0 -0
  599. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/supabase.py +0 -0
  600. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/surrealdb.py +0 -0
  601. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/conversation/turso.py +0 -0
  602. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/factory.py +0 -0
  603. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/hooks/__init__.py +0 -0
  604. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  605. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/__init__.py +0 -0
  606. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/base.py +0 -0
  607. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/cassandra.py +0 -0
  608. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/chroma.py +0 -0
  609. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  610. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  611. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/couchbase.py +0 -0
  612. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/lancedb.py +0 -0
  613. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  614. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  615. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  616. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/milvus.py +0 -0
  617. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  618. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/pgvector.py +0 -0
  619. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/pinecone.py +0 -0
  620. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/qdrant.py +0 -0
  621. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  622. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  623. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  624. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  625. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/knowledge/weaviate.py +0 -0
  626. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/migrations/__init__.py +0 -0
  627. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/migrations/manager.py +0 -0
  628. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/orchestrator.py +0 -0
  629. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/state/__init__.py +0 -0
  630. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/state/async_mongodb.py +0 -0
  631. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/state/base.py +0 -0
  632. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/state/dynamodb.py +0 -0
  633. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/state/firestore.py +0 -0
  634. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/state/gcs.py +0 -0
  635. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/state/memory.py +0 -0
  636. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/state/mongodb.py +0 -0
  637. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/state/redis.py +0 -0
  638. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/state/upstash.py +0 -0
  639. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/tests/__init__.py +0 -0
  640. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/persistence/tests/test_all_backends.py +0 -0
  641. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/push/__init__.py +0 -0
  642. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/push/client.py +0 -0
  643. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/push/transports.py +0 -0
  644. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/__init__.py +0 -0
  645. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/bridge.py +0 -0
  646. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/core.py +0 -0
  647. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/exceptions.py +0 -0
  648. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/history.py +0 -0
  649. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/models.py +0 -0
  650. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/operations.py +0 -0
  651. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/policy.py +0 -0
  652. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/registry.py +0 -0
  653. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/runtime.py +0 -0
  654. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/security.py +0 -0
  655. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/serve.py +0 -0
  656. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/recipe/server.py +0 -0
  657. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/replay/__init__.py +0 -0
  658. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/replay/analyzer.py +0 -0
  659. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/replay/applier.py +0 -0
  660. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/replay/judge.py +0 -0
  661. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/replay/plan.py +0 -0
  662. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/replay/player.py +0 -0
  663. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/replay/reader.py +0 -0
  664. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/replay/storage.py +0 -0
  665. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/replay/writer.py +0 -0
  666. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/sandbox/__init__.py +0 -0
  667. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/sandbox/_compat.py +0 -0
  668. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/sandbox/_shell.py +0 -0
  669. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/sandbox/daytona.py +0 -0
  670. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/sandbox/docker.py +0 -0
  671. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/sandbox/modal.py +0 -0
  672. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/sandbox/sandlock.py +0 -0
  673. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/sandbox/ssh.py +0 -0
  674. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/sandbox/subprocess.py +0 -0
  675. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/scheduler/__init__.py +0 -0
  676. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/scheduler/base.py +0 -0
  677. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/scheduler/daemon_manager.py +0 -0
  678. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/scheduler/executor.py +0 -0
  679. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/scheduler/shared.py +0 -0
  680. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/scheduler/state_manager.py +0 -0
  681. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/scheduler/yaml_loader.py +0 -0
  682. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/scheduler.py +0 -0
  683. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/security/__init__.py +0 -0
  684. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/security/audit.py +0 -0
  685. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/security/injection.py +0 -0
  686. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/security/protected.py +0 -0
  687. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/setup/__init__.py +0 -0
  688. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/setup/build.py +0 -0
  689. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/setup/post_install.py +0 -0
  690. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/setup/setup_conda_env.py +0 -0
  691. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/setup.py +0 -0
  692. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/__init__.py +0 -0
  693. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/ai_generator.py +0 -0
  694. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/config.py +0 -0
  695. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/dedupe.py +0 -0
  696. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/discovery.py +0 -0
  697. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/drift.py +0 -0
  698. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/engine.py +0 -0
  699. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/enhanced_templates.py +0 -0
  700. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/example_verifier.py +0 -0
  701. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/manifest.py +0 -0
  702. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/models.py +0 -0
  703. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/reports.py +0 -0
  704. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/templates.py +0 -0
  705. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/undo_redo.py +0 -0
  706. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/standardise/validator.py +0 -0
  707. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/storage/__init__.py +0 -0
  708. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/storage/dynamodb_adapter.py +0 -0
  709. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/storage/mongodb_adapter.py +0 -0
  710. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/storage/postgresql_adapter.py +0 -0
  711. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/storage/redis_adapter.py +0 -0
  712. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/__init__.py +0 -0
  713. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/batch_source.py +0 -0
  714. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/cli_docs_source.py +0 -0
  715. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/discovery.py +0 -0
  716. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/docs_source.py +0 -0
  717. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/examples_source.py +0 -0
  718. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/executor.py +0 -0
  719. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/models.py +0 -0
  720. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/report_viewer.py +0 -0
  721. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/reporter.py +0 -0
  722. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/suite_runner/runner.py +0 -0
  723. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/templates/__init__.py +0 -0
  724. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/templates/cache.py +0 -0
  725. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/templates/dependency_checker.py +0 -0
  726. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/templates/discovery.py +0 -0
  727. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/templates/loader.py +0 -0
  728. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/templates/registry.py +0 -0
  729. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/templates/resolver.py +0 -0
  730. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/templates/security.py +0 -0
  731. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/templates/tool_override.py +0 -0
  732. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/templates/tools_doctor.py +0 -0
  733. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/test.py +0 -0
  734. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/tool_resolver.py +0 -0
  735. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/tools/__init__.py +0 -0
  736. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/tools/audio.py +0 -0
  737. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/tools/glob_tool.py +0 -0
  738. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/tools/grep_tool.py +0 -0
  739. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/tools/multiedit.py +0 -0
  740. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/tools/skill_manage.py +0 -0
  741. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train/__init__.py +0 -0
  742. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train/agents/__init__.py +0 -0
  743. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train/agents/grader.py +0 -0
  744. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train/agents/hook.py +0 -0
  745. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train/agents/models.py +0 -0
  746. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train/agents/orchestrator.py +0 -0
  747. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train/agents/storage.py +0 -0
  748. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train/llm/__init__.py +0 -0
  749. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train/llm/trainer.py +0 -0
  750. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train.py +0 -0
  751. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/train_vision.py +0 -0
  752. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui/_aiui_datastore.py +0 -0
  753. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui/_external_agents.py +0 -0
  754. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui/callbacks.py +0 -0
  755. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui/components/aicoder.py +0 -0
  756. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui/context.py +0 -0
  757. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui/database_config.py +0 -0
  758. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui_agents/__init__.py +0 -0
  759. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui_agents/default_app.py +0 -0
  760. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui_bot/__init__.py +0 -0
  761. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui_bot/default_app.py +0 -0
  762. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui_chat/__init__.py +0 -0
  763. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui_chat/default_app.py +0 -0
  764. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui_realtime/__init__.py +0 -0
  765. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/ui_realtime/default_app.py +0 -0
  766. {praisonai-4.6.38 → praisonai-4.6.39}/praisonai/upload_vision.py +0 -0
  767. {praisonai-4.6.38 → praisonai-4.6.39}/setup.cfg +0 -0
  768. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test.py +0 -0
  769. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_agents_playbook.py +0 -0
  770. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_approval_system.py +0 -0
  771. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_basic.py +0 -0
  772. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_cli_features.py +0 -0
  773. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_custom_tools_fix.py +0 -0
  774. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_double_api_fix.py +0 -0
  775. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_n8n_agent_invoke.py +0 -0
  776. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_n8n_cli_feature.py +0 -0
  777. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_n8n_integration.py +0 -0
  778. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_phase2_refactor.py +0 -0
  779. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_recipe.py +0 -0
  780. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_registry.py +0 -0
  781. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_runner.py +0 -0
  782. {praisonai-4.6.38 → praisonai-4.6.39}/tests/test_sandboxed_agent_compatibility.py +0 -0
  783. {praisonai-4.6.38 → 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.38
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,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.38
14
+ Requires-Dist: praisonaiagents>=1.6.39
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<2,>=1.83.14
17
17
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.38
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,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.38
14
+ Requires-Dist: praisonaiagents>=1.6.39
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<2,>=1.83.14
17
17
  Requires-Dist: PyYAML>=6.0
@@ -1,7 +1,7 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.6.38
4
+ praisonaiagents>=1.6.39
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -36,10 +36,34 @@ __all__ = [
36
36
  _telemetry_lock = threading.Lock()
37
37
  _telemetry_initialized = False
38
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
+
39
62
  def _ensure_telemetry_defaults() -> None:
40
63
  """Apply telemetry env defaults exactly once, on first observability use.
41
64
 
42
65
  Thread-safe implementation using double-checked locking pattern.
66
+ DEPRECATED: Use _apply_telemetry_defaults() with explicit config instead.
43
67
  """
44
68
  global _telemetry_initialized
45
69
  if _telemetry_initialized: # fast path, OK without lock
@@ -47,18 +71,21 @@ def _ensure_telemetry_defaults() -> None:
47
71
  with _telemetry_lock:
48
72
  if _telemetry_initialized:
49
73
  return
50
- import os
51
- # Respect any value the user already set
52
- if "OTEL_SDK_DISABLED" not in os.environ:
53
- langfuse_configured = bool(
54
- os.getenv("LANGFUSE_PUBLIC_KEY")
55
- or os.path.exists(os.path.expanduser("~/.praisonai/langfuse.env"))
56
- )
57
- os.environ["OTEL_SDK_DISABLED"] = "false" if langfuse_configured else "true"
58
- os.environ.setdefault("EC_TELEMETRY", "false") # respect user overrides
74
+ _apply_telemetry_defaults(_get_telemetry_defaults())
59
75
  _telemetry_initialized = True
60
76
 
61
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
+
62
89
  # Lazy loading for heavy imports
63
90
  def __getattr__(name):
64
91
  """Lazy load heavy modules to improve import time."""
@@ -24,6 +24,7 @@ class PluginRegistry(Generic[T]):
24
24
  - Built-in plugins with lazy loading
25
25
  - Entry points discovery
26
26
  - Runtime registration
27
+ - Alias support for alternative names
27
28
  - Thread-safe operations
28
29
  """
29
30
 
@@ -41,6 +42,7 @@ class PluginRegistry(Generic[T]):
41
42
  """
42
43
  self._entry_point_group = entry_point_group
43
44
  self._items: Dict[str, Type[T]] = {}
45
+ self._aliases: Dict[str, str] = {} # alias -> canonical name
44
46
  self._lock = threading.Lock()
45
47
 
46
48
  # Load built-in plugins with error handling
@@ -76,15 +78,29 @@ class PluginRegistry(Generic[T]):
76
78
  # entry_points() might not be available in older Python versions
77
79
  logger.debug("Entry points not available for group %s", self._entry_point_group)
78
80
 
79
- def register(self, name: str, cls: Type[T]) -> None:
81
+ def register(
82
+ self,
83
+ name: str,
84
+ cls: Type[T],
85
+ *,
86
+ aliases: Optional[list[str]] = None
87
+ ) -> None:
80
88
  """Register a plugin at runtime.
81
89
 
82
90
  Args:
83
91
  name: Plugin name
84
92
  cls: Plugin class
93
+ aliases: Optional list of alias names for this plugin
85
94
  """
86
95
  with self._lock:
87
- self._items[name.lower()] = cls
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
88
104
 
89
105
  def unregister(self, name: str) -> bool:
90
106
  """Unregister a plugin.
@@ -96,7 +112,27 @@ class PluginRegistry(Generic[T]):
96
112
  True if plugin was found and removed, False otherwise
97
113
  """
98
114
  with self._lock:
99
- return self._items.pop(name.lower(), None) is not None
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
100
136
 
101
137
  def resolve(self, name: str) -> Type[T]:
102
138
  """Resolve a plugin name to its class.
@@ -111,10 +147,20 @@ class PluginRegistry(Generic[T]):
111
147
  ValueError: If plugin is not found
112
148
  """
113
149
  with self._lock:
114
- cls = self._items.get(name.lower())
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
+
115
156
  # Capture available plugins snapshot while holding lock
116
157
  # to avoid race condition between check and error message
117
- available_snapshot = sorted(self._items.keys()) if cls is None else None
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
118
164
 
119
165
  if cls is None:
120
166
  raise ValueError(
@@ -161,4 +207,22 @@ class PluginRegistry(Generic[T]):
161
207
  self.resolve(name)
162
208
  return True
163
209
  except ValueError:
164
- return False
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()))
@@ -1172,9 +1172,9 @@ class AgentsGenerator:
1172
1172
  acp_enabled = global_config.get('acp', False)
1173
1173
  lsp_enabled = global_config.get('lsp', False)
1174
1174
  interactive_runtime = None
1175
- interactive_loop = None
1176
1175
 
1177
1176
  if acp_enabled or lsp_enabled:
1177
+ runtime_started = False
1178
1178
  try:
1179
1179
  import asyncio
1180
1180
  from praisonai.cli.features.interactive_runtime import InteractiveRuntime, RuntimeConfig
@@ -1190,11 +1190,12 @@ class AgentsGenerator:
1190
1190
  interactive_runtime = InteractiveRuntime(runtime_config)
1191
1191
  self.logger.info(f"Starting InteractiveRuntime (ACP: {acp_enabled}, LSP: {lsp_enabled})")
1192
1192
 
1193
- # Create a scoped event loop instead of modifying process globals
1194
- interactive_loop = asyncio.new_event_loop()
1195
-
1196
- # Start the runtime but keep it alive for agent execution
1197
- interactive_loop.run_until_complete(interactive_runtime.start())
1193
+ # Runs on the persistent background loop; safe from sync and async callers.
1194
+ # run_sync raises RuntimeError early if called from inside a running loop
1195
+ # so the bug is loud instead of a deadlock.
1196
+ from ._async_bridge import run_sync
1197
+ run_sync(interactive_runtime.start())
1198
+ runtime_started = True
1198
1199
 
1199
1200
  centric_tools = create_agent_centric_tools(interactive_runtime)
1200
1201
  self.logger.info(f"Loaded {len(centric_tools)} InteractiveRuntime tools")
@@ -1203,13 +1204,20 @@ class AgentsGenerator:
1203
1204
  except ImportError as e:
1204
1205
  self.logger.warning(f"Failed to load InteractiveRuntime components: {e}")
1205
1206
  interactive_runtime = None
1206
- interactive_loop = None
1207
+ except RuntimeError:
1208
+ # Don't swallow RuntimeError from run_sync - preserve fail-fast semantics
1209
+ raise
1207
1210
  except Exception as e:
1211
+ if runtime_started and interactive_runtime is not None:
1212
+ try:
1213
+ from ._async_bridge import run_sync
1214
+ run_sync(interactive_runtime.stop())
1215
+ except Exception as stop_error:
1216
+ self.logger.error(
1217
+ f"Error stopping partially started InteractiveRuntime: {stop_error}"
1218
+ )
1208
1219
  self.logger.error(f"Error starting InteractiveRuntime: {e}")
1209
- if 'interactive_loop' in locals() and interactive_loop is not None:
1210
- interactive_loop.close()
1211
1220
  interactive_runtime = None
1212
- interactive_loop = None
1213
1221
 
1214
1222
  # Create agents from config
1215
1223
  for role, details in config['roles'].items():
@@ -1443,14 +1451,13 @@ class AgentsGenerator:
1443
1451
  self.logger.debug(f"Result: {response}")
1444
1452
  result = response if response else ""
1445
1453
  finally:
1446
- if interactive_runtime and interactive_loop:
1454
+ if interactive_runtime:
1447
1455
  try:
1448
1456
  self.logger.info("Stopping InteractiveRuntime...")
1449
- interactive_loop.run_until_complete(interactive_runtime.stop())
1457
+ from ._async_bridge import run_sync
1458
+ run_sync(interactive_runtime.stop())
1450
1459
  except Exception as e:
1451
1460
  self.logger.error(f"Error stopping InteractiveRuntime: {e}")
1452
- finally:
1453
- interactive_loop.close()
1454
1461
 
1455
1462
  if AGENTOPS_AVAILABLE:
1456
1463
  import agentops
@@ -15,9 +15,8 @@ from typing import Any, Dict, List, Optional, Type, TypeVar
15
15
  import os
16
16
  import json
17
17
  import yaml
18
- from rich import print
19
18
  import threading
20
- from collections import OrderedDict
19
+ from rich import print
21
20
  from praisonai._logging import get_logger
22
21
 
23
22
  # Type variable for Pydantic models
@@ -59,10 +58,6 @@ def _load_optional(key: str, loader):
59
58
  return _optional_cache[key]
60
59
 
61
60
 
62
- # Bounded LRU cache for OpenAI clients (one per (api_key, base_url) tuple)
63
- _OPENAI_CLIENT_CACHE_MAX = 8
64
- _openai_clients: "OrderedDict[tuple, object]" = OrderedDict()
65
- _openai_clients_lock = threading.Lock()
66
61
 
67
62
 
68
63
  # --- CrewAI lazy loading ---
@@ -199,38 +194,6 @@ def _check_openai_available() -> bool:
199
194
  return result is not None
200
195
 
201
196
 
202
- def _get_openai_client(api_key: str = None, base_url: str = None):
203
- """Lazy load OpenAI client with bounded LRU cache (thread-safe, multi-tenant).
204
-
205
- Multi-tenant safe: each (api_key, base_url) tuple gets its own cached client.
206
- Bounded by _OPENAI_CLIENT_CACHE_MAX with proper LRU eviction.
207
- """
208
- key = (api_key or os.environ.get("OPENAI_API_KEY"), base_url)
209
-
210
- with _openai_clients_lock:
211
- # Check if client exists and update LRU position
212
- client = _openai_clients.get(key)
213
- if client is not None:
214
- _openai_clients.move_to_end(key)
215
- return client
216
-
217
- # Create new client
218
- try:
219
- from openai import OpenAI
220
- except ImportError as e:
221
- raise ImportError("Install with: pip install openai") from e
222
- client = OpenAI(api_key=key[0], base_url=key[1])
223
- _openai_clients[key] = client
224
-
225
- # Bound the cache; close the LRU victim
226
- if len(_openai_clients) > _OPENAI_CLIENT_CACHE_MAX:
227
- _, victim = _openai_clients.popitem(last=False)
228
- try:
229
- victim.close()
230
- except Exception:
231
- pass # Best-effort cleanup
232
-
233
- return client
234
197
 
235
198
 
236
199
  # Use namespaced logger; root logger is configured only by the CLI
@@ -478,6 +441,38 @@ class BaseAutoGenerator:
478
441
  'api_key': ep.api_key
479
442
  }
480
443
  ]
444
+ self._openai_client = None # lazy, per-instance
445
+ self._openai_client_lock = threading.Lock()
446
+
447
+ def _get_openai_client(self):
448
+ """Get or create the OpenAI client for this instance."""
449
+ if self._openai_client is None:
450
+ with self._openai_client_lock:
451
+ if self._openai_client is None:
452
+ try:
453
+ from openai import OpenAI
454
+ except ImportError as e:
455
+ raise ImportError("Install with: pip install openai") from e
456
+ cfg = self.config_list[0]
457
+ self._openai_client = OpenAI(
458
+ api_key=cfg.get("api_key") or os.environ.get("OPENAI_API_KEY"),
459
+ base_url=cfg.get("base_url"),
460
+ )
461
+ return self._openai_client
462
+
463
+ def close(self):
464
+ """Close the OpenAI client if it exists."""
465
+ if not hasattr(self, '_openai_client_lock'):
466
+ return # Object was never fully initialized
467
+ with self._openai_client_lock:
468
+ client = getattr(self, '_openai_client', None)
469
+ self._openai_client = None
470
+ if client is not None:
471
+ client.close()
472
+
473
+ def __del__(self):
474
+ """Best-effort cleanup, but the canonical path is explicit close()."""
475
+ self.close()
481
476
 
482
477
  def _structured_completion(self, response_model: Type[T], messages: List[Dict], **kwargs) -> T:
483
478
  """
@@ -514,10 +509,7 @@ class BaseAutoGenerator:
514
509
 
515
510
  # Fallback to OpenAI SDK (uses beta.chat.completions.parse)
516
511
  if _check_openai_available():
517
- client = _get_openai_client(
518
- api_key=self.config_list[0].get('api_key'),
519
- base_url=self.config_list[0].get('base_url')
520
- )
512
+ client = self._get_openai_client()
521
513
  response = client.beta.chat.completions.parse(
522
514
  model=model_name,
523
515
  messages=messages,
@@ -1537,4 +1529,4 @@ Generate a workflow for: {self.topic}
1537
1529
  with open(full_path, 'w') as f:
1538
1530
  yaml.dump(workflow_yaml, f, default_flow_style=False, sort_keys=False)
1539
1531
 
1540
- return full_path
1532
+ return full_path
@@ -86,6 +86,8 @@ Only respond with the JSON, no other text."""
86
86
  )
87
87
 
88
88
  import json
89
+ if not response.choices or response.choices[0].message is None:
90
+ raise ValueError("LLM returned empty or filtered response")
89
91
  result_text = response.choices[0].message.content
90
92
  result_data = json.loads(result_text)
91
93
 
@@ -160,6 +162,8 @@ Only respond with the JSON, no other text."""
160
162
  )
161
163
 
162
164
  import json
165
+ if not response.choices or response.choices[0].message is None:
166
+ raise ValueError("LLM returned empty or filtered response")
163
167
  result_text = response.choices[0].message.content
164
168
  result_data = json.loads(result_text)
165
169
 
@@ -103,7 +103,7 @@ def rag_query(
103
103
  **kwargs
104
104
  )
105
105
 
106
- answer = response.choices[0].message.content if response.choices else ""
106
+ answer = response.choices[0].message.content if response.choices and response.choices[0].message is not None else ""
107
107
 
108
108
  usage = None
109
109
  if hasattr(response, 'usage') and response.usage:
@@ -188,7 +188,7 @@ async def arag_query(
188
188
  **kwargs
189
189
  )
190
190
 
191
- answer = response.choices[0].message.content if response.choices else ""
191
+ answer = response.choices[0].message.content if response.choices and response.choices[0].message is not None else ""
192
192
 
193
193
  usage = None
194
194
  if hasattr(response, 'usage') and response.usage:
@@ -8,10 +8,36 @@ Plugin registry for CLI backend implementations following AGENTS.md patterns:
8
8
 
9
9
  import threading
10
10
  from typing import Dict, Callable, Any, Optional, Union
11
-
12
- # Thread-safe registry for CLI backend factories
13
- _REGISTRY: Dict[str, Callable[[], Any]] = {}
14
- _REGISTRY_LOCK = threading.Lock()
11
+ from .._registry import PluginRegistry
12
+
13
+ # CLI Backend Registry using canonical PluginRegistry
14
+ def _get_builtin_cli_backend_loaders() -> Dict[str, Callable[[], Any]]:
15
+ """Get built-in CLI backend loaders."""
16
+ def claude_loader():
17
+ def factory():
18
+ from .claude import ClaudeCodeBackend
19
+ return ClaudeCodeBackend()
20
+ return factory
21
+
22
+ return {
23
+ "claude-code": claude_loader
24
+ }
25
+
26
+ # Global CLI backend registry instance
27
+ _cli_backend_registry: Optional[PluginRegistry] = None
28
+ _registry_lock = threading.Lock()
29
+
30
+ def _get_cli_backend_registry() -> PluginRegistry:
31
+ """Get the CLI backend registry instance."""
32
+ global _cli_backend_registry
33
+ if _cli_backend_registry is None:
34
+ with _registry_lock:
35
+ if _cli_backend_registry is None:
36
+ _cli_backend_registry = PluginRegistry(
37
+ entry_point_group="praisonai.cli_backends",
38
+ builtins=_get_builtin_cli_backend_loaders()
39
+ )
40
+ return _cli_backend_registry
15
41
 
16
42
 
17
43
  def register_cli_backend(backend_id: str, factory: Callable[[], Any]) -> None:
@@ -21,14 +47,18 @@ def register_cli_backend(backend_id: str, factory: Callable[[], Any]) -> None:
21
47
  backend_id: Unique identifier (e.g., "claude-code", "codex-cli")
22
48
  factory: Factory function that returns a CliBackendProtocol instance
23
49
  """
24
- with _REGISTRY_LOCK:
25
- _REGISTRY[backend_id] = factory
50
+ # Wrap factory in a loader function for PluginRegistry
51
+ def factory_loader():
52
+ return factory
53
+
54
+ registry = _get_cli_backend_registry()
55
+ registry.register(backend_id, factory_loader)
26
56
 
27
57
 
28
58
  def list_cli_backends() -> list[str]:
29
59
  """List all registered CLI backend IDs."""
30
- with _REGISTRY_LOCK:
31
- return list(_REGISTRY.keys())
60
+ registry = _get_cli_backend_registry()
61
+ return registry.list_names()
32
62
 
33
63
 
34
64
  def resolve_cli_backend(
@@ -47,12 +77,15 @@ def resolve_cli_backend(
47
77
  Raises:
48
78
  ValueError: If backend_id is not registered
49
79
  """
50
- with _REGISTRY_LOCK:
51
- if backend_id not in _REGISTRY:
52
- available = list(_REGISTRY.keys())
53
- raise ValueError(f"Unknown CLI backend: {backend_id}. Available: {available}")
54
-
55
- factory = _REGISTRY[backend_id]
80
+ registry = _get_cli_backend_registry()
81
+
82
+ try:
83
+ # Get the factory loader and create the factory
84
+ factory_loader = registry.resolve(backend_id)
85
+ factory = factory_loader()
86
+ except ValueError:
87
+ available = registry.list_names()
88
+ raise ValueError(f"Unknown CLI backend: {backend_id}. Available: {available}")
56
89
 
57
90
  # Create instance with factory
58
91
  backend = factory()
@@ -77,24 +110,4 @@ def resolve_cli_backend(
77
110
  return backend
78
111
 
79
112
 
80
- def _register_builtin_backends() -> None:
81
- """Register built-in CLI backends (lazy loaded)."""
82
- # Only register if not already done
83
- with _REGISTRY_LOCK:
84
- if "claude-code" in _REGISTRY:
85
- return
86
-
87
- def claude_factory():
88
- from .claude import ClaudeCodeBackend
89
- return ClaudeCodeBackend()
90
-
91
- register_cli_backend("claude-code", claude_factory)
92
-
93
-
94
- # Auto-register built-in backends on first access
95
- def __getattr__(name: str):
96
- """Lazy registration trigger."""
97
- _register_builtin_backends()
98
- raise AttributeError(f"No attribute {name}")
99
-
100
- # Registration happens lazily via __getattr__ on first attribute access
113
+ # Built-in backends are now registered via _get_builtin_cli_backend_loaders()