PraisonAI 4.6.55__tar.gz → 4.6.56__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (826) hide show
  1. {praisonai-4.6.55 → praisonai-4.6.56}/PKG-INFO +2 -2
  2. {praisonai-4.6.55 → praisonai-4.6.56}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.55 → praisonai-4.6.56}/PraisonAI.egg-info/SOURCES.txt +0 -1
  4. {praisonai-4.6.55 → praisonai-4.6.56}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/formatters.py +47 -2
  6. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/main.py +0 -1
  7. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/inc/models.py +0 -2
  8. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/host_app.py +67 -7
  9. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/base.py +14 -2
  10. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/registry.py +7 -5
  11. praisonai-4.6.56/praisonai/llm/env.py +87 -0
  12. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/sandbox/subprocess.py +111 -22
  13. praisonai-4.6.56/praisonai/version.py +1 -0
  14. {praisonai-4.6.55 → praisonai-4.6.56}/pyproject.toml +1 -1
  15. praisonai-4.6.55/praisonai/deploy.py +0 -223
  16. praisonai-4.6.55/praisonai/llm/env.py +0 -56
  17. praisonai-4.6.55/praisonai/version.py +0 -1
  18. {praisonai-4.6.55 → praisonai-4.6.56}/PraisonAI.egg-info/dependency_links.txt +0 -0
  19. {praisonai-4.6.55 → praisonai-4.6.56}/PraisonAI.egg-info/entry_points.txt +0 -0
  20. {praisonai-4.6.55 → praisonai-4.6.56}/PraisonAI.egg-info/top_level.txt +0 -0
  21. {praisonai-4.6.55 → praisonai-4.6.56}/README.md +0 -0
  22. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/__init__.py +0 -0
  23. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/__main__.py +0 -0
  24. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_approval_spec.py +0 -0
  25. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_async_bridge.py +0 -0
  26. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/__init__.py +0 -0
  27. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/api_md.py +0 -0
  28. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/__init__.py +0 -0
  29. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/docs_extractor.py +0 -0
  30. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/docs_generator.py +0 -0
  31. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/generator.py +0 -0
  32. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  33. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/python_extractor.py +0 -0
  34. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  35. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/rust_extractor.py +0 -0
  36. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  37. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  38. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  39. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_entrypoint.py +0 -0
  40. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_framework_availability.py +0 -0
  41. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_logging.py +0 -0
  42. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_registry.py +0 -0
  43. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/_safe_loader.py +0 -0
  44. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/acp/__init__.py +0 -0
  45. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/acp/config.py +0 -0
  46. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/acp/safe_edit.py +0 -0
  47. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/acp/server.py +0 -0
  48. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/acp/session.py +0 -0
  49. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/adapters/__init__.py +0 -0
  50. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/adapters/readers.py +0 -0
  51. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/adapters/rerankers.py +0 -0
  52. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/adapters/retrievers.py +0 -0
  53. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/adapters/vector_stores.py +0 -0
  54. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/agent.py +0 -0
  55. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/agent_scheduler.py +0 -0
  56. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/agents_generator.py +0 -0
  57. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/api/agent_invoke.py +0 -0
  58. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/api/call.py +0 -0
  59. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/app/__init__.py +0 -0
  60. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/app/agentos.py +0 -0
  61. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/async_agent_scheduler.py +0 -0
  62. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/audit/__init__.py +0 -0
  63. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/audit/agent_centric.py +0 -0
  64. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/auto.py +0 -0
  65. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/__init__.py +0 -0
  66. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_ack.py +0 -0
  67. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_approval.py +0 -0
  68. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_approval_base.py +0 -0
  69. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_auth.py +0 -0
  70. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_chunk.py +0 -0
  71. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_commands.py +0 -0
  72. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_config_schema.py +0 -0
  73. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_debounce.py +0 -0
  74. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_defaults.py +0 -0
  75. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_discord_approval.py +0 -0
  76. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_dlq.py +0 -0
  77. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_email_utils.py +0 -0
  78. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_http_approval.py +0 -0
  79. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_mirror.py +0 -0
  80. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_pairing_ui.py +0 -0
  81. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_protocol_mixin.py +0 -0
  82. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_rate_limit.py +0 -0
  83. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_registry.py +0 -0
  84. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_resilience.py +0 -0
  85. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_session.py +0 -0
  86. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_slack_approval.py +0 -0
  87. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_telegram_approval.py +0 -0
  88. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_typing_indicator.py +0 -0
  89. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_unknown_user.py +0 -0
  90. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_webhook_approval.py +0 -0
  91. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  92. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/agentmail.py +0 -0
  93. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/bot.py +0 -0
  94. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/botos.py +0 -0
  95. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/discord.py +0 -0
  96. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/email.py +0 -0
  97. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/linear.py +0 -0
  98. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/media.py +0 -0
  99. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/slack.py +0 -0
  100. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/telegram.py +0 -0
  101. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/bots/whatsapp.py +0 -0
  102. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/__init__.py +0 -0
  103. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/agent.py +0 -0
  104. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/benchmark.py +0 -0
  105. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/cdp_agent.py +0 -0
  106. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/cdp_utils.py +0 -0
  107. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/cli.py +0 -0
  108. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/diagnostics.py +0 -0
  109. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/launcher.py +0 -0
  110. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/playwright_agent.py +0 -0
  111. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/profiling.py +0 -0
  112. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/protocol.py +0 -0
  113. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/report.py +0 -0
  114. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/server.py +0 -0
  115. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/sessions.py +0 -0
  116. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/browser/video.py +0 -0
  117. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/__init__.py +0 -0
  118. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/a2a.py +0 -0
  119. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/assistants.py +0 -0
  120. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/audio.py +0 -0
  121. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/batches.py +0 -0
  122. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/completions.py +0 -0
  123. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/container_files.py +0 -0
  124. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/containers.py +0 -0
  125. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/embeddings.py +0 -0
  126. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/files.py +0 -0
  127. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/fine_tuning.py +0 -0
  128. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/guardrails.py +0 -0
  129. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/images.py +0 -0
  130. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/mcp.py +0 -0
  131. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/messages.py +0 -0
  132. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/moderations.py +0 -0
  133. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/ocr.py +0 -0
  134. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/passthrough.py +0 -0
  135. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/rag.py +0 -0
  136. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/realtime.py +0 -0
  137. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/rerank.py +0 -0
  138. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/responses.py +0 -0
  139. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/search.py +0 -0
  140. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/skills.py +0 -0
  141. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/vector_store_files.py +0 -0
  142. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/vector_stores.py +0 -0
  143. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/capabilities/videos.py +0 -0
  144. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/claw/__init__.py +0 -0
  145. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/claw/default_app.py +0 -0
  146. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/__init__.py +0 -0
  147. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/_paths.py +0 -0
  148. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/app.py +0 -0
  149. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/branding.py +0 -0
  150. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/__init__.py +0 -0
  151. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/acp.py +0 -0
  152. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/agents.py +0 -0
  153. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/app.py +0 -0
  154. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/audit.py +0 -0
  155. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/batch.py +0 -0
  156. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/benchmark.py +0 -0
  157. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/bot.py +0 -0
  158. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/browser.py +0 -0
  159. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/call.py +0 -0
  160. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/chat.py +0 -0
  161. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/claw.py +0 -0
  162. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/code.py +0 -0
  163. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/commit.py +0 -0
  164. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/completion.py +0 -0
  165. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/config.py +0 -0
  166. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/context.py +0 -0
  167. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/dashboard.py +0 -0
  168. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/debug.py +0 -0
  169. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/deploy.py +0 -0
  170. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/diag.py +0 -0
  171. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/docs.py +0 -0
  172. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/doctor.py +0 -0
  173. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/endpoints.py +0 -0
  174. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/environment.py +0 -0
  175. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/eval.py +0 -0
  176. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/examples.py +0 -0
  177. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/flow.py +0 -0
  178. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/gateway.py +0 -0
  179. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/github.py +0 -0
  180. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/hooks.py +0 -0
  181. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/kanban.py +0 -0
  182. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/knowledge.py +0 -0
  183. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/langextract.py +0 -0
  184. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/langfuse.py +0 -0
  185. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/loop.py +0 -0
  186. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/lsp.py +0 -0
  187. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/managed.py +0 -0
  188. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/mcp.py +0 -0
  189. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/memory.py +0 -0
  190. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/mint_link.py +0 -0
  191. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/n8n.py +0 -0
  192. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/obs.py +0 -0
  193. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/onboard.py +0 -0
  194. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/package.py +0 -0
  195. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/pairing.py +0 -0
  196. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/paths.py +0 -0
  197. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/plugins.py +0 -0
  198. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/port.py +0 -0
  199. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/profile.py +0 -0
  200. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/publish.py +0 -0
  201. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/rag.py +0 -0
  202. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/realtime.py +0 -0
  203. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/recipe.py +0 -0
  204. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/registry.py +0 -0
  205. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/replay.py +0 -0
  206. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/research.py +0 -0
  207. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/retrieval.py +0 -0
  208. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/rules.py +0 -0
  209. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/run.py +0 -0
  210. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/sandbox.py +0 -0
  211. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/schedule.py +0 -0
  212. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/serve.py +0 -0
  213. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/session.py +0 -0
  214. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/setup.py +0 -0
  215. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/skills.py +0 -0
  216. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/standardise.py +0 -0
  217. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/templates.py +0 -0
  218. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/test.py +0 -0
  219. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/todo.py +0 -0
  220. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/tools.py +0 -0
  221. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/traces.py +0 -0
  222. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/tracker.py +0 -0
  223. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/train.py +0 -0
  224. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/ui.py +0 -0
  225. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/up.py +0 -0
  226. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/version.py +0 -0
  227. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/commands/workflow.py +0 -0
  228. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/config_loader.py +0 -0
  229. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/configuration/__init__.py +0 -0
  230. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/configuration/loader.py +0 -0
  231. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/configuration/paths.py +0 -0
  232. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/configuration/schema.py +0 -0
  233. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/execution/__init__.py +0 -0
  234. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/execution/core.py +0 -0
  235. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/execution/profiler.py +0 -0
  236. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/execution/request.py +0 -0
  237. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/execution/result.py +0 -0
  238. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/fallback_schema.py +0 -0
  239. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/__init__.py +0 -0
  240. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/acp.py +0 -0
  241. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/action_orchestrator.py +0 -0
  242. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/agent_scheduler.py +0 -0
  243. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/agent_tools.py +0 -0
  244. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/agents.py +0 -0
  245. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/approval.py +0 -0
  246. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/at_mentions.py +0 -0
  247. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/audit_cli.py +0 -0
  248. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/auto_memory.py +0 -0
  249. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/auto_mode.py +0 -0
  250. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/autonomy_mode.py +0 -0
  251. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/background.py +0 -0
  252. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/base.py +0 -0
  253. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/benchmark.py +0 -0
  254. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/bots_cli.py +0 -0
  255. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/capabilities.py +0 -0
  256. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/checkpoints.py +0 -0
  257. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/cli_profiler.py +0 -0
  258. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/code_intelligence.py +0 -0
  259. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/compaction.py +0 -0
  260. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/compare.py +0 -0
  261. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/config_hierarchy.py +0 -0
  262. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/context_manager.py +0 -0
  263. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/cost_tracker.py +0 -0
  264. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/csv_test_runner.py +0 -0
  265. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/debug.py +0 -0
  266. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/deploy.py +0 -0
  267. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/diag.py +0 -0
  268. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/display_jsonl.py +0 -0
  269. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/__init__.py +0 -0
  270. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  271. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  272. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  273. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  274. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  275. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  276. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  277. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  278. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  279. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  280. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  281. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  282. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  283. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  284. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  285. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  286. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  287. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  288. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/engine.py +0 -0
  289. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/handler.py +0 -0
  290. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/models.py +0 -0
  291. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/doctor/registry.py +0 -0
  292. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/endpoints.py +0 -0
  293. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/eval.py +0 -0
  294. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/examples.py +0 -0
  295. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/external_agents.py +0 -0
  296. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/fast_context.py +0 -0
  297. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/file_history.py +0 -0
  298. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/flow_display.py +0 -0
  299. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/gateway.py +0 -0
  300. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/git_attribution.py +0 -0
  301. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/git_integration.py +0 -0
  302. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/guardrail.py +0 -0
  303. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/handoff.py +0 -0
  304. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/hooks.py +0 -0
  305. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/hybrid_workflow.py +0 -0
  306. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/image.py +0 -0
  307. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/interactive_core_headless.py +0 -0
  308. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/interactive_runtime.py +0 -0
  309. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/interactive_test_harness.py +0 -0
  310. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/interactive_tools.py +0 -0
  311. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/interactive_tui.py +0 -0
  312. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/job_workflow.py +0 -0
  313. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/jobs.py +0 -0
  314. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/knowledge.py +0 -0
  315. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/knowledge_cli.py +0 -0
  316. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/lite.py +0 -0
  317. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/logs.py +0 -0
  318. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/lsp_cli.py +0 -0
  319. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  320. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/mcp.py +0 -0
  321. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/message_queue.py +0 -0
  322. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/metrics.py +0 -0
  323. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/migrate.py +0 -0
  324. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/migration_flow.py +0 -0
  325. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/migration_spec.py +0 -0
  326. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/n8n.py +0 -0
  327. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/observability.py +0 -0
  328. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/ollama.py +0 -0
  329. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/onboard.py +0 -0
  330. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/output_modes.py +0 -0
  331. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/output_style.py +0 -0
  332. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/package.py +0 -0
  333. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/performance.py +0 -0
  334. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/persistence.py +0 -0
  335. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/plugin_cli.py +0 -0
  336. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/profile.py +0 -0
  337. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/profiler/__init__.py +0 -0
  338. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/profiler/core.py +0 -0
  339. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/profiler/optimizations.py +0 -0
  340. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/profiler/suite.py +0 -0
  341. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/profiling.py +0 -0
  342. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/queue/__init__.py +0 -0
  343. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/queue/manager.py +0 -0
  344. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/queue/models.py +0 -0
  345. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/queue/persistence.py +0 -0
  346. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/queue/scheduler.py +0 -0
  347. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/queue/worker.py +0 -0
  348. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/recipe.py +0 -0
  349. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/recipe_creator.py +0 -0
  350. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/recipe_optimizer.py +0 -0
  351. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/recipe_prompts.py +0 -0
  352. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/recipes.py +0 -0
  353. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/registry.py +0 -0
  354. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/repo_map.py +0 -0
  355. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/router.py +0 -0
  356. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/safe_shell.py +0 -0
  357. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/sandbox_cli.py +0 -0
  358. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/sandbox_executor.py +0 -0
  359. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/sdk_knowledge.py +0 -0
  360. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/serve.py +0 -0
  361. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/session.py +0 -0
  362. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/setup/__init__.py +0 -0
  363. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/setup/handler.py +0 -0
  364. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/setup/templates.py +0 -0
  365. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/skills.py +0 -0
  366. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/slash_commands.py +0 -0
  367. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/telemetry.py +0 -0
  368. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/templates.py +0 -0
  369. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/thinking.py +0 -0
  370. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/todo.py +0 -0
  371. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tools.py +0 -0
  372. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/__init__.py +0 -0
  373. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/app.py +0 -0
  374. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/cli.py +0 -0
  375. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/config.py +0 -0
  376. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/debug.py +0 -0
  377. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/events.py +0 -0
  378. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/mock_provider.py +0 -0
  379. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/orchestrator.py +0 -0
  380. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  381. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/screens/help.py +0 -0
  382. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/screens/main.py +0 -0
  383. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/screens/queue.py +0 -0
  384. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/screens/session.py +0 -0
  385. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/screens/settings.py +0 -0
  386. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/session_store.py +0 -0
  387. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  388. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  389. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  390. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  391. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  392. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  393. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/widgets/status.py +0 -0
  394. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  395. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/wizard.py +0 -0
  396. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/workflow.py +0 -0
  397. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/features/yaml_utils.py +0 -0
  398. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/__init__.py +0 -0
  399. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/async_tui.py +0 -0
  400. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/config.py +0 -0
  401. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/core.py +0 -0
  402. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/events.py +0 -0
  403. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  404. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  405. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  406. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/praison_io.py +0 -0
  407. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/repl.py +0 -0
  408. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/split_tui.py +0 -0
  409. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/interactive/tui_app.py +0 -0
  410. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/langfuse_client.py +0 -0
  411. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/legacy.py +0 -0
  412. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/output/__init__.py +0 -0
  413. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/output/console.py +0 -0
  414. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/schedule_cli.py +0 -0
  415. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/schema_provider.py +0 -0
  416. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/session/__init__.py +0 -0
  417. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/session/unified.py +0 -0
  418. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/state/__init__.py +0 -0
  419. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/state/identifiers.py +0 -0
  420. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/state/sessions.py +0 -0
  421. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/ui/__init__.py +0 -0
  422. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/ui/config.py +0 -0
  423. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/ui/events.py +0 -0
  424. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/ui/mg_backend.py +0 -0
  425. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/ui/plain.py +0 -0
  426. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/ui/rich_backend.py +0 -0
  427. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli/unified_schema.py +0 -0
  428. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli_backends/__init__.py +0 -0
  429. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli_backends/claude.py +0 -0
  430. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/cli_backends/registry.py +0 -0
  431. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/__init__.py +0 -0
  432. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/agent_tools.py +0 -0
  433. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/diff/__init__.py +0 -0
  434. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/diff/diff_strategy.py +0 -0
  435. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/tools/__init__.py +0 -0
  436. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/tools/apply_diff.py +0 -0
  437. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/tools/execute_command.py +0 -0
  438. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/tools/list_files.py +0 -0
  439. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/tools/read_file.py +0 -0
  440. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/tools/search_replace.py +0 -0
  441. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/tools/write_file.py +0 -0
  442. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/utils/__init__.py +0 -0
  443. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/utils/file_utils.py +0 -0
  444. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/utils/ignore_utils.py +0 -0
  445. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/code/utils/text_utils.py +0 -0
  446. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/context/__init__.py +0 -0
  447. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/context/artifact_store.py +0 -0
  448. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/context/config.py +0 -0
  449. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/context/history_store.py +0 -0
  450. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/context/queue.py +0 -0
  451. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/context/setup.py +0 -0
  452. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/context/terminal_logger.py +0 -0
  453. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/daemon/__init__.py +0 -0
  454. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/daemon/launchd.py +0 -0
  455. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/daemon/systemd.py +0 -0
  456. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/daemon/windows.py +0 -0
  457. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/db/__init__.py +0 -0
  458. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/db/adapter.py +0 -0
  459. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/__init__.py +0 -0
  460. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/api.py +0 -0
  461. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/docker.py +0 -0
  462. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/doctor.py +0 -0
  463. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/main.py +0 -0
  464. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/models.py +0 -0
  465. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/providers/__init__.py +0 -0
  466. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/providers/aws.py +0 -0
  467. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/providers/azure.py +0 -0
  468. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/providers/base.py +0 -0
  469. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/providers/gcp.py +0 -0
  470. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/deploy/schema.py +0 -0
  471. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/docs_runner/__init__.py +0 -0
  472. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/docs_runner/classifier.py +0 -0
  473. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/docs_runner/executor.py +0 -0
  474. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/docs_runner/extractor.py +0 -0
  475. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/docs_runner/reporter.py +0 -0
  476. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/docs_runner/runner.py +0 -0
  477. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/docs_runner/workspace.py +0 -0
  478. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/__init__.py +0 -0
  479. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/a2u_server.py +0 -0
  480. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/discovery.py +0 -0
  481. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/providers/__init__.py +0 -0
  482. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/providers/a2a.py +0 -0
  483. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/providers/a2u.py +0 -0
  484. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/providers/agents_api.py +0 -0
  485. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/providers/base.py +0 -0
  486. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/providers/mcp.py +0 -0
  487. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/providers/recipe.py +0 -0
  488. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  489. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/registry.py +0 -0
  490. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/endpoints/server.py +0 -0
  491. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/flow/__init__.py +0 -0
  492. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/flow/client.py +0 -0
  493. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  494. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  495. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/flow/components/__init__.py +0 -0
  496. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/flow/converter.py +0 -0
  497. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/flow/helpers.py +0 -0
  498. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/framework_adapters/__init__.py +0 -0
  499. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  500. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/framework_adapters/base.py +0 -0
  501. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  502. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  503. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/framework_adapters/registry.py +0 -0
  504. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/framework_adapters/validators.py +0 -0
  505. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/__init__.py +0 -0
  506. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/auth.py +0 -0
  507. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/cookie_auth.py +0 -0
  508. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/exec_approval.py +0 -0
  509. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/gateway_approval.py +0 -0
  510. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/kanban_dispatcher.py +0 -0
  511. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/magic_link.py +0 -0
  512. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/origin_check.py +0 -0
  513. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/pairing.py +0 -0
  514. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/pairing_routes.py +0 -0
  515. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/port_utils.py +0 -0
  516. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/push_channels.py +0 -0
  517. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/push_delivery.py +0 -0
  518. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/push_polling.py +0 -0
  519. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/push_presence.py +0 -0
  520. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/rate_limiter.py +0 -0
  521. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/redis_pubsub.py +0 -0
  522. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/server.py +0 -0
  523. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/gateway/unicode_utils.py +0 -0
  524. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/inbuilt_tools/__init__.py +0 -0
  525. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  526. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/inc/__init__.py +0 -0
  527. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/inc/config.py +0 -0
  528. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/__init__.py +0 -0
  529. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/_legacy_handlers.py +0 -0
  530. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/bridges/__init__.py +0 -0
  531. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  532. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/bridges/hooks_query.py +0 -0
  533. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  534. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/bridges/schedules_runner.py +0 -0
  535. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/bridges/usage_bridge.py +0 -0
  536. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/bridges/workflows_service.py +0 -0
  537. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/context_files.py +0 -0
  538. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/gateway_host.py +0 -0
  539. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/pages/__init__.py +0 -0
  540. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/pages/bot_health.py +0 -0
  541. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integration/pages/workflow_runs.py +0 -0
  542. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/__init__.py +0 -0
  543. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/_session_info.py +0 -0
  544. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/_tool_aliases.py +0 -0
  545. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/_unified_registry.py +0 -0
  546. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/claude_code.py +0 -0
  547. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/codex_cli.py +0 -0
  548. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/compute/__init__.py +0 -0
  549. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/compute/daytona.py +0 -0
  550. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/compute/docker.py +0 -0
  551. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/compute/e2b.py +0 -0
  552. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/compute/flyio.py +0 -0
  553. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/compute/local.py +0 -0
  554. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/compute/modal_compute.py +0 -0
  555. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/cursor_cli.py +0 -0
  556. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/db_session_adapter.py +0 -0
  557. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/gemini_cli.py +0 -0
  558. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/hosted_agent.py +0 -0
  559. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/local_agent.py +0 -0
  560. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/managed_agents.py +0 -0
  561. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/managed_local.py +0 -0
  562. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/integrations/sandboxed_agent.py +0 -0
  563. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/jobs/__init__.py +0 -0
  564. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/jobs/executor.py +0 -0
  565. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/jobs/models.py +0 -0
  566. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/jobs/router.py +0 -0
  567. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/jobs/server.py +0 -0
  568. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/jobs/store.py +0 -0
  569. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/kanban/__init__.py +0 -0
  570. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/kanban/models.py +0 -0
  571. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/kanban/paths.py +0 -0
  572. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/kanban/sqlite_store.py +0 -0
  573. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/llm/__init__.py +0 -0
  574. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/llm/registry.py +0 -0
  575. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/__init__.py +0 -0
  576. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/adapters/__init__.py +0 -0
  577. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/adapters/agents.py +0 -0
  578. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  579. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  580. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  581. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  582. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/adapters/memory.py +0 -0
  583. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/adapters/prompts.py +0 -0
  584. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/adapters/resources.py +0 -0
  585. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  586. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/auth/__init__.py +0 -0
  587. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/auth/api_key.py +0 -0
  588. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/auth/oauth.py +0 -0
  589. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/auth/oidc.py +0 -0
  590. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/auth/scopes.py +0 -0
  591. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/cli.py +0 -0
  592. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/elicitation.py +0 -0
  593. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/icons.py +0 -0
  594. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/recipe_adapter.py +0 -0
  595. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/recipe_cli.py +0 -0
  596. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/registry.py +0 -0
  597. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/sampling.py +0 -0
  598. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/server.py +0 -0
  599. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/tasks.py +0 -0
  600. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/tool_index.py +0 -0
  601. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/transports/__init__.py +0 -0
  602. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/transports/http_stream.py +0 -0
  603. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/mcp_server/transports/stdio.py +0 -0
  604. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/n8n/__init__.py +0 -0
  605. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/n8n/client.py +0 -0
  606. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/n8n/converter.py +0 -0
  607. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/n8n/preview.py +0 -0
  608. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/n8n/reverse_converter.py +0 -0
  609. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/observability/__init__.py +0 -0
  610. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/observability/hooks.py +0 -0
  611. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/observability/langextract.py +0 -0
  612. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/observability/langfuse.py +0 -0
  613. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/__init__.py +0 -0
  614. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/_valkey_client.py +0 -0
  615. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/config.py +0 -0
  616. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/__init__.py +0 -0
  617. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/_sql_base.py +0 -0
  618. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/async_mysql.py +0 -0
  619. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/async_postgres.py +0 -0
  620. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  621. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/base.py +0 -0
  622. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/json_store.py +0 -0
  623. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/mysql.py +0 -0
  624. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/mysql_new.py +0 -0
  625. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/postgres.py +0 -0
  626. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/singlestore.py +0 -0
  627. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/sqlite.py +0 -0
  628. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/supabase.py +0 -0
  629. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/surrealdb.py +0 -0
  630. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  631. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/conversation/turso.py +0 -0
  632. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/factory.py +0 -0
  633. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/hooks/__init__.py +0 -0
  634. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  635. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/__init__.py +0 -0
  636. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/base.py +0 -0
  637. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/cassandra.py +0 -0
  638. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/chroma.py +0 -0
  639. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  640. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  641. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/couchbase.py +0 -0
  642. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/lancedb.py +0 -0
  643. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  644. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  645. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  646. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/milvus.py +0 -0
  647. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  648. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/pgvector.py +0 -0
  649. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/pinecone.py +0 -0
  650. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/qdrant.py +0 -0
  651. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  652. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  653. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  654. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  655. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  656. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/knowledge/weaviate.py +0 -0
  657. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/migrations/__init__.py +0 -0
  658. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/migrations/manager.py +0 -0
  659. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/orchestrator.py +0 -0
  660. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/registry.py +0 -0
  661. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/__init__.py +0 -0
  662. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/async_mongodb.py +0 -0
  663. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/base.py +0 -0
  664. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/dynamodb.py +0 -0
  665. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/firestore.py +0 -0
  666. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/gcs.py +0 -0
  667. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/memory.py +0 -0
  668. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/mongodb.py +0 -0
  669. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/redis.py +0 -0
  670. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/upstash.py +0 -0
  671. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/state/valkey.py +0 -0
  672. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/tests/__init__.py +0 -0
  673. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/tests/test_all_backends.py +0 -0
  674. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  675. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/profiler.py +0 -0
  676. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/push/__init__.py +0 -0
  677. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/push/client.py +0 -0
  678. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/push/transports.py +0 -0
  679. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/__init__.py +0 -0
  680. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/bridge.py +0 -0
  681. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/core.py +0 -0
  682. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/exceptions.py +0 -0
  683. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/history.py +0 -0
  684. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/models.py +0 -0
  685. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/operations.py +0 -0
  686. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/policy.py +0 -0
  687. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/registry.py +0 -0
  688. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/runtime.py +0 -0
  689. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/security.py +0 -0
  690. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/serve.py +0 -0
  691. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/recipe/server.py +0 -0
  692. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/replay/__init__.py +0 -0
  693. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/replay/analyzer.py +0 -0
  694. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/replay/applier.py +0 -0
  695. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/replay/judge.py +0 -0
  696. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/replay/plan.py +0 -0
  697. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/replay/player.py +0 -0
  698. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/replay/reader.py +0 -0
  699. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/replay/storage.py +0 -0
  700. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/replay/writer.py +0 -0
  701. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/sandbox/__init__.py +0 -0
  702. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/sandbox/_compat.py +0 -0
  703. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/sandbox/_shell.py +0 -0
  704. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/sandbox/daytona.py +0 -0
  705. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/sandbox/docker.py +0 -0
  706. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/sandbox/e2b.py +0 -0
  707. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/sandbox/modal.py +0 -0
  708. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/sandbox/sandlock.py +0 -0
  709. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/sandbox/ssh.py +0 -0
  710. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/__init__.py +0 -0
  711. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/_base_scheduler.py +0 -0
  712. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/agent_scheduler.py +0 -0
  713. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  714. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/base.py +0 -0
  715. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/daemon_manager.py +0 -0
  716. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/deployment.py +0 -0
  717. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/executor.py +0 -0
  718. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/shared.py +0 -0
  719. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/state_manager.py +0 -0
  720. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/scheduler/yaml_loader.py +0 -0
  721. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/security/__init__.py +0 -0
  722. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/security/audit.py +0 -0
  723. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/security/injection.py +0 -0
  724. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/security/protected.py +0 -0
  725. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/setup/__init__.py +0 -0
  726. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/setup/build.py +0 -0
  727. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/setup/post_install.py +0 -0
  728. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/setup/setup_conda_env.py +0 -0
  729. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/setup.py +0 -0
  730. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/__init__.py +0 -0
  731. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/ai_generator.py +0 -0
  732. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/config.py +0 -0
  733. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/dedupe.py +0 -0
  734. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/discovery.py +0 -0
  735. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/drift.py +0 -0
  736. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/engine.py +0 -0
  737. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/enhanced_templates.py +0 -0
  738. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/example_verifier.py +0 -0
  739. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/manifest.py +0 -0
  740. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/models.py +0 -0
  741. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/reports.py +0 -0
  742. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/templates.py +0 -0
  743. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/undo_redo.py +0 -0
  744. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/standardise/validator.py +0 -0
  745. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/storage/__init__.py +0 -0
  746. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/storage/dynamodb_adapter.py +0 -0
  747. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/storage/mongodb_adapter.py +0 -0
  748. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/storage/postgresql_adapter.py +0 -0
  749. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/storage/redis_adapter.py +0 -0
  750. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/storage/valkey_adapter.py +0 -0
  751. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/__init__.py +0 -0
  752. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/batch_source.py +0 -0
  753. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/cli_docs_source.py +0 -0
  754. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/discovery.py +0 -0
  755. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/docs_source.py +0 -0
  756. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/examples_source.py +0 -0
  757. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/executor.py +0 -0
  758. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/models.py +0 -0
  759. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/report_viewer.py +0 -0
  760. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/reporter.py +0 -0
  761. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/suite_runner/runner.py +0 -0
  762. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/templates/__init__.py +0 -0
  763. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/templates/cache.py +0 -0
  764. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/templates/dependency_checker.py +0 -0
  765. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/templates/discovery.py +0 -0
  766. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/templates/loader.py +0 -0
  767. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/templates/registry.py +0 -0
  768. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/templates/resolver.py +0 -0
  769. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/templates/security.py +0 -0
  770. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/templates/tool_override.py +0 -0
  771. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/templates/tools_doctor.py +0 -0
  772. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/test.py +0 -0
  773. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/tool_registry.py +0 -0
  774. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/tool_resolver.py +0 -0
  775. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/tools/__init__.py +0 -0
  776. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/tools/audio.py +0 -0
  777. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/tools/glob_tool.py +0 -0
  778. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/tools/grep_tool.py +0 -0
  779. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/tools/kanban_tools.py +0 -0
  780. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/tools/multiedit.py +0 -0
  781. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/tools/skill_manage.py +0 -0
  782. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train/__init__.py +0 -0
  783. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train/_ollama.py +0 -0
  784. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train/agents/__init__.py +0 -0
  785. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train/agents/grader.py +0 -0
  786. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train/agents/hook.py +0 -0
  787. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train/agents/models.py +0 -0
  788. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train/agents/orchestrator.py +0 -0
  789. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train/agents/storage.py +0 -0
  790. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train/llm/__init__.py +0 -0
  791. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train/llm/trainer.py +0 -0
  792. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train.py +0 -0
  793. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/train_vision.py +0 -0
  794. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui/_aiui_datastore.py +0 -0
  795. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui/_external_agents.py +0 -0
  796. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui/callbacks.py +0 -0
  797. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui/components/aicoder.py +0 -0
  798. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui/context.py +0 -0
  799. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui/database_config.py +0 -0
  800. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui_agents/__init__.py +0 -0
  801. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui_agents/default_app.py +0 -0
  802. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui_bot/__init__.py +0 -0
  803. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui_bot/default_app.py +0 -0
  804. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui_chat/__init__.py +0 -0
  805. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui_chat/default_app.py +0 -0
  806. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui_dashboard/default_app.py +0 -0
  807. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui_realtime/__init__.py +0 -0
  808. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/ui_realtime/default_app.py +0 -0
  809. {praisonai-4.6.55 → praisonai-4.6.56}/praisonai/upload_vision.py +0 -0
  810. {praisonai-4.6.55 → praisonai-4.6.56}/setup.cfg +0 -0
  811. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test.py +0 -0
  812. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_agents_playbook.py +0 -0
  813. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_approval_system.py +0 -0
  814. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_basic.py +0 -0
  815. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_cli_features.py +0 -0
  816. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_custom_tools_fix.py +0 -0
  817. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_double_api_fix.py +0 -0
  818. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_n8n_agent_invoke.py +0 -0
  819. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_n8n_cli_feature.py +0 -0
  820. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_n8n_integration.py +0 -0
  821. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_phase2_refactor.py +0 -0
  822. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_recipe.py +0 -0
  823. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_registry.py +0 -0
  824. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_runner.py +0 -0
  825. {praisonai-4.6.55 → praisonai-4.6.56}/tests/test_sandboxed_agent_compatibility.py +0 -0
  826. {praisonai-4.6.55 → praisonai-4.6.56}/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.55
3
+ Version: 4.6.56
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.55
14
+ Requires-Dist: praisonaiagents>=1.6.56
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.55
3
+ Version: 4.6.56
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.55
14
+ Requires-Dist: praisonaiagents>=1.6.56
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
@@ -20,7 +20,6 @@ praisonai/agent_scheduler.py
20
20
  praisonai/agents_generator.py
21
21
  praisonai/async_agent_scheduler.py
22
22
  praisonai/auto.py
23
- praisonai/deploy.py
24
23
  praisonai/profiler.py
25
24
  praisonai/setup.py
26
25
  praisonai/test.py
@@ -1,7 +1,7 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.6.55
4
+ praisonaiagents>=1.6.56
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -144,6 +144,17 @@ class BaseFormatter:
144
144
  class TextFormatter(BaseFormatter):
145
145
  """Text formatter with optional color support."""
146
146
 
147
+ def __init__(
148
+ self,
149
+ no_color: bool = False,
150
+ quiet: bool = False,
151
+ redact: bool = True,
152
+ show_prefix_suffix: bool = False,
153
+ ):
154
+ super().__init__(no_color, quiet, redact, show_prefix_suffix)
155
+ # Cache encoding detection result at initialization
156
+ self._unicode_supported = self._can_encode_unicode()
157
+
147
158
  # ANSI color codes
148
159
  COLORS = {
149
160
  "reset": "\033[0m",
@@ -173,15 +184,49 @@ class TextFormatter(BaseFormatter):
173
184
  CheckStatus.ERROR: "✗",
174
185
  }
175
186
 
187
+ # ASCII fallback symbols for systems that don't support UTF-8
188
+ STATUS_SYMBOLS_ASCII = {
189
+ CheckStatus.PASS: "[OK]",
190
+ CheckStatus.WARN: "[!]",
191
+ CheckStatus.FAIL: "[X]",
192
+ CheckStatus.SKIP: "[-]",
193
+ CheckStatus.ERROR: "[X]",
194
+ }
195
+
176
196
  def _color(self, text: str, color: str) -> str:
177
197
  """Apply color to text if colors are enabled."""
178
198
  if self.no_color:
179
199
  return text
180
200
  return f"{self.COLORS.get(color, '')}{text}{self.COLORS['reset']}"
181
201
 
202
+ def _can_encode_unicode(self) -> bool:
203
+ """Check if stdout can encode Unicode symbols."""
204
+ try:
205
+ # Get stdout encoding
206
+ encoding = getattr(sys.stdout, 'encoding', 'ascii') or 'ascii'
207
+
208
+ # UTF-8 always supports Unicode
209
+ if encoding.lower() in ('utf-8', 'utf8'):
210
+ return True
211
+
212
+ # Test if we can encode our specific Unicode symbols
213
+ test_symbols = ["✓", "⚠", "✗", "○"]
214
+ for symbol in test_symbols:
215
+ try:
216
+ symbol.encode(encoding, errors='strict')
217
+ except (UnicodeEncodeError, LookupError):
218
+ return False
219
+ return True
220
+ except (AttributeError, TypeError):
221
+ # If we can't determine encoding, assume ASCII-only is safer
222
+ return False
223
+
182
224
  def _status_symbol(self, status: CheckStatus) -> str:
183
- """Get colored status symbol."""
184
- symbol = self.STATUS_SYMBOLS.get(status, "?")
225
+ """Get colored status symbol with encoding safety."""
226
+ if self._unicode_supported:
227
+ symbol = self.STATUS_SYMBOLS.get(status, "?")
228
+ else:
229
+ symbol = self.STATUS_SYMBOLS_ASCII.get(status, "[?]")
185
230
  color = self.STATUS_COLORS.get(status, "white")
186
231
  return self._color(symbol, color)
187
232
 
@@ -425,7 +425,6 @@ class PraisonAI:
425
425
 
426
426
  # Handle backends command
427
427
  elif args.command == "backends":
428
- from rich import print
429
428
  subcommand = unknown_args[0] if unknown_args and not unknown_args[0].startswith('-') else None
430
429
 
431
430
  if subcommand == "list" or subcommand is None:
@@ -7,8 +7,6 @@ from urllib.parse import urlparse
7
7
  import importlib.util
8
8
 
9
9
  logger = logging.getLogger(__name__)
10
- _loglevel = os.environ.get('LOGLEVEL', 'INFO').strip().upper() or 'INFO'
11
- logging.basicConfig(level=_loglevel, format='%(asctime)s - %(levelname)s - %(message)s')
12
10
 
13
11
  # Constants
14
12
  LOCAL_SERVER_API_KEY_PLACEHOLDER = "not-needed"
@@ -7,9 +7,64 @@ Set ``PRAISONAI_HOST_LEGACY=1`` to skip provider wiring (callback-only mode).
7
7
  from __future__ import annotations
8
8
 
9
9
  import os
10
+ import contextvars
10
11
  from typing import Any, Dict, List, Optional, Sequence
11
12
 
12
- _CONFIGURED = False
13
+ # Use context variable instead of module-level global for multi-agent safety
14
+ _configured_context: contextvars.ContextVar[bool] = contextvars.ContextVar('host_configured', default=False)
15
+
16
+ # For testing: also maintain a module-level flag that can be accessed across contexts
17
+ _configured_global = False
18
+
19
+ # Backward compatibility for tests
20
+ def reset_configuration() -> None:
21
+ """Reset configuration state for testing. Use instead of host_app._CONFIGURED = False."""
22
+ global _configured_global
23
+ _configured_context.set(False)
24
+ _configured_global = False
25
+
26
+ # Also clear any cached state that might be lingering
27
+ try:
28
+ import praisonaiui.server as srv
29
+ if hasattr(srv, '_provider'):
30
+ srv._provider = None
31
+ if hasattr(srv, '_datastore'):
32
+ srv._datastore = None
33
+ # Clear any other potentially cached state
34
+ if hasattr(srv, '_app'):
35
+ srv._app = None
36
+ # Clear backends registry if it exists
37
+ try:
38
+ import praisonaiui.backends as backends
39
+ if hasattr(backends, 'clear_backends'):
40
+ backends.clear_backends()
41
+ elif hasattr(backends, '_backends'):
42
+ backends._backends.clear()
43
+ except (ImportError, AttributeError):
44
+ pass
45
+ except ImportError:
46
+ pass
47
+
48
+ def is_configured() -> bool:
49
+ """Check if configuration has been applied in current context."""
50
+ return _configured_context.get() or _configured_global
51
+
52
+ # Backward compatibility shim for tests that assign host_app._CONFIGURED = False
53
+ class _ConfiguredShim:
54
+ """Backward compatibility shim that proxies to both ContextVar and global."""
55
+ def __get__(self, obj, objtype=None):
56
+ return _configured_context.get() or _configured_global
57
+
58
+ def __set__(self, obj, value):
59
+ global _configured_global
60
+ _configured_context.set(bool(value))
61
+ _configured_global = bool(value)
62
+
63
+ def __bool__(self):
64
+ return _configured_context.get() or _configured_global
65
+
66
+ # Expose the shim so tests can still use host_app._CONFIGURED = False
67
+ _CONFIGURED = _ConfiguredShim()
13
68
 
14
69
 
15
70
  def is_legacy_host() -> bool:
@@ -38,7 +93,11 @@ def configure_host(
38
93
  **kwargs: Any,
39
94
  ) -> None:
40
95
  """Apply PraisonAIUI host settings and wire L1 backends (unless legacy mode)."""
41
- global _CONFIGURED
96
+ global _configured_global
97
+
98
+ # Check if already configured in this context to avoid duplicate configuration
99
+ if _configured_context.get() or _configured_global:
100
+ return
42
101
 
43
102
  import praisonaiui as aiui
44
103
  from praisonai.ui._aiui_datastore import PraisonAISessionDataStore
@@ -78,7 +137,9 @@ def configure_host(
78
137
  if not is_legacy_host():
79
138
  from praisonaiui.providers import PraisonAIProvider
80
139
  from praisonaiui.server import set_provider
81
-
140
+
141
+ # Always proceed with provider setup unless explicitly skipped by legacy mode
142
+ # Tests that need to override providers should do so after configure_host() completes
82
143
  kwargs = dict(agent_kwargs or {})
83
144
  if agents:
84
145
  set_provider(PraisonAIProvider(agents=list(agents), **kwargs))
@@ -112,7 +173,8 @@ def configure_host(
112
173
  except ImportError:
113
174
  pass # L3 pages are optional
114
175
 
115
- _CONFIGURED = True
176
+ _configured_context.set(True)
177
+ _configured_global = True
116
178
 
117
179
 
118
180
  def setup_bridges() -> None:
@@ -170,8 +232,6 @@ def setup_bridges() -> None:
170
232
  from praisonai.integration.bridges.kanban_bridge import register_kanban_backends
171
233
  register_kanban_backends()
172
234
 
173
- except Exception as exc:
174
- log.debug("aiui backend injection failed: %s", exc)
175
235
  except Exception as exc:
176
236
  log.warning("aiui backend injection failed: %s", exc)
177
237
 
@@ -180,7 +240,7 @@ def create_host_app():
180
240
  """Return the Starlette app from PraisonAIUI (call after ``configure_host``)."""
181
241
  from praisonaiui.server import create_app
182
242
 
183
- if not _CONFIGURED:
243
+ if not (_configured_context.get() or _configured_global):
184
244
  configure_host()
185
245
  return create_app()
186
246
 
@@ -102,13 +102,25 @@ class BaseCLIIntegration(ABC):
102
102
  """
103
103
  cmd = self.cli_command
104
104
  cache = BaseCLIIntegration._availability_cache
105
- if cmd in cache:
106
- return cache[cmd]
107
105
  with BaseCLIIntegration._availability_cache_lock:
108
106
  if cmd not in cache:
109
107
  cache[cmd] = shutil.which(cmd) is not None
110
108
  return cache[cmd]
111
109
 
110
+ @classmethod
111
+ def invalidate_availability(cls, command: Optional[str] = None) -> None:
112
+ """
113
+ Invalidate availability cache for CLI tools.
114
+
115
+ Args:
116
+ command: Specific CLI command to invalidate, or None to clear all
117
+ """
118
+ with cls._availability_cache_lock:
119
+ if command is None:
120
+ cls._availability_cache.clear()
121
+ else:
122
+ cls._availability_cache.pop(command, None)
123
+
112
124
  @abstractmethod
113
125
  async def execute(self, prompt: str, **options) -> str:
114
126
  """
@@ -19,8 +19,10 @@ Usage:
19
19
  # Register custom integration
20
20
  registry.register('my-agent', MyCustomIntegration)
21
21
 
22
- # Create integration
23
- agent = registry.create('claude', workspace="/path/to/project")
22
+ # Create integration (use try_create for optional behavior)
23
+ agent = registry.try_create('claude', workspace="/path/to/project")
24
+ if agent is None:
25
+ print("Integration 'claude' not found or unavailable")
24
26
 
25
27
  # List available integrations
26
28
  available = await registry.get_available()
@@ -104,9 +106,9 @@ class ExternalAgentRegistry(PluginRegistry[BaseCLIIntegration]):
104
106
  """
105
107
  return self.list_names()
106
108
 
107
- def create(self, name: str, **kwargs: Any) -> Optional[BaseCLIIntegration]:
109
+ def try_create(self, name: str, **kwargs: Any) -> Optional[BaseCLIIntegration]:
108
110
  """
109
- Create an instance of the specified integration.
111
+ Try to create an instance of the specified integration.
110
112
 
111
113
  Args:
112
114
  name: Name of the integration
@@ -217,7 +219,7 @@ def create_integration(name: str, **kwargs: Any) -> Optional[BaseCLIIntegration]
217
219
  BaseCLIIntegration: Instance of the integration, or None if not found
218
220
  """
219
221
  registry = get_default_registry()
220
- return registry.create(name, **kwargs)
222
+ return registry.try_create(name, **kwargs)
221
223
 
222
224
 
223
225
  def get_available_integrations() -> Dict[str, bool]:
@@ -0,0 +1,87 @@
1
+ """
2
+ LLM endpoint environment variable resolver.
3
+
4
+ Provides a single source of truth for resolving LLM endpoint configuration
5
+ from environment variables, ensuring consistent precedence across all components.
6
+ """
7
+
8
+ import os
9
+ from dataclasses import dataclass
10
+ from typing import Optional
11
+
12
+
13
+ @dataclass(frozen=True)
14
+ class LLMEndpoint:
15
+ """LLM endpoint configuration resolved from environment variables."""
16
+ model: str
17
+ base_url: str
18
+ api_key: Optional[str]
19
+
20
+
21
+ # Map well-known model prefixes to their (env-var, default base_url).
22
+ _PROVIDER_MAP = {
23
+ "anthropic/": ("ANTHROPIC_API_KEY", "https://api.anthropic.com/v1"),
24
+ "google/": ("GOOGLE_API_KEY", "https://generativelanguage.googleapis.com/v1beta"),
25
+ "gemini/": ("GEMINI_API_KEY", "https://generativelanguage.googleapis.com/v1beta"),
26
+ "groq/": ("GROQ_API_KEY", "https://api.groq.com/openai/v1"),
27
+ "cohere/": ("COHERE_API_KEY", "https://api.cohere.ai/v1"),
28
+ "openrouter/": ("OPENROUTER_API_KEY", "https://openrouter.ai/api/v1"),
29
+ "ollama/": ("OLLAMA_API_KEY", "http://localhost:11434/v1"),
30
+ }
31
+
32
+ # Documented, single precedence list. Add new providers here only.
33
+ _MODEL_VARS = ("MODEL_NAME", "OPENAI_MODEL_NAME")
34
+ _BASE_URL_VARS = ("OPENAI_BASE_URL", "OPENAI_API_BASE", "OLLAMA_API_BASE")
35
+ _DEFAULT_MODEL = "gpt-4o-mini"
36
+ _DEFAULT_BASE = "https://api.openai.com/v1"
37
+ _DEFAULT_KEY_VAR = "OPENAI_API_KEY"
38
+
39
+
40
+ def _first_set(*names: str) -> Optional[str]:
41
+ """Return the first environment variable that is set and non-empty."""
42
+ for name in names:
43
+ value = os.environ.get(name)
44
+ if value:
45
+ return value
46
+ return None
47
+
48
+
49
+ def _provider_from_model(model: str) -> tuple[str, str | None]:
50
+ """Get provider-specific API key environment variable and base URL for a model."""
51
+ for prefix, (key_var, default_base) in _PROVIDER_MAP.items():
52
+ if model.startswith(prefix):
53
+ return key_var, default_base
54
+ return _DEFAULT_KEY_VAR, None
55
+
56
+
57
+ def resolve_llm_endpoint(*, default_base: str = _DEFAULT_BASE) -> LLMEndpoint:
58
+ """
59
+ Resolve LLM endpoint configuration from environment variables.
60
+
61
+ Precedence order:
62
+ - Model: MODEL_NAME > OPENAI_MODEL_NAME > default
63
+ - Base URL: OPENAI_BASE_URL > OPENAI_API_BASE > OLLAMA_API_BASE > provider default > default
64
+ - API Key: provider-specific key (e.g., ANTHROPIC_API_KEY) > OPENAI_API_KEY fallback
65
+
66
+ Args:
67
+ default_base: Default base URL if none found in environment variables
68
+
69
+ Returns:
70
+ LLMEndpoint with resolved configuration
71
+ """
72
+ model = _first_set(*_MODEL_VARS) or _DEFAULT_MODEL
73
+ key_var, provider_base = _provider_from_model(model)
74
+
75
+ base_url = (
76
+ _first_set(*_BASE_URL_VARS)
77
+ or provider_base
78
+ or default_base
79
+ )
80
+
81
+ # Try provider-specific key first; fall back to OPENAI_API_KEY only for
82
+ # OpenAI-compatible proxies that may use a single shared key.
83
+ api_key = os.environ.get(key_var) or (
84
+ os.environ.get("OPENAI_API_KEY") if key_var == "OPENAI_API_KEY" else None
85
+ )
86
+
87
+ return LLMEndpoint(model=model, base_url=base_url, api_key=api_key)
@@ -20,6 +20,7 @@ from praisonaiagents.sandbox import (
20
20
  SandboxStatus,
21
21
  ResourceLimits,
22
22
  )
23
+ from praisonaiagents.sandbox.config import SecurityPolicy
23
24
 
24
25
  logger = logging.getLogger(__name__)
25
26
 
@@ -51,6 +52,48 @@ class SubprocessSandbox:
51
52
  self._is_running = False
52
53
  self._temp_dir: Optional[str] = None
53
54
 
55
+ def _build_child_env(self, policy: SecurityPolicy, overrides: Dict[str, str] | None) -> Dict[str, str]:
56
+ """Construct a minimal, policy-driven env for the child process."""
57
+ # Start with the explicit env from SandboxConfig and the per-call overrides only.
58
+ env = dict(self.config.env)
59
+ if overrides:
60
+ env.update(overrides)
61
+
62
+ # If the policy allows network, pass through proxy-related vars so the child can
63
+ # reach the outside world; otherwise withhold them.
64
+ if policy.allow_network:
65
+ for var in ("HTTP_PROXY", "HTTPS_PROXY", "NO_PROXY", "http_proxy",
66
+ "https_proxy", "no_proxy"):
67
+ if var in os.environ:
68
+ env[var] = os.environ[var]
69
+
70
+ # Always pass a minimal PATH (so /usr/bin/python resolves) — never the host's.
71
+ env.setdefault("PATH", "/usr/local/bin:/usr/bin:/bin")
72
+ # HOME uses temp_dir which is set during start() - /tmp is defensive fallback # noqa: S108
73
+ env.setdefault("HOME", self._temp_dir or "/tmp")
74
+ return env
75
+
76
+ def _apply_rlimits(self, limits: ResourceLimits):
77
+ """Apply resource limits via POSIX setrlimit (Linux/macOS only)."""
78
+ if os.name != "posix":
79
+ logger.warning("Resource limits not supported on Windows - sandbox isolation is weaker")
80
+ return
81
+
82
+ try:
83
+ import resource
84
+ if limits.memory_mb and limits.memory_mb > 0:
85
+ bytes_ = limits.memory_mb * 1024 * 1024
86
+ resource.setrlimit(resource.RLIMIT_AS, (bytes_, bytes_))
87
+ if limits.max_processes and limits.max_processes > 0:
88
+ resource.setrlimit(resource.RLIMIT_NPROC, (limits.max_processes, limits.max_processes))
89
+ if limits.max_open_files and limits.max_open_files > 0:
90
+ resource.setrlimit(resource.RLIMIT_NOFILE, (limits.max_open_files, limits.max_open_files))
91
+ # Note: RLIMIT_CPU is process CPU time, not wall clock time - timeout is handled separately
92
+ except ImportError:
93
+ logger.warning("Resource module not available - resource limits not enforced")
94
+ except (OSError, ValueError) as e:
95
+ logger.warning(f"Failed to set resource limits: {e}")
96
+
54
97
  @property
55
98
  def is_available(self) -> bool:
56
99
  """Subprocess sandbox is always available."""
@@ -107,27 +150,43 @@ class SubprocessSandbox:
107
150
  else:
108
151
  cmd = ["python", code_file]
109
152
 
110
- process_env = os.environ.copy()
111
- if env:
112
- process_env.update(env)
153
+ # Build environment based on security policy instead of copying host environment
154
+ process_env = self._build_child_env(self.config.security_policy, env)
113
155
 
114
156
  started_at = time.time()
115
157
 
158
+ # preexec_fn is POSIX-only; omit on Windows
159
+ popen_kwargs = {
160
+ "stdout": asyncio.subprocess.PIPE,
161
+ "stderr": asyncio.subprocess.PIPE,
162
+ "cwd": working_dir or self._temp_dir,
163
+ "env": process_env,
164
+ }
165
+ if os.name == "posix":
166
+ popen_kwargs["start_new_session"] = True
167
+ popen_kwargs["preexec_fn"] = lambda: self._apply_rlimits(limits)
168
+ else:
169
+ logger.warning("Resource limits and session isolation not available on Windows")
170
+
116
171
  try:
117
- proc = await asyncio.create_subprocess_exec(
118
- *cmd,
119
- stdout=asyncio.subprocess.PIPE,
120
- stderr=asyncio.subprocess.PIPE,
121
- cwd=working_dir or self._temp_dir,
122
- env=process_env,
123
- )
172
+ proc = await asyncio.create_subprocess_exec(*cmd, **popen_kwargs)
124
173
 
125
174
  try:
175
+ # Truncate output to max_output_size after reading
176
+ max_output_size = self.config.security_policy.max_output_size
177
+
126
178
  stdout, stderr = await asyncio.wait_for(
127
179
  proc.communicate(),
128
180
  timeout=limits.timeout_seconds,
129
181
  )
130
182
 
183
+ # Truncate output if it exceeds max_output_size
184
+ if max_output_size and max_output_size > 0:
185
+ if len(stdout) > max_output_size:
186
+ stdout = stdout[:max_output_size] + b"\n[OUTPUT TRUNCATED]"
187
+ if len(stderr) > max_output_size:
188
+ stderr = stderr[:max_output_size] + b"\n[OUTPUT TRUNCATED]"
189
+
131
190
  completed_at = time.time()
132
191
 
133
192
  return SandboxResult(
@@ -141,7 +200,15 @@ class SubprocessSandbox:
141
200
  completed_at=completed_at,
142
201
  )
143
202
  except asyncio.TimeoutError:
144
- proc.kill()
203
+ # Kill the whole process group, not just the leader
204
+ try:
205
+ if os.name == "posix":
206
+ import signal
207
+ os.killpg(proc.pid, signal.SIGKILL)
208
+ else:
209
+ proc.kill()
210
+ except (ProcessLookupError, PermissionError, OSError):
211
+ proc.kill()
145
212
  await proc.wait()
146
213
 
147
214
  return SandboxResult(
@@ -211,20 +278,26 @@ class SubprocessSandbox:
211
278
  from ._shell import build_argv
212
279
  cmd = build_argv(command, shell=shell)
213
280
 
214
- process_env = os.environ.copy()
215
- if env:
216
- process_env.update(env)
281
+ # Build environment based on security policy instead of copying host environment
282
+ process_env = self._build_child_env(self.config.security_policy, env)
217
283
 
218
284
  started_at = time.time()
219
285
 
286
+ # preexec_fn is POSIX-only; omit on Windows
287
+ popen_kwargs = {
288
+ "stdout": asyncio.subprocess.PIPE,
289
+ "stderr": asyncio.subprocess.PIPE,
290
+ "cwd": working_dir or self._temp_dir,
291
+ "env": process_env,
292
+ }
293
+ if os.name == "posix":
294
+ popen_kwargs["start_new_session"] = True
295
+ popen_kwargs["preexec_fn"] = lambda: self._apply_rlimits(limits)
296
+ else:
297
+ logger.warning("Resource limits and session isolation not available on Windows")
298
+
220
299
  try:
221
- proc = await asyncio.create_subprocess_exec(
222
- *cmd,
223
- stdout=asyncio.subprocess.PIPE,
224
- stderr=asyncio.subprocess.PIPE,
225
- cwd=working_dir or self._temp_dir,
226
- env=process_env,
227
- )
300
+ proc = await asyncio.create_subprocess_exec(*cmd, **popen_kwargs)
228
301
 
229
302
  try:
230
303
  stdout, stderr = await asyncio.wait_for(
@@ -232,6 +305,14 @@ class SubprocessSandbox:
232
305
  timeout=limits.timeout_seconds,
233
306
  )
234
307
 
308
+ # Truncate output if it exceeds max_output_size
309
+ max_output_size = self.config.security_policy.max_output_size
310
+ if max_output_size and max_output_size > 0:
311
+ if len(stdout) > max_output_size:
312
+ stdout = stdout[:max_output_size] + b"\n[OUTPUT TRUNCATED]"
313
+ if len(stderr) > max_output_size:
314
+ stderr = stderr[:max_output_size] + b"\n[OUTPUT TRUNCATED]"
315
+
235
316
  completed_at = time.time()
236
317
 
237
318
  return SandboxResult(
@@ -245,7 +326,15 @@ class SubprocessSandbox:
245
326
  completed_at=completed_at,
246
327
  )
247
328
  except asyncio.TimeoutError:
248
- proc.kill()
329
+ # Kill the whole process group, not just the leader
330
+ try:
331
+ if os.name == "posix":
332
+ import signal
333
+ os.killpg(proc.pid, signal.SIGKILL)
334
+ else:
335
+ proc.kill()
336
+ except (ProcessLookupError, PermissionError, OSError):
337
+ proc.kill()
249
338
  await proc.wait()
250
339
 
251
340
  return SandboxResult(
@@ -0,0 +1 @@
1
+ __version__ = "4.6.56"
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "rich>=13.7",
13
13
  "markdown>=3.5",
14
14
  "pyparsing>=3.0.0",
15
- "praisonaiagents>=1.6.55",
15
+ "praisonaiagents>=1.6.56",
16
16
  "python-dotenv>=0.19.0",
17
17
  "litellm>=1.83.14,<2",
18
18
  "PyYAML>=6.0",