PraisonAI 4.6.74__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 (882) hide show
  1. {praisonai-4.6.74 → praisonai-4.6.75}/PKG-INFO +2 -2
  2. {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/SOURCES.txt +0 -1
  4. {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/agents_generator.py +3 -14
  6. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_commands.py +261 -0
  7. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_protocol_mixin.py +31 -0
  8. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_run_control.py +39 -5
  9. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_session.py +49 -2
  10. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/agentmail.py +1 -14
  11. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/discord.py +36 -11
  12. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/email.py +1 -14
  13. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/slack.py +34 -11
  14. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/telegram.py +71 -13
  15. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/ui.py +1 -62
  16. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/config/validator.py +1 -4
  17. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/base.py +0 -24
  18. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/sandlock.py +210 -162
  19. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/_base_scheduler.py +138 -1
  20. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/agent_scheduler.py +34 -92
  21. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/async_agent_scheduler.py +43 -100
  22. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/__init__.py +10 -1
  23. praisonai-4.6.75/praisonai/tool_registry.py +118 -0
  24. praisonai-4.6.75/praisonai/version.py +1 -0
  25. {praisonai-4.6.74 → praisonai-4.6.75}/pyproject.toml +1 -1
  26. praisonai-4.6.74/praisonai/test.py +0 -113
  27. praisonai-4.6.74/praisonai/tool_registry.py +0 -197
  28. praisonai-4.6.74/praisonai/version.py +0 -1
  29. {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/dependency_links.txt +0 -0
  30. {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/entry_points.txt +0 -0
  31. {praisonai-4.6.74 → praisonai-4.6.75}/PraisonAI.egg-info/top_level.txt +0 -0
  32. {praisonai-4.6.74 → praisonai-4.6.75}/README.md +0 -0
  33. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/__init__.py +0 -0
  34. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/__main__.py +0 -0
  35. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_approval_spec.py +0 -0
  36. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_async_bridge.py +0 -0
  37. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/__init__.py +0 -0
  38. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/api_md.py +0 -0
  39. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/__init__.py +0 -0
  40. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/docs_extractor.py +0 -0
  41. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/docs_generator.py +0 -0
  42. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/generator.py +0 -0
  43. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  44. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/python_extractor.py +0 -0
  45. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  46. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/rust_extractor.py +0 -0
  47. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  48. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  49. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  50. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_entrypoint.py +0 -0
  51. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_framework_availability.py +0 -0
  52. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_lazy_cache.py +0 -0
  53. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_lockmap.py +0 -0
  54. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_logging.py +0 -0
  55. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_registry.py +0 -0
  56. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/_safe_loader.py +0 -0
  57. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/acp/__init__.py +0 -0
  58. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/acp/config.py +0 -0
  59. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/acp/safe_edit.py +0 -0
  60. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/acp/server.py +0 -0
  61. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/acp/session.py +0 -0
  62. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/adapters/__init__.py +0 -0
  63. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/adapters/readers.py +0 -0
  64. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/adapters/rerankers.py +0 -0
  65. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/adapters/retrievers.py +0 -0
  66. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/adapters/vector_stores.py +0 -0
  67. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/agent.py +0 -0
  68. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/agent_scheduler.py +0 -0
  69. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/api/agent_invoke.py +0 -0
  70. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/api/call.py +0 -0
  71. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/app/__init__.py +0 -0
  72. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/app/agentos.py +0 -0
  73. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/async_agent_scheduler.py +0 -0
  74. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/audit/__init__.py +0 -0
  75. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/audit/agent_centric.py +0 -0
  76. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/auto.py +0 -0
  77. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/__init__.py +0 -0
  78. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_ack.py +0 -0
  79. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_approval.py +0 -0
  80. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_approval_base.py +0 -0
  81. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_auth.py +0 -0
  82. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_chunk.py +0 -0
  83. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_config_schema.py +0 -0
  84. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_debounce.py +0 -0
  85. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_defaults.py +0 -0
  86. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_delivery.py +0 -0
  87. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_discord_approval.py +0 -0
  88. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_dlq.py +0 -0
  89. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_durable_adapter.py +0 -0
  90. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_email_utils.py +0 -0
  91. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_http_approval.py +0 -0
  92. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_identity.py +0 -0
  93. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_ingress.py +0 -0
  94. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_mirror.py +0 -0
  95. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_outbox.py +0 -0
  96. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_pairing_ui.py +0 -0
  97. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_presentation_approval.py +0 -0
  98. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_presentation_renderer.py +0 -0
  99. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_rate_limit.py +0 -0
  100. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_registry.py +0 -0
  101. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_reset_policy.py +0 -0
  102. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_resilience.py +0 -0
  103. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_slack_approval.py +0 -0
  104. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_status.py +0 -0
  105. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_streaming.py +0 -0
  106. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_telegram_approval.py +0 -0
  107. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_typing.py +0 -0
  108. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_typing_indicator.py +0 -0
  109. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_unknown_user.py +0 -0
  110. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_webhook_approval.py +0 -0
  111. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  112. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/bot.py +0 -0
  113. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/botos.py +0 -0
  114. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/delivery.py +0 -0
  115. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/linear.py +0 -0
  116. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/media.py +0 -0
  117. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/webhook_security.py +0 -0
  118. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/bots/whatsapp.py +0 -0
  119. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/__init__.py +0 -0
  120. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/agent.py +0 -0
  121. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/benchmark.py +0 -0
  122. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/cdp_agent.py +0 -0
  123. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/cdp_utils.py +0 -0
  124. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/cli.py +0 -0
  125. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/diagnostics.py +0 -0
  126. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/launcher.py +0 -0
  127. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/playwright_agent.py +0 -0
  128. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/profiling.py +0 -0
  129. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/protocol.py +0 -0
  130. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/report.py +0 -0
  131. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/server.py +0 -0
  132. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/sessions.py +0 -0
  133. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/browser/video.py +0 -0
  134. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/__init__.py +0 -0
  135. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/a2a.py +0 -0
  136. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/assistants.py +0 -0
  137. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/audio.py +0 -0
  138. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/batches.py +0 -0
  139. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/completions.py +0 -0
  140. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/container_files.py +0 -0
  141. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/containers.py +0 -0
  142. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/embeddings.py +0 -0
  143. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/files.py +0 -0
  144. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/fine_tuning.py +0 -0
  145. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/guardrails.py +0 -0
  146. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/images.py +0 -0
  147. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/mcp.py +0 -0
  148. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/messages.py +0 -0
  149. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/moderations.py +0 -0
  150. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/ocr.py +0 -0
  151. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/passthrough.py +0 -0
  152. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/rag.py +0 -0
  153. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/realtime.py +0 -0
  154. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/rerank.py +0 -0
  155. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/responses.py +0 -0
  156. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/search.py +0 -0
  157. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/skills.py +0 -0
  158. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/vector_store_files.py +0 -0
  159. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/vector_stores.py +0 -0
  160. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/capabilities/videos.py +0 -0
  161. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/claw/__init__.py +0 -0
  162. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/claw/default_app.py +0 -0
  163. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/__init__.py +0 -0
  164. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/_paths.py +0 -0
  165. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/_warnings.py +0 -0
  166. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/app.py +0 -0
  167. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/approval_backend.py +0 -0
  168. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/branding.py +0 -0
  169. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/__init__.py +0 -0
  170. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/acp.py +0 -0
  171. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/agent.py +0 -0
  172. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/agents.py +0 -0
  173. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/app.py +0 -0
  174. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/audit.py +0 -0
  175. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/auth.py +0 -0
  176. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/batch.py +0 -0
  177. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/benchmark.py +0 -0
  178. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/bot.py +0 -0
  179. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/browser.py +0 -0
  180. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/call.py +0 -0
  181. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/chat.py +0 -0
  182. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/claw.py +0 -0
  183. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/code.py +0 -0
  184. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/command.py +0 -0
  185. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/commit.py +0 -0
  186. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/completion.py +0 -0
  187. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/config.py +0 -0
  188. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/context.py +0 -0
  189. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/dashboard.py +0 -0
  190. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/debug.py +0 -0
  191. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/deploy.py +0 -0
  192. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/diag.py +0 -0
  193. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/docs.py +0 -0
  194. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/doctor.py +0 -0
  195. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/endpoints.py +0 -0
  196. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/environment.py +0 -0
  197. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/eval.py +0 -0
  198. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/examples.py +0 -0
  199. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/flow.py +0 -0
  200. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/gateway.py +0 -0
  201. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/github.py +0 -0
  202. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/hooks.py +0 -0
  203. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/identity.py +0 -0
  204. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/init.py +0 -0
  205. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/kanban.py +0 -0
  206. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/knowledge.py +0 -0
  207. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/langextract.py +0 -0
  208. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/langfuse.py +0 -0
  209. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/loop.py +0 -0
  210. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/lsp.py +0 -0
  211. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/managed.py +0 -0
  212. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/mcp.py +0 -0
  213. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/memory.py +0 -0
  214. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/mint_link.py +0 -0
  215. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/models.py +0 -0
  216. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/n8n.py +0 -0
  217. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/obs.py +0 -0
  218. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/onboard.py +0 -0
  219. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/package.py +0 -0
  220. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/pairing.py +0 -0
  221. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/paths.py +0 -0
  222. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/permissions.py +0 -0
  223. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/plugins.py +0 -0
  224. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/port.py +0 -0
  225. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/profile.py +0 -0
  226. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/publish.py +0 -0
  227. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/rag.py +0 -0
  228. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/realtime.py +0 -0
  229. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/recipe.py +0 -0
  230. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/registry.py +0 -0
  231. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/replay.py +0 -0
  232. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/research.py +0 -0
  233. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/retrieval.py +0 -0
  234. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/rules.py +0 -0
  235. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/run.py +0 -0
  236. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/sandbox.py +0 -0
  237. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/schedule.py +0 -0
  238. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/serve.py +0 -0
  239. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/session.py +0 -0
  240. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/setup.py +0 -0
  241. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/skills.py +0 -0
  242. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/standardise.py +0 -0
  243. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/templates.py +0 -0
  244. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/test.py +0 -0
  245. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/todo.py +0 -0
  246. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/tools.py +0 -0
  247. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/traces.py +0 -0
  248. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/tracker.py +0 -0
  249. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/train.py +0 -0
  250. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/up.py +0 -0
  251. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/validate.py +0 -0
  252. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/version.py +0 -0
  253. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/commands/workflow.py +0 -0
  254. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/config_loader.py +0 -0
  255. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/__init__.py +0 -0
  256. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/config.schema.json +0 -0
  257. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/credentials.py +0 -0
  258. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/loader.py +0 -0
  259. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/paths.py +0 -0
  260. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/resolver.py +0 -0
  261. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/configuration/schema.py +0 -0
  262. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/execution/__init__.py +0 -0
  263. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/execution/core.py +0 -0
  264. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/execution/profiler.py +0 -0
  265. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/execution/request.py +0 -0
  266. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/execution/result.py +0 -0
  267. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/fallback_schema.py +0 -0
  268. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/__init__.py +0 -0
  269. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/_endpoint_registry.py +0 -0
  270. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/_search_registry.py +0 -0
  271. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/acp.py +0 -0
  272. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/action_orchestrator.py +0 -0
  273. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/agent_scheduler.py +0 -0
  274. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/agent_tools.py +0 -0
  275. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/agents.py +0 -0
  276. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/approval.py +0 -0
  277. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/at_mentions.py +0 -0
  278. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/audit_cli.py +0 -0
  279. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/auto_memory.py +0 -0
  280. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/auto_mode.py +0 -0
  281. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/autonomy_mode.py +0 -0
  282. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/background.py +0 -0
  283. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/base.py +0 -0
  284. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/benchmark.py +0 -0
  285. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/bots_cli.py +0 -0
  286. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/capabilities.py +0 -0
  287. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/checkpoints.py +0 -0
  288. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/cli_profiler.py +0 -0
  289. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/code_intelligence.py +0 -0
  290. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/compaction.py +0 -0
  291. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/compare.py +0 -0
  292. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/config_hierarchy.py +0 -0
  293. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/context_manager.py +0 -0
  294. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/cost_tracker.py +0 -0
  295. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/csv_test_runner.py +0 -0
  296. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/custom_definitions.py +0 -0
  297. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/debug.py +0 -0
  298. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/deploy.py +0 -0
  299. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/diag.py +0 -0
  300. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/display_jsonl.py +0 -0
  301. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/__init__.py +0 -0
  302. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  303. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  304. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  305. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  306. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  307. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  308. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
  309. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  310. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  311. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  312. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  313. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  314. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  315. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  316. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  317. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/runtime_checks.py +0 -0
  318. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
  319. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  320. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  321. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  322. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  323. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/engine.py +0 -0
  324. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/formatters.py +0 -0
  325. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/handler.py +0 -0
  326. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/models.py +0 -0
  327. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/doctor/registry.py +0 -0
  328. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/endpoints.py +0 -0
  329. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/eval.py +0 -0
  330. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/examples.py +0 -0
  331. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/external_agents.py +0 -0
  332. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/fast_context.py +0 -0
  333. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/file_history.py +0 -0
  334. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/flow_display.py +0 -0
  335. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/gateway.py +0 -0
  336. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/git_attribution.py +0 -0
  337. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/git_integration.py +0 -0
  338. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/guardrail.py +0 -0
  339. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/handoff.py +0 -0
  340. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/hooks.py +0 -0
  341. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/hybrid_workflow.py +0 -0
  342. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/image.py +0 -0
  343. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/interactive_core_headless.py +0 -0
  344. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/interactive_runtime.py +0 -0
  345. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/interactive_test_harness.py +0 -0
  346. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/interactive_tools.py +0 -0
  347. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/interactive_tui.py +0 -0
  348. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/job_workflow.py +0 -0
  349. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/jobs.py +0 -0
  350. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/knowledge.py +0 -0
  351. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/knowledge_cli.py +0 -0
  352. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/lite.py +0 -0
  353. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/logs.py +0 -0
  354. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/lsp_cli.py +0 -0
  355. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  356. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/mcp.py +0 -0
  357. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/message_queue.py +0 -0
  358. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/metrics.py +0 -0
  359. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/migrate.py +0 -0
  360. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/migration_flow.py +0 -0
  361. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/migration_spec.py +0 -0
  362. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/n8n.py +0 -0
  363. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/observability.py +0 -0
  364. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/ollama.py +0 -0
  365. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/onboard.py +0 -0
  366. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/output_modes.py +0 -0
  367. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/output_style.py +0 -0
  368. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/package.py +0 -0
  369. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/performance.py +0 -0
  370. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/persistence.py +0 -0
  371. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/plugin_cli.py +0 -0
  372. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profile.py +0 -0
  373. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profiler/__init__.py +0 -0
  374. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profiler/core.py +0 -0
  375. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profiler/optimizations.py +0 -0
  376. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profiler/suite.py +0 -0
  377. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/profiling.py +0 -0
  378. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/__init__.py +0 -0
  379. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/manager.py +0 -0
  380. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/models.py +0 -0
  381. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/persistence.py +0 -0
  382. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/scheduler.py +0 -0
  383. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/queue/worker.py +0 -0
  384. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/recipe.py +0 -0
  385. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/recipe_creator.py +0 -0
  386. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/recipe_optimizer.py +0 -0
  387. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/recipe_prompts.py +0 -0
  388. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/recipes.py +0 -0
  389. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/registry.py +0 -0
  390. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/repo_map.py +0 -0
  391. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/router.py +0 -0
  392. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/safe_shell.py +0 -0
  393. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/sandbox_cli.py +0 -0
  394. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/sandbox_executor.py +0 -0
  395. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/sdk_knowledge.py +0 -0
  396. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/serve.py +0 -0
  397. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/session.py +0 -0
  398. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/setup/__init__.py +0 -0
  399. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/setup/handler.py +0 -0
  400. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/setup/templates.py +0 -0
  401. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/skills.py +0 -0
  402. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/slash_commands.py +0 -0
  403. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/telemetry.py +0 -0
  404. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/templates.py +0 -0
  405. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/thinking.py +0 -0
  406. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/todo.py +0 -0
  407. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tools.py +0 -0
  408. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/__init__.py +0 -0
  409. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/app.py +0 -0
  410. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/cli.py +0 -0
  411. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/config.py +0 -0
  412. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/debug.py +0 -0
  413. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/events.py +0 -0
  414. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/mock_provider.py +0 -0
  415. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/orchestrator.py +0 -0
  416. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  417. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/help.py +0 -0
  418. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/main.py +0 -0
  419. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/queue.py +0 -0
  420. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/session.py +0 -0
  421. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/screens/settings.py +0 -0
  422. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/session_store.py +0 -0
  423. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  424. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  425. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  426. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  427. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  428. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  429. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/status.py +0 -0
  430. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  431. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/wizard.py +0 -0
  432. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/workflow.py +0 -0
  433. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/features/yaml_utils.py +0 -0
  434. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/__init__.py +0 -0
  435. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/async_tui.py +0 -0
  436. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/config.py +0 -0
  437. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/core.py +0 -0
  438. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/events.py +0 -0
  439. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  440. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  441. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  442. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/praison_io.py +0 -0
  443. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/repl.py +0 -0
  444. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/split_tui.py +0 -0
  445. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/interactive/tui_app.py +0 -0
  446. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/langfuse_client.py +0 -0
  447. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/main.py +0 -0
  448. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/output/__init__.py +0 -0
  449. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/output/console.py +0 -0
  450. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/output/event_bridge.py +0 -0
  451. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/schedule_cli.py +0 -0
  452. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/schema_provider.py +0 -0
  453. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/session/__init__.py +0 -0
  454. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/session/unified.py +0 -0
  455. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/state/__init__.py +0 -0
  456. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/state/identifiers.py +0 -0
  457. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/state/project_sessions.py +0 -0
  458. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/state/sessions.py +0 -0
  459. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/__init__.py +0 -0
  460. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/config.py +0 -0
  461. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/events.py +0 -0
  462. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/mg_backend.py +0 -0
  463. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/plain.py +0 -0
  464. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/ui/rich_backend.py +0 -0
  465. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/unified_schema.py +0 -0
  466. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/utils/env_utils.py +0 -0
  467. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli/utils/project.py +0 -0
  468. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli_backends/__init__.py +0 -0
  469. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli_backends/claude.py +0 -0
  470. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/cli_backends/registry.py +0 -0
  471. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/__init__.py +0 -0
  472. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/agent_tools.py +0 -0
  473. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/diff/__init__.py +0 -0
  474. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/diff/diff_strategy.py +0 -0
  475. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/__init__.py +0 -0
  476. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/apply_diff.py +0 -0
  477. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/execute_command.py +0 -0
  478. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/list_files.py +0 -0
  479. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/read_file.py +0 -0
  480. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/search_replace.py +0 -0
  481. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/tools/write_file.py +0 -0
  482. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/utils/__init__.py +0 -0
  483. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/utils/file_utils.py +0 -0
  484. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/utils/ignore_utils.py +0 -0
  485. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/code/utils/text_utils.py +0 -0
  486. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/config/__init__.py +0 -0
  487. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/config/schema.py +0 -0
  488. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/__init__.py +0 -0
  489. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/_storage_path.py +0 -0
  490. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/artifact_store.py +0 -0
  491. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/config.py +0 -0
  492. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/history_store.py +0 -0
  493. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/queue.py +0 -0
  494. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/setup.py +0 -0
  495. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/context/terminal_logger.py +0 -0
  496. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/daemon/__init__.py +0 -0
  497. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/daemon/launchd.py +0 -0
  498. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/daemon/systemd.py +0 -0
  499. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/daemon/windows.py +0 -0
  500. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/db/__init__.py +0 -0
  501. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/db/adapter.py +0 -0
  502. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/__init__.py +0 -0
  503. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/api.py +0 -0
  504. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/docker.py +0 -0
  505. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/doctor.py +0 -0
  506. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/main.py +0 -0
  507. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/models.py +0 -0
  508. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/__init__.py +0 -0
  509. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/_registry.py +0 -0
  510. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/aws.py +0 -0
  511. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/azure.py +0 -0
  512. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/base.py +0 -0
  513. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/providers/gcp.py +0 -0
  514. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/deploy/schema.py +0 -0
  515. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/__init__.py +0 -0
  516. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/classifier.py +0 -0
  517. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/executor.py +0 -0
  518. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/extractor.py +0 -0
  519. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/reporter.py +0 -0
  520. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/runner.py +0 -0
  521. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/docs_runner/workspace.py +0 -0
  522. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/__init__.py +0 -0
  523. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/a2u_server.py +0 -0
  524. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/discovery.py +0 -0
  525. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/__init__.py +0 -0
  526. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/a2a.py +0 -0
  527. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/a2u.py +0 -0
  528. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/agents_api.py +0 -0
  529. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/base.py +0 -0
  530. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/mcp.py +0 -0
  531. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/openai_compat.py +0 -0
  532. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/recipe.py +0 -0
  533. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  534. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/registry.py +0 -0
  535. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/endpoints/server.py +0 -0
  536. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/__init__.py +0 -0
  537. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/client.py +0 -0
  538. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  539. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  540. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/components/__init__.py +0 -0
  541. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/converter.py +0 -0
  542. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/flow/helpers.py +0 -0
  543. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/__init__.py +0 -0
  544. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  545. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  546. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  547. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/registry.py +0 -0
  548. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/framework_adapters/validators.py +0 -0
  549. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/__init__.py +0 -0
  550. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/auth.py +0 -0
  551. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/client.py +0 -0
  552. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/cookie_auth.py +0 -0
  553. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/exec_approval.py +0 -0
  554. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/gateway_approval.py +0 -0
  555. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/health_monitor.py +0 -0
  556. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/home_channels.py +0 -0
  557. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/kanban_dispatcher.py +0 -0
  558. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/magic_link.py +0 -0
  559. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/origin_check.py +0 -0
  560. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/pairing.py +0 -0
  561. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/pairing_routes.py +0 -0
  562. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/port_utils.py +0 -0
  563. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/push_channels.py +0 -0
  564. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/push_delivery.py +0 -0
  565. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/push_polling.py +0 -0
  566. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/push_presence.py +0 -0
  567. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/rate_limiter.py +0 -0
  568. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/redis_pubsub.py +0 -0
  569. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/server.py +0 -0
  570. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/supervisor.py +0 -0
  571. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/gateway/unicode_utils.py +0 -0
  572. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/inbuilt_tools/__init__.py +0 -0
  573. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  574. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/inc/__init__.py +0 -0
  575. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/inc/config.py +0 -0
  576. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/inc/models.py +0 -0
  577. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/__init__.py +0 -0
  578. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/__init__.py +0 -0
  579. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  580. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/hooks_query.py +0 -0
  581. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  582. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/schedules_runner.py +0 -0
  583. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/usage_bridge.py +0 -0
  584. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/bridges/workflows_service.py +0 -0
  585. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/context_files.py +0 -0
  586. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/gateway_host.py +0 -0
  587. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/host_app.py +0 -0
  588. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/pages/__init__.py +0 -0
  589. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/pages/bot_health.py +0 -0
  590. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integration/pages/workflow_runs.py +0 -0
  591. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/__init__.py +0 -0
  592. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/_session_info.py +0 -0
  593. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/_tool_aliases.py +0 -0
  594. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/_unified_registry.py +0 -0
  595. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/base.py +0 -0
  596. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/claude_code.py +0 -0
  597. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/codex_cli.py +0 -0
  598. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/__init__.py +0 -0
  599. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/daytona.py +0 -0
  600. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/docker.py +0 -0
  601. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/e2b.py +0 -0
  602. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/flyio.py +0 -0
  603. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/local.py +0 -0
  604. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/compute/modal_compute.py +0 -0
  605. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/cursor_cli.py +0 -0
  606. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/db_session_adapter.py +0 -0
  607. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/gemini_cli.py +0 -0
  608. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/hosted_agent.py +0 -0
  609. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/local_agent.py +0 -0
  610. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/managed_agents.py +0 -0
  611. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/managed_local.py +0 -0
  612. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/registry.py +0 -0
  613. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/integrations/sandboxed_agent.py +0 -0
  614. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/__init__.py +0 -0
  615. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/executor.py +0 -0
  616. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/models.py +0 -0
  617. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/path_validation.py +0 -0
  618. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/router.py +0 -0
  619. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/server.py +0 -0
  620. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/jobs/store.py +0 -0
  621. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/kanban/__init__.py +0 -0
  622. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/kanban/models.py +0 -0
  623. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/kanban/paths.py +0 -0
  624. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/kanban/sqlite_store.py +0 -0
  625. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/__init__.py +0 -0
  626. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/catalogue.py +0 -0
  627. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/credentials.py +0 -0
  628. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/env.py +0 -0
  629. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/gateways.py +0 -0
  630. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/llm/registry.py +0 -0
  631. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/__init__.py +0 -0
  632. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/__init__.py +0 -0
  633. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/agents.py +0 -0
  634. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  635. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  636. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  637. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  638. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/memory.py +0 -0
  639. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/prompts.py +0 -0
  640. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/resources.py +0 -0
  641. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  642. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/auth/__init__.py +0 -0
  643. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/auth/api_key.py +0 -0
  644. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/auth/oauth.py +0 -0
  645. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/auth/oidc.py +0 -0
  646. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/auth/scopes.py +0 -0
  647. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/cli.py +0 -0
  648. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/elicitation.py +0 -0
  649. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/icons.py +0 -0
  650. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/recipe_adapter.py +0 -0
  651. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/recipe_cli.py +0 -0
  652. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/registry.py +0 -0
  653. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/sampling.py +0 -0
  654. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/server.py +0 -0
  655. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/tasks.py +0 -0
  656. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/tool_index.py +0 -0
  657. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/transports/__init__.py +0 -0
  658. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/transports/http_stream.py +0 -0
  659. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/mcp_server/transports/stdio.py +0 -0
  660. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/n8n/__init__.py +0 -0
  661. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/n8n/client.py +0 -0
  662. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/n8n/converter.py +0 -0
  663. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/n8n/preview.py +0 -0
  664. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/n8n/reverse_converter.py +0 -0
  665. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/observability/__init__.py +0 -0
  666. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/observability/hooks.py +0 -0
  667. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/observability/langextract.py +0 -0
  668. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/observability/langfuse.py +0 -0
  669. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/__init__.py +0 -0
  670. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/_valkey_client.py +0 -0
  671. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/config.py +0 -0
  672. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/__init__.py +0 -0
  673. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/_sql_base.py +0 -0
  674. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/async_mysql.py +0 -0
  675. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/async_postgres.py +0 -0
  676. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  677. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/base.py +0 -0
  678. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/json_store.py +0 -0
  679. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/mysql.py +0 -0
  680. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/postgres.py +0 -0
  681. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/singlestore.py +0 -0
  682. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/sqlite.py +0 -0
  683. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/supabase.py +0 -0
  684. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/surrealdb.py +0 -0
  685. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  686. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/conversation/turso.py +0 -0
  687. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/factory.py +0 -0
  688. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/hooks/__init__.py +0 -0
  689. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  690. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/__init__.py +0 -0
  691. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/base.py +0 -0
  692. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/cassandra.py +0 -0
  693. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/chroma.py +0 -0
  694. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  695. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  696. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/couchbase.py +0 -0
  697. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/lancedb.py +0 -0
  698. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  699. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  700. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  701. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/milvus.py +0 -0
  702. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  703. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/pgvector.py +0 -0
  704. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/pinecone.py +0 -0
  705. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/qdrant.py +0 -0
  706. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  707. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  708. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  709. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  710. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  711. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/knowledge/weaviate.py +0 -0
  712. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/migrations/__init__.py +0 -0
  713. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/migrations/manager.py +0 -0
  714. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/orchestrator.py +0 -0
  715. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/registry.py +0 -0
  716. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/__init__.py +0 -0
  717. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/async_mongodb.py +0 -0
  718. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/base.py +0 -0
  719. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/dynamodb.py +0 -0
  720. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/firestore.py +0 -0
  721. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/gcs.py +0 -0
  722. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/memory.py +0 -0
  723. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/mongodb.py +0 -0
  724. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/redis.py +0 -0
  725. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/upstash.py +0 -0
  726. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/state/valkey.py +0 -0
  727. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/tests/__init__.py +0 -0
  728. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/tests/test_all_backends.py +0 -0
  729. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  730. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/profiler.py +0 -0
  731. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/push/__init__.py +0 -0
  732. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/push/client.py +0 -0
  733. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/push/transports.py +0 -0
  734. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/__init__.py +0 -0
  735. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/bridge.py +0 -0
  736. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/core.py +0 -0
  737. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/exceptions.py +0 -0
  738. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/history.py +0 -0
  739. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/models.py +0 -0
  740. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/operations.py +0 -0
  741. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/policy.py +0 -0
  742. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/registry.py +0 -0
  743. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/runtime.py +0 -0
  744. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/security.py +0 -0
  745. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/serve.py +0 -0
  746. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/recipe/server.py +0 -0
  747. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/__init__.py +0 -0
  748. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/analyzer.py +0 -0
  749. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/applier.py +0 -0
  750. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/judge.py +0 -0
  751. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/plan.py +0 -0
  752. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/player.py +0 -0
  753. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/reader.py +0 -0
  754. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/storage.py +0 -0
  755. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/replay/writer.py +0 -0
  756. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/__init__.py +0 -0
  757. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/_compat.py +0 -0
  758. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/_registry.py +0 -0
  759. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/_shell.py +0 -0
  760. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/daytona.py +0 -0
  761. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/docker.py +0 -0
  762. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/e2b.py +0 -0
  763. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/modal.py +0 -0
  764. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/ssh.py +0 -0
  765. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/sandbox/subprocess.py +0 -0
  766. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/__init__.py +0 -0
  767. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/_dispatch.py +0 -0
  768. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/base.py +0 -0
  769. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/blueprint_catalogue.py +0 -0
  770. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/condition_gate.py +0 -0
  771. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/daemon_manager.py +0 -0
  772. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/deployment.py +0 -0
  773. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/enhanced_executor.py +0 -0
  774. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/executor.py +0 -0
  775. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/run_policy.py +0 -0
  776. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/shared.py +0 -0
  777. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/state_manager.py +0 -0
  778. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/suggestion_engine.py +0 -0
  779. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/scheduler/yaml_loader.py +0 -0
  780. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/security/__init__.py +0 -0
  781. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/security/audit.py +0 -0
  782. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/security/injection.py +0 -0
  783. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/security/protected.py +0 -0
  784. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/setup/__init__.py +0 -0
  785. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/setup/build.py +0 -0
  786. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/setup/post_install.py +0 -0
  787. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/setup/setup_conda_env.py +0 -0
  788. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/setup.py +0 -0
  789. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/__init__.py +0 -0
  790. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/ai_generator.py +0 -0
  791. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/config.py +0 -0
  792. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/dedupe.py +0 -0
  793. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/discovery.py +0 -0
  794. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/drift.py +0 -0
  795. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/engine.py +0 -0
  796. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/enhanced_templates.py +0 -0
  797. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/example_verifier.py +0 -0
  798. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/manifest.py +0 -0
  799. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/models.py +0 -0
  800. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/reports.py +0 -0
  801. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/templates.py +0 -0
  802. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/undo_redo.py +0 -0
  803. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/standardise/validator.py +0 -0
  804. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/dynamodb_adapter.py +0 -0
  805. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/mongodb_adapter.py +0 -0
  806. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/postgresql_adapter.py +0 -0
  807. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/redis_adapter.py +0 -0
  808. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/storage/valkey_adapter.py +0 -0
  809. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/__init__.py +0 -0
  810. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/batch_source.py +0 -0
  811. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/cli_docs_source.py +0 -0
  812. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/discovery.py +0 -0
  813. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/docs_source.py +0 -0
  814. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/examples_source.py +0 -0
  815. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/executor.py +0 -0
  816. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/models.py +0 -0
  817. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/report_viewer.py +0 -0
  818. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/reporter.py +0 -0
  819. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/suite_runner/runner.py +0 -0
  820. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/__init__.py +0 -0
  821. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/cache.py +0 -0
  822. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/dependency_checker.py +0 -0
  823. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/discovery.py +0 -0
  824. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/loader.py +0 -0
  825. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/registry.py +0 -0
  826. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/resolver.py +0 -0
  827. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/security.py +0 -0
  828. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/tool_override.py +0 -0
  829. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/templates/tools_doctor.py +0 -0
  830. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tool_resolver.py +0 -0
  831. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/__init__.py +0 -0
  832. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/audio.py +0 -0
  833. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/glob_tool.py +0 -0
  834. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/grep_tool.py +0 -0
  835. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/kanban_tools.py +0 -0
  836. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/multiedit.py +0 -0
  837. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/tools/skill_manage.py +0 -0
  838. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/__init__.py +0 -0
  839. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/_ollama.py +0 -0
  840. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/__init__.py +0 -0
  841. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/grader.py +0 -0
  842. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/hook.py +0 -0
  843. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/models.py +0 -0
  844. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/orchestrator.py +0 -0
  845. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/agents/storage.py +0 -0
  846. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/llm/__init__.py +0 -0
  847. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train/llm/trainer.py +0 -0
  848. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train.py +0 -0
  849. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/train_vision.py +0 -0
  850. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/_aiui_datastore.py +0 -0
  851. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/_external_agents.py +0 -0
  852. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/callbacks.py +0 -0
  853. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/components/aicoder.py +0 -0
  854. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/context.py +0 -0
  855. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui/database_config.py +0 -0
  856. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_agents/__init__.py +0 -0
  857. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_agents/default_app.py +0 -0
  858. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_bot/__init__.py +0 -0
  859. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_bot/default_app.py +0 -0
  860. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_chat/__init__.py +0 -0
  861. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_chat/default_app.py +0 -0
  862. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_dashboard/default_app.py +0 -0
  863. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_realtime/__init__.py +0 -0
  864. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/ui_realtime/default_app.py +0 -0
  865. {praisonai-4.6.74 → praisonai-4.6.75}/praisonai/upload_vision.py +0 -0
  866. {praisonai-4.6.74 → praisonai-4.6.75}/setup.cfg +0 -0
  867. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test.py +0 -0
  868. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_agents_playbook.py +0 -0
  869. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_approval_system.py +0 -0
  870. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_basic.py +0 -0
  871. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_cli_features.py +0 -0
  872. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_custom_tools_fix.py +0 -0
  873. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_double_api_fix.py +0 -0
  874. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_n8n_agent_invoke.py +0 -0
  875. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_n8n_cli_feature.py +0 -0
  876. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_n8n_integration.py +0 -0
  877. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_phase2_refactor.py +0 -0
  878. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_recipe.py +0 -0
  879. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_registry.py +0 -0
  880. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_runner.py +0 -0
  881. {praisonai-4.6.74 → praisonai-4.6.75}/tests/test_sandboxed_agent_compatibility.py +0 -0
  882. {praisonai-4.6.74 → 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.74
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.74
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.74
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.74
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
@@ -1,7 +1,7 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.6.74
4
+ praisonaiagents>=1.6.75
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -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."
@@ -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
 
@@ -52,6 +52,7 @@ class RunDecision(Enum):
52
52
  QUEUED = "queued" # Current run active, message queued for next turn
53
53
  MERGED = "merged" # Message merged into existing pending slot
54
54
  INTERRUPTED = "interrupted" # Current run was interrupted, start new run
55
+ STEERED = "steered" # Message injected into the live run via steering
55
56
 
56
57
 
57
58
  class BusyMode(Enum):
@@ -71,6 +72,7 @@ class SessionRunState:
71
72
  self.interrupt_controller: Optional["InterruptController"] = None
72
73
  self.start_time: Optional[float] = None
73
74
  self.last_activity: float = time.time() # Always track activity for cleanup
75
+ self.agent: Optional[Any] = None # Live agent handle for STEER mode
74
76
 
75
77
 
76
78
  class SessionRunControl:
@@ -163,11 +165,25 @@ class SessionRunControl:
163
165
  return RunDecision.INTERRUPTED
164
166
 
165
167
  elif self._busy_mode == BusyMode.STEER:
166
- # Try to inject into running agent via steering
167
- # Note: This requires the agent to have steering enabled
168
- # For now, we'll fall back to queueing
169
- logger.warning("Steer mode is not yet implemented, falling back to queue mode")
170
- # TODO: Implement steering integration when agent reference is available
168
+ # Inject the message into the running agent via steering so the
169
+ # current turn folds in the new guidance (preserving partial
170
+ # progress) instead of cancelling or waiting for the run to end.
171
+ agent = session.agent
172
+ if agent is not None and getattr(agent, "message_steering_enabled", False):
173
+ try:
174
+ # priority 30 == SteeringPriority.INTERRUPT (immediate)
175
+ msg_id = agent.steer(text, priority=30)
176
+ except Exception as exc: # noqa: BLE001 - fall back safely
177
+ logger.warning("Steering injection failed (%s), falling back to queue", exc)
178
+ else:
179
+ if msg_id:
180
+ return RunDecision.STEERED
181
+ logger.warning("Steering returned no message id, falling back to queue")
182
+ else:
183
+ logger.warning(
184
+ "Steer mode requested but agent has no steering enabled, falling back to queue"
185
+ )
186
+ # Safe fallback: queue the message below.
171
187
 
172
188
  # Default to queue mode (or steer fallback)
173
189
  if session.pending_message is None:
@@ -196,6 +212,8 @@ class SessionRunControl:
196
212
  action = "added to pending request"
197
213
  elif decision == RunDecision.INTERRUPTED:
198
214
  return "⚠️ Previous task cancelled, starting your new request"
215
+ elif decision == RunDecision.STEERED:
216
+ return "🧭 Steering the current task with your new guidance"
199
217
  else:
200
218
  return "" # No ack needed for RUN_NOW
201
219
 
@@ -235,6 +253,7 @@ class SessionRunControl:
235
253
  session.pending_message = None
236
254
  session.interrupt_controller = None
237
255
  session.start_time = None
256
+ session.agent = None
238
257
 
239
258
  return True
240
259
 
@@ -269,6 +288,21 @@ class SessionRunControl:
269
288
  session.is_running = False
270
289
  session.interrupt_controller = None
271
290
  session.start_time = None
291
+ session.agent = None
292
+
293
+ def register_agent(self, user_id: str, agent: Any) -> None:
294
+ """Register the live agent handle for a user's run (for STEER mode).
295
+
296
+ The gateway calls this once the run is active so that subsequent
297
+ mid-run messages in STEER mode can be injected into the agent's
298
+ steering queue via ``agent.steer(...)``.
299
+
300
+ Args:
301
+ user_id: User identifier
302
+ agent: The Agent instance handling this user's run
303
+ """
304
+ session = self._get_session(user_id)
305
+ session.agent = agent
272
306
 
273
307
  def get_interrupt_controller(self, user_id: str) -> Optional["InterruptController"]:
274
308
  """Get the interrupt controller for a user's current run.
@@ -110,6 +110,11 @@ class BotSessionManager:
110
110
  # Run timeout and active run tracking for cancellation support
111
111
  self._run_timeout = run_timeout
112
112
  self._active_runs: Dict[str, Any] = {} # user_id -> InterruptController
113
+ # Per-user model overrides set via the /model command. Applied per-turn
114
+ # inside the agent lock in chat() and restored afterwards so a shared
115
+ # Agent instance never leaks one user's model to another. Keyed by
116
+ # storage_key (same as _histories).
117
+ self._model_overrides: Dict[str, Any] = {}
113
118
  # Session reset policy for automatic lifecycle management
114
119
  self._reset_policy = reset_policy or SessionResetPolicy(mode="none")
115
120
  # Track storage keys we've already fired SESSION_START for, so the
@@ -525,7 +530,21 @@ class BotSessionManager:
525
530
  async with agent_lock:
526
531
  saved_history = agent.chat_history
527
532
  agent.chat_history = user_history
528
-
533
+
534
+ # Apply a per-user model override (set via the /model
535
+ # command) for the duration of this turn only. The swap
536
+ # happens inside the per-agent lock and is restored in
537
+ # the finally below, so a shared Agent instance never
538
+ # leaks one user's model to another concurrent user.
539
+ _model_overridden = False
540
+ _saved_llm = None
541
+ _override = self._model_overrides.get(self._storage_key(user_id))
542
+ if _override is not None and hasattr(agent, "llm"):
543
+ _saved_llm = agent.llm
544
+ if _override != _saved_llm:
545
+ agent.llm = _override
546
+ _model_overridden = True
547
+
529
548
  # Create interrupt controller for this run and register it
530
549
  try:
531
550
  from praisonaiagents.agent.interrupt import InterruptController
@@ -628,6 +647,10 @@ class BotSessionManager:
628
647
  raise
629
648
  finally:
630
649
  agent.chat_history = saved_history
650
+ # Restore the agent's original model if we applied a
651
+ # per-user override for this turn.
652
+ if _model_overridden:
653
+ agent.llm = _saved_llm
631
654
  # Clean up active run tracking
632
655
  if controller:
633
656
  self._active_runs.pop(storage_key, None)
@@ -702,6 +725,19 @@ class BotSessionManager:
702
725
  # Submit message to run control
703
726
  decision = await self._run_control.submit(user_id, prompt)
704
727
 
728
+ if decision == RunDecision.STEERED:
729
+ # Message was injected into the live run via steering; the running
730
+ # turn folds in the new guidance without a separate response here.
731
+ ack_msg = await self._run_control.get_busy_ack_message(user_id, decision)
732
+ return {
733
+ "response": ack_msg,
734
+ "metadata": {
735
+ "run_control": True,
736
+ "decision": decision.value,
737
+ "steered": True,
738
+ }
739
+ }
740
+
705
741
  if decision in (RunDecision.QUEUED, RunDecision.MERGED):
706
742
  # Message was queued or merged, return acknowledgment
707
743
  ack_msg = await self._run_control.get_busy_ack_message(user_id, decision)
@@ -713,7 +749,7 @@ class BotSessionManager:
713
749
  "queued": True
714
750
  }
715
751
  }
716
-
752
+
717
753
  # We're running now (RUN_NOW or INTERRUPTED)
718
754
  current_prompt = prompt
719
755
  last_response = ""
@@ -725,6 +761,17 @@ class BotSessionManager:
725
761
  interrupt_controller = None
726
762
 
727
763
  if last_decision in (RunDecision.RUN_NOW, RunDecision.INTERRUPTED):
764
+ # Register the live agent for each fresh run so that mid-run
765
+ # STEER messages can be injected into it. finish_run() clears the
766
+ # handle after every turn, so re-register on each pending iteration
767
+ # too (otherwise STEER silently falls back to QUEUE after the
768
+ # first run).
769
+ if hasattr(self._run_control, "register_agent"):
770
+ try:
771
+ self._run_control.register_agent(user_id, agent)
772
+ except Exception: # noqa: BLE001 - registration is best-effort
773
+ logger.debug("Failed to register agent for steering", exc_info=True)
774
+
728
775
  interrupt_controller = self._run_control.get_interrupt_controller(user_id)
729
776
 
730
777
  status = self._run_control.get_run_status(user_id)
@@ -919,17 +919,4 @@ class AgentMailBot(ChatCommandMixin, MessageHookMixin):
919
919
 
920
920
  async def health(self) -> HealthResult:
921
921
  """Get health status of the AgentMail bot."""
922
- probe_result = await self.probe()
923
-
924
- uptime = 0.0
925
- if self._started_at:
926
- uptime = time.time() - self._started_at
927
-
928
- return HealthResult(
929
- ok=self._is_running and probe_result.ok,
930
- platform="agentmail",
931
- is_running=self._is_running,
932
- uptime_seconds=uptime,
933
- probe=probe_result,
934
- sessions=self._session.active_count() if hasattr(self._session, 'active_count') else 0,
935
- )
922
+ return await self._default_health()
@@ -25,7 +25,15 @@ from praisonaiagents.bots import (
25
25
  PlatformCapabilities,
26
26
  )
27
27
 
28
- from ._commands import format_status, format_help, handle_stop_command
28
+ from ._commands import (
29
+ format_status,
30
+ format_help,
31
+ handle_stop_command,
32
+ handle_model_command,
33
+ handle_usage_command,
34
+ handle_compress_command,
35
+ handle_queue_command
36
+ )
29
37
  from ._session import BotSessionManager
30
38
  from ._debounce import InboundDebouncer
31
39
  from ._ack import AckReactor
@@ -244,6 +252,32 @@ class DiscordBot(ChatCommandMixin, MessageHookMixin):
244
252
  response = handle_stop_command(self._session, user_id)
245
253
  await message.reply(response)
246
254
  return
255
+ elif command == "model":
256
+ user_id = str(message.author.id)
257
+ # Extract model name from message
258
+ parts = bot_message.text.split(maxsplit=1)
259
+ model_name = parts[1] if len(parts) > 1 else None
260
+ response = handle_model_command(self._session, user_id, model_name, self._agent)
261
+ await message.reply(response)
262
+ return
263
+ elif command == "usage":
264
+ user_id = str(message.author.id)
265
+ response = handle_usage_command(self._session, user_id, self._agent)
266
+ await message.reply(response)
267
+ return
268
+ elif command == "compress":
269
+ user_id = str(message.author.id)
270
+ response = handle_compress_command(self._session, user_id, self._agent)
271
+ await message.reply(response)
272
+ return
273
+ elif command == "queue":
274
+ user_id = str(message.author.id)
275
+ # Extract message text from command
276
+ parts = bot_message.text.split(maxsplit=1)
277
+ message_text = parts[1] if len(parts) > 1 else None
278
+ response = handle_queue_command(self._session, user_id, message_text)
279
+ await message.reply(response)
280
+ return
247
281
  elif command and command in self._command_handlers:
248
282
  handler = self._command_handlers[command]
249
283
  try:
@@ -550,16 +584,7 @@ class DiscordBot(ChatCommandMixin, MessageHookMixin):
550
584
 
551
585
  async def health(self):
552
586
  """Get detailed health status of the Discord bot."""
553
- from praisonaiagents.bots import HealthResult
554
- probe_result = await self.probe()
555
- uptime = (time.time() - self._started_at) if self._started_at else None
556
- session_count = len(self._session._histories) if hasattr(self._session, '_histories') else 0
557
- return HealthResult(
558
- ok=self._is_running and probe_result.ok, platform="discord",
559
- is_running=self._is_running, uptime_seconds=uptime,
560
- probe=probe_result, sessions=session_count,
561
- error=probe_result.error if not probe_result.ok else None,
562
- )
587
+ return await self._default_health()
563
588
 
564
589
  def _format_status(self) -> str:
565
590
  """Format /status response."""