PraisonAI 4.6.104__tar.gz → 4.6.111__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 (720) hide show
  1. {praisonai-4.6.104 → praisonai-4.6.111}/PKG-INFO +10 -3
  2. {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/PKG-INFO +10 -3
  3. {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/SOURCES.txt +6 -0
  4. {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/requires.txt +10 -2
  5. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/__init__.py +2 -2
  6. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/__main__.py +6 -1
  7. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/docs_generator.py +10 -6
  8. praisonai-4.6.111/praisonai/_framework_availability.py +14 -0
  9. praisonai-4.6.111/praisonai/_safe_loader.py +14 -0
  10. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/agent.py +7 -2
  11. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/agents_generator.py +9 -5
  12. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/api/call.py +22 -21
  13. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/__init__.py +5 -0
  14. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_approval_base.py +46 -1
  15. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_config_schema.py +32 -2
  16. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_dead_targets.py +69 -4
  17. praisonai-4.6.111/praisonai/bots/_delivery_control_store.py +405 -0
  18. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_discord_approval.py +35 -3
  19. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_outbound_messenger.py +31 -1
  20. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_protocol_mixin.py +147 -15
  21. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_rate_limit.py +72 -6
  22. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_registry.py +25 -0
  23. praisonai-4.6.111/praisonai/bots/_reliability.py +190 -0
  24. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_slack_approval.py +35 -3
  25. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_telegram_approval.py +58 -4
  26. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/agentmail.py +4 -2
  27. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/botos.py +272 -17
  28. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/delivery.py +177 -2
  29. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/discord.py +3 -1
  30. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/email.py +4 -2
  31. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/slack.py +12 -3
  32. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/telegram.py +4 -2
  33. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/whatsapp.py +10 -2
  34. praisonai-4.6.111/praisonai/cli/_warnings.py +11 -0
  35. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/gateway.py +34 -0
  36. praisonai-4.6.111/praisonai/cli/fallback_schema.py +11 -0
  37. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/gateway.py +47 -5
  38. praisonai-4.6.111/praisonai/cli/schema_provider.py +11 -0
  39. praisonai-4.6.111/praisonai/cli/unified_schema.py +11 -0
  40. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/autogen_adapter.py +2 -0
  41. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/crewai_adapter.py +2 -0
  42. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/praisonai_adapter.py +4 -1
  43. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/registry.py +3 -2
  44. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/server.py +312 -8
  45. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/kanban/sqlite_store.py +5 -6
  46. praisonai-4.6.111/praisonai/llm/catalogue.py +14 -0
  47. praisonai-4.6.111/praisonai/llm/config.py +14 -0
  48. praisonai-4.6.111/praisonai/llm/credentials.py +14 -0
  49. praisonai-4.6.111/praisonai/llm/env.py +14 -0
  50. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/profiler.py +292 -1
  51. praisonai-4.6.111/praisonai/scheduler/_dispatch.py +56 -0
  52. praisonai-4.6.111/praisonai/tool_registry.py +14 -0
  53. praisonai-4.6.111/praisonai/tool_resolver.py +14 -0
  54. praisonai-4.6.111/praisonai/version.py +1 -0
  55. {praisonai-4.6.104 → praisonai-4.6.111}/pyproject.toml +13 -2
  56. praisonai-4.6.104/praisonai/_framework_availability.py +0 -134
  57. praisonai-4.6.104/praisonai/_safe_loader.py +0 -100
  58. praisonai-4.6.104/praisonai/llm/catalogue.py +0 -462
  59. praisonai-4.6.104/praisonai/llm/config.py +0 -37
  60. praisonai-4.6.104/praisonai/llm/credentials.py +0 -286
  61. praisonai-4.6.104/praisonai/llm/env.py +0 -229
  62. praisonai-4.6.104/praisonai/scheduler/_dispatch.py +0 -28
  63. praisonai-4.6.104/praisonai/tool_registry.py +0 -118
  64. praisonai-4.6.104/praisonai/tool_resolver.py +0 -1241
  65. praisonai-4.6.104/praisonai/version.py +0 -1
  66. {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/dependency_links.txt +0 -0
  67. {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/entry_points.txt +0 -0
  68. {praisonai-4.6.104 → praisonai-4.6.111}/PraisonAI.egg-info/top_level.txt +0 -0
  69. {praisonai-4.6.104 → praisonai-4.6.111}/README.md +0 -0
  70. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_approval_spec.py +0 -0
  71. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_async_bridge.py +0 -0
  72. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_bootstrap.py +0 -0
  73. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/__init__.py +0 -0
  74. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/api_md.py +0 -0
  75. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/__init__.py +0 -0
  76. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/docs_extractor.py +0 -0
  77. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/generator.py +0 -0
  78. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  79. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/python_extractor.py +0 -0
  80. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  81. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/rust_extractor.py +0 -0
  82. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  83. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  84. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  85. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_entrypoint.py +0 -0
  86. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_lazy_cache.py +0 -0
  87. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_lockmap.py +0 -0
  88. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_logging.py +0 -0
  89. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/_registry.py +0 -0
  90. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/acp/__init__.py +0 -0
  91. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/acp/config.py +0 -0
  92. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/acp/safe_edit.py +0 -0
  93. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/acp/server.py +0 -0
  94. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/acp/session.py +0 -0
  95. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/adapters/__init__.py +0 -0
  96. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/adapters/readers.py +0 -0
  97. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/adapters/rerankers.py +0 -0
  98. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/adapters/retrievers.py +0 -0
  99. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/adapters/vector_stores.py +0 -0
  100. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/agent_scheduler.py +0 -0
  101. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/api/agent_invoke.py +0 -0
  102. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/app/__init__.py +0 -0
  103. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/app/agentos.py +0 -0
  104. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/async_agent_scheduler.py +0 -0
  105. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/audit/__init__.py +0 -0
  106. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/audit/agent_centric.py +0 -0
  107. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/auto.py +0 -0
  108. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_ack.py +0 -0
  109. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_admission.py +0 -0
  110. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_approval.py +0 -0
  111. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_approval_store.py +0 -0
  112. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_chunk.py +0 -0
  113. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_commands.py +0 -0
  114. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_correlation.py +0 -0
  115. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_debounce.py +0 -0
  116. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_defaults.py +0 -0
  117. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_delivery.py +0 -0
  118. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_dlq.py +0 -0
  119. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_durable_adapter.py +0 -0
  120. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_email_utils.py +0 -0
  121. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_http_approval.py +0 -0
  122. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_identity.py +0 -0
  123. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_ingress.py +0 -0
  124. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_media.py +0 -0
  125. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_metrics.py +0 -0
  126. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_mirror.py +0 -0
  127. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_outbound_media.py +0 -0
  128. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_outbound_resilience.py +0 -0
  129. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_outbox.py +0 -0
  130. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_pairing_ui.py +0 -0
  131. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_presentation_approval.py +0 -0
  132. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_presentation_approval_backend.py +0 -0
  133. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_presentation_renderer.py +0 -0
  134. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_relay_adapter.py +0 -0
  135. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_reset_policy.py +0 -0
  136. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_resilience.py +0 -0
  137. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_run_control.py +0 -0
  138. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_session.py +0 -0
  139. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_status.py +0 -0
  140. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_streaming.py +0 -0
  141. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_typing.py +0 -0
  142. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_typing_indicator.py +0 -0
  143. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_unknown_user.py +0 -0
  144. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_webhook_approval.py +0 -0
  145. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  146. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/bot.py +0 -0
  147. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/linear.py +0 -0
  148. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/media.py +0 -0
  149. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/bots/webhook_security.py +0 -0
  150. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/__init__.py +0 -0
  151. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/agent.py +0 -0
  152. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/benchmark.py +0 -0
  153. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/cdp_agent.py +0 -0
  154. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/cdp_utils.py +0 -0
  155. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/cli.py +0 -0
  156. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/diagnostics.py +0 -0
  157. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/launcher.py +0 -0
  158. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/playwright_agent.py +0 -0
  159. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/profiling.py +0 -0
  160. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/protocol.py +0 -0
  161. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/report.py +0 -0
  162. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/server.py +0 -0
  163. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/sessions.py +0 -0
  164. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/browser/video.py +0 -0
  165. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/__init__.py +0 -0
  166. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/a2a.py +0 -0
  167. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/assistants.py +0 -0
  168. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/audio.py +0 -0
  169. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/batches.py +0 -0
  170. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/completions.py +0 -0
  171. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/container_files.py +0 -0
  172. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/containers.py +0 -0
  173. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/embeddings.py +0 -0
  174. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/files.py +0 -0
  175. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/fine_tuning.py +0 -0
  176. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/guardrails.py +0 -0
  177. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/images.py +0 -0
  178. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/mcp.py +0 -0
  179. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/messages.py +0 -0
  180. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/moderations.py +0 -0
  181. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/ocr.py +0 -0
  182. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/passthrough.py +0 -0
  183. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/rag.py +0 -0
  184. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/realtime.py +0 -0
  185. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/rerank.py +0 -0
  186. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/responses.py +0 -0
  187. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/search.py +0 -0
  188. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/skills.py +0 -0
  189. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/vector_store_files.py +0 -0
  190. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/vector_stores.py +0 -0
  191. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/capabilities/videos.py +0 -0
  192. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/claw/__init__.py +0 -0
  193. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/claw/default_app.py +0 -0
  194. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/__init__.py +0 -0
  195. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/_paths.py +0 -0
  196. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/_shim.py +0 -0
  197. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/app.py +0 -0
  198. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/approval_backend.py +0 -0
  199. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/branding.py +0 -0
  200. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/__init__.py +0 -0
  201. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/acp.py +0 -0
  202. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/agent.py +0 -0
  203. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/agents.py +0 -0
  204. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/app.py +0 -0
  205. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/attach.py +0 -0
  206. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/audit.py +0 -0
  207. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/auth.py +0 -0
  208. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/batch.py +0 -0
  209. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/benchmark.py +0 -0
  210. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/bot.py +0 -0
  211. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/browser.py +0 -0
  212. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/call.py +0 -0
  213. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/chat.py +0 -0
  214. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/checkpoint.py +0 -0
  215. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/claw.py +0 -0
  216. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/code.py +0 -0
  217. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/command.py +0 -0
  218. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/commit.py +0 -0
  219. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/completion.py +0 -0
  220. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/config.py +0 -0
  221. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/context.py +0 -0
  222. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/daemon.py +0 -0
  223. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/dashboard.py +0 -0
  224. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/debug.py +0 -0
  225. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/deploy.py +0 -0
  226. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/diag.py +0 -0
  227. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/docs.py +0 -0
  228. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/doctor.py +0 -0
  229. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/endpoints.py +0 -0
  230. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/environment.py +0 -0
  231. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/eval.py +0 -0
  232. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/examples.py +0 -0
  233. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/flow.py +0 -0
  234. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/github.py +0 -0
  235. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/hooks.py +0 -0
  236. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/identity.py +0 -0
  237. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/init.py +0 -0
  238. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/kanban.py +0 -0
  239. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/knowledge.py +0 -0
  240. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/langextract.py +0 -0
  241. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/langfuse.py +0 -0
  242. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/loop.py +0 -0
  243. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/lsp.py +0 -0
  244. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/managed.py +0 -0
  245. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/mcp.py +0 -0
  246. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/memory.py +0 -0
  247. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/mint_link.py +0 -0
  248. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/models.py +0 -0
  249. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/n8n.py +0 -0
  250. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/obs.py +0 -0
  251. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/onboard.py +0 -0
  252. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/package.py +0 -0
  253. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/pairing.py +0 -0
  254. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/paths.py +0 -0
  255. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/permissions.py +0 -0
  256. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/plugins.py +0 -0
  257. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/port.py +0 -0
  258. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/profile.py +0 -0
  259. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/publish.py +0 -0
  260. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/rag.py +0 -0
  261. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/realtime.py +0 -0
  262. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/recipe.py +0 -0
  263. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/registry.py +0 -0
  264. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/replay.py +0 -0
  265. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/research.py +0 -0
  266. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/retrieval.py +0 -0
  267. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/rules.py +0 -0
  268. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/run.py +0 -0
  269. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/sandbox.py +0 -0
  270. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/schedule.py +0 -0
  271. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/serve.py +0 -0
  272. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/session.py +0 -0
  273. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/setup.py +0 -0
  274. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/skills.py +0 -0
  275. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/standardise.py +0 -0
  276. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/templates.py +0 -0
  277. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/test.py +0 -0
  278. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/todo.py +0 -0
  279. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/tools.py +0 -0
  280. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/traces.py +0 -0
  281. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/tracker.py +0 -0
  282. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/train.py +0 -0
  283. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/ui.py +0 -0
  284. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/up.py +0 -0
  285. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/validate.py +0 -0
  286. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/version.py +0 -0
  287. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/commands/workflow.py +0 -0
  288. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/config_loader.py +0 -0
  289. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/configuration/__init__.py +0 -0
  290. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/configuration/config.schema.json +0 -0
  291. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/execution/__init__.py +0 -0
  292. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/__init__.py +0 -0
  293. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/approval.py +0 -0
  294. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/bots_cli.py +0 -0
  295. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/onboard.py +0 -0
  296. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/features/serve.py +0 -0
  297. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/interactive/__init__.py +0 -0
  298. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/langfuse_client.py +0 -0
  299. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/main.py +0 -0
  300. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/output/__init__.py +0 -0
  301. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/schedule_cli.py +0 -0
  302. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/session/__init__.py +0 -0
  303. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/state/__init__.py +0 -0
  304. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/ui/__init__.py +0 -0
  305. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli/utils/__init__.py +0 -0
  306. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/cli_backends/__init__.py +0 -0
  307. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/__init__.py +0 -0
  308. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/agent_tools.py +0 -0
  309. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/diff/__init__.py +0 -0
  310. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/diff/diff_strategy.py +0 -0
  311. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/__init__.py +0 -0
  312. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/apply_diff.py +0 -0
  313. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/execute_command.py +0 -0
  314. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/list_files.py +0 -0
  315. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/read_file.py +0 -0
  316. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/search_replace.py +0 -0
  317. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/tools/write_file.py +0 -0
  318. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/utils/__init__.py +0 -0
  319. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/utils/file_utils.py +0 -0
  320. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/utils/ignore_utils.py +0 -0
  321. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/code/utils/text_utils.py +0 -0
  322. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/config/__init__.py +0 -0
  323. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/config/schema.py +0 -0
  324. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/config/validator.py +0 -0
  325. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/__init__.py +0 -0
  326. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/_storage_path.py +0 -0
  327. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/artifact_store.py +0 -0
  328. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/config.py +0 -0
  329. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/history_store.py +0 -0
  330. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/queue.py +0 -0
  331. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/setup.py +0 -0
  332. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/context/terminal_logger.py +0 -0
  333. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/daemon/__init__.py +0 -0
  334. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/daemon/launchd.py +0 -0
  335. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/daemon/systemd.py +0 -0
  336. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/daemon/windows.py +0 -0
  337. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/db/__init__.py +0 -0
  338. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/db/adapter.py +0 -0
  339. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/__init__.py +0 -0
  340. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/api.py +0 -0
  341. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/docker.py +0 -0
  342. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/doctor.py +0 -0
  343. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/main.py +0 -0
  344. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/models.py +0 -0
  345. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/__init__.py +0 -0
  346. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/_registry.py +0 -0
  347. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/aws.py +0 -0
  348. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/azure.py +0 -0
  349. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/base.py +0 -0
  350. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/providers/gcp.py +0 -0
  351. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/deploy/schema.py +0 -0
  352. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/__init__.py +0 -0
  353. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/classifier.py +0 -0
  354. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/executor.py +0 -0
  355. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/extractor.py +0 -0
  356. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/reporter.py +0 -0
  357. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/runner.py +0 -0
  358. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/docs_runner/workspace.py +0 -0
  359. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/__init__.py +0 -0
  360. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/a2u_server.py +0 -0
  361. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/discovery.py +0 -0
  362. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/__init__.py +0 -0
  363. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/a2a.py +0 -0
  364. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/a2u.py +0 -0
  365. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/agents_api.py +0 -0
  366. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/base.py +0 -0
  367. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/mcp.py +0 -0
  368. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/openai_compat.py +0 -0
  369. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/recipe.py +0 -0
  370. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  371. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/registry.py +0 -0
  372. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/endpoints/server.py +0 -0
  373. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/__init__.py +0 -0
  374. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/client.py +0 -0
  375. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  376. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  377. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/components/__init__.py +0 -0
  378. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/converter.py +0 -0
  379. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/flow/helpers.py +0 -0
  380. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/__init__.py +0 -0
  381. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/_config_builder.py +0 -0
  382. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/base.py +0 -0
  383. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/validators.py +0 -0
  384. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/framework_adapters/workflow_framework.py +0 -0
  385. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/__init__.py +0 -0
  386. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/auth.py +0 -0
  387. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/client.py +0 -0
  388. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/cookie_auth.py +0 -0
  389. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/exec_approval.py +0 -0
  390. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/forensics.py +0 -0
  391. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/gateway_approval.py +0 -0
  392. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/health_monitor.py +0 -0
  393. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/home_channels.py +0 -0
  394. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/kanban_dispatcher.py +0 -0
  395. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/magic_link.py +0 -0
  396. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/origin_check.py +0 -0
  397. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/pairing.py +0 -0
  398. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/pairing_routes.py +0 -0
  399. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/port_utils.py +0 -0
  400. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/push_channels.py +0 -0
  401. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/push_delivery.py +0 -0
  402. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/push_polling.py +0 -0
  403. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/push_presence.py +0 -0
  404. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/rate_limiter.py +0 -0
  405. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/redis_pubsub.py +0 -0
  406. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/supervisor.py +0 -0
  407. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/gateway/unicode_utils.py +0 -0
  408. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/inbuilt_tools/__init__.py +0 -0
  409. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  410. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/inc/__init__.py +0 -0
  411. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/inc/config.py +0 -0
  412. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/inc/models.py +0 -0
  413. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/__init__.py +0 -0
  414. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/__init__.py +0 -0
  415. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  416. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/hooks_query.py +0 -0
  417. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  418. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/schedules_runner.py +0 -0
  419. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/usage_bridge.py +0 -0
  420. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/bridges/workflows_service.py +0 -0
  421. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/context_files.py +0 -0
  422. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/gateway_host.py +0 -0
  423. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/host_app.py +0 -0
  424. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/pages/__init__.py +0 -0
  425. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/pages/bot_health.py +0 -0
  426. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integration/pages/workflow_runs.py +0 -0
  427. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/__init__.py +0 -0
  428. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/_session_info.py +0 -0
  429. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/_tool_aliases.py +0 -0
  430. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/_unified_registry.py +0 -0
  431. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/backend_registry.py +0 -0
  432. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/base.py +0 -0
  433. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/claude_code.py +0 -0
  434. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/codex_cli.py +0 -0
  435. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/__init__.py +0 -0
  436. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/daytona.py +0 -0
  437. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/docker.py +0 -0
  438. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/e2b.py +0 -0
  439. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/flyio.py +0 -0
  440. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/local.py +0 -0
  441. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/compute/modal_compute.py +0 -0
  442. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/cursor_cli.py +0 -0
  443. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/db_session_adapter.py +0 -0
  444. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/gemini_cli.py +0 -0
  445. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/hosted_agent.py +0 -0
  446. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/local_agent.py +0 -0
  447. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/managed_agents.py +0 -0
  448. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/managed_local.py +0 -0
  449. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/registry.py +0 -0
  450. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/integrations/sandboxed_agent.py +0 -0
  451. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/__init__.py +0 -0
  452. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/executor.py +0 -0
  453. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/models.py +0 -0
  454. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/path_validation.py +0 -0
  455. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/router.py +0 -0
  456. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/server.py +0 -0
  457. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/jobs/store.py +0 -0
  458. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/kanban/__init__.py +0 -0
  459. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/kanban/models.py +0 -0
  460. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/kanban/paths.py +0 -0
  461. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/llm/__init__.py +0 -0
  462. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/llm/gateways.py +0 -0
  463. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/llm/registry.py +0 -0
  464. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/__init__.py +0 -0
  465. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/__init__.py +0 -0
  466. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/agents.py +0 -0
  467. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  468. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  469. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  470. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  471. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/memory.py +0 -0
  472. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/prompts.py +0 -0
  473. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/resources.py +0 -0
  474. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  475. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/auth/__init__.py +0 -0
  476. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/auth/api_key.py +0 -0
  477. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/auth/oauth.py +0 -0
  478. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/auth/oidc.py +0 -0
  479. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/auth/scopes.py +0 -0
  480. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/cli.py +0 -0
  481. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/elicitation.py +0 -0
  482. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/icons.py +0 -0
  483. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/recipe_adapter.py +0 -0
  484. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/recipe_cli.py +0 -0
  485. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/registry.py +0 -0
  486. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/sampling.py +0 -0
  487. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/server.py +0 -0
  488. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/tasks.py +0 -0
  489. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/tool_index.py +0 -0
  490. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/transports/__init__.py +0 -0
  491. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/transports/http_stream.py +0 -0
  492. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/mcp_server/transports/stdio.py +0 -0
  493. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/n8n/__init__.py +0 -0
  494. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/n8n/client.py +0 -0
  495. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/n8n/converter.py +0 -0
  496. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/n8n/preview.py +0 -0
  497. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/n8n/reverse_converter.py +0 -0
  498. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/observability/__init__.py +0 -0
  499. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/observability/hooks.py +0 -0
  500. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/observability/langextract.py +0 -0
  501. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/observability/langfuse.py +0 -0
  502. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/__init__.py +0 -0
  503. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/_valkey_client.py +0 -0
  504. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/config.py +0 -0
  505. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/__init__.py +0 -0
  506. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/_sql_base.py +0 -0
  507. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/_sqlite_base.py +0 -0
  508. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/async_mysql.py +0 -0
  509. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/async_postgres.py +0 -0
  510. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  511. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/base.py +0 -0
  512. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/json_store.py +0 -0
  513. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/mysql.py +0 -0
  514. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/postgres.py +0 -0
  515. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/singlestore.py +0 -0
  516. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/sqlite.py +0 -0
  517. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/supabase.py +0 -0
  518. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/surrealdb.py +0 -0
  519. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  520. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/conversation/turso.py +0 -0
  521. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/factory.py +0 -0
  522. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/hooks/__init__.py +0 -0
  523. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  524. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/__init__.py +0 -0
  525. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/base.py +0 -0
  526. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/cassandra.py +0 -0
  527. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/chroma.py +0 -0
  528. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  529. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  530. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/couchbase.py +0 -0
  531. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/lancedb.py +0 -0
  532. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  533. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  534. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  535. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/milvus.py +0 -0
  536. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  537. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/pgvector.py +0 -0
  538. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/pinecone.py +0 -0
  539. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/qdrant.py +0 -0
  540. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  541. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  542. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  543. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  544. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  545. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/knowledge/weaviate.py +0 -0
  546. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/migrations/__init__.py +0 -0
  547. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/migrations/manager.py +0 -0
  548. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/orchestrator.py +0 -0
  549. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/registry.py +0 -0
  550. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/__init__.py +0 -0
  551. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/async_mongodb.py +0 -0
  552. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/base.py +0 -0
  553. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/dynamodb.py +0 -0
  554. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/firestore.py +0 -0
  555. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/gcs.py +0 -0
  556. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/memory.py +0 -0
  557. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/mongodb.py +0 -0
  558. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/redis.py +0 -0
  559. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/upstash.py +0 -0
  560. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/state/valkey.py +0 -0
  561. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/tests/__init__.py +0 -0
  562. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/tests/test_all_backends.py +0 -0
  563. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/tests/test_registry_lazy.py +0 -0
  564. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  565. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/push/__init__.py +0 -0
  566. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/push/client.py +0 -0
  567. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/push/transports.py +0 -0
  568. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/__init__.py +0 -0
  569. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/bridge.py +0 -0
  570. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/core.py +0 -0
  571. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/exceptions.py +0 -0
  572. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/history.py +0 -0
  573. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/models.py +0 -0
  574. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/operations.py +0 -0
  575. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/policy.py +0 -0
  576. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/registry.py +0 -0
  577. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/runtime.py +0 -0
  578. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/security.py +0 -0
  579. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/serve.py +0 -0
  580. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/recipe/server.py +0 -0
  581. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/__init__.py +0 -0
  582. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/analyzer.py +0 -0
  583. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/applier.py +0 -0
  584. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/judge.py +0 -0
  585. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/plan.py +0 -0
  586. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/player.py +0 -0
  587. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/reader.py +0 -0
  588. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/storage.py +0 -0
  589. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/replay/writer.py +0 -0
  590. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/runtime/__init__.py +0 -0
  591. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/runtime/__main__.py +0 -0
  592. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/__init__.py +0 -0
  593. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/_compat.py +0 -0
  594. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/_registry.py +0 -0
  595. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/_shell.py +0 -0
  596. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/daytona.py +0 -0
  597. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/docker.py +0 -0
  598. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/e2b.py +0 -0
  599. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/modal.py +0 -0
  600. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/sandlock.py +0 -0
  601. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/ssh.py +0 -0
  602. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/sandbox/subprocess.py +0 -0
  603. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/__init__.py +0 -0
  604. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/_base_scheduler.py +0 -0
  605. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/agent_scheduler.py +0 -0
  606. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  607. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/base.py +0 -0
  608. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/blueprint_catalogue.py +0 -0
  609. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/condition_gate.py +0 -0
  610. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/daemon_manager.py +0 -0
  611. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/deployment.py +0 -0
  612. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/executor.py +0 -0
  613. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/run_policy.py +0 -0
  614. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/shared.py +0 -0
  615. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/state_manager.py +0 -0
  616. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/suggestion_engine.py +0 -0
  617. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/scheduler/yaml_loader.py +0 -0
  618. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/security/__init__.py +0 -0
  619. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/security/audit.py +0 -0
  620. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/security/injection.py +0 -0
  621. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/security/protected.py +0 -0
  622. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/setup/__init__.py +0 -0
  623. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/setup/build.py +0 -0
  624. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/setup/post_install.py +0 -0
  625. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/setup/setup_conda_env.py +0 -0
  626. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/setup.py +0 -0
  627. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/__init__.py +0 -0
  628. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/ai_generator.py +0 -0
  629. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/config.py +0 -0
  630. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/dedupe.py +0 -0
  631. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/discovery.py +0 -0
  632. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/drift.py +0 -0
  633. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/engine.py +0 -0
  634. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/enhanced_templates.py +0 -0
  635. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/example_verifier.py +0 -0
  636. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/manifest.py +0 -0
  637. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/models.py +0 -0
  638. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/reports.py +0 -0
  639. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/templates.py +0 -0
  640. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/undo_redo.py +0 -0
  641. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/standardise/validator.py +0 -0
  642. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/__init__.py +0 -0
  643. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/dynamodb_adapter.py +0 -0
  644. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/mongodb_adapter.py +0 -0
  645. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/postgresql_adapter.py +0 -0
  646. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/redis_adapter.py +0 -0
  647. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/storage/valkey_adapter.py +0 -0
  648. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/__init__.py +0 -0
  649. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/batch_source.py +0 -0
  650. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/cli_docs_source.py +0 -0
  651. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/discovery.py +0 -0
  652. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/docs_source.py +0 -0
  653. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/examples_source.py +0 -0
  654. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/executor.py +0 -0
  655. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/models.py +0 -0
  656. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/report_viewer.py +0 -0
  657. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/reporter.py +0 -0
  658. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/suite_runner/runner.py +0 -0
  659. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/__init__.py +0 -0
  660. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/cache.py +0 -0
  661. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/dependency_checker.py +0 -0
  662. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/discovery.py +0 -0
  663. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/loader.py +0 -0
  664. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/registry.py +0 -0
  665. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/resolver.py +0 -0
  666. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/security.py +0 -0
  667. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/tool_override.py +0 -0
  668. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/templates/tools_doctor.py +0 -0
  669. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/__init__.py +0 -0
  670. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/audio.py +0 -0
  671. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/glob_tool.py +0 -0
  672. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/grep_tool.py +0 -0
  673. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/kanban_tools.py +0 -0
  674. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/multiedit.py +0 -0
  675. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/tools/skill_manage.py +0 -0
  676. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/__init__.py +0 -0
  677. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/_ollama.py +0 -0
  678. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/__init__.py +0 -0
  679. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/grader.py +0 -0
  680. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/hook.py +0 -0
  681. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/models.py +0 -0
  682. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/orchestrator.py +0 -0
  683. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/agents/storage.py +0 -0
  684. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/llm/__init__.py +0 -0
  685. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train/llm/trainer.py +0 -0
  686. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train.py +0 -0
  687. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/train_vision.py +0 -0
  688. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/_aiui_datastore.py +0 -0
  689. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/_external_agents.py +0 -0
  690. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/callbacks.py +0 -0
  691. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/components/aicoder.py +0 -0
  692. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/context.py +0 -0
  693. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui/database_config.py +0 -0
  694. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_agents/__init__.py +0 -0
  695. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_agents/default_app.py +0 -0
  696. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_bot/__init__.py +0 -0
  697. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_bot/default_app.py +0 -0
  698. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_chat/__init__.py +0 -0
  699. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_chat/default_app.py +0 -0
  700. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_dashboard/default_app.py +0 -0
  701. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_realtime/__init__.py +0 -0
  702. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/ui_realtime/default_app.py +0 -0
  703. {praisonai-4.6.104 → praisonai-4.6.111}/praisonai/upload_vision.py +0 -0
  704. {praisonai-4.6.104 → praisonai-4.6.111}/setup.cfg +0 -0
  705. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test.py +0 -0
  706. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_agents_playbook.py +0 -0
  707. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_approval_system.py +0 -0
  708. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_basic.py +0 -0
  709. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_cli_features.py +0 -0
  710. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_custom_tools_fix.py +0 -0
  711. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_double_api_fix.py +0 -0
  712. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_n8n_agent_invoke.py +0 -0
  713. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_n8n_cli_feature.py +0 -0
  714. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_n8n_integration.py +0 -0
  715. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_phase2_refactor.py +0 -0
  716. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_recipe.py +0 -0
  717. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_registry.py +0 -0
  718. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_runner.py +0 -0
  719. {praisonai-4.6.104 → praisonai-4.6.111}/tests/test_sandboxed_agent_compatibility.py +0 -0
  720. {praisonai-4.6.104 → praisonai-4.6.111}/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.104
3
+ Version: 4.6.111
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,8 +11,8 @@ 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.104
15
- Requires-Dist: praisonai-code
14
+ Requires-Dist: praisonaiagents>=1.6.111
15
+ Requires-Dist: praisonai-code>=0.0.9
16
16
  Requires-Dist: python-dotenv>=0.19.0
17
17
  Requires-Dist: litellm<2,>=1.83.14
18
18
  Requires-Dist: PyYAML>=6.0
@@ -36,6 +36,12 @@ Requires-Dist: fastapi>=0.115.0; extra == "os"
36
36
  Requires-Dist: uvicorn>=0.34.0; extra == "os"
37
37
  Requires-Dist: PyJWT>=2.8.0; extra == "os"
38
38
  Requires-Dist: sse-starlette>=1.6.0; extra == "os"
39
+ Provides-Extra: gateway
40
+ Requires-Dist: fastapi>=0.115.0; extra == "gateway"
41
+ Requires-Dist: uvicorn>=0.34.0; extra == "gateway"
42
+ Requires-Dist: sse-starlette>=1.6.0; extra == "gateway"
43
+ Requires-Dist: websockets>=12.0; extra == "gateway"
44
+ Requires-Dist: watchdog>=3.0.0; extra == "gateway"
39
45
  Provides-Extra: agentops
40
46
  Requires-Dist: agentops>=0.3.12; extra == "agentops"
41
47
  Provides-Extra: langfuse
@@ -123,6 +129,7 @@ Requires-Dist: fastapi>=0.115.0; extra == "all"
123
129
  Requires-Dist: uvicorn>=0.34.0; extra == "all"
124
130
  Requires-Dist: sse-starlette>=1.6.0; extra == "all"
125
131
  Requires-Dist: websockets>=12.0; extra == "all"
132
+ Requires-Dist: watchdog>=3.0.0; extra == "all"
126
133
  Requires-Dist: tavily-python==0.5.0; extra == "all"
127
134
  Requires-Dist: crawl4ai>=0.7.0; extra == "all"
128
135
  Requires-Dist: playwright>=1.47.0; extra == "all"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.104
3
+ Version: 4.6.111
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,8 +11,8 @@ 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.104
15
- Requires-Dist: praisonai-code
14
+ Requires-Dist: praisonaiagents>=1.6.111
15
+ Requires-Dist: praisonai-code>=0.0.9
16
16
  Requires-Dist: python-dotenv>=0.19.0
17
17
  Requires-Dist: litellm<2,>=1.83.14
18
18
  Requires-Dist: PyYAML>=6.0
@@ -36,6 +36,12 @@ Requires-Dist: fastapi>=0.115.0; extra == "os"
36
36
  Requires-Dist: uvicorn>=0.34.0; extra == "os"
37
37
  Requires-Dist: PyJWT>=2.8.0; extra == "os"
38
38
  Requires-Dist: sse-starlette>=1.6.0; extra == "os"
39
+ Provides-Extra: gateway
40
+ Requires-Dist: fastapi>=0.115.0; extra == "gateway"
41
+ Requires-Dist: uvicorn>=0.34.0; extra == "gateway"
42
+ Requires-Dist: sse-starlette>=1.6.0; extra == "gateway"
43
+ Requires-Dist: websockets>=12.0; extra == "gateway"
44
+ Requires-Dist: watchdog>=3.0.0; extra == "gateway"
39
45
  Provides-Extra: agentops
40
46
  Requires-Dist: agentops>=0.3.12; extra == "agentops"
41
47
  Provides-Extra: langfuse
@@ -123,6 +129,7 @@ Requires-Dist: fastapi>=0.115.0; extra == "all"
123
129
  Requires-Dist: uvicorn>=0.34.0; extra == "all"
124
130
  Requires-Dist: sse-starlette>=1.6.0; extra == "all"
125
131
  Requires-Dist: websockets>=12.0; extra == "all"
132
+ Requires-Dist: watchdog>=3.0.0; extra == "all"
126
133
  Requires-Dist: tavily-python==0.5.0; extra == "all"
127
134
  Requires-Dist: crawl4ai>=0.7.0; extra == "all"
128
135
  Requires-Dist: playwright>=1.47.0; extra == "all"
@@ -74,6 +74,7 @@ praisonai/bots/_dead_targets.py
74
74
  praisonai/bots/_debounce.py
75
75
  praisonai/bots/_defaults.py
76
76
  praisonai/bots/_delivery.py
77
+ praisonai/bots/_delivery_control_store.py
77
78
  praisonai/bots/_discord_approval.py
78
79
  praisonai/bots/_dlq.py
79
80
  praisonai/bots/_durable_adapter.py
@@ -96,6 +97,7 @@ praisonai/bots/_protocol_mixin.py
96
97
  praisonai/bots/_rate_limit.py
97
98
  praisonai/bots/_registry.py
98
99
  praisonai/bots/_relay_adapter.py
100
+ praisonai/bots/_reliability.py
99
101
  praisonai/bots/_reset_policy.py
100
102
  praisonai/bots/_resilience.py
101
103
  praisonai/bots/_run_control.py
@@ -168,13 +170,17 @@ praisonai/claw/default_app.py
168
170
  praisonai/cli/__init__.py
169
171
  praisonai/cli/_paths.py
170
172
  praisonai/cli/_shim.py
173
+ praisonai/cli/_warnings.py
171
174
  praisonai/cli/app.py
172
175
  praisonai/cli/approval_backend.py
173
176
  praisonai/cli/branding.py
174
177
  praisonai/cli/config_loader.py
178
+ praisonai/cli/fallback_schema.py
175
179
  praisonai/cli/langfuse_client.py
176
180
  praisonai/cli/main.py
177
181
  praisonai/cli/schedule_cli.py
182
+ praisonai/cli/schema_provider.py
183
+ praisonai/cli/unified_schema.py
178
184
  praisonai/cli/commands/__init__.py
179
185
  praisonai/cli/commands/acp.py
180
186
  praisonai/cli/commands/agent.py
@@ -1,8 +1,8 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.6.104
5
- praisonai-code
4
+ praisonaiagents>=1.6.111
5
+ praisonai-code>=0.0.9
6
6
  python-dotenv>=0.19.0
7
7
  litellm<2,>=1.83.14
8
8
  PyYAML>=6.0
@@ -32,6 +32,7 @@ fastapi>=0.115.0
32
32
  uvicorn>=0.34.0
33
33
  sse-starlette>=1.6.0
34
34
  websockets>=12.0
35
+ watchdog>=3.0.0
35
36
  tavily-python==0.5.0
36
37
  crawl4ai>=0.7.0
37
38
  playwright>=1.47.0
@@ -152,6 +153,13 @@ boto3>=1.35.0
152
153
  langflow>=1.0.0
153
154
  requests>=2.31.0
154
155
 
156
+ [gateway]
157
+ fastapi>=0.115.0
158
+ uvicorn>=0.34.0
159
+ sse-starlette>=1.6.0
160
+ websockets>=12.0
161
+ watchdog>=3.0.0
162
+
155
163
  [google-adk]
156
164
  praisonai-frameworks[google-adk]>=0.1.8
157
165
  praisonai-tools>=0.1.0
@@ -153,8 +153,8 @@ def __getattr__(name):
153
153
  elif name == 'run_integrated_gateway':
154
154
  from .integration.gateway_host import run_integrated_gateway
155
155
  return run_integrated_gateway
156
- elif name == 'AgentApp':
157
- # Silent alias for AgentOS (backward compatibility)
156
+ elif name in ('AgentOS', 'AgentApp'):
157
+ # AgentApp is a silent alias for AgentOS (backward compatibility)
158
158
  from .app import AgentOS
159
159
  return AgentOS
160
160
  elif name in ('ManagedAgent', 'ManagedAgentIntegration'):
@@ -116,7 +116,12 @@ def _run_typer(argv):
116
116
 
117
117
 
118
118
  def _run_legacy(argv):
119
- """Dispatch to the legacy argparse CLI (prompts, YAML, deprecated flags)."""
119
+ """Dispatch to the legacy argparse CLI (prompts, YAML, deprecated flags).
120
+
121
+ Wrapper-enhanced: multi-framework YAML and ``--framework crewai`` paths load
122
+ framework adapters via ``praisonai_code._wrapper_bridge`` (requires
123
+ ``pip install praisonai``). Typer hot path remains in ``_run_typer``.
124
+ """
120
125
  from praisonai.cli.main import PraisonAI
121
126
 
122
127
  original = sys.argv
@@ -195,7 +195,6 @@ PYTHON_DOC_ORPHAN_EXCLUSIONS = frozenset({
195
195
  DOC_FEATURE_CATEGORY_ALIASES = {
196
196
  'Callbacks': 'Hooks',
197
197
  'Middleware': 'Hooks',
198
- 'Vector Store': 'Knowledge',
199
198
  'Token Management': 'Context Management',
200
199
  'Jobs': 'Workflows',
201
200
  'Chat': 'Agent',
@@ -377,7 +376,9 @@ class DocsParityGenerator:
377
376
  def _calculate_category_parity(
378
377
  self,
379
378
  feature_groups: Dict[str, List[str]],
380
- doc_groups: Dict[str, tuple[List[str], int]]
379
+ doc_groups: Dict[str, tuple[List[str], int]],
380
+ *,
381
+ apply_python_doc_rules: bool = False,
381
382
  ) -> tuple[DocsParitySummary, List[CategoryParity]]:
382
383
  """Calculate parity at category level, grouped by display name."""
383
384
  # Convert prefix-based groups to display-name-based groups
@@ -398,9 +399,10 @@ class DocsParityGenerator:
398
399
  if prefix == 'other':
399
400
  continue
400
401
  display_name = FEATURE_CATEGORIES.get(prefix, prefix.title())
401
- if display_name in PYTHON_DOC_ORPHAN_EXCLUSIONS:
402
- continue
403
- display_name = DOC_FEATURE_CATEGORY_ALIASES.get(display_name, display_name)
402
+ if apply_python_doc_rules:
403
+ if display_name in PYTHON_DOC_ORPHAN_EXCLUSIONS:
404
+ continue
405
+ display_name = DOC_FEATURE_CATEGORY_ALIASES.get(display_name, display_name)
404
406
  if display_name not in result:
405
407
  result[display_name] = ([], 0)
406
408
  existing_names, existing_lines = result[display_name]
@@ -466,7 +468,9 @@ class DocsParityGenerator:
466
468
  doc_groups = self._group_docs(docs)
467
469
 
468
470
  # Calculate parity
469
- summary, categories = self._calculate_category_parity(feature_groups, doc_groups)
471
+ summary, categories = self._calculate_category_parity(
472
+ feature_groups, doc_groups, apply_python_doc_rules=True
473
+ )
470
474
 
471
475
  # Build category lists - stubs are separate from documented
472
476
  documented = [c for c in categories if c.has_features and c.has_docs and not c.is_stub]
@@ -0,0 +1,14 @@
1
+ """Backward-compatibility shim for :mod:`praisonai._framework_availability`.
2
+
3
+ The implementation moved to :mod:`praisonai_code._framework_availability` (C7).
4
+ """
5
+
6
+ import sys as _sys
7
+
8
+ from praisonai._bootstrap import ensure_praisonai_code
9
+
10
+ ensure_praisonai_code()
11
+
12
+ import praisonai_code._framework_availability as _impl
13
+
14
+ _sys.modules[__name__] = _impl
@@ -0,0 +1,14 @@
1
+ """Backward-compatibility shim for :mod:`praisonai._safe_loader`.
2
+
3
+ The implementation moved to :mod:`praisonai_code._safe_loader` (C7).
4
+ """
5
+
6
+ import sys as _sys
7
+
8
+ from praisonai._bootstrap import ensure_praisonai_code
9
+
10
+ ensure_praisonai_code()
11
+
12
+ import praisonai_code._safe_loader as _impl
13
+
14
+ _sys.modules[__name__] = _impl
@@ -40,8 +40,13 @@ class Agent(CoreAgent):
40
40
  super().__init__(*args, cli_backend=cli_backend, **kwargs)
41
41
 
42
42
  def _is_protocol_instance(self, obj) -> bool:
43
- """Check if object appears to be a protocol instance (duck typing)."""
44
- return callable(obj) or hasattr(obj, 'process_turn')
43
+ """Check if object is a pre-resolved CliBackendProtocol instance (duck typing).
44
+
45
+ A CliBackendProtocol instance exposes both ``execute()`` and ``stream()``.
46
+ Factory callables are intentionally NOT treated as protocol instances here
47
+ so that wrapper-level normalization in ``resolve_cli_backend_config`` runs.
48
+ """
49
+ return hasattr(obj, "execute") and hasattr(obj, "stream")
45
50
 
46
51
 
47
52
  # Export the wrapper Agent as the default for import from praisonai
@@ -205,11 +205,15 @@ def sanitize_agent_name_for_autogen_v4(name):
205
205
  return sanitized
206
206
 
207
207
  def _resolve_yaml_cli_backend(cli_backend_config, logger):
208
- """Resolve a YAML ``cli_backend`` field to a CliBackendProtocol instance.
209
- Deprecated wrapper. Use praisonai.cli_backends.resolve_cli_backend_config directly.
210
- """
211
- from praisonai.cli_backends import resolve_cli_backend_config
212
- return resolve_cli_backend_config(cli_backend_config)
208
+ """Resolve a YAML ``cli_backend`` field to a CliBackendProtocol instance."""
209
+ if cli_backend_config is None:
210
+ return None
211
+ try:
212
+ from praisonai.cli_backends import resolve_cli_backend_config
213
+ return resolve_cli_backend_config(cli_backend_config)
214
+ except (ImportError, ValueError, TypeError) as exc:
215
+ logger.warning("Failed to resolve cli_backend %r: %s", cli_backend_config, exc)
216
+ return None
213
217
 
214
218
 
215
219
  class AgentsGenerator:
@@ -235,23 +235,26 @@ async def handle_media_stream(websocket: WebSocket):
235
235
  if openai_ws.open:
236
236
  await openai_ws.close()
237
237
 
238
- async def send_to_twilio():
239
- """Receive events from the OpenAI Realtime API, send audio back to Twilio."""
240
- nonlocal stream_sid
241
- try:
238
+ async def send_to_twilio():
239
+ """Receive events from the OpenAI Realtime API, send audio back to Twilio."""
240
+ nonlocal stream_sid
242
241
  async for openai_message in openai_ws:
243
- response = json.loads(openai_message)
244
- if response['type'] in LOG_EVENT_TYPES:
245
- print(f"Received event: {response['type']}", response)
246
- if response['type'] == 'session.updated':
247
- print("Session updated successfully:", response)
248
-
249
- if response['type'] == 'response.done':
250
- await handle_response_done(response, openai_ws)
251
-
252
- if response['type'] == 'response.audio.delta' and response.get('delta'):
253
- # Audio from OpenAI
254
- try:
242
+ # Isolate per-event failures: a malformed message or an
243
+ # error handling a single event must not escape into
244
+ # asyncio.gather() and cancel the sibling Twilio task,
245
+ # which would drop the live call. Log and keep streaming.
246
+ try:
247
+ response = json.loads(openai_message)
248
+ if response['type'] in LOG_EVENT_TYPES:
249
+ print(f"Received event: {response['type']}", response)
250
+ if response['type'] == 'session.updated':
251
+ print("Session updated successfully:", response)
252
+
253
+ if response['type'] == 'response.done':
254
+ await handle_response_done(response, openai_ws)
255
+
256
+ if response['type'] == 'response.audio.delta' and response.get('delta'):
257
+ # Audio from OpenAI
255
258
  audio_payload = base64.b64encode(base64.b64decode(response['delta'])).decode('utf-8')
256
259
  audio_delta = {
257
260
  "event": "media",
@@ -261,12 +264,10 @@ async def handle_media_stream(websocket: WebSocket):
261
264
  }
262
265
  }
263
266
  await websocket.send_json(audio_delta)
264
- except Exception as e:
265
- print(f"Error processing audio data: {e}")
266
- except Exception as e:
267
- print(f"Error in Sending to Phone: {e}")
267
+ except Exception:
268
+ logger.exception("Error processing OpenAI event; continuing stream")
268
269
 
269
- await asyncio.gather(receive_from_twilio(), send_to_twilio())
270
+ await asyncio.gather(receive_from_twilio(), send_to_twilio())
270
271
  finally:
271
272
  active_connections -= 1
272
273
 
@@ -31,6 +31,7 @@ if TYPE_CHECKING:
31
31
  from ._streaming import StreamingConfig, StreamingMode, DraftStreamer
32
32
  from ._outbox import OutboundQueue, OutboundEntry
33
33
  from ._approval_store import ApprovalStore
34
+ from ._delivery_control_store import DeliveryControlStore
34
35
  from ._delivery import DurableDelivery, deliver_with_retry
35
36
  from ._durable_adapter import DurableAdapterMixin
36
37
  from ._outbound_resilience import OutboundResilienceMixin
@@ -141,6 +142,9 @@ def __getattr__(name: str):
141
142
  if name == "ApprovalStore":
142
143
  from ._approval_store import ApprovalStore
143
144
  return ApprovalStore
145
+ if name == "DeliveryControlStore":
146
+ from ._delivery_control_store import DeliveryControlStore
147
+ return DeliveryControlStore
144
148
  if name == "DurableDelivery":
145
149
  from ._delivery import DurableDelivery
146
150
  return DurableDelivery
@@ -188,6 +192,7 @@ __all__ = [
188
192
  "InboundJournal", "JournalEntry",
189
193
  "OutboundQueue", "OutboundEntry",
190
194
  "ApprovalStore",
195
+ "DeliveryControlStore",
191
196
  "DurableDelivery", "deliver_with_retry", "deliver_chunked",
192
197
  "DurableAdapterMixin",
193
198
  "OutboundResilienceMixin",
@@ -11,7 +11,7 @@ This is an internal module — end users import the concrete classes.
11
11
  from __future__ import annotations
12
12
 
13
13
  import logging
14
- from typing import Set
14
+ from typing import Iterable, Optional, Set, Union
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
@@ -33,6 +33,51 @@ def classify_keyword(text: str) -> str | None:
33
33
  return None
34
34
 
35
35
 
36
+ def normalize_approvers(
37
+ allowed_approvers: Optional[Union[Iterable[str], str]],
38
+ ) -> Optional[Set[str]]:
39
+ """Normalise an allowed-approver allowlist to a ``set`` of ``str`` IDs.
40
+
41
+ Returns ``None`` when *allowed_approvers* is ``None`` (no restriction —
42
+ legacy behaviour). Otherwise returns a set of stringified IDs so
43
+ cross-platform user IDs (int Telegram ids, str Slack/Discord ids) compare
44
+ consistently.
45
+ """
46
+ if allowed_approvers is None:
47
+ return None
48
+ if isinstance(allowed_approvers, str):
49
+ allowed_approvers = allowed_approvers.split(",")
50
+ return {str(a).strip() for a in allowed_approvers if str(a).strip()}
51
+
52
+
53
+ def is_authorized_actor(
54
+ actor: Optional[str],
55
+ allowed_approvers: Optional[Set[str]],
56
+ ) -> bool:
57
+ """Return whether *actor* may resolve an approval.
58
+
59
+ This is the security boundary for chat-native (inline button / keyword
60
+ reply) approvals: when an allowlist is configured, only an actor in it may
61
+ approve or deny a gated tool, so an unauthorised group member's tap/reply
62
+ can never resolve the request.
63
+
64
+ Args:
65
+ actor: The resolving user's ID (may be ``None`` if the channel could
66
+ not determine it).
67
+ allowed_approvers: Normalised allowlist (see :func:`normalize_approvers`).
68
+ ``None`` means no restriction (any actor allowed — legacy
69
+ behaviour). An empty set denies everyone.
70
+
71
+ Returns:
72
+ ``True`` when there is no restriction, or *actor* is in the allowlist;
73
+ ``False`` otherwise (including when *actor* is ``None`` but an
74
+ allowlist is configured).
75
+ """
76
+ if allowed_approvers is None:
77
+ return True
78
+ return actor is not None and str(actor) in allowed_approvers
79
+
80
+
36
81
  async def classify_with_llm(
37
82
  text: str,
38
83
  tool_name: str,
@@ -362,6 +362,15 @@ class GatewayConfigSchema(BaseModel):
362
362
  # Routing and daemon config
363
363
  routing: Optional[RoutingConfigSchema] = None
364
364
  daemon: Optional[DaemonConfigSchema] = None
365
+
366
+ # Gateway server settings (host/port, drain_timeout, admission control,
367
+ # etc.) and inbound trigger hooks. These are read by
368
+ # ``gateway/server.py::load_gateway_config`` / ``_apply_hooks_from_config``
369
+ # rather than modelled field-by-field here; kept permissive so a real
370
+ # ``gateway.yaml`` with a top-level ``gateway:``/``hooks:`` block validates
371
+ # through this single schema instead of being rejected. See issue #2585.
372
+ gateway: Optional[Dict[str, Any]] = None
373
+ hooks: Optional[List[Dict[str, Any]]] = None
365
374
 
366
375
  @model_validator(mode="after")
367
376
  def normalize_and_validate(self):
@@ -390,8 +399,29 @@ class GatewayConfigSchema(BaseModel):
390
399
  "(telegram, discord, slack, whatsapp) to your config"
391
400
  )
392
401
 
393
- # Validate platform names
394
- valid_platforms = {"telegram", "discord", "slack", "whatsapp", "email", "agentmail", "linear"}
402
+ # Validate platform names against the platform registry (single source
403
+ # of truth). This includes built-in platforms, entry-point discovered
404
+ # channels (``praisonai.channels`` / ``praisonai.bots``), and any
405
+ # channel registered at runtime via ``register_platform()``.
406
+ try:
407
+ from ._registry import list_platforms
408
+ valid_platforms = set(list_platforms())
409
+ except Exception:
410
+ import logging
411
+ logging.getLogger(__name__).debug(
412
+ "Platform registry unavailable; falling back to built-in "
413
+ "platform list.", exc_info=True
414
+ )
415
+ # Fall back to the built-in set (single source of truth) if the
416
+ # registry is unavailable.
417
+ try:
418
+ from ._registry import _BUILTIN_PLATFORMS
419
+ valid_platforms = set(_BUILTIN_PLATFORMS)
420
+ except Exception:
421
+ valid_platforms = {
422
+ "telegram", "discord", "slack", "whatsapp",
423
+ "email", "agentmail", "linear",
424
+ }
395
425
  for name, channel in self.channels.items():
396
426
  platform = (channel.platform or name).lower()
397
427
  if platform not in valid_platforms:
@@ -43,7 +43,10 @@ import threading
43
43
  import time
44
44
  from dataclasses import dataclass
45
45
  from pathlib import Path
46
- from typing import Dict, List, Optional, Tuple
46
+ from typing import TYPE_CHECKING, Dict, List, Optional, Tuple
47
+
48
+ if TYPE_CHECKING:
49
+ from ._delivery_control_store import DeliveryControlStore
47
50
 
48
51
  logger = logging.getLogger(__name__)
49
52
 
@@ -100,17 +103,33 @@ class DeadTargetRegistry:
100
103
  max_size: int = _DEFAULT_MAX_SIZE,
101
104
  ttl_seconds: int = _DEFAULT_TTL_SECONDS,
102
105
  reprobe_seconds: int = _DEFAULT_REPROBE_SECONDS,
106
+ store: Optional["DeliveryControlStore"] = None,
103
107
  ) -> None:
104
108
  state_dir = Path.home() / ".praisonai" / "state"
105
- self._persist_path = Path(
106
- persist_path or (state_dir / "dead_targets.json")
107
- ).expanduser()
108
109
  self.max_size = int(max_size)
109
110
  self.ttl_seconds = int(ttl_seconds)
110
111
  self.reprobe_seconds = int(reprobe_seconds)
111
112
  self._lock = threading.Lock()
112
113
  # (platform, channel_id) -> DeadTarget
113
114
  self._dead: Dict[Tuple[str, str], DeadTarget] = {}
115
+ # Shared SQLite store: when provided, dead targets are stored as rows
116
+ # (atomic upsert) that survive restart and are correct across workers,
117
+ # instead of the per-process in-memory dict + whole-file JSON rewrite
118
+ # (issue #2579). Single-process gateways keep the JSON path (default).
119
+ self._store = store
120
+ if store is not None:
121
+ # The store's dead-target TTL/bound sweeps are table-wide, so every
122
+ # registry sharing one store must agree on ``ttl_seconds`` /
123
+ # ``max_size``. Register this registry's bounds; a later registry
124
+ # attaching to the same store with divergent settings fails loudly
125
+ # instead of silently pruning this registry's suppressions
126
+ # (Greptile P1, issue #2579).
127
+ store.register_dead_config(self.ttl_seconds, self.max_size)
128
+ self._persist_path = None
129
+ return
130
+ self._persist_path = Path(
131
+ persist_path or (state_dir / "dead_targets.json")
132
+ ).expanduser()
114
133
  self._load()
115
134
 
116
135
  # ── Helpers ─────────────────────────────────────────────────────
@@ -197,6 +216,14 @@ class DeadTargetRegistry:
197
216
  def is_dead(self, platform: str, channel_id: str) -> bool:
198
217
  """Return True if the target is currently suppressed as dead."""
199
218
  key = self._key(platform, channel_id)
219
+ if self._store is not None:
220
+ ts = self._store.dead_get_ts(key[0], key[1])
221
+ if ts is None:
222
+ return False
223
+ if self.ttl_seconds > 0 and ts < time.time() - self.ttl_seconds:
224
+ self._store.dead_clear(key[0], key[1])
225
+ return False
226
+ return True
200
227
  with self._lock:
201
228
  entry = self._dead.get(key)
202
229
  if entry is None:
@@ -221,6 +248,11 @@ class DeadTargetRegistry:
221
248
  if self.reprobe_seconds <= 0:
222
249
  return False
223
250
  key = self._key(platform, channel_id)
251
+ if self._store is not None:
252
+ ts = self._store.dead_get_ts(key[0], key[1])
253
+ if ts is None:
254
+ return False
255
+ return ts < time.time() - self.reprobe_seconds
224
256
  with self._lock:
225
257
  entry = self._dead.get(key)
226
258
  if entry is None:
@@ -230,6 +262,18 @@ class DeadTargetRegistry:
230
262
  def mark_dead(self, platform: str, channel_id: str, reason: str) -> None:
231
263
  """Record a confirmed-permanent failure, suppressing future sends."""
232
264
  key = self._key(platform, channel_id)
265
+ if self._store is not None:
266
+ already = self._store.dead_get_ts(key[0], key[1]) is not None
267
+ self._store.dead_mark(key[0], key[1], str(reason))
268
+ self._store.dead_enforce_bound(self.max_size)
269
+ if not already:
270
+ logger.warning(
271
+ "DeadTargetRegistry: suppressing dead target %s:%s (%s)",
272
+ key[0],
273
+ key[1],
274
+ reason,
275
+ )
276
+ return
233
277
  with self._lock:
234
278
  already = key in self._dead
235
279
  self._dead[key] = DeadTarget(
@@ -248,6 +292,16 @@ class DeadTargetRegistry:
248
292
  def clear(self, platform: str, channel_id: str) -> None:
249
293
  """Un-suppress a target. Called on every successful send (self-healing)."""
250
294
  key = self._key(platform, channel_id)
295
+ if self._store is not None:
296
+ if self._store.dead_get_ts(key[0], key[1]) is None:
297
+ return
298
+ self._store.dead_clear(key[0], key[1])
299
+ logger.info(
300
+ "DeadTargetRegistry: target %s:%s recovered — suppression cleared",
301
+ key[0],
302
+ key[1],
303
+ )
304
+ return
251
305
  with self._lock:
252
306
  if key not in self._dead:
253
307
  return
@@ -261,6 +315,13 @@ class DeadTargetRegistry:
261
315
 
262
316
  def list_dead(self) -> List[DeadTarget]:
263
317
  """Return a snapshot of currently-dead targets (expired ones pruned)."""
318
+ if self._store is not None:
319
+ if self.ttl_seconds > 0:
320
+ self._store.dead_expire(time.time() - self.ttl_seconds)
321
+ return [
322
+ DeadTarget(platform=p, channel_id=c, reason=r, ts=t)
323
+ for (p, c, r, t) in self._store.dead_list()
324
+ ]
264
325
  with self._lock:
265
326
  if self._evict_expired_locked():
266
327
  self._save_locked()
@@ -268,6 +329,10 @@ class DeadTargetRegistry:
268
329
 
269
330
  def size(self) -> int:
270
331
  """Number of currently-suppressed targets (expired ones pruned)."""
332
+ if self._store is not None:
333
+ if self.ttl_seconds > 0:
334
+ self._store.dead_expire(time.time() - self.ttl_seconds)
335
+ return self._store.dead_count()
271
336
  with self._lock:
272
337
  if self._evict_expired_locked():
273
338
  self._save_locked()