PraisonAI 4.6.72__tar.gz → 4.6.75__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 (885) hide show
  1. {praisonai-4.6.72 → praisonai-4.6.75}/PKG-INFO +2 -2
  2. {praisonai-4.6.72 → praisonai-4.6.75}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.72 → praisonai-4.6.75}/PraisonAI.egg-info/SOURCES.txt +5 -1
  4. {praisonai-4.6.72 → praisonai-4.6.75}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_lockmap.py +45 -27
  6. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/agents_generator.py +3 -14
  7. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_commands.py +261 -0
  8. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_config_schema.py +41 -0
  9. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_protocol_mixin.py +31 -0
  10. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_run_control.py +39 -5
  11. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_session.py +172 -4
  12. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/agentmail.py +1 -14
  13. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/discord.py +36 -11
  14. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/email.py +1 -14
  15. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/slack.py +34 -11
  16. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/telegram.py +71 -13
  17. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/app.py +14 -91
  18. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/config.py +78 -24
  19. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/init.py +6 -2
  20. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/run.py +286 -6
  21. praisonai-4.6.75/praisonai/cli/commands/schedule.py +529 -0
  22. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/ui.py +1 -62
  23. praisonai-4.6.75/praisonai/cli/configuration/config.schema.json +57 -0
  24. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/configuration/resolver.py +145 -5
  25. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/custom_definitions.py +159 -2
  26. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/output/__init__.py +10 -0
  27. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/output/console.py +8 -1
  28. praisonai-4.6.75/praisonai/cli/output/event_bridge.py +191 -0
  29. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/config/validator.py +1 -4
  30. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/framework_adapters/base.py +0 -24
  31. praisonai-4.6.75/praisonai/framework_adapters/crewai_adapter.py +183 -0
  32. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/framework_adapters/praisonai_adapter.py +28 -16
  33. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/server.py +233 -38
  34. praisonai-4.6.75/praisonai/observability/hooks.py +150 -0
  35. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/sandlock.py +210 -162
  36. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/__init__.py +8 -0
  37. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/_base_scheduler.py +138 -1
  38. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/agent_scheduler.py +139 -79
  39. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/async_agent_scheduler.py +43 -100
  40. praisonai-4.6.75/praisonai/scheduler/blueprint_catalogue.py +364 -0
  41. praisonai-4.6.75/praisonai/scheduler/condition_gate.py +111 -0
  42. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/executor.py +79 -0
  43. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/shared.py +43 -6
  44. praisonai-4.6.75/praisonai/scheduler/suggestion_engine.py +123 -0
  45. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/yaml_loader.py +1 -1
  46. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/storage/__init__.py +10 -1
  47. praisonai-4.6.75/praisonai/tool_registry.py +118 -0
  48. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/tool_resolver.py +64 -56
  49. praisonai-4.6.75/praisonai/version.py +1 -0
  50. {praisonai-4.6.72 → praisonai-4.6.75}/pyproject.toml +4 -1
  51. praisonai-4.6.72/praisonai/cli/commands/schedule.py +0 -209
  52. praisonai-4.6.72/praisonai/framework_adapters/crewai_adapter.py +0 -172
  53. praisonai-4.6.72/praisonai/observability/hooks.py +0 -81
  54. praisonai-4.6.72/praisonai/test.py +0 -113
  55. praisonai-4.6.72/praisonai/tool_registry.py +0 -197
  56. praisonai-4.6.72/praisonai/version.py +0 -1
  57. {praisonai-4.6.72 → praisonai-4.6.75}/PraisonAI.egg-info/dependency_links.txt +0 -0
  58. {praisonai-4.6.72 → praisonai-4.6.75}/PraisonAI.egg-info/entry_points.txt +0 -0
  59. {praisonai-4.6.72 → praisonai-4.6.75}/PraisonAI.egg-info/top_level.txt +0 -0
  60. {praisonai-4.6.72 → praisonai-4.6.75}/README.md +0 -0
  61. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/__init__.py +0 -0
  62. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/__main__.py +0 -0
  63. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_approval_spec.py +0 -0
  64. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_async_bridge.py +0 -0
  65. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/__init__.py +0 -0
  66. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/api_md.py +0 -0
  67. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/__init__.py +0 -0
  68. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/docs_extractor.py +0 -0
  69. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/docs_generator.py +0 -0
  70. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/generator.py +0 -0
  71. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  72. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/python_extractor.py +0 -0
  73. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  74. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/rust_extractor.py +0 -0
  75. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  76. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  77. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  78. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_entrypoint.py +0 -0
  79. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_framework_availability.py +0 -0
  80. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_lazy_cache.py +0 -0
  81. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_logging.py +0 -0
  82. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_registry.py +0 -0
  83. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/_safe_loader.py +0 -0
  84. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/acp/__init__.py +0 -0
  85. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/acp/config.py +0 -0
  86. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/acp/safe_edit.py +0 -0
  87. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/acp/server.py +0 -0
  88. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/acp/session.py +0 -0
  89. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/adapters/__init__.py +0 -0
  90. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/adapters/readers.py +0 -0
  91. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/adapters/rerankers.py +0 -0
  92. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/adapters/retrievers.py +0 -0
  93. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/adapters/vector_stores.py +0 -0
  94. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/agent.py +0 -0
  95. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/agent_scheduler.py +0 -0
  96. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/api/agent_invoke.py +0 -0
  97. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/api/call.py +0 -0
  98. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/app/__init__.py +0 -0
  99. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/app/agentos.py +0 -0
  100. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/async_agent_scheduler.py +0 -0
  101. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/audit/__init__.py +0 -0
  102. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/audit/agent_centric.py +0 -0
  103. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/auto.py +0 -0
  104. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/__init__.py +0 -0
  105. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_ack.py +0 -0
  106. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_approval.py +0 -0
  107. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_approval_base.py +0 -0
  108. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_auth.py +0 -0
  109. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_chunk.py +0 -0
  110. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_debounce.py +0 -0
  111. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_defaults.py +0 -0
  112. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_delivery.py +0 -0
  113. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_discord_approval.py +0 -0
  114. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_dlq.py +0 -0
  115. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_durable_adapter.py +0 -0
  116. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_email_utils.py +0 -0
  117. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_http_approval.py +0 -0
  118. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_identity.py +0 -0
  119. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_ingress.py +0 -0
  120. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_mirror.py +0 -0
  121. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_outbox.py +0 -0
  122. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_pairing_ui.py +0 -0
  123. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_presentation_approval.py +0 -0
  124. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_presentation_renderer.py +0 -0
  125. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_rate_limit.py +0 -0
  126. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_registry.py +0 -0
  127. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_reset_policy.py +0 -0
  128. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_resilience.py +0 -0
  129. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_slack_approval.py +0 -0
  130. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_status.py +0 -0
  131. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_streaming.py +0 -0
  132. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_telegram_approval.py +0 -0
  133. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_typing.py +0 -0
  134. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_typing_indicator.py +0 -0
  135. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_unknown_user.py +0 -0
  136. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_webhook_approval.py +0 -0
  137. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  138. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/bot.py +0 -0
  139. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/botos.py +0 -0
  140. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/delivery.py +0 -0
  141. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/linear.py +0 -0
  142. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/media.py +0 -0
  143. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/webhook_security.py +0 -0
  144. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/bots/whatsapp.py +0 -0
  145. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/__init__.py +0 -0
  146. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/agent.py +0 -0
  147. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/benchmark.py +0 -0
  148. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/cdp_agent.py +0 -0
  149. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/cdp_utils.py +0 -0
  150. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/cli.py +0 -0
  151. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/diagnostics.py +0 -0
  152. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/launcher.py +0 -0
  153. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/playwright_agent.py +0 -0
  154. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/profiling.py +0 -0
  155. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/protocol.py +0 -0
  156. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/report.py +0 -0
  157. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/server.py +0 -0
  158. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/sessions.py +0 -0
  159. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/browser/video.py +0 -0
  160. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/__init__.py +0 -0
  161. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/a2a.py +0 -0
  162. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/assistants.py +0 -0
  163. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/audio.py +0 -0
  164. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/batches.py +0 -0
  165. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/completions.py +0 -0
  166. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/container_files.py +0 -0
  167. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/containers.py +0 -0
  168. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/embeddings.py +0 -0
  169. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/files.py +0 -0
  170. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/fine_tuning.py +0 -0
  171. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/guardrails.py +0 -0
  172. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/images.py +0 -0
  173. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/mcp.py +0 -0
  174. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/messages.py +0 -0
  175. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/moderations.py +0 -0
  176. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/ocr.py +0 -0
  177. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/passthrough.py +0 -0
  178. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/rag.py +0 -0
  179. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/realtime.py +0 -0
  180. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/rerank.py +0 -0
  181. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/responses.py +0 -0
  182. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/search.py +0 -0
  183. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/skills.py +0 -0
  184. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/vector_store_files.py +0 -0
  185. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/vector_stores.py +0 -0
  186. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/capabilities/videos.py +0 -0
  187. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/claw/__init__.py +0 -0
  188. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/claw/default_app.py +0 -0
  189. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/__init__.py +0 -0
  190. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/_paths.py +0 -0
  191. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/_warnings.py +0 -0
  192. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/approval_backend.py +0 -0
  193. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/branding.py +0 -0
  194. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/__init__.py +0 -0
  195. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/acp.py +0 -0
  196. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/agent.py +0 -0
  197. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/agents.py +0 -0
  198. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/app.py +0 -0
  199. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/audit.py +0 -0
  200. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/auth.py +0 -0
  201. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/batch.py +0 -0
  202. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/benchmark.py +0 -0
  203. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/bot.py +0 -0
  204. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/browser.py +0 -0
  205. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/call.py +0 -0
  206. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/chat.py +0 -0
  207. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/claw.py +0 -0
  208. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/code.py +0 -0
  209. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/command.py +0 -0
  210. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/commit.py +0 -0
  211. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/completion.py +0 -0
  212. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/context.py +0 -0
  213. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/dashboard.py +0 -0
  214. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/debug.py +0 -0
  215. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/deploy.py +0 -0
  216. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/diag.py +0 -0
  217. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/docs.py +0 -0
  218. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/doctor.py +0 -0
  219. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/endpoints.py +0 -0
  220. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/environment.py +0 -0
  221. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/eval.py +0 -0
  222. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/examples.py +0 -0
  223. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/flow.py +0 -0
  224. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/gateway.py +0 -0
  225. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/github.py +0 -0
  226. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/hooks.py +0 -0
  227. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/identity.py +0 -0
  228. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/kanban.py +0 -0
  229. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/knowledge.py +0 -0
  230. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/langextract.py +0 -0
  231. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/langfuse.py +0 -0
  232. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/loop.py +0 -0
  233. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/lsp.py +0 -0
  234. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/managed.py +0 -0
  235. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/mcp.py +0 -0
  236. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/memory.py +0 -0
  237. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/mint_link.py +0 -0
  238. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/models.py +0 -0
  239. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/n8n.py +0 -0
  240. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/obs.py +0 -0
  241. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/onboard.py +0 -0
  242. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/package.py +0 -0
  243. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/pairing.py +0 -0
  244. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/paths.py +0 -0
  245. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/permissions.py +0 -0
  246. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/plugins.py +0 -0
  247. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/port.py +0 -0
  248. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/profile.py +0 -0
  249. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/publish.py +0 -0
  250. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/rag.py +0 -0
  251. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/realtime.py +0 -0
  252. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/recipe.py +0 -0
  253. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/registry.py +0 -0
  254. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/replay.py +0 -0
  255. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/research.py +0 -0
  256. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/retrieval.py +0 -0
  257. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/rules.py +0 -0
  258. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/sandbox.py +0 -0
  259. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/serve.py +0 -0
  260. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/session.py +0 -0
  261. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/setup.py +0 -0
  262. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/skills.py +0 -0
  263. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/standardise.py +0 -0
  264. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/templates.py +0 -0
  265. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/test.py +0 -0
  266. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/todo.py +0 -0
  267. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/tools.py +0 -0
  268. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/traces.py +0 -0
  269. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/tracker.py +0 -0
  270. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/train.py +0 -0
  271. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/up.py +0 -0
  272. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/validate.py +0 -0
  273. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/version.py +0 -0
  274. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/commands/workflow.py +0 -0
  275. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/config_loader.py +0 -0
  276. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/configuration/__init__.py +0 -0
  277. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/configuration/credentials.py +0 -0
  278. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/configuration/loader.py +0 -0
  279. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/configuration/paths.py +0 -0
  280. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/configuration/schema.py +0 -0
  281. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/execution/__init__.py +0 -0
  282. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/execution/core.py +0 -0
  283. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/execution/profiler.py +0 -0
  284. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/execution/request.py +0 -0
  285. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/execution/result.py +0 -0
  286. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/fallback_schema.py +0 -0
  287. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/__init__.py +0 -0
  288. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/_endpoint_registry.py +0 -0
  289. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/_search_registry.py +0 -0
  290. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/acp.py +0 -0
  291. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/action_orchestrator.py +0 -0
  292. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/agent_scheduler.py +0 -0
  293. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/agent_tools.py +0 -0
  294. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/agents.py +0 -0
  295. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/approval.py +0 -0
  296. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/at_mentions.py +0 -0
  297. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/audit_cli.py +0 -0
  298. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/auto_memory.py +0 -0
  299. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/auto_mode.py +0 -0
  300. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/autonomy_mode.py +0 -0
  301. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/background.py +0 -0
  302. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/base.py +0 -0
  303. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/benchmark.py +0 -0
  304. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/bots_cli.py +0 -0
  305. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/capabilities.py +0 -0
  306. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/checkpoints.py +0 -0
  307. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/cli_profiler.py +0 -0
  308. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/code_intelligence.py +0 -0
  309. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/compaction.py +0 -0
  310. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/compare.py +0 -0
  311. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/config_hierarchy.py +0 -0
  312. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/context_manager.py +0 -0
  313. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/cost_tracker.py +0 -0
  314. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/csv_test_runner.py +0 -0
  315. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/debug.py +0 -0
  316. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/deploy.py +0 -0
  317. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/diag.py +0 -0
  318. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/display_jsonl.py +0 -0
  319. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/__init__.py +0 -0
  320. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  321. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  322. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  323. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  324. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  325. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  326. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
  327. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  328. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  329. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  330. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  331. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  332. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  333. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  334. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  335. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/runtime_checks.py +0 -0
  336. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
  337. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  338. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  339. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  340. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  341. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/engine.py +0 -0
  342. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/formatters.py +0 -0
  343. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/handler.py +0 -0
  344. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/models.py +0 -0
  345. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/doctor/registry.py +0 -0
  346. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/endpoints.py +0 -0
  347. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/eval.py +0 -0
  348. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/examples.py +0 -0
  349. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/external_agents.py +0 -0
  350. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/fast_context.py +0 -0
  351. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/file_history.py +0 -0
  352. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/flow_display.py +0 -0
  353. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/gateway.py +0 -0
  354. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/git_attribution.py +0 -0
  355. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/git_integration.py +0 -0
  356. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/guardrail.py +0 -0
  357. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/handoff.py +0 -0
  358. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/hooks.py +0 -0
  359. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/hybrid_workflow.py +0 -0
  360. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/image.py +0 -0
  361. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/interactive_core_headless.py +0 -0
  362. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/interactive_runtime.py +0 -0
  363. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/interactive_test_harness.py +0 -0
  364. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/interactive_tools.py +0 -0
  365. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/interactive_tui.py +0 -0
  366. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/job_workflow.py +0 -0
  367. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/jobs.py +0 -0
  368. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/knowledge.py +0 -0
  369. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/knowledge_cli.py +0 -0
  370. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/lite.py +0 -0
  371. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/logs.py +0 -0
  372. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/lsp_cli.py +0 -0
  373. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  374. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/mcp.py +0 -0
  375. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/message_queue.py +0 -0
  376. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/metrics.py +0 -0
  377. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/migrate.py +0 -0
  378. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/migration_flow.py +0 -0
  379. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/migration_spec.py +0 -0
  380. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/n8n.py +0 -0
  381. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/observability.py +0 -0
  382. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/ollama.py +0 -0
  383. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/onboard.py +0 -0
  384. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/output_modes.py +0 -0
  385. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/output_style.py +0 -0
  386. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/package.py +0 -0
  387. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/performance.py +0 -0
  388. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/persistence.py +0 -0
  389. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/plugin_cli.py +0 -0
  390. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/profile.py +0 -0
  391. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/profiler/__init__.py +0 -0
  392. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/profiler/core.py +0 -0
  393. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/profiler/optimizations.py +0 -0
  394. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/profiler/suite.py +0 -0
  395. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/profiling.py +0 -0
  396. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/queue/__init__.py +0 -0
  397. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/queue/manager.py +0 -0
  398. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/queue/models.py +0 -0
  399. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/queue/persistence.py +0 -0
  400. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/queue/scheduler.py +0 -0
  401. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/queue/worker.py +0 -0
  402. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/recipe.py +0 -0
  403. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/recipe_creator.py +0 -0
  404. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/recipe_optimizer.py +0 -0
  405. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/recipe_prompts.py +0 -0
  406. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/recipes.py +0 -0
  407. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/registry.py +0 -0
  408. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/repo_map.py +0 -0
  409. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/router.py +0 -0
  410. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/safe_shell.py +0 -0
  411. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/sandbox_cli.py +0 -0
  412. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/sandbox_executor.py +0 -0
  413. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/sdk_knowledge.py +0 -0
  414. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/serve.py +0 -0
  415. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/session.py +0 -0
  416. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/setup/__init__.py +0 -0
  417. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/setup/handler.py +0 -0
  418. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/setup/templates.py +0 -0
  419. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/skills.py +0 -0
  420. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/slash_commands.py +0 -0
  421. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/telemetry.py +0 -0
  422. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/templates.py +0 -0
  423. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/thinking.py +0 -0
  424. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/todo.py +0 -0
  425. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tools.py +0 -0
  426. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/__init__.py +0 -0
  427. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/app.py +0 -0
  428. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/cli.py +0 -0
  429. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/config.py +0 -0
  430. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/debug.py +0 -0
  431. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/events.py +0 -0
  432. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/mock_provider.py +0 -0
  433. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/orchestrator.py +0 -0
  434. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  435. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/help.py +0 -0
  436. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/main.py +0 -0
  437. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/queue.py +0 -0
  438. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/session.py +0 -0
  439. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/settings.py +0 -0
  440. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/session_store.py +0 -0
  441. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  442. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  443. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  444. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  445. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  446. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  447. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/status.py +0 -0
  448. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  449. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/wizard.py +0 -0
  450. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/workflow.py +0 -0
  451. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/features/yaml_utils.py +0 -0
  452. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/__init__.py +0 -0
  453. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/async_tui.py +0 -0
  454. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/config.py +0 -0
  455. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/core.py +0 -0
  456. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/events.py +0 -0
  457. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  458. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  459. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  460. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/praison_io.py +0 -0
  461. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/repl.py +0 -0
  462. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/split_tui.py +0 -0
  463. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/interactive/tui_app.py +0 -0
  464. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/langfuse_client.py +0 -0
  465. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/main.py +0 -0
  466. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/schedule_cli.py +0 -0
  467. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/schema_provider.py +0 -0
  468. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/session/__init__.py +0 -0
  469. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/session/unified.py +0 -0
  470. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/state/__init__.py +0 -0
  471. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/state/identifiers.py +0 -0
  472. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/state/project_sessions.py +0 -0
  473. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/state/sessions.py +0 -0
  474. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/ui/__init__.py +0 -0
  475. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/ui/config.py +0 -0
  476. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/ui/events.py +0 -0
  477. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/ui/mg_backend.py +0 -0
  478. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/ui/plain.py +0 -0
  479. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/ui/rich_backend.py +0 -0
  480. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/unified_schema.py +0 -0
  481. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/utils/env_utils.py +0 -0
  482. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli/utils/project.py +0 -0
  483. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli_backends/__init__.py +0 -0
  484. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli_backends/claude.py +0 -0
  485. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/cli_backends/registry.py +0 -0
  486. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/__init__.py +0 -0
  487. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/agent_tools.py +0 -0
  488. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/diff/__init__.py +0 -0
  489. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/diff/diff_strategy.py +0 -0
  490. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/tools/__init__.py +0 -0
  491. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/tools/apply_diff.py +0 -0
  492. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/tools/execute_command.py +0 -0
  493. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/tools/list_files.py +0 -0
  494. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/tools/read_file.py +0 -0
  495. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/tools/search_replace.py +0 -0
  496. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/tools/write_file.py +0 -0
  497. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/utils/__init__.py +0 -0
  498. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/utils/file_utils.py +0 -0
  499. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/utils/ignore_utils.py +0 -0
  500. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/code/utils/text_utils.py +0 -0
  501. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/config/__init__.py +0 -0
  502. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/config/schema.py +0 -0
  503. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/context/__init__.py +0 -0
  504. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/context/_storage_path.py +0 -0
  505. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/context/artifact_store.py +0 -0
  506. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/context/config.py +0 -0
  507. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/context/history_store.py +0 -0
  508. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/context/queue.py +0 -0
  509. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/context/setup.py +0 -0
  510. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/context/terminal_logger.py +0 -0
  511. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/daemon/__init__.py +0 -0
  512. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/daemon/launchd.py +0 -0
  513. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/daemon/systemd.py +0 -0
  514. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/daemon/windows.py +0 -0
  515. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/db/__init__.py +0 -0
  516. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/db/adapter.py +0 -0
  517. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/__init__.py +0 -0
  518. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/api.py +0 -0
  519. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/docker.py +0 -0
  520. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/doctor.py +0 -0
  521. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/main.py +0 -0
  522. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/models.py +0 -0
  523. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/providers/__init__.py +0 -0
  524. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/providers/_registry.py +0 -0
  525. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/providers/aws.py +0 -0
  526. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/providers/azure.py +0 -0
  527. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/providers/base.py +0 -0
  528. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/providers/gcp.py +0 -0
  529. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/deploy/schema.py +0 -0
  530. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/docs_runner/__init__.py +0 -0
  531. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/docs_runner/classifier.py +0 -0
  532. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/docs_runner/executor.py +0 -0
  533. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/docs_runner/extractor.py +0 -0
  534. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/docs_runner/reporter.py +0 -0
  535. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/docs_runner/runner.py +0 -0
  536. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/docs_runner/workspace.py +0 -0
  537. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/__init__.py +0 -0
  538. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/a2u_server.py +0 -0
  539. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/discovery.py +0 -0
  540. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/providers/__init__.py +0 -0
  541. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/providers/a2a.py +0 -0
  542. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/providers/a2u.py +0 -0
  543. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/providers/agents_api.py +0 -0
  544. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/providers/base.py +0 -0
  545. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/providers/mcp.py +0 -0
  546. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/providers/openai_compat.py +0 -0
  547. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/providers/recipe.py +0 -0
  548. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  549. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/registry.py +0 -0
  550. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/endpoints/server.py +0 -0
  551. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/flow/__init__.py +0 -0
  552. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/flow/client.py +0 -0
  553. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  554. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  555. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/flow/components/__init__.py +0 -0
  556. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/flow/converter.py +0 -0
  557. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/flow/helpers.py +0 -0
  558. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/framework_adapters/__init__.py +0 -0
  559. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  560. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/framework_adapters/registry.py +0 -0
  561. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/framework_adapters/validators.py +0 -0
  562. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/__init__.py +0 -0
  563. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/auth.py +0 -0
  564. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/client.py +0 -0
  565. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/cookie_auth.py +0 -0
  566. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/exec_approval.py +0 -0
  567. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/gateway_approval.py +0 -0
  568. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/health_monitor.py +0 -0
  569. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/home_channels.py +0 -0
  570. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/kanban_dispatcher.py +0 -0
  571. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/magic_link.py +0 -0
  572. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/origin_check.py +0 -0
  573. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/pairing.py +0 -0
  574. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/pairing_routes.py +0 -0
  575. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/port_utils.py +0 -0
  576. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/push_channels.py +0 -0
  577. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/push_delivery.py +0 -0
  578. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/push_polling.py +0 -0
  579. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/push_presence.py +0 -0
  580. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/rate_limiter.py +0 -0
  581. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/redis_pubsub.py +0 -0
  582. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/supervisor.py +0 -0
  583. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/gateway/unicode_utils.py +0 -0
  584. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/inbuilt_tools/__init__.py +0 -0
  585. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  586. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/inc/__init__.py +0 -0
  587. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/inc/config.py +0 -0
  588. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/inc/models.py +0 -0
  589. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/__init__.py +0 -0
  590. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/bridges/__init__.py +0 -0
  591. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  592. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/bridges/hooks_query.py +0 -0
  593. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  594. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/bridges/schedules_runner.py +0 -0
  595. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/bridges/usage_bridge.py +0 -0
  596. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/bridges/workflows_service.py +0 -0
  597. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/context_files.py +0 -0
  598. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/gateway_host.py +0 -0
  599. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/host_app.py +0 -0
  600. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/pages/__init__.py +0 -0
  601. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/pages/bot_health.py +0 -0
  602. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integration/pages/workflow_runs.py +0 -0
  603. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/__init__.py +0 -0
  604. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/_session_info.py +0 -0
  605. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/_tool_aliases.py +0 -0
  606. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/_unified_registry.py +0 -0
  607. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/base.py +0 -0
  608. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/claude_code.py +0 -0
  609. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/codex_cli.py +0 -0
  610. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/compute/__init__.py +0 -0
  611. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/compute/daytona.py +0 -0
  612. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/compute/docker.py +0 -0
  613. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/compute/e2b.py +0 -0
  614. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/compute/flyio.py +0 -0
  615. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/compute/local.py +0 -0
  616. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/compute/modal_compute.py +0 -0
  617. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/cursor_cli.py +0 -0
  618. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/db_session_adapter.py +0 -0
  619. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/gemini_cli.py +0 -0
  620. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/hosted_agent.py +0 -0
  621. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/local_agent.py +0 -0
  622. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/managed_agents.py +0 -0
  623. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/managed_local.py +0 -0
  624. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/registry.py +0 -0
  625. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/integrations/sandboxed_agent.py +0 -0
  626. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/jobs/__init__.py +0 -0
  627. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/jobs/executor.py +0 -0
  628. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/jobs/models.py +0 -0
  629. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/jobs/path_validation.py +0 -0
  630. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/jobs/router.py +0 -0
  631. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/jobs/server.py +0 -0
  632. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/jobs/store.py +0 -0
  633. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/kanban/__init__.py +0 -0
  634. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/kanban/models.py +0 -0
  635. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/kanban/paths.py +0 -0
  636. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/kanban/sqlite_store.py +0 -0
  637. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/llm/__init__.py +0 -0
  638. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/llm/catalogue.py +0 -0
  639. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/llm/credentials.py +0 -0
  640. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/llm/env.py +0 -0
  641. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/llm/gateways.py +0 -0
  642. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/llm/registry.py +0 -0
  643. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/__init__.py +0 -0
  644. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/adapters/__init__.py +0 -0
  645. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/adapters/agents.py +0 -0
  646. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  647. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  648. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  649. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  650. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/adapters/memory.py +0 -0
  651. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/adapters/prompts.py +0 -0
  652. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/adapters/resources.py +0 -0
  653. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  654. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/auth/__init__.py +0 -0
  655. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/auth/api_key.py +0 -0
  656. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/auth/oauth.py +0 -0
  657. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/auth/oidc.py +0 -0
  658. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/auth/scopes.py +0 -0
  659. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/cli.py +0 -0
  660. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/elicitation.py +0 -0
  661. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/icons.py +0 -0
  662. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/recipe_adapter.py +0 -0
  663. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/recipe_cli.py +0 -0
  664. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/registry.py +0 -0
  665. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/sampling.py +0 -0
  666. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/server.py +0 -0
  667. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/tasks.py +0 -0
  668. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/tool_index.py +0 -0
  669. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/transports/__init__.py +0 -0
  670. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/transports/http_stream.py +0 -0
  671. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/mcp_server/transports/stdio.py +0 -0
  672. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/n8n/__init__.py +0 -0
  673. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/n8n/client.py +0 -0
  674. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/n8n/converter.py +0 -0
  675. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/n8n/preview.py +0 -0
  676. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/n8n/reverse_converter.py +0 -0
  677. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/observability/__init__.py +0 -0
  678. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/observability/langextract.py +0 -0
  679. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/observability/langfuse.py +0 -0
  680. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/__init__.py +0 -0
  681. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/_valkey_client.py +0 -0
  682. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/config.py +0 -0
  683. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/__init__.py +0 -0
  684. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/_sql_base.py +0 -0
  685. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/async_mysql.py +0 -0
  686. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/async_postgres.py +0 -0
  687. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  688. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/base.py +0 -0
  689. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/json_store.py +0 -0
  690. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/mysql.py +0 -0
  691. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/postgres.py +0 -0
  692. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/singlestore.py +0 -0
  693. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/sqlite.py +0 -0
  694. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/supabase.py +0 -0
  695. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/surrealdb.py +0 -0
  696. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  697. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/conversation/turso.py +0 -0
  698. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/factory.py +0 -0
  699. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/hooks/__init__.py +0 -0
  700. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  701. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/__init__.py +0 -0
  702. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/base.py +0 -0
  703. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/cassandra.py +0 -0
  704. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/chroma.py +0 -0
  705. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  706. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  707. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/couchbase.py +0 -0
  708. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/lancedb.py +0 -0
  709. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  710. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  711. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  712. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/milvus.py +0 -0
  713. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  714. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/pgvector.py +0 -0
  715. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/pinecone.py +0 -0
  716. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/qdrant.py +0 -0
  717. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  718. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  719. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  720. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  721. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  722. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/knowledge/weaviate.py +0 -0
  723. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/migrations/__init__.py +0 -0
  724. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/migrations/manager.py +0 -0
  725. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/orchestrator.py +0 -0
  726. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/registry.py +0 -0
  727. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/__init__.py +0 -0
  728. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/async_mongodb.py +0 -0
  729. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/base.py +0 -0
  730. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/dynamodb.py +0 -0
  731. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/firestore.py +0 -0
  732. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/gcs.py +0 -0
  733. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/memory.py +0 -0
  734. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/mongodb.py +0 -0
  735. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/redis.py +0 -0
  736. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/upstash.py +0 -0
  737. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/state/valkey.py +0 -0
  738. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/tests/__init__.py +0 -0
  739. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/tests/test_all_backends.py +0 -0
  740. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  741. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/profiler.py +0 -0
  742. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/push/__init__.py +0 -0
  743. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/push/client.py +0 -0
  744. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/push/transports.py +0 -0
  745. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/__init__.py +0 -0
  746. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/bridge.py +0 -0
  747. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/core.py +0 -0
  748. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/exceptions.py +0 -0
  749. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/history.py +0 -0
  750. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/models.py +0 -0
  751. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/operations.py +0 -0
  752. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/policy.py +0 -0
  753. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/registry.py +0 -0
  754. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/runtime.py +0 -0
  755. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/security.py +0 -0
  756. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/serve.py +0 -0
  757. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/recipe/server.py +0 -0
  758. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/replay/__init__.py +0 -0
  759. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/replay/analyzer.py +0 -0
  760. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/replay/applier.py +0 -0
  761. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/replay/judge.py +0 -0
  762. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/replay/plan.py +0 -0
  763. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/replay/player.py +0 -0
  764. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/replay/reader.py +0 -0
  765. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/replay/storage.py +0 -0
  766. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/replay/writer.py +0 -0
  767. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/__init__.py +0 -0
  768. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/_compat.py +0 -0
  769. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/_registry.py +0 -0
  770. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/_shell.py +0 -0
  771. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/daytona.py +0 -0
  772. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/docker.py +0 -0
  773. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/e2b.py +0 -0
  774. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/modal.py +0 -0
  775. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/ssh.py +0 -0
  776. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/sandbox/subprocess.py +0 -0
  777. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/_dispatch.py +0 -0
  778. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/base.py +0 -0
  779. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/daemon_manager.py +0 -0
  780. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/deployment.py +0 -0
  781. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/enhanced_executor.py +0 -0
  782. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/run_policy.py +0 -0
  783. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/scheduler/state_manager.py +0 -0
  784. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/security/__init__.py +0 -0
  785. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/security/audit.py +0 -0
  786. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/security/injection.py +0 -0
  787. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/security/protected.py +0 -0
  788. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/setup/__init__.py +0 -0
  789. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/setup/build.py +0 -0
  790. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/setup/post_install.py +0 -0
  791. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/setup/setup_conda_env.py +0 -0
  792. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/setup.py +0 -0
  793. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/__init__.py +0 -0
  794. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/ai_generator.py +0 -0
  795. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/config.py +0 -0
  796. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/dedupe.py +0 -0
  797. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/discovery.py +0 -0
  798. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/drift.py +0 -0
  799. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/engine.py +0 -0
  800. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/enhanced_templates.py +0 -0
  801. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/example_verifier.py +0 -0
  802. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/manifest.py +0 -0
  803. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/models.py +0 -0
  804. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/reports.py +0 -0
  805. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/templates.py +0 -0
  806. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/undo_redo.py +0 -0
  807. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/standardise/validator.py +0 -0
  808. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/storage/dynamodb_adapter.py +0 -0
  809. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/storage/mongodb_adapter.py +0 -0
  810. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/storage/postgresql_adapter.py +0 -0
  811. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/storage/redis_adapter.py +0 -0
  812. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/storage/valkey_adapter.py +0 -0
  813. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/__init__.py +0 -0
  814. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/batch_source.py +0 -0
  815. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/cli_docs_source.py +0 -0
  816. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/discovery.py +0 -0
  817. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/docs_source.py +0 -0
  818. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/examples_source.py +0 -0
  819. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/executor.py +0 -0
  820. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/models.py +0 -0
  821. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/report_viewer.py +0 -0
  822. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/reporter.py +0 -0
  823. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/suite_runner/runner.py +0 -0
  824. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/templates/__init__.py +0 -0
  825. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/templates/cache.py +0 -0
  826. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/templates/dependency_checker.py +0 -0
  827. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/templates/discovery.py +0 -0
  828. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/templates/loader.py +0 -0
  829. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/templates/registry.py +0 -0
  830. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/templates/resolver.py +0 -0
  831. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/templates/security.py +0 -0
  832. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/templates/tool_override.py +0 -0
  833. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/templates/tools_doctor.py +0 -0
  834. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/tools/__init__.py +0 -0
  835. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/tools/audio.py +0 -0
  836. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/tools/glob_tool.py +0 -0
  837. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/tools/grep_tool.py +0 -0
  838. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/tools/kanban_tools.py +0 -0
  839. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/tools/multiedit.py +0 -0
  840. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/tools/skill_manage.py +0 -0
  841. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train/__init__.py +0 -0
  842. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train/_ollama.py +0 -0
  843. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train/agents/__init__.py +0 -0
  844. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train/agents/grader.py +0 -0
  845. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train/agents/hook.py +0 -0
  846. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train/agents/models.py +0 -0
  847. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train/agents/orchestrator.py +0 -0
  848. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train/agents/storage.py +0 -0
  849. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train/llm/__init__.py +0 -0
  850. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train/llm/trainer.py +0 -0
  851. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train.py +0 -0
  852. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/train_vision.py +0 -0
  853. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui/_aiui_datastore.py +0 -0
  854. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui/_external_agents.py +0 -0
  855. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui/callbacks.py +0 -0
  856. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui/components/aicoder.py +0 -0
  857. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui/context.py +0 -0
  858. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui/database_config.py +0 -0
  859. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui_agents/__init__.py +0 -0
  860. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui_agents/default_app.py +0 -0
  861. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui_bot/__init__.py +0 -0
  862. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui_bot/default_app.py +0 -0
  863. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui_chat/__init__.py +0 -0
  864. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui_chat/default_app.py +0 -0
  865. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui_dashboard/default_app.py +0 -0
  866. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui_realtime/__init__.py +0 -0
  867. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/ui_realtime/default_app.py +0 -0
  868. {praisonai-4.6.72 → praisonai-4.6.75}/praisonai/upload_vision.py +0 -0
  869. {praisonai-4.6.72 → praisonai-4.6.75}/setup.cfg +0 -0
  870. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test.py +0 -0
  871. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_agents_playbook.py +0 -0
  872. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_approval_system.py +0 -0
  873. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_basic.py +0 -0
  874. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_cli_features.py +0 -0
  875. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_custom_tools_fix.py +0 -0
  876. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_double_api_fix.py +0 -0
  877. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_n8n_agent_invoke.py +0 -0
  878. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_n8n_cli_feature.py +0 -0
  879. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_n8n_integration.py +0 -0
  880. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_phase2_refactor.py +0 -0
  881. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_recipe.py +0 -0
  882. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_registry.py +0 -0
  883. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_runner.py +0 -0
  884. {praisonai-4.6.72 → praisonai-4.6.75}/tests/test_sandboxed_agent_compatibility.py +0 -0
  885. {praisonai-4.6.72 → praisonai-4.6.75}/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.72
3
+ Version: 4.6.75
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.72
14
+ Requires-Dist: praisonaiagents>=1.6.75
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<2,>=1.83.14
17
17
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.72
3
+ Version: 4.6.75
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.72
14
+ Requires-Dist: praisonaiagents>=1.6.75
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<2,>=1.83.14
17
17
  Requires-Dist: PyYAML>=6.0
@@ -24,7 +24,6 @@ praisonai/async_agent_scheduler.py
24
24
  praisonai/auto.py
25
25
  praisonai/profiler.py
26
26
  praisonai/setup.py
27
- praisonai/test.py
28
27
  praisonai/tool_registry.py
29
28
  praisonai/tool_resolver.py
30
29
  praisonai/train.py
@@ -255,6 +254,7 @@ praisonai/cli/commands/validate.py
255
254
  praisonai/cli/commands/version.py
256
255
  praisonai/cli/commands/workflow.py
257
256
  praisonai/cli/configuration/__init__.py
257
+ praisonai/cli/configuration/config.schema.json
258
258
  praisonai/cli/configuration/credentials.py
259
259
  praisonai/cli/configuration/loader.py
260
260
  praisonai/cli/configuration/paths.py
@@ -445,6 +445,7 @@ praisonai/cli/interactive/frontends/rich_frontend.py
445
445
  praisonai/cli/interactive/frontends/textual_frontend.py
446
446
  praisonai/cli/output/__init__.py
447
447
  praisonai/cli/output/console.py
448
+ praisonai/cli/output/event_bridge.py
448
449
  praisonai/cli/session/__init__.py
449
450
  praisonai/cli/session/unified.py
450
451
  praisonai/cli/state/__init__.py
@@ -765,6 +766,8 @@ praisonai/scheduler/_dispatch.py
765
766
  praisonai/scheduler/agent_scheduler.py
766
767
  praisonai/scheduler/async_agent_scheduler.py
767
768
  praisonai/scheduler/base.py
769
+ praisonai/scheduler/blueprint_catalogue.py
770
+ praisonai/scheduler/condition_gate.py
768
771
  praisonai/scheduler/daemon_manager.py
769
772
  praisonai/scheduler/deployment.py
770
773
  praisonai/scheduler/enhanced_executor.py
@@ -772,6 +775,7 @@ praisonai/scheduler/executor.py
772
775
  praisonai/scheduler/run_policy.py
773
776
  praisonai/scheduler/shared.py
774
777
  praisonai/scheduler/state_manager.py
778
+ praisonai/scheduler/suggestion_engine.py
775
779
  praisonai/scheduler/yaml_loader.py
776
780
  praisonai/security/__init__.py
777
781
  praisonai/security/audit.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.72
4
+ praisonaiagents>=1.6.75
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -5,6 +5,7 @@ re-implementing the dict-of-Lock pattern.
5
5
  """
6
6
  from __future__ import annotations
7
7
  import asyncio
8
+ import threading
8
9
  import time
9
10
  import weakref
10
11
  from collections import OrderedDict
@@ -17,9 +18,11 @@ class LockMap:
17
18
  Provides a lock per key with LRU eviction and TTL-based cleanup to prevent
18
19
  unbounded memory growth in long-running applications.
19
20
 
20
- Note: Safe for use within a single asyncio event loop (cooperative
21
- multitasking means no interleaving between non-awaited calls), but NOT
22
- safe for concurrent access from multiple OS threads.
21
+ Buckets are keyed by event loop (one loop per OS thread). Structural
22
+ mutations of the bucket/loop maps are guarded by a ``threading.Lock`` so
23
+ the same instance can be safely shared across multiple OS threads, each
24
+ running its own event loop. Per-loop buckets are only ever touched from
25
+ their owning loop, so intra-loop access remains lock-free.
23
26
  """
24
27
 
25
28
  def __init__(self, *, max_entries: int = 10_000, ttl_seconds: float = 3600.0):
@@ -32,6 +35,8 @@ class LockMap:
32
35
  # Bucket locks by event loop to avoid cross-loop issues
33
36
  self._buckets: Dict[int, "OrderedDict[Hashable, tuple[asyncio.Lock, float]]"] = {}
34
37
  self._loop_refs: Dict[int, weakref.ref] = {}
38
+ # Guards structural mutations of _buckets / _loop_refs across OS threads.
39
+ self._struct_lock = threading.Lock()
35
40
  self._max = max_entries
36
41
  self._ttl = ttl_seconds
37
42
 
@@ -47,16 +52,25 @@ class LockMap:
47
52
  # Get the current running loop
48
53
  loop = asyncio.get_running_loop()
49
54
  loop_id = id(loop)
50
-
51
- # Clean up dead loops
52
- self._cleanup_dead_loops()
53
-
54
- # Get or create bucket for this loop
55
- if loop_id not in self._buckets:
56
- self._buckets[loop_id] = OrderedDict()
57
- self._loop_refs[loop_id] = weakref.ref(loop)
58
-
59
- bucket = self._buckets[loop_id]
55
+
56
+ # Fast path: a bucket for this loop already exists. The bucket is only
57
+ # ever mutated by its owning loop's thread, so a single dict read is
58
+ # safe under CPython's GIL without taking the cross-thread struct lock.
59
+ bucket = self._buckets.get(loop_id)
60
+ if bucket is None:
61
+ # Slow path: structural mutation shared across threads needs the lock.
62
+ with self._struct_lock:
63
+ # Clean up dead loops (only on first-touch to avoid per-call cost)
64
+ self._cleanup_dead_loops_locked()
65
+
66
+ # Re-check after acquiring the lock (another thread may have raced).
67
+ bucket = self._buckets.get(loop_id)
68
+ if bucket is None:
69
+ bucket = OrderedDict()
70
+ self._buckets[loop_id] = bucket
71
+ self._loop_refs[loop_id] = weakref.ref(loop)
72
+
73
+ # From here on only this loop's owning thread touches the bucket.
60
74
  now = time.monotonic()
61
75
 
62
76
  entry = bucket.get(key)
@@ -99,27 +113,31 @@ class LockMap:
99
113
  bucket.popitem(last=False)
100
114
  break
101
115
 
102
- def _cleanup_dead_loops(self) -> None:
103
- """Remove buckets for event loops that no longer exist."""
104
- dead_loops = []
105
- for loop_id, ref in self._loop_refs.items():
106
- loop = ref()
107
- if loop is None or loop.is_closed():
108
- dead_loops.append(loop_id)
109
-
116
+ def _cleanup_dead_loops_locked(self) -> None:
117
+ """Remove buckets for event loops that no longer exist.
118
+
119
+ Caller must hold ``self._struct_lock``.
120
+ """
121
+ dead_loops = [
122
+ loop_id
123
+ for loop_id, ref in self._loop_refs.items()
124
+ if (loop := ref()) is None or loop.is_closed()
125
+ ]
110
126
  for loop_id in dead_loops:
111
- del self._loop_refs[loop_id]
112
- if loop_id in self._buckets:
113
- del self._buckets[loop_id]
127
+ self._loop_refs.pop(loop_id, None)
128
+ self._buckets.pop(loop_id, None)
114
129
 
115
130
  def drop(self, key: Hashable) -> None:
116
131
  """Manually remove a lock for the given key."""
117
132
  # Get the current running loop
118
133
  loop = asyncio.get_running_loop()
119
134
  loop_id = id(loop)
120
- if loop_id in self._buckets:
121
- self._buckets[loop_id].pop(key, None)
135
+ with self._struct_lock:
136
+ bucket = self._buckets.get(loop_id)
137
+ if bucket is not None:
138
+ bucket.pop(key, None)
122
139
 
123
140
  def size(self) -> int:
124
141
  """Return current number of cached locks across all buckets."""
125
- return sum(len(bucket) for bucket in self._buckets.values())
142
+ with self._struct_lock:
143
+ return sum(len(bucket) for bucket in self._buckets.values())
@@ -16,7 +16,7 @@ from .version import __version__
16
16
 
17
17
  # Import new architecture components
18
18
  from .framework_adapters.base import FrameworkAdapter
19
- from .tool_registry import ToolRegistry
19
+ from .framework_adapters.registry import FrameworkAdapterRegistry, get_default_registry
20
20
 
21
21
 
22
22
  def _rich_print(*args, **kwargs):
@@ -237,15 +237,9 @@ class AgentsGenerator:
237
237
  elif os.environ.get('LOGLEVEL'):
238
238
  self.logger.setLevel(getattr(logging, os.environ.get('LOGLEVEL', 'INFO').upper(), logging.INFO))
239
239
 
240
- # Keep tool registry for backward compatibility with autogen adapters
241
- self.tool_registry = ToolRegistry()
242
-
243
- # Initialize tool resolver with the registry wired in (single source of truth for tool resolution)
240
+ # Initialize tool resolver (single source of truth for tool resolution)
244
241
  from .tool_resolver import ToolResolver
245
- self.tool_resolver = ToolResolver(registry=self.tool_registry)
246
-
247
- # Wire resolver back to registry for cache invalidation
248
- self.tool_registry.set_resolver(self.tool_resolver)
242
+ self.tool_resolver = ToolResolver()
249
243
 
250
244
  # DI-friendly: tests/multi-tenant runtimes pass their own registry;
251
245
  # CLI users get the process default.
@@ -254,11 +248,6 @@ class AgentsGenerator:
254
248
  # Defer framework adapter creation until YAML is loaded
255
249
  # This fixes the issue where empty framework string fails before YAML framework is read
256
250
  self.framework_adapter = None
257
-
258
- # Only autogen-family adapters need the autogen tool shim
259
- # Note: autogen_v2 is also part of the autogen family
260
- if framework and framework in {"autogen", "autogen_v2", "autogen_v4", "ag2"}:
261
- self.tool_registry.register_builtin_autogen_adapters()
262
251
 
263
252
  def _get_framework_adapter(self, framework: str) -> FrameworkAdapter:
264
253
  """
@@ -95,6 +95,11 @@ class CommandRegistry:
95
95
  self.register("stop", {"description": "Cancel current agent task", "builtin": True})
96
96
  self.register("whoami", {"description": "Show your user info and permissions", "builtin": True})
97
97
  self.register("sethome", {"description": "Set this chat as the home channel for scheduled deliveries", "builtin": True})
98
+ # New runtime control commands
99
+ self.register("model", {"description": "Switch LLM model for this session", "builtin": True})
100
+ self.register("usage", {"description": "Show token usage and estimated cost", "builtin": True})
101
+ self.register("compress", {"description": "Compress conversation to free context window", "builtin": True})
102
+ self.register("queue", {"description": "Queue a follow-up message", "builtin": True})
98
103
 
99
104
  def register(
100
105
  self,
@@ -412,3 +417,259 @@ def handle_run_status_command(
412
417
  return f"⚡ Task running for {elapsed_str}{pending_info}"
413
418
  except Exception as e:
414
419
  return f"Error getting status: {e}"
420
+
421
+
422
+ def handle_model_command(
423
+ session_manager,
424
+ user_id: str,
425
+ model_name: Optional[str] = None,
426
+ agent: Optional["Agent"] = None,
427
+ ) -> str:
428
+ """Handle /model command for runtime model switching.
429
+
430
+ Args:
431
+ session_manager: BotSessionManager instance
432
+ user_id: User ID
433
+ model_name: Optional model name to switch to
434
+ agent: Current agent instance
435
+
436
+ Returns:
437
+ Response message
438
+ """
439
+ # Resolve the storage key so the override is keyed identically to how
440
+ # chat() looks it up (handles cross-platform identity resolution).
441
+ storage_key = user_id
442
+ if hasattr(session_manager, '_storage_key'):
443
+ try:
444
+ storage_key = session_manager._storage_key(user_id)
445
+ except Exception:
446
+ storage_key = user_id
447
+
448
+ if not model_name:
449
+ # Show current model — prefer the per-user override if one is set,
450
+ # otherwise fall back to the agent's configured model.
451
+ overrides = getattr(session_manager, '_model_overrides', {})
452
+ current = overrides.get(storage_key)
453
+ if not current and agent and hasattr(agent, 'llm'):
454
+ current = agent.llm if isinstance(agent.llm, str) else "default"
455
+ if not current:
456
+ return "No model configured. Use /model <name> to set one."
457
+ return f"Current model: {current}\nUse /model <name> to switch (e.g., /model gpt-4o)"
458
+
459
+ # Store the override per user. chat() applies it inside the per-agent lock
460
+ # and restores the original afterwards, so the shared Agent instance is
461
+ # never mutated for other concurrent users.
462
+ if not hasattr(session_manager, '_model_overrides'):
463
+ session_manager._model_overrides = {}
464
+ session_manager._model_overrides[storage_key] = model_name
465
+
466
+ return f"✅ Model switched to {model_name} for this conversation."
467
+
468
+
469
+ def handle_usage_command(
470
+ session_manager,
471
+ user_id: str,
472
+ agent: Optional["Agent"] = None,
473
+ ) -> str:
474
+ """Handle /usage command to show token usage and cost.
475
+
476
+ Args:
477
+ session_manager: BotSessionManager instance
478
+ user_id: User ID
479
+ agent: Current agent instance
480
+
481
+ Returns:
482
+ Response message with usage info
483
+ """
484
+ # Check for usage tracking via hooks or session metadata
485
+ usage_info = {}
486
+
487
+ # Try to get usage from session metadata if tracked
488
+ if hasattr(session_manager, '_usage_tracker'):
489
+ usage_info = session_manager._usage_tracker.get(user_id, {})
490
+
491
+ # Check agent's token tracking if available
492
+ if agent and hasattr(agent, 'get_token_usage'):
493
+ try:
494
+ agent_usage = agent.get_token_usage()
495
+ usage_info.update(agent_usage)
496
+ except Exception:
497
+ pass
498
+
499
+ # Format usage response
500
+ if not usage_info:
501
+ return "No usage data available. Usage tracking may not be enabled."
502
+
503
+ total_tokens = usage_info.get('total_tokens', 0)
504
+ prompt_tokens = usage_info.get('prompt_tokens', 0)
505
+ completion_tokens = usage_info.get('completion_tokens', 0)
506
+
507
+ # Estimate cost (rough estimates, would need model-specific pricing)
508
+ cost_estimate = total_tokens * 0.00002 # Default estimate
509
+
510
+ lines = [
511
+ "📊 Token Usage",
512
+ f"Total: {total_tokens:,} tokens",
513
+ ]
514
+
515
+ if prompt_tokens or completion_tokens:
516
+ lines.append(f"Prompt: {prompt_tokens:,} | Completion: {completion_tokens:,}")
517
+
518
+ lines.append(f"Est. cost: ${cost_estimate:.4f}")
519
+
520
+ return "\n".join(lines)
521
+
522
+
523
+ def handle_compress_command(
524
+ session_manager,
525
+ user_id: str,
526
+ agent: Optional["Agent"] = None,
527
+ ) -> str:
528
+ """Handle /compress command for context window management.
529
+
530
+ Args:
531
+ session_manager: BotSessionManager instance
532
+ user_id: User ID
533
+ agent: Current agent instance
534
+
535
+ Returns:
536
+ Response message
537
+ """
538
+ try:
539
+ # Get user's chat history
540
+ if not hasattr(session_manager, '_histories'):
541
+ return "❌ No conversation history to compress."
542
+
543
+ storage_key = user_id
544
+ if hasattr(session_manager, '_storage_key'):
545
+ storage_key = session_manager._storage_key(user_id)
546
+
547
+ history = session_manager._histories.get(storage_key, [])
548
+ if len(history) < 10:
549
+ return "ℹ️ Conversation too short to compress (need at least 10 messages)."
550
+
551
+ # Import optimizer
552
+ try:
553
+ from praisonaiagents.context.optimizer import SummarizeOptimizer
554
+ from praisonaiagents.context.tokens import estimate_messages_tokens
555
+ except ImportError:
556
+ # Fallback to simple truncation
557
+ original_len = len(history)
558
+ # Keep system messages and last 5 exchanges
559
+ system_msgs = [m for m in history if m.get("role") == "system"]
560
+ other_msgs = [m for m in history if m.get("role") != "system"]
561
+ compressed = system_msgs + other_msgs[-10:] # Keep last 5 exchanges (10 messages)
562
+
563
+ session_manager._histories[storage_key] = compressed
564
+ removed = original_len - len(compressed)
565
+
566
+ return f"✅ Compressed conversation: removed {removed} older messages."
567
+
568
+ # Use SummarizeOptimizer if available
569
+ original_tokens = estimate_messages_tokens(history)
570
+ optimizer = SummarizeOptimizer(preserve_recent=10)
571
+
572
+ # Target 50% reduction
573
+ target_tokens = original_tokens // 2
574
+ compressed_history, result = optimizer.optimize(history, target_tokens)
575
+
576
+ # Update history
577
+ session_manager._histories[storage_key] = compressed_history
578
+
579
+ # Persist if store available
580
+ if hasattr(session_manager, '_store') and session_manager._store:
581
+ try:
582
+ session_manager._persist(storage_key)
583
+ except Exception:
584
+ pass
585
+
586
+ tokens_saved = result.tokens_saved if hasattr(result, 'tokens_saved') else 0
587
+ messages_removed = len(history) - len(compressed_history)
588
+
589
+ return f"✅ Compressed {messages_removed} messages, freed ~{tokens_saved:,} tokens."
590
+
591
+ except Exception as e:
592
+ logger.error(f"Compression failed: {e}")
593
+ return f"❌ Compression failed: {e}"
594
+
595
+
596
+ def handle_queue_command(
597
+ session_manager,
598
+ user_id: str,
599
+ message_text: Optional[str] = None,
600
+ run_control: Optional["SessionRunControl"] = None,
601
+ ) -> str:
602
+ """Handle /queue command for message queuing.
603
+
604
+ Delegates to the canonical :class:`SessionRunControl` pending slot, which
605
+ is the only mechanism that is actually drained by the gateway run loop
606
+ (``chat_with_run_control`` calls ``next_pending``/``finish_run``). A
607
+ message is only meaningful to queue while a run is in flight; if the bot
608
+ is idle there is nothing to run "after", so the user is told to just send
609
+ the message normally instead of being given a false promise.
610
+
611
+ Args:
612
+ session_manager: BotSessionManager instance
613
+ user_id: User ID
614
+ message_text: Optional message to queue
615
+ run_control: SessionRunControl instance (falls back to
616
+ ``session_manager._run_control`` when not supplied)
617
+
618
+ Returns:
619
+ Response message
620
+ """
621
+ # Resolve run control from the explicit arg or the session manager.
622
+ if run_control is None:
623
+ run_control = getattr(session_manager, "_run_control", None)
624
+
625
+ if run_control is None:
626
+ return (
627
+ "ℹ️ Message queuing isn't enabled for this bot. "
628
+ "Just send your message and it will be processed."
629
+ )
630
+
631
+ if not message_text:
632
+ # Show whether a follow-up is currently pending for this user.
633
+ try:
634
+ status = run_control.get_run_status(user_id)
635
+ except Exception:
636
+ status = {}
637
+ if status.get("has_pending"):
638
+ preview = status.get("pending_preview", "")
639
+ return f"📝 Pending follow-up: {preview}"
640
+ return "No follow-up queued. Use /queue <message> to add one while a task is running."
641
+
642
+ # Submit through run control so the message is parked in the pending slot
643
+ # that the run loop actually drains after the current turn completes.
644
+ import asyncio
645
+
646
+ from ._run_control import RunDecision
647
+
648
+ async def _submit() -> "RunDecision":
649
+ return await run_control.submit(user_id, message_text)
650
+
651
+ try:
652
+ try:
653
+ loop = asyncio.get_running_loop()
654
+ except RuntimeError:
655
+ loop = None
656
+
657
+ if loop is not None and loop.is_running():
658
+ # Schedule on the running loop; we can't block-await from here.
659
+ loop.create_task(_submit())
660
+ return "⏳ Follow-up noted — it will run after the current task completes."
661
+
662
+ decision = asyncio.run(_submit())
663
+ except Exception as e: # noqa: BLE001 - surface a friendly message
664
+ return f"❌ Could not queue message: {e}"
665
+
666
+ if decision == RunDecision.RUN_NOW:
667
+ return (
668
+ "ℹ️ No task is currently running, so there's nothing to queue behind. "
669
+ "Send your message normally to run it now."
670
+ )
671
+ if decision == RunDecision.MERGED:
672
+ return "⏳ Added to your pending follow-up — it will run after the current task completes."
673
+ if decision == RunDecision.STEERED:
674
+ return "🧭 Injected into the running task as live guidance."
675
+ return "⏳ Follow-up queued — it will run after the current task completes."
@@ -76,10 +76,50 @@ class SessionResetConfigSchema(BaseModel):
76
76
  return self
77
77
 
78
78
 
79
+ class SessionCompactionConfigSchema(BaseModel):
80
+ """Schema for session history compaction configuration.
81
+
82
+ When enabled, older turns in a long-lived bot/gateway session are
83
+ summarised (rather than hard-truncated) once the history exceeds the
84
+ configured budget, so context survives across weeks-long conversations
85
+ and restarts. Disabled by default to preserve legacy behaviour.
86
+ """
87
+ enabled: bool = False
88
+ strategy: str = "summarize" # truncate | sliding | summarize | smart | prune | llm_summarize
89
+ max_messages: int = 100 # Approx. compaction threshold (converted to a token budget; max_history remains a hard cap)
90
+ max_tokens: Optional[int] = None # Optional token-based budget (overrides messages)
91
+ keep_recent: int = 10 # Number of most-recent messages kept verbatim
92
+
93
+ @field_validator("strategy")
94
+ @classmethod
95
+ def validate_strategy(cls, v: str) -> str:
96
+ allowed = {"truncate", "sliding", "summarize", "smart", "prune", "llm_summarize"}
97
+ if v not in allowed:
98
+ raise ValueError(
99
+ f"Invalid compaction strategy '{v}'. Must be one of: {', '.join(sorted(allowed))}"
100
+ )
101
+ return v
102
+
103
+ @field_validator("max_messages")
104
+ @classmethod
105
+ def validate_max_messages(cls, v: int) -> int:
106
+ if v < 1:
107
+ raise ValueError("max_messages must be at least 1")
108
+ return v
109
+
110
+ @field_validator("keep_recent")
111
+ @classmethod
112
+ def validate_keep_recent(cls, v: int) -> int:
113
+ if v < 0:
114
+ raise ValueError("keep_recent must be non-negative")
115
+ return v
116
+
117
+
79
118
  class SessionConfigSchema(BaseModel):
80
119
  """Schema for session configuration."""
81
120
  max_history: int = 100
82
121
  reset: Optional[SessionResetConfigSchema] = None
122
+ compaction: Optional[SessionCompactionConfigSchema] = None
83
123
 
84
124
 
85
125
  class StreamingConfigSchema(BaseModel):
@@ -156,6 +196,7 @@ class ChannelConfigSchema(BaseModel):
156
196
  user_allowed_commands: Optional[str] = None # Comma-separated list of allowed commands
157
197
  routes: Dict[str, str] = Field(default_factory=dict) # Context -> agent_id mapping
158
198
  routing: Optional[Dict[str, str]] = None # Alias for routes
199
+ bindings: List[Dict[str, Any]] = Field(default_factory=list) # Priority-ordered route bindings (Issue #2225)
159
200
  webhook_url: Optional[str] = None
160
201
  webhook_port: int = 8080
161
202
  streaming: Optional[StreamingConfigSchema] = None
@@ -118,6 +118,37 @@ class MessageHookMixin:
118
118
  return None
119
119
  return getattr(agent, '_hook_runner', None)
120
120
 
121
+ async def _default_health(self) -> Any:
122
+ """Build a :class:`HealthResult` shared by all bot adapters (DRY).
123
+
124
+ Combines ``self.probe()`` liveness with ``self._is_running``,
125
+ ``self._started_at`` and ``self._session``. The only per-adapter
126
+ difference is ``self.platform``, which each adapter already exposes.
127
+ Adapters delegate via ``health()`` but may override for bespoke needs.
128
+ """
129
+ from praisonaiagents.bots import HealthResult
130
+
131
+ probe_result = await self.probe() # type: ignore[attr-defined]
132
+ started_at = getattr(self, '_started_at', None)
133
+ uptime = (time.time() - started_at) if started_at else None
134
+ session = getattr(self, '_session', None)
135
+ if session is not None and hasattr(session, '_histories'):
136
+ session_count = len(session._histories)
137
+ elif session is not None and hasattr(session, 'active_count'):
138
+ session_count = session.active_count()
139
+ else:
140
+ session_count = 0
141
+ is_running = getattr(self, '_is_running', False)
142
+ return HealthResult(
143
+ ok=is_running and probe_result.ok,
144
+ platform=self.platform, # type: ignore[attr-defined]
145
+ is_running=is_running,
146
+ uptime_seconds=uptime,
147
+ probe=probe_result,
148
+ sessions=session_count,
149
+ error=probe_result.error if not probe_result.ok else None,
150
+ )
151
+
121
152
  def fire_message_received(self, message: Any) -> None:
122
153
  """Fire MESSAGE_RECEIVED hook when an incoming message arrives.
123
154