PraisonAI 4.6.22__tar.gz → 4.6.23__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 (767) hide show
  1. {praisonai-4.6.22 → praisonai-4.6.23}/PKG-INFO +2 -2
  2. {praisonai-4.6.22 → praisonai-4.6.23}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.22 → praisonai-4.6.23}/PraisonAI.egg-info/SOURCES.txt +4 -0
  4. {praisonai-4.6.22 → praisonai-4.6.23}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/__init__.py +24 -10
  6. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/agent_scheduler.py +14 -60
  7. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/async_agent_scheduler.py +39 -75
  8. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/skills.py +61 -0
  9. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/db/adapter.py +34 -28
  10. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy.py +1 -1
  11. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/server.py +0 -84
  12. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/base.py +15 -6
  13. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/claude_code.py +24 -27
  14. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/registry.py +5 -1
  15. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/async_mysql.py +10 -25
  16. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/async_postgres.py +10 -25
  17. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/async_sqlite.py +10 -9
  18. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/surrealdb.py +3 -14
  19. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/surrealdb_vector.py +3 -4
  20. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/state/async_mongodb.py +8 -7
  21. praisonai-4.6.23/praisonai/push/__init__.py +9 -0
  22. praisonai-4.6.23/praisonai/push/client.py +389 -0
  23. praisonai-4.6.23/praisonai/push/transports.py +188 -0
  24. praisonai-4.6.23/praisonai/scheduler/shared.py +95 -0
  25. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/tool_resolver.py +42 -31
  26. praisonai-4.6.23/praisonai/version.py +1 -0
  27. {praisonai-4.6.22 → praisonai-4.6.23}/pyproject.toml +1 -1
  28. praisonai-4.6.22/praisonai/version.py +0 -1
  29. {praisonai-4.6.22 → praisonai-4.6.23}/PraisonAI.egg-info/dependency_links.txt +0 -0
  30. {praisonai-4.6.22 → praisonai-4.6.23}/PraisonAI.egg-info/entry_points.txt +0 -0
  31. {praisonai-4.6.22 → praisonai-4.6.23}/PraisonAI.egg-info/top_level.txt +0 -0
  32. {praisonai-4.6.22 → praisonai-4.6.23}/README.md +0 -0
  33. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/__main__.py +0 -0
  34. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_approval_spec.py +0 -0
  35. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_async_bridge.py +0 -0
  36. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/__init__.py +0 -0
  37. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/api_md.py +0 -0
  38. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/__init__.py +0 -0
  39. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/docs_extractor.py +0 -0
  40. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/docs_generator.py +0 -0
  41. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/generator.py +0 -0
  42. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  43. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/python_extractor.py +0 -0
  44. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  45. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/rust_extractor.py +0 -0
  46. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  47. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  48. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  49. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/_logging.py +0 -0
  50. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/acp/__init__.py +0 -0
  51. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/acp/config.py +0 -0
  52. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/acp/safe_edit.py +0 -0
  53. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/acp/server.py +0 -0
  54. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/acp/session.py +0 -0
  55. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/adapters/__init__.py +0 -0
  56. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/adapters/readers.py +0 -0
  57. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/adapters/rerankers.py +0 -0
  58. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/adapters/retrievers.py +0 -0
  59. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/adapters/vector_stores.py +0 -0
  60. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/agents_generator.py +0 -0
  61. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/api/agent_invoke.py +0 -0
  62. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/api/call.py +0 -0
  63. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/app/__init__.py +0 -0
  64. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/app/agentos.py +0 -0
  65. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/audit/__init__.py +0 -0
  66. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/audit/agent_centric.py +0 -0
  67. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/auto.py +0 -0
  68. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/__init__.py +0 -0
  69. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_ack.py +0 -0
  70. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_approval.py +0 -0
  71. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_approval_base.py +0 -0
  72. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_chunk.py +0 -0
  73. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_commands.py +0 -0
  74. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_config_schema.py +0 -0
  75. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_debounce.py +0 -0
  76. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_discord_approval.py +0 -0
  77. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_email_utils.py +0 -0
  78. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_http_approval.py +0 -0
  79. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_protocol_mixin.py +0 -0
  80. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_rate_limit.py +0 -0
  81. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_registry.py +0 -0
  82. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_resilience.py +0 -0
  83. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_session.py +0 -0
  84. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_slack_approval.py +0 -0
  85. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_telegram_approval.py +0 -0
  86. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_webhook_approval.py +0 -0
  87. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  88. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/agentmail.py +0 -0
  89. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/bot.py +0 -0
  90. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/botos.py +0 -0
  91. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/discord.py +0 -0
  92. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/email.py +0 -0
  93. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/media.py +0 -0
  94. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/slack.py +0 -0
  95. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/telegram.py +0 -0
  96. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/bots/whatsapp.py +0 -0
  97. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/__init__.py +0 -0
  98. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/agent.py +0 -0
  99. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/benchmark.py +0 -0
  100. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/cdp_agent.py +0 -0
  101. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/cdp_utils.py +0 -0
  102. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/cli.py +0 -0
  103. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/diagnostics.py +0 -0
  104. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/launcher.py +0 -0
  105. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/playwright_agent.py +0 -0
  106. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/profiling.py +0 -0
  107. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/protocol.py +0 -0
  108. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/report.py +0 -0
  109. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/server.py +0 -0
  110. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/sessions.py +0 -0
  111. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/browser/video.py +0 -0
  112. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/__init__.py +0 -0
  113. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/a2a.py +0 -0
  114. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/assistants.py +0 -0
  115. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/audio.py +0 -0
  116. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/batches.py +0 -0
  117. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/completions.py +0 -0
  118. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/container_files.py +0 -0
  119. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/containers.py +0 -0
  120. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/embeddings.py +0 -0
  121. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/files.py +0 -0
  122. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/fine_tuning.py +0 -0
  123. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/guardrails.py +0 -0
  124. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/images.py +0 -0
  125. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/mcp.py +0 -0
  126. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/messages.py +0 -0
  127. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/moderations.py +0 -0
  128. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/ocr.py +0 -0
  129. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/passthrough.py +0 -0
  130. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/rag.py +0 -0
  131. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/realtime.py +0 -0
  132. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/rerank.py +0 -0
  133. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/responses.py +0 -0
  134. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/search.py +0 -0
  135. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/vector_store_files.py +0 -0
  136. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/vector_stores.py +0 -0
  137. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/capabilities/videos.py +0 -0
  138. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/chainlit_ui.py +0 -0
  139. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/chat/__init__.py +0 -0
  140. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/chat/app.py +0 -0
  141. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/claw/__init__.py +0 -0
  142. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/claw/default_app.py +0 -0
  143. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/__init__.py +0 -0
  144. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/_paths.py +0 -0
  145. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/app.py +0 -0
  146. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/branding.py +0 -0
  147. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/__init__.py +0 -0
  148. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/acp.py +0 -0
  149. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/agents.py +0 -0
  150. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/app.py +0 -0
  151. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/audit.py +0 -0
  152. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/batch.py +0 -0
  153. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/benchmark.py +0 -0
  154. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/bot.py +0 -0
  155. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/browser.py +0 -0
  156. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/call.py +0 -0
  157. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/chat.py +0 -0
  158. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/claw.py +0 -0
  159. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/code.py +0 -0
  160. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/commit.py +0 -0
  161. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/completion.py +0 -0
  162. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/config.py +0 -0
  163. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/context.py +0 -0
  164. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/dashboard.py +0 -0
  165. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/debug.py +0 -0
  166. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/deploy.py +0 -0
  167. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/diag.py +0 -0
  168. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/docs.py +0 -0
  169. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/doctor.py +0 -0
  170. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/endpoints.py +0 -0
  171. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/environment.py +0 -0
  172. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/eval.py +0 -0
  173. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/examples.py +0 -0
  174. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/flow.py +0 -0
  175. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/gateway.py +0 -0
  176. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/github.py +0 -0
  177. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/hooks.py +0 -0
  178. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/knowledge.py +0 -0
  179. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/langextract.py +0 -0
  180. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/langfuse.py +0 -0
  181. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/loop.py +0 -0
  182. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/lsp.py +0 -0
  183. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/managed.py +0 -0
  184. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/mcp.py +0 -0
  185. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/memory.py +0 -0
  186. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/n8n.py +0 -0
  187. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/obs.py +0 -0
  188. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/onboard.py +0 -0
  189. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/package.py +0 -0
  190. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/paths.py +0 -0
  191. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/plugins.py +0 -0
  192. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/port.py +0 -0
  193. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/profile.py +0 -0
  194. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/publish.py +0 -0
  195. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/rag.py +0 -0
  196. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/realtime.py +0 -0
  197. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/recipe.py +0 -0
  198. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/registry.py +0 -0
  199. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/replay.py +0 -0
  200. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/research.py +0 -0
  201. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/retrieval.py +0 -0
  202. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/rules.py +0 -0
  203. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/run.py +0 -0
  204. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/sandbox.py +0 -0
  205. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/schedule.py +0 -0
  206. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/serve.py +0 -0
  207. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/session.py +0 -0
  208. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/setup.py +0 -0
  209. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/skills.py +0 -0
  210. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/standardise.py +0 -0
  211. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/templates.py +0 -0
  212. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/test.py +0 -0
  213. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/todo.py +0 -0
  214. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/tools.py +0 -0
  215. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/traces.py +0 -0
  216. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/tracker.py +0 -0
  217. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/train.py +0 -0
  218. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/ui.py +0 -0
  219. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/up.py +0 -0
  220. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/version.py +0 -0
  221. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/commands/workflow.py +0 -0
  222. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/config_loader.py +0 -0
  223. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/configuration/__init__.py +0 -0
  224. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/configuration/loader.py +0 -0
  225. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/configuration/paths.py +0 -0
  226. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/configuration/schema.py +0 -0
  227. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/execution/__init__.py +0 -0
  228. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/execution/core.py +0 -0
  229. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/execution/profiler.py +0 -0
  230. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/execution/request.py +0 -0
  231. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/execution/result.py +0 -0
  232. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/fallback_schema.py +0 -0
  233. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/__init__.py +0 -0
  234. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/acp.py +0 -0
  235. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/action_orchestrator.py +0 -0
  236. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/agent_scheduler.py +0 -0
  237. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/agent_tools.py +0 -0
  238. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/agents.py +0 -0
  239. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/approval.py +0 -0
  240. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/at_mentions.py +0 -0
  241. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/audit_cli.py +0 -0
  242. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/auto_memory.py +0 -0
  243. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/auto_mode.py +0 -0
  244. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/autonomy_mode.py +0 -0
  245. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/background.py +0 -0
  246. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/base.py +0 -0
  247. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/benchmark.py +0 -0
  248. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/bots_cli.py +0 -0
  249. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/capabilities.py +0 -0
  250. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/checkpoints.py +0 -0
  251. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/cli_profiler.py +0 -0
  252. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/code_intelligence.py +0 -0
  253. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/compaction.py +0 -0
  254. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/compare.py +0 -0
  255. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/config_hierarchy.py +0 -0
  256. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/context_manager.py +0 -0
  257. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/cost_tracker.py +0 -0
  258. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/csv_test_runner.py +0 -0
  259. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/debug.py +0 -0
  260. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/deploy.py +0 -0
  261. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/diag.py +0 -0
  262. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/display_jsonl.py +0 -0
  263. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/__init__.py +0 -0
  264. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  265. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  266. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  267. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  268. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  269. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  270. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  271. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  272. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  273. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  274. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  275. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  276. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  277. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  278. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  279. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  280. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  281. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/engine.py +0 -0
  282. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/formatters.py +0 -0
  283. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/handler.py +0 -0
  284. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/models.py +0 -0
  285. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/doctor/registry.py +0 -0
  286. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/endpoints.py +0 -0
  287. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/eval.py +0 -0
  288. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/examples.py +0 -0
  289. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/external_agents.py +0 -0
  290. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/fast_context.py +0 -0
  291. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/file_history.py +0 -0
  292. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/flow_display.py +0 -0
  293. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/gateway.py +0 -0
  294. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/git_attribution.py +0 -0
  295. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/git_integration.py +0 -0
  296. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/guardrail.py +0 -0
  297. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/handoff.py +0 -0
  298. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/hooks.py +0 -0
  299. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/hybrid_workflow.py +0 -0
  300. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/image.py +0 -0
  301. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/interactive_core_headless.py +0 -0
  302. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/interactive_runtime.py +0 -0
  303. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/interactive_test_harness.py +0 -0
  304. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/interactive_tools.py +0 -0
  305. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/interactive_tui.py +0 -0
  306. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/job_workflow.py +0 -0
  307. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/jobs.py +0 -0
  308. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/knowledge.py +0 -0
  309. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/knowledge_cli.py +0 -0
  310. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/lite.py +0 -0
  311. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/logs.py +0 -0
  312. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/lsp_cli.py +0 -0
  313. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  314. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/mcp.py +0 -0
  315. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/message_queue.py +0 -0
  316. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/metrics.py +0 -0
  317. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/migrate.py +0 -0
  318. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/migration_flow.py +0 -0
  319. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/migration_spec.py +0 -0
  320. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/n8n.py +0 -0
  321. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/observability.py +0 -0
  322. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/ollama.py +0 -0
  323. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/onboard.py +0 -0
  324. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/output_modes.py +0 -0
  325. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/output_style.py +0 -0
  326. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/package.py +0 -0
  327. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/performance.py +0 -0
  328. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/persistence.py +0 -0
  329. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/plugin_cli.py +0 -0
  330. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/profile.py +0 -0
  331. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/profiler/__init__.py +0 -0
  332. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/profiler/core.py +0 -0
  333. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/profiler/optimizations.py +0 -0
  334. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/profiler/suite.py +0 -0
  335. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/profiling.py +0 -0
  336. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/queue/__init__.py +0 -0
  337. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/queue/manager.py +0 -0
  338. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/queue/models.py +0 -0
  339. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/queue/persistence.py +0 -0
  340. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/queue/scheduler.py +0 -0
  341. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/queue/worker.py +0 -0
  342. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/recipe.py +0 -0
  343. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/recipe_creator.py +0 -0
  344. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/recipe_optimizer.py +0 -0
  345. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/recipe_prompts.py +0 -0
  346. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/recipes.py +0 -0
  347. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/registry.py +0 -0
  348. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/repo_map.py +0 -0
  349. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/router.py +0 -0
  350. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/safe_shell.py +0 -0
  351. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/sandbox_cli.py +0 -0
  352. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/sandbox_executor.py +0 -0
  353. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/sdk_knowledge.py +0 -0
  354. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/serve.py +0 -0
  355. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/session.py +0 -0
  356. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/setup/__init__.py +0 -0
  357. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/setup/handler.py +0 -0
  358. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/setup/templates.py +0 -0
  359. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/skills.py +0 -0
  360. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/slash_commands.py +0 -0
  361. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/telemetry.py +0 -0
  362. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/templates.py +0 -0
  363. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/thinking.py +0 -0
  364. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/todo.py +0 -0
  365. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tools.py +0 -0
  366. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/__init__.py +0 -0
  367. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/app.py +0 -0
  368. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/cli.py +0 -0
  369. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/config.py +0 -0
  370. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/debug.py +0 -0
  371. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/events.py +0 -0
  372. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/mock_provider.py +0 -0
  373. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/orchestrator.py +0 -0
  374. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  375. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/screens/help.py +0 -0
  376. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/screens/main.py +0 -0
  377. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/screens/queue.py +0 -0
  378. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/screens/session.py +0 -0
  379. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/screens/settings.py +0 -0
  380. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/session_store.py +0 -0
  381. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  382. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  383. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  384. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  385. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  386. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  387. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/widgets/status.py +0 -0
  388. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  389. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/wizard.py +0 -0
  390. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/workflow.py +0 -0
  391. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/features/yaml_utils.py +0 -0
  392. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/__init__.py +0 -0
  393. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/async_tui.py +0 -0
  394. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/config.py +0 -0
  395. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/core.py +0 -0
  396. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/events.py +0 -0
  397. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  398. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  399. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  400. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/praison_io.py +0 -0
  401. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/repl.py +0 -0
  402. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/split_tui.py +0 -0
  403. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/interactive/tui_app.py +0 -0
  404. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/langfuse_client.py +0 -0
  405. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/legacy.py +0 -0
  406. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/main.py +0 -0
  407. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/output/__init__.py +0 -0
  408. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/output/console.py +0 -0
  409. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/schedule_cli.py +0 -0
  410. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/schema_provider.py +0 -0
  411. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/session/__init__.py +0 -0
  412. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/session/unified.py +0 -0
  413. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/state/__init__.py +0 -0
  414. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/state/identifiers.py +0 -0
  415. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/state/sessions.py +0 -0
  416. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/ui/__init__.py +0 -0
  417. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/ui/config.py +0 -0
  418. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/ui/events.py +0 -0
  419. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/ui/mg_backend.py +0 -0
  420. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/ui/plain.py +0 -0
  421. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/ui/rich_backend.py +0 -0
  422. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/cli/unified_schema.py +0 -0
  423. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/__init__.py +0 -0
  424. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/agent_tools.py +0 -0
  425. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/diff/__init__.py +0 -0
  426. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/diff/diff_strategy.py +0 -0
  427. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/tools/__init__.py +0 -0
  428. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/tools/apply_diff.py +0 -0
  429. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/tools/execute_command.py +0 -0
  430. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/tools/list_files.py +0 -0
  431. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/tools/read_file.py +0 -0
  432. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/tools/search_replace.py +0 -0
  433. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/tools/write_file.py +0 -0
  434. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/utils/__init__.py +0 -0
  435. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/utils/file_utils.py +0 -0
  436. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/utils/ignore_utils.py +0 -0
  437. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/code/utils/text_utils.py +0 -0
  438. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/context/__init__.py +0 -0
  439. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/context/artifact_store.py +0 -0
  440. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/context/config.py +0 -0
  441. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/context/history_store.py +0 -0
  442. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/context/queue.py +0 -0
  443. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/context/setup.py +0 -0
  444. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/context/terminal_logger.py +0 -0
  445. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/daemon/__init__.py +0 -0
  446. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/daemon/launchd.py +0 -0
  447. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/daemon/systemd.py +0 -0
  448. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/daemon/windows.py +0 -0
  449. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/db/__init__.py +0 -0
  450. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/__init__.py +0 -0
  451. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/api.py +0 -0
  452. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/docker.py +0 -0
  453. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/doctor.py +0 -0
  454. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/main.py +0 -0
  455. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/models.py +0 -0
  456. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/providers/__init__.py +0 -0
  457. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/providers/aws.py +0 -0
  458. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/providers/azure.py +0 -0
  459. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/providers/base.py +0 -0
  460. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/providers/gcp.py +0 -0
  461. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/deploy/schema.py +0 -0
  462. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/docs_runner/__init__.py +0 -0
  463. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/docs_runner/classifier.py +0 -0
  464. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/docs_runner/executor.py +0 -0
  465. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/docs_runner/extractor.py +0 -0
  466. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/docs_runner/reporter.py +0 -0
  467. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/docs_runner/runner.py +0 -0
  468. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/docs_runner/workspace.py +0 -0
  469. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/__init__.py +0 -0
  470. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/a2u_server.py +0 -0
  471. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/discovery.py +0 -0
  472. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/providers/__init__.py +0 -0
  473. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/providers/a2a.py +0 -0
  474. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/providers/a2u.py +0 -0
  475. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/providers/agents_api.py +0 -0
  476. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/providers/base.py +0 -0
  477. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/providers/mcp.py +0 -0
  478. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/providers/recipe.py +0 -0
  479. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  480. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/registry.py +0 -0
  481. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/endpoints/server.py +0 -0
  482. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/flow/__init__.py +0 -0
  483. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/flow/client.py +0 -0
  484. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  485. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  486. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/flow/components/__init__.py +0 -0
  487. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/flow/converter.py +0 -0
  488. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/flow/helpers.py +0 -0
  489. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/framework_adapters/__init__.py +0 -0
  490. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  491. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/framework_adapters/base.py +0 -0
  492. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  493. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  494. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/__init__.py +0 -0
  495. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/exec_approval.py +0 -0
  496. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/gateway_approval.py +0 -0
  497. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/pairing.py +0 -0
  498. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/push_channels.py +0 -0
  499. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/push_delivery.py +0 -0
  500. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/push_polling.py +0 -0
  501. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/push_presence.py +0 -0
  502. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/rate_limiter.py +0 -0
  503. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/gateway/redis_pubsub.py +0 -0
  504. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/inbuilt_tools/__init__.py +0 -0
  505. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  506. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/inc/__init__.py +0 -0
  507. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/inc/config.py +0 -0
  508. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/inc/models.py +0 -0
  509. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/__init__.py +0 -0
  510. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/_session_info.py +0 -0
  511. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/_tool_aliases.py +0 -0
  512. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/codex_cli.py +0 -0
  513. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/compute/__init__.py +0 -0
  514. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/compute/daytona.py +0 -0
  515. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/compute/docker.py +0 -0
  516. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/compute/e2b.py +0 -0
  517. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/compute/flyio.py +0 -0
  518. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/compute/local.py +0 -0
  519. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/compute/modal_compute.py +0 -0
  520. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/cursor_cli.py +0 -0
  521. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/db_session_adapter.py +0 -0
  522. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/gemini_cli.py +0 -0
  523. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/managed_agents.py +0 -0
  524. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/integrations/managed_local.py +0 -0
  525. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/jobs/__init__.py +0 -0
  526. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/jobs/executor.py +0 -0
  527. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/jobs/models.py +0 -0
  528. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/jobs/router.py +0 -0
  529. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/jobs/server.py +0 -0
  530. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/jobs/store.py +0 -0
  531. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/llm/__init__.py +0 -0
  532. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/llm/registry.py +0 -0
  533. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/__init__.py +0 -0
  534. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/adapters/__init__.py +0 -0
  535. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/adapters/agents.py +0 -0
  536. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  537. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  538. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  539. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  540. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/adapters/memory.py +0 -0
  541. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/adapters/prompts.py +0 -0
  542. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/adapters/resources.py +0 -0
  543. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  544. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/auth/__init__.py +0 -0
  545. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/auth/api_key.py +0 -0
  546. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/auth/oauth.py +0 -0
  547. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/auth/oidc.py +0 -0
  548. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/auth/scopes.py +0 -0
  549. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/cli.py +0 -0
  550. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/elicitation.py +0 -0
  551. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/icons.py +0 -0
  552. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/recipe_adapter.py +0 -0
  553. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/recipe_cli.py +0 -0
  554. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/registry.py +0 -0
  555. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/sampling.py +0 -0
  556. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/server.py +0 -0
  557. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/tasks.py +0 -0
  558. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/tool_index.py +0 -0
  559. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/transports/__init__.py +0 -0
  560. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/transports/http_stream.py +0 -0
  561. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/mcp_server/transports/stdio.py +0 -0
  562. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/n8n/__init__.py +0 -0
  563. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/n8n/client.py +0 -0
  564. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/n8n/converter.py +0 -0
  565. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/n8n/preview.py +0 -0
  566. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/n8n/reverse_converter.py +0 -0
  567. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/observability/__init__.py +0 -0
  568. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/observability/langextract.py +0 -0
  569. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/observability/langfuse.py +0 -0
  570. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/__init__.py +0 -0
  571. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/config.py +0 -0
  572. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/__init__.py +0 -0
  573. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/base.py +0 -0
  574. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/json_store.py +0 -0
  575. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/mysql.py +0 -0
  576. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/postgres.py +0 -0
  577. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/singlestore.py +0 -0
  578. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/sqlite.py +0 -0
  579. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/supabase.py +0 -0
  580. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/conversation/turso.py +0 -0
  581. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/factory.py +0 -0
  582. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/hooks/__init__.py +0 -0
  583. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  584. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/__init__.py +0 -0
  585. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/base.py +0 -0
  586. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/cassandra.py +0 -0
  587. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/chroma.py +0 -0
  588. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  589. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  590. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/couchbase.py +0 -0
  591. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/lancedb.py +0 -0
  592. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  593. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  594. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  595. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/milvus.py +0 -0
  596. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  597. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/pgvector.py +0 -0
  598. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/pinecone.py +0 -0
  599. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/qdrant.py +0 -0
  600. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  601. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  602. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  603. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/knowledge/weaviate.py +0 -0
  604. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/migrations/__init__.py +0 -0
  605. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/migrations/manager.py +0 -0
  606. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/orchestrator.py +0 -0
  607. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/state/__init__.py +0 -0
  608. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/state/base.py +0 -0
  609. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/state/dynamodb.py +0 -0
  610. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/state/firestore.py +0 -0
  611. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/state/gcs.py +0 -0
  612. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/state/memory.py +0 -0
  613. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/state/mongodb.py +0 -0
  614. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/state/redis.py +0 -0
  615. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/state/upstash.py +0 -0
  616. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/tests/__init__.py +0 -0
  617. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/persistence/tests/test_all_backends.py +0 -0
  618. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/profiler.py +0 -0
  619. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/__init__.py +0 -0
  620. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/bridge.py +0 -0
  621. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/core.py +0 -0
  622. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/exceptions.py +0 -0
  623. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/history.py +0 -0
  624. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/models.py +0 -0
  625. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/operations.py +0 -0
  626. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/policy.py +0 -0
  627. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/registry.py +0 -0
  628. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/runtime.py +0 -0
  629. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/security.py +0 -0
  630. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/serve.py +0 -0
  631. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/recipe/server.py +0 -0
  632. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/replay/__init__.py +0 -0
  633. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/replay/analyzer.py +0 -0
  634. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/replay/applier.py +0 -0
  635. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/replay/judge.py +0 -0
  636. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/replay/plan.py +0 -0
  637. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/replay/player.py +0 -0
  638. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/replay/reader.py +0 -0
  639. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/replay/storage.py +0 -0
  640. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/replay/writer.py +0 -0
  641. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/sandbox/__init__.py +0 -0
  642. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/sandbox/daytona.py +0 -0
  643. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/sandbox/docker.py +0 -0
  644. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/sandbox/modal.py +0 -0
  645. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/sandbox/sandlock.py +0 -0
  646. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/sandbox/ssh.py +0 -0
  647. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/sandbox/subprocess.py +0 -0
  648. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/scheduler/__init__.py +0 -0
  649. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/scheduler/agent_scheduler.py +0 -0
  650. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/scheduler/base.py +0 -0
  651. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/scheduler/daemon_manager.py +0 -0
  652. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/scheduler/executor.py +0 -0
  653. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/scheduler/state_manager.py +0 -0
  654. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/scheduler/yaml_loader.py +0 -0
  655. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/scheduler.py +0 -0
  656. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/security/__init__.py +0 -0
  657. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/security/audit.py +0 -0
  658. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/security/injection.py +0 -0
  659. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/security/protected.py +0 -0
  660. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/setup/__init__.py +0 -0
  661. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/setup/build.py +0 -0
  662. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/setup/post_install.py +0 -0
  663. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/setup/setup_conda_env.py +0 -0
  664. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/setup.py +0 -0
  665. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/__init__.py +0 -0
  666. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/ai_generator.py +0 -0
  667. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/config.py +0 -0
  668. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/dedupe.py +0 -0
  669. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/discovery.py +0 -0
  670. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/drift.py +0 -0
  671. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/engine.py +0 -0
  672. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/enhanced_templates.py +0 -0
  673. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/example_verifier.py +0 -0
  674. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/manifest.py +0 -0
  675. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/models.py +0 -0
  676. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/reports.py +0 -0
  677. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/templates.py +0 -0
  678. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/undo_redo.py +0 -0
  679. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/standardise/validator.py +0 -0
  680. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/storage/__init__.py +0 -0
  681. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/storage/dynamodb_adapter.py +0 -0
  682. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/storage/mongodb_adapter.py +0 -0
  683. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/storage/postgresql_adapter.py +0 -0
  684. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/storage/redis_adapter.py +0 -0
  685. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/__init__.py +0 -0
  686. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/batch_source.py +0 -0
  687. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/cli_docs_source.py +0 -0
  688. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/discovery.py +0 -0
  689. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/docs_source.py +0 -0
  690. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/examples_source.py +0 -0
  691. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/executor.py +0 -0
  692. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/models.py +0 -0
  693. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/report_viewer.py +0 -0
  694. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/reporter.py +0 -0
  695. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/suite_runner/runner.py +0 -0
  696. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/templates/__init__.py +0 -0
  697. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/templates/cache.py +0 -0
  698. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/templates/dependency_checker.py +0 -0
  699. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/templates/discovery.py +0 -0
  700. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/templates/loader.py +0 -0
  701. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/templates/registry.py +0 -0
  702. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/templates/resolver.py +0 -0
  703. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/templates/security.py +0 -0
  704. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/templates/tool_override.py +0 -0
  705. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/templates/tools_doctor.py +0 -0
  706. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/test.py +0 -0
  707. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/tool_registry.py +0 -0
  708. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/tools/__init__.py +0 -0
  709. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/tools/audio.py +0 -0
  710. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/tools/glob_tool.py +0 -0
  711. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/tools/grep_tool.py +0 -0
  712. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/tools/multiedit.py +0 -0
  713. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/tools/skill_manage.py +0 -0
  714. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train/__init__.py +0 -0
  715. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train/agents/__init__.py +0 -0
  716. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train/agents/grader.py +0 -0
  717. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train/agents/hook.py +0 -0
  718. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train/agents/models.py +0 -0
  719. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train/agents/orchestrator.py +0 -0
  720. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train/agents/storage.py +0 -0
  721. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train/llm/__init__.py +0 -0
  722. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train/llm/trainer.py +0 -0
  723. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train.py +0 -0
  724. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/train_vision.py +0 -0
  725. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/_aiui_datastore.py +0 -0
  726. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/_external_agents.py +0 -0
  727. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/agents.py +0 -0
  728. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/bot.py +0 -0
  729. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/callbacks.py +0 -0
  730. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/chainlit_compat.py +0 -0
  731. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/chat.py +0 -0
  732. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/code.py +0 -0
  733. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/colab.py +0 -0
  734. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/colab_chainlit.py +0 -0
  735. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/components/aicoder.py +0 -0
  736. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/context.py +0 -0
  737. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/database_config.py +0 -0
  738. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/db.py +0 -0
  739. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/realtime.py +0 -0
  740. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/realtimeclient/__init__.py +0 -0
  741. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/realtimeclient/tools.py +0 -0
  742. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui/sql_alchemy.py +0 -0
  743. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui_agents/__init__.py +0 -0
  744. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui_agents/default_app.py +0 -0
  745. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui_bot/__init__.py +0 -0
  746. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui_bot/default_app.py +0 -0
  747. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui_chat/__init__.py +0 -0
  748. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui_chat/default_app.py +0 -0
  749. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui_realtime/__init__.py +0 -0
  750. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/ui_realtime/default_app.py +0 -0
  751. {praisonai-4.6.22 → praisonai-4.6.23}/praisonai/upload_vision.py +0 -0
  752. {praisonai-4.6.22 → praisonai-4.6.23}/setup.cfg +0 -0
  753. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test.py +0 -0
  754. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_agents_playbook.py +0 -0
  755. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_approval_system.py +0 -0
  756. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_basic.py +0 -0
  757. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_cli_features.py +0 -0
  758. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_custom_tools_fix.py +0 -0
  759. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_double_api_fix.py +0 -0
  760. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_n8n_agent_invoke.py +0 -0
  761. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_n8n_cli_feature.py +0 -0
  762. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_n8n_integration.py +0 -0
  763. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_phase2_refactor.py +0 -0
  764. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_recipe.py +0 -0
  765. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_registry.py +0 -0
  766. {praisonai-4.6.22 → praisonai-4.6.23}/tests/test_runner.py +0 -0
  767. {praisonai-4.6.22 → praisonai-4.6.23}/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.22
3
+ Version: 4.6.23
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.22
14
+ Requires-Dist: praisonaiagents>=1.6.23
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<=1.82.6,>=1.81.0
17
17
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.22
3
+ Version: 4.6.23
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.22
14
+ Requires-Dist: praisonaiagents>=1.6.23
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<=1.82.6,>=1.81.0
17
17
  Requires-Dist: PyYAML>=6.0
@@ -617,6 +617,9 @@ praisonai/persistence/state/redis.py
617
617
  praisonai/persistence/state/upstash.py
618
618
  praisonai/persistence/tests/__init__.py
619
619
  praisonai/persistence/tests/test_all_backends.py
620
+ praisonai/push/__init__.py
621
+ praisonai/push/client.py
622
+ praisonai/push/transports.py
620
623
  praisonai/recipe/__init__.py
621
624
  praisonai/recipe/bridge.py
622
625
  praisonai/recipe/core.py
@@ -651,6 +654,7 @@ praisonai/scheduler/agent_scheduler.py
651
654
  praisonai/scheduler/base.py
652
655
  praisonai/scheduler/daemon_manager.py
653
656
  praisonai/scheduler/executor.py
657
+ praisonai/scheduler/shared.py
654
658
  praisonai/scheduler/state_manager.py
655
659
  praisonai/scheduler/yaml_loader.py
656
660
  praisonai/security/__init__.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.22
4
+ praisonaiagents>=1.6.23
5
5
  python-dotenv>=0.19.0
6
6
  litellm<=1.82.6,>=1.81.0
7
7
  PyYAML>=6.0
@@ -2,16 +2,6 @@
2
2
  import logging
3
3
  logging.getLogger('crewai.cli.config').setLevel(logging.ERROR)
4
4
 
5
- # Disable OpenTelemetry SDK only when Langfuse is NOT configured
6
- # (Langfuse v4 requires OTel internally for tracing)
7
- import os
8
- _langfuse_configured = bool(os.getenv("LANGFUSE_PUBLIC_KEY") or os.path.exists(
9
- os.path.expanduser("~/.praisonai/langfuse.env")
10
- ))
11
- if not _langfuse_configured:
12
- os.environ.setdefault("OTEL_SDK_DISABLED", "true")
13
- os.environ["EC_TELEMETRY"] = "false"
14
-
15
5
  # Version is lightweight, import directly
16
6
  from .version import __version__
17
7
 
@@ -36,10 +26,34 @@ __all__ = [
36
26
  'LocalManagedConfig',
37
27
  ]
38
28
 
29
+ # Telemetry initialization state
30
+ _telemetry_initialized = False
31
+
32
+ def _ensure_telemetry_defaults() -> None:
33
+ """Apply telemetry env defaults exactly once, on first observability use."""
34
+ global _telemetry_initialized
35
+ if _telemetry_initialized:
36
+ return
37
+ import os
38
+ langfuse_configured = bool(
39
+ os.getenv("LANGFUSE_PUBLIC_KEY")
40
+ or os.path.exists(os.path.expanduser("~/.praisonai/langfuse.env"))
41
+ )
42
+ if langfuse_configured:
43
+ # Explicitly enable OTEL for Langfuse integration
44
+ os.environ["OTEL_SDK_DISABLED"] = "false"
45
+ else:
46
+ os.environ.setdefault("OTEL_SDK_DISABLED", "true")
47
+ os.environ.setdefault("EC_TELEMETRY", "false") # respect user overrides
48
+ _telemetry_initialized = True
49
+
39
50
 
40
51
  # Lazy loading for heavy imports
41
52
  def __getattr__(name):
42
53
  """Lazy load heavy modules to improve import time."""
54
+ # Ensure telemetry defaults before any lazy import that may touch OTEL.
55
+ _ensure_telemetry_defaults()
56
+
43
57
  if name == 'PraisonAI':
44
58
  from .cli import PraisonAI
45
59
  return PraisonAI
@@ -29,52 +29,8 @@ from abc import ABC, abstractmethod
29
29
  logger = logging.getLogger(__name__)
30
30
 
31
31
 
32
- class ScheduleParser:
33
- """Parse schedule expressions into intervals."""
34
-
35
- @staticmethod
36
- def parse(schedule_expr: str) -> int:
37
- """
38
- Parse schedule expression and return interval in seconds.
39
-
40
- Supported formats:
41
- - "daily" -> 86400 seconds
42
- - "hourly" -> 3600 seconds
43
- - "*/30m" -> 1800 seconds (every 30 minutes)
44
- - "*/1h" -> 3600 seconds (every 1 hour)
45
- - "60" -> 60 seconds (plain number)
46
-
47
- Args:
48
- schedule_expr: Schedule expression string
49
-
50
- Returns:
51
- Interval in seconds
52
-
53
- Raises:
54
- ValueError: If schedule format is not supported
55
- """
56
- schedule_expr = schedule_expr.strip().lower()
57
-
58
- if schedule_expr == "daily":
59
- return 86400
60
- elif schedule_expr == "hourly":
61
- return 3600
62
- elif schedule_expr.isdigit():
63
- return int(schedule_expr)
64
- elif schedule_expr.startswith("*/"):
65
- interval_part = schedule_expr[2:]
66
- if interval_part.endswith("m"):
67
- minutes = int(interval_part[:-1])
68
- return minutes * 60
69
- elif interval_part.endswith("h"):
70
- hours = int(interval_part[:-1])
71
- return hours * 3600
72
- elif interval_part.endswith("s"):
73
- return int(interval_part[:-1])
74
- else:
75
- return int(interval_part)
76
- else:
77
- raise ValueError(f"Unsupported schedule format: {schedule_expr}")
32
+ # Import shared schedule parser
33
+ from .scheduler.shared import ScheduleParser, backoff_delay, safe_call
78
34
 
79
35
 
80
36
  class AgentExecutorInterface(ABC):
@@ -268,8 +224,8 @@ class AgentScheduler:
268
224
  def _execute_with_retry(self, max_retries: int):
269
225
  """Execute agent with retry logic."""
270
226
  self._execution_count += 1
271
- success = False
272
227
 
228
+ last_exc: Optional[Exception] = None
273
229
  for attempt in range(max_retries):
274
230
  try:
275
231
  logger.info(f"Attempt {attempt + 1}/{max_retries}")
@@ -279,27 +235,25 @@ class AgentScheduler:
279
235
  logger.info(f"Result: {result}")
280
236
 
281
237
  self._success_count += 1
282
- success = True
283
-
284
- if self.on_success:
285
- self.on_success(result)
286
-
287
- break
238
+ safe_call(self.on_success, result)
239
+ return
288
240
 
289
241
  except Exception as e:
242
+ last_exc = e
290
243
  logger.error(f"Agent execution failed on attempt {attempt + 1}: {e}")
291
244
 
292
245
  if attempt < max_retries - 1:
293
- wait_time = 30 * (attempt + 1) # Exponential backoff
246
+ wait_time = backoff_delay(attempt)
294
247
  logger.info(f"Waiting {wait_time}s before retry...")
295
248
  time.sleep(wait_time)
296
249
 
297
- if not success:
298
- self._failure_count += 1
299
- logger.error(f"Agent execution failed after {max_retries} attempts")
300
-
301
- if self.on_failure:
302
- self.on_failure(f"Failed after {max_retries} attempts")
250
+ self._failure_count += 1
251
+ logger.error(f"Agent execution failed after {max_retries} attempts")
252
+ safe_call(
253
+ self.on_failure,
254
+ last_exc if last_exc is not None
255
+ else RuntimeError(f"Failed after {max_retries} attempts")
256
+ )
303
257
 
304
258
  def execute_once(self) -> Any:
305
259
  """
@@ -11,55 +11,10 @@ from datetime import datetime
11
11
  from typing import Optional, Dict, Any, Callable, Union
12
12
  from abc import ABC, abstractmethod
13
13
 
14
- logger = logging.getLogger(__name__)
15
-
14
+ # Import shared schedule parser
15
+ from .scheduler.shared import ScheduleParser, backoff_delay, safe_call
16
16
 
17
- class AsyncScheduleParser:
18
- """Parse schedule expressions into intervals for async execution."""
19
-
20
- @staticmethod
21
- def parse(schedule_expr: str) -> int:
22
- """
23
- Parse schedule expression and return interval in seconds.
24
-
25
- Supported formats:
26
- - "daily" -> 86400 seconds
27
- - "hourly" -> 3600 seconds
28
- - "*/30m" -> 1800 seconds (every 30 minutes)
29
- - "*/1h" -> 3600 seconds (every 1 hour)
30
- - "60" -> 60 seconds (plain number)
31
-
32
- Args:
33
- schedule_expr: Schedule expression string
34
-
35
- Returns:
36
- Interval in seconds
37
-
38
- Raises:
39
- ValueError: If schedule format is not supported
40
- """
41
- schedule_expr = schedule_expr.strip().lower()
42
-
43
- if schedule_expr == "daily":
44
- return 86400
45
- elif schedule_expr == "hourly":
46
- return 3600
47
- elif schedule_expr.isdigit():
48
- return int(schedule_expr)
49
- elif schedule_expr.startswith("*/"):
50
- interval_part = schedule_expr[2:]
51
- if interval_part.endswith("m"):
52
- minutes = int(interval_part[:-1])
53
- return minutes * 60
54
- elif interval_part.endswith("h"):
55
- hours = int(interval_part[:-1])
56
- return hours * 3600
57
- elif interval_part.endswith("s"):
58
- return int(interval_part[:-1])
59
- else:
60
- return int(interval_part)
61
- else:
62
- raise ValueError(f"Unsupported schedule format: {schedule_expr}")
17
+ logger = logging.getLogger(__name__)
63
18
 
64
19
 
65
20
  class AsyncAgentExecutorInterface(ABC):
@@ -143,15 +98,24 @@ class AsyncAgentScheduler:
143
98
  self.on_failure = on_failure
144
99
 
145
100
  self._is_running = False
146
- self._cancel_event = asyncio.Event()
147
101
  self._task_handle: Optional[asyncio.Task] = None
148
102
  self._executor = AsyncPraisonAgentExecutor(agent)
149
103
 
150
- # Thread-safe counters using asyncio.Lock
104
+ # Counters
151
105
  self._execution_count = 0
152
106
  self._success_count = 0
153
107
  self._failure_count = 0
154
- self._stats_lock = asyncio.Lock()
108
+
109
+ # Created lazily on first async entry — binds to the caller's loop
110
+ self._cancel_event: Optional[asyncio.Event] = None
111
+ self._stats_lock: Optional[asyncio.Lock] = None
112
+
113
+ def _ensure_async_primitives(self) -> None:
114
+ """Create async primitives if they don't exist yet."""
115
+ if self._cancel_event is None:
116
+ self._cancel_event = asyncio.Event()
117
+ if self._stats_lock is None:
118
+ self._stats_lock = asyncio.Lock()
155
119
 
156
120
  async def start(
157
121
  self,
@@ -164,7 +128,8 @@ class AsyncAgentScheduler:
164
128
 
165
129
  Args:
166
130
  schedule_expr: Schedule expression (e.g., "hourly", "*/1h", "3600")
167
- max_retries: Maximum retry attempts on failure
131
+ max_retries: Maximum total execution attempts (including the first).
132
+ A value of 3 means 1 initial attempt + up to 2 retries.
168
133
  run_immediately: If True, run agent immediately before starting schedule
169
134
 
170
135
  Returns:
@@ -174,8 +139,10 @@ class AsyncAgentScheduler:
174
139
  logger.warning("Scheduler is already running")
175
140
  return False
176
141
 
142
+ self._ensure_async_primitives()
143
+
177
144
  try:
178
- interval = AsyncScheduleParser.parse(schedule_expr)
145
+ interval = ScheduleParser.parse(schedule_expr)
179
146
  self._is_running = True
180
147
  self._cancel_event.clear()
181
148
 
@@ -244,6 +211,7 @@ class AsyncAgentScheduler:
244
211
  Returns:
245
212
  Dictionary with execution stats
246
213
  """
214
+ self._ensure_async_primitives()
247
215
  async with self._stats_lock:
248
216
  return {
249
217
  "is_running": self._is_running,
@@ -296,20 +264,16 @@ class AsyncAgentScheduler:
296
264
  async with self._stats_lock:
297
265
  self._execution_count += 1
298
266
 
299
- for attempt in range(max_retries + 1):
267
+ last_exc: Optional[Exception] = None
268
+ for attempt in range(max_retries):
300
269
  try:
301
- logger.info(f"Executing agent task (attempt {attempt + 1}/{max_retries + 1})")
270
+ logger.info(f"Executing agent task (attempt {attempt + 1}/{max_retries})")
302
271
  result = await self._executor.execute(self.task)
303
272
 
304
273
  async with self._stats_lock:
305
274
  self._success_count += 1
306
275
 
307
- if self.on_success:
308
- try:
309
- self.on_success(result)
310
- except Exception as e:
311
- logger.error(f"Error in success callback: {e}")
312
-
276
+ safe_call(self.on_success, result)
313
277
  logger.info("Agent task executed successfully")
314
278
  return
315
279
 
@@ -317,27 +281,27 @@ class AsyncAgentScheduler:
317
281
  logger.info("Agent execution cancelled")
318
282
  raise
319
283
  except Exception as e:
284
+ last_exc = e
320
285
  logger.error(f"Agent execution failed on attempt {attempt + 1}: {e}")
321
- if attempt == max_retries:
322
- # Final attempt failed
323
- async with self._stats_lock:
324
- self._failure_count += 1
325
-
326
- if self.on_failure:
327
- try:
328
- self.on_failure(e)
329
- except Exception as callback_error:
330
- logger.error(f"Error in failure callback: {callback_error}")
331
- break
332
- else:
286
+ if attempt < max_retries - 1:
333
287
  # Wait before retry (with cancellation support)
334
288
  try:
335
289
  await asyncio.wait_for(
336
290
  self._cancel_event.wait(),
337
- timeout=min(2 ** attempt, 60) # Exponential backoff, max 60s
291
+ timeout=backoff_delay(attempt)
338
292
  )
339
293
  # If we get here, cancellation was requested
340
294
  raise asyncio.CancelledError()
341
295
  except asyncio.TimeoutError:
342
296
  # Timeout is expected - continue to retry
343
- continue
297
+ continue
298
+
299
+ # Final attempt failed
300
+ async with self._stats_lock:
301
+ self._failure_count += 1
302
+
303
+ safe_call(
304
+ self.on_failure,
305
+ last_exc if last_exc is not None
306
+ else RuntimeError(f"Failed after {max_retries} attempts")
307
+ )
@@ -132,3 +132,64 @@ async def askill_load(
132
132
  metadata=metadata,
133
133
  **kwargs
134
134
  )
135
+
136
+
137
+ def tool_from_skill(path: str):
138
+ """Convert a skill to a tool function for direct tool registry integration.
139
+
140
+ This adapter allows users who prefer "skill = tool" ergonomics to
141
+ drop a SKILL.md into an existing tool registry without refactoring.
142
+
143
+ Args:
144
+ path: Path to the skill directory containing SKILL.md
145
+
146
+ Returns:
147
+ A function decorated with @tool that renders the skill body
148
+
149
+ Example:
150
+ # Convert a skill to a tool
151
+ pdf_tool = tool_from_skill("./skills/pdf-processing")
152
+
153
+ # Add to existing tool registry
154
+ agent = Agent(tools=[pdf_tool, other_tools])
155
+ """
156
+ from pathlib import Path
157
+ try:
158
+ from praisonaiagents.skills import load_skill, render_skill_body
159
+ from praisonaiagents.tools import tool
160
+
161
+ # Load the skill
162
+ skill_name = Path(path).name
163
+ skill_dirs = [str(Path(path).parent)]
164
+ loaded = load_skill(skill_name, skill_dirs)
165
+
166
+ if loaded is None:
167
+ raise ValueError(f"Skill not found at path: {path}")
168
+
169
+ # Create the tool function with proper metadata and argument handling
170
+ safe_name = skill_name.replace('-', '_').replace(' ', '_')
171
+ description = loaded.properties.description or f"Execute {skill_name} skill"
172
+
173
+ def _skill_tool(arguments: str = "") -> str:
174
+ """Execute skill with provided arguments."""
175
+ if loaded.instructions is None:
176
+ return f"Skill '{skill_name}' has no instructions"
177
+
178
+ # Return the skill instructions with argument substitution
179
+ return render_skill_body(loaded.instructions, arguments)
180
+
181
+ # Set dunder metadata BEFORE decoration so @tool / schema generators
182
+ # and test consumers both see the final identity.
183
+ _skill_tool.__name__ = f"skill_{safe_name}"
184
+ _skill_tool.__qualname__ = _skill_tool.__name__
185
+ _skill_tool.__doc__ = description
186
+
187
+ return tool(
188
+ name=f"skill_{safe_name}",
189
+ description=description,
190
+ )(_skill_tool)
191
+
192
+ except ImportError:
193
+ def _dummy_tool(arguments: str = "") -> str:
194
+ return "Skills not available (praisonaiagents not installed)"
195
+ return _dummy_tool
@@ -7,6 +7,7 @@ and the wrapper's persistence layer (PersistenceOrchestrator).
7
7
 
8
8
  import time
9
9
  import logging
10
+ import threading
10
11
  from typing import Any, Dict, List, Optional
11
12
 
12
13
  logger = logging.getLogger(__name__)
@@ -61,41 +62,46 @@ class PraisonAIDB:
61
62
  self._state_store = None
62
63
  self._knowledge_store = None
63
64
  self._initialized = False
65
+ self._init_lock = threading.Lock()
64
66
 
65
67
  def _init_stores(self):
66
68
  """Lazily initialize stores on first use."""
67
69
  if self._initialized:
68
70
  return
69
71
 
70
- # Import persistence layer
71
- from ..persistence.factory import (
72
- create_conversation_store,
73
- create_state_store,
74
- create_knowledge_store,
75
- )
76
-
77
- # Initialize conversation store
78
- if self._database_url:
79
- backend = self._detect_backend(self._database_url)
80
- self._conversation_store = create_conversation_store(
81
- backend, url=self._database_url, **self._options
82
- )
83
-
84
- # Initialize state store
85
- if self._state_url:
86
- backend = self._detect_backend(self._state_url)
87
- self._state_store = create_state_store(
88
- backend, url=self._state_url, **self._options
72
+ with self._init_lock:
73
+ if self._initialized: # Double-check inside lock
74
+ return
75
+
76
+ # Import persistence layer
77
+ from ..persistence.factory import (
78
+ create_conversation_store,
79
+ create_state_store,
80
+ create_knowledge_store,
89
81
  )
90
-
91
- # Initialize knowledge store
92
- if self._knowledge_url:
93
- backend = self._detect_backend(self._knowledge_url)
94
- self._knowledge_store = create_knowledge_store(
95
- backend, url=self._knowledge_url, **self._options
96
- )
97
-
98
- self._initialized = True
82
+
83
+ # Initialize conversation store
84
+ if self._database_url:
85
+ backend = self._detect_backend(self._database_url)
86
+ self._conversation_store = create_conversation_store(
87
+ backend, url=self._database_url, **self._options
88
+ )
89
+
90
+ # Initialize state store
91
+ if self._state_url:
92
+ backend = self._detect_backend(self._state_url)
93
+ self._state_store = create_state_store(
94
+ backend, url=self._state_url, **self._options
95
+ )
96
+
97
+ # Initialize knowledge store
98
+ if self._knowledge_url:
99
+ backend = self._detect_backend(self._knowledge_url)
100
+ self._knowledge_store = create_knowledge_store(
101
+ backend, url=self._knowledge_url, **self._options
102
+ )
103
+
104
+ self._initialized = True
99
105
 
100
106
  def _detect_backend(self, url: str) -> str:
101
107
  """Detect backend type from URL.
@@ -57,7 +57,7 @@ class CloudDeployer:
57
57
  file.write("FROM python:3.11-slim\n")
58
58
  file.write("WORKDIR /app\n")
59
59
  file.write("COPY . .\n")
60
- file.write("RUN pip install flask praisonai==4.6.22 gunicorn markdown\n")
60
+ file.write("RUN pip install flask praisonai==4.6.23 gunicorn markdown\n")
61
61
  file.write("EXPOSE 8080\n")
62
62
  file.write('CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]\n')
63
63
 
@@ -1806,87 +1806,3 @@ class WebSocketGateway:
1806
1806
  if self._scheduler_task:
1807
1807
  self._scheduler_task.cancel()
1808
1808
  await self.stop_channels()
1809
- except (OSError, ValueError):
1810
- pass
1811
-
1812
- try:
1813
- await _run_all()
1814
- finally:
1815
- if self._config_watch_task:
1816
- self._config_watch_task.cancel()
1817
- if self._scheduler_task:
1818
- self._scheduler_task.cancel()
1819
- await self.stop_channels()
1820
- loop = asyncio.get_event_loop()
1821
- for sig in (signal.SIGINT, signal.SIGTERM):
1822
- try:
1823
- loop.add_signal_handler(sig, _request_shutdown)
1824
- except (NotImplementedError, OSError, ValueError):
1825
- # Fallback for platforms where add_signal_handler is unavailable
1826
- try:
1827
- signal.signal(sig, lambda s, f: _request_shutdown())
1828
- except (OSError, ValueError):
1829
- pass
1830
-
1831
- try:
1832
- await _run_all()
1833
- finally:
1834
- if self._config_watch_task:
1835
- self._config_watch_task.cancel()
1836
- if self._scheduler_task:
1837
- self._scheduler_task.cancel()
1838
- await self.stop_channels()
1839
-
1840
- try:
1841
- await _run_all()
1842
- finally:
1843
- if self._config_watch_task:
1844
- self._config_watch_task.cancel()
1845
- if self._scheduler_task:
1846
- self._scheduler_task.cancel()
1847
- await self.stop_channels()
1848
- loop.add_signal_handler(sig, _request_shutdown)
1849
- except (NotImplementedError, OSError, ValueError):
1850
- # Fallback for platforms where add_signal_handler is unavailable
1851
- try:
1852
- signal.signal(sig, lambda s, f: _request_shutdown())
1853
- except (OSError, ValueError):
1854
- pass
1855
-
1856
- try:
1857
- await _run_all()
1858
- finally:
1859
- if self._config_watch_task:
1860
- self._config_watch_task.cancel()
1861
- if self._scheduler_task:
1862
- self._scheduler_task.cancel()
1863
- await self.stop_channels()
1864
- self._config_watch_task.cancel()
1865
- if self._scheduler_task:
1866
- self._scheduler_task.cancel()
1867
- await self.stop_channels()
1868
-
1869
- def _request_shutdown():
1870
- logger.info("Received shutdown signal, stopping gateway...")
1871
- if self._server:
1872
- self._server.should_exit = True
1873
-
1874
- loop = asyncio.get_event_loop()
1875
- for sig in (signal.SIGINT, signal.SIGTERM):
1876
- try:
1877
- loop.add_signal_handler(sig, _request_shutdown)
1878
- except (NotImplementedError, OSError, ValueError):
1879
- # Fallback for platforms where add_signal_handler is unavailable
1880
- try:
1881
- signal.signal(sig, lambda s, f: _request_shutdown())
1882
- except (OSError, ValueError):
1883
- pass
1884
-
1885
- try:
1886
- await _run_all()
1887
- finally:
1888
- if self._config_watch_task:
1889
- self._config_watch_task.cancel()
1890
- if self._scheduler_task:
1891
- self._scheduler_task.cancel()
1892
- await self.stop_channels()