PraisonAI 4.6.57__tar.gz → 4.6.58__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 (830) hide show
  1. {praisonai-4.6.57 → praisonai-4.6.58}/PKG-INFO +2 -2
  2. {praisonai-4.6.57 → praisonai-4.6.58}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.57 → praisonai-4.6.58}/PraisonAI.egg-info/SOURCES.txt +3 -0
  4. {praisonai-4.6.57 → praisonai-4.6.58}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_commands.py +64 -0
  6. praisonai-4.6.58/praisonai/bots/_run_control.py +346 -0
  7. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_session.py +126 -0
  8. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/telegram.py +13 -0
  9. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/server.py +2 -2
  10. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/run.py +206 -10
  11. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/session.py +65 -9
  12. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/serve.py +34 -0
  13. praisonai-4.6.58/praisonai/cli/state/project_sessions.py +101 -0
  14. praisonai-4.6.58/praisonai/cli/utils/project.py +96 -0
  15. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/utils/file_utils.py +3 -3
  16. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/jobs/models.py +2 -2
  17. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/jobs/server.py +19 -0
  18. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/server.py +5 -0
  19. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/transports/http_stream.py +19 -7
  20. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/serve.py +8 -3
  21. praisonai-4.6.58/praisonai/version.py +1 -0
  22. {praisonai-4.6.57 → praisonai-4.6.58}/pyproject.toml +1 -1
  23. praisonai-4.6.57/praisonai/version.py +0 -1
  24. {praisonai-4.6.57 → praisonai-4.6.58}/PraisonAI.egg-info/dependency_links.txt +0 -0
  25. {praisonai-4.6.57 → praisonai-4.6.58}/PraisonAI.egg-info/entry_points.txt +0 -0
  26. {praisonai-4.6.57 → praisonai-4.6.58}/PraisonAI.egg-info/top_level.txt +0 -0
  27. {praisonai-4.6.57 → praisonai-4.6.58}/README.md +0 -0
  28. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/__init__.py +0 -0
  29. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/__main__.py +0 -0
  30. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_approval_spec.py +0 -0
  31. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_async_bridge.py +0 -0
  32. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/__init__.py +0 -0
  33. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/api_md.py +0 -0
  34. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/__init__.py +0 -0
  35. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/docs_extractor.py +0 -0
  36. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/docs_generator.py +0 -0
  37. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/generator.py +0 -0
  38. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  39. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/python_extractor.py +0 -0
  40. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  41. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/rust_extractor.py +0 -0
  42. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  43. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  44. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  45. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_entrypoint.py +0 -0
  46. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_framework_availability.py +0 -0
  47. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_logging.py +0 -0
  48. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_registry.py +0 -0
  49. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/_safe_loader.py +0 -0
  50. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/acp/__init__.py +0 -0
  51. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/acp/config.py +0 -0
  52. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/acp/safe_edit.py +0 -0
  53. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/acp/server.py +0 -0
  54. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/acp/session.py +0 -0
  55. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/adapters/__init__.py +0 -0
  56. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/adapters/readers.py +0 -0
  57. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/adapters/rerankers.py +0 -0
  58. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/adapters/retrievers.py +0 -0
  59. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/adapters/vector_stores.py +0 -0
  60. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/agent.py +0 -0
  61. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/agent_scheduler.py +0 -0
  62. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/agents_generator.py +0 -0
  63. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/api/agent_invoke.py +0 -0
  64. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/api/call.py +0 -0
  65. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/app/__init__.py +0 -0
  66. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/app/agentos.py +0 -0
  67. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/async_agent_scheduler.py +0 -0
  68. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/audit/__init__.py +0 -0
  69. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/audit/agent_centric.py +0 -0
  70. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/auto.py +0 -0
  71. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/__init__.py +0 -0
  72. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_ack.py +0 -0
  73. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_approval.py +0 -0
  74. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_approval_base.py +0 -0
  75. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_auth.py +0 -0
  76. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_chunk.py +0 -0
  77. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_config_schema.py +0 -0
  78. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_debounce.py +0 -0
  79. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_defaults.py +0 -0
  80. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_discord_approval.py +0 -0
  81. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_dlq.py +0 -0
  82. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_email_utils.py +0 -0
  83. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_http_approval.py +0 -0
  84. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_ingress.py +0 -0
  85. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_mirror.py +0 -0
  86. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_pairing_ui.py +0 -0
  87. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_protocol_mixin.py +0 -0
  88. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_rate_limit.py +0 -0
  89. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_registry.py +0 -0
  90. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_resilience.py +0 -0
  91. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_slack_approval.py +0 -0
  92. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_streaming.py +0 -0
  93. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_telegram_approval.py +0 -0
  94. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_typing_indicator.py +0 -0
  95. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_unknown_user.py +0 -0
  96. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_webhook_approval.py +0 -0
  97. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  98. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/agentmail.py +0 -0
  99. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/bot.py +0 -0
  100. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/botos.py +0 -0
  101. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/discord.py +0 -0
  102. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/email.py +0 -0
  103. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/linear.py +0 -0
  104. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/media.py +0 -0
  105. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/slack.py +0 -0
  106. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/bots/whatsapp.py +0 -0
  107. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/__init__.py +0 -0
  108. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/agent.py +0 -0
  109. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/benchmark.py +0 -0
  110. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/cdp_agent.py +0 -0
  111. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/cdp_utils.py +0 -0
  112. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/cli.py +0 -0
  113. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/diagnostics.py +0 -0
  114. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/launcher.py +0 -0
  115. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/playwright_agent.py +0 -0
  116. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/profiling.py +0 -0
  117. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/protocol.py +0 -0
  118. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/report.py +0 -0
  119. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/sessions.py +0 -0
  120. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/browser/video.py +0 -0
  121. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/__init__.py +0 -0
  122. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/a2a.py +0 -0
  123. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/assistants.py +0 -0
  124. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/audio.py +0 -0
  125. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/batches.py +0 -0
  126. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/completions.py +0 -0
  127. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/container_files.py +0 -0
  128. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/containers.py +0 -0
  129. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/embeddings.py +0 -0
  130. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/files.py +0 -0
  131. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/fine_tuning.py +0 -0
  132. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/guardrails.py +0 -0
  133. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/images.py +0 -0
  134. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/mcp.py +0 -0
  135. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/messages.py +0 -0
  136. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/moderations.py +0 -0
  137. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/ocr.py +0 -0
  138. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/passthrough.py +0 -0
  139. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/rag.py +0 -0
  140. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/realtime.py +0 -0
  141. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/rerank.py +0 -0
  142. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/responses.py +0 -0
  143. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/search.py +0 -0
  144. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/skills.py +0 -0
  145. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/vector_store_files.py +0 -0
  146. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/vector_stores.py +0 -0
  147. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/capabilities/videos.py +0 -0
  148. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/claw/__init__.py +0 -0
  149. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/claw/default_app.py +0 -0
  150. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/__init__.py +0 -0
  151. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/_paths.py +0 -0
  152. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/app.py +0 -0
  153. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/branding.py +0 -0
  154. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/__init__.py +0 -0
  155. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/acp.py +0 -0
  156. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/agents.py +0 -0
  157. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/app.py +0 -0
  158. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/audit.py +0 -0
  159. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/batch.py +0 -0
  160. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/benchmark.py +0 -0
  161. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/bot.py +0 -0
  162. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/browser.py +0 -0
  163. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/call.py +0 -0
  164. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/chat.py +0 -0
  165. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/claw.py +0 -0
  166. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/code.py +0 -0
  167. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/commit.py +0 -0
  168. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/completion.py +0 -0
  169. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/config.py +0 -0
  170. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/context.py +0 -0
  171. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/dashboard.py +0 -0
  172. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/debug.py +0 -0
  173. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/deploy.py +0 -0
  174. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/diag.py +0 -0
  175. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/docs.py +0 -0
  176. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/doctor.py +0 -0
  177. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/endpoints.py +0 -0
  178. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/environment.py +0 -0
  179. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/eval.py +0 -0
  180. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/examples.py +0 -0
  181. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/flow.py +0 -0
  182. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/gateway.py +0 -0
  183. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/github.py +0 -0
  184. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/hooks.py +0 -0
  185. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/kanban.py +0 -0
  186. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/knowledge.py +0 -0
  187. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/langextract.py +0 -0
  188. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/langfuse.py +0 -0
  189. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/loop.py +0 -0
  190. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/lsp.py +0 -0
  191. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/managed.py +0 -0
  192. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/mcp.py +0 -0
  193. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/memory.py +0 -0
  194. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/mint_link.py +0 -0
  195. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/n8n.py +0 -0
  196. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/obs.py +0 -0
  197. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/onboard.py +0 -0
  198. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/package.py +0 -0
  199. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/pairing.py +0 -0
  200. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/paths.py +0 -0
  201. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/plugins.py +0 -0
  202. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/port.py +0 -0
  203. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/profile.py +0 -0
  204. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/publish.py +0 -0
  205. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/rag.py +0 -0
  206. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/realtime.py +0 -0
  207. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/recipe.py +0 -0
  208. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/registry.py +0 -0
  209. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/replay.py +0 -0
  210. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/research.py +0 -0
  211. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/retrieval.py +0 -0
  212. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/rules.py +0 -0
  213. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/sandbox.py +0 -0
  214. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/schedule.py +0 -0
  215. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/serve.py +0 -0
  216. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/setup.py +0 -0
  217. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/skills.py +0 -0
  218. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/standardise.py +0 -0
  219. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/templates.py +0 -0
  220. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/test.py +0 -0
  221. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/todo.py +0 -0
  222. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/tools.py +0 -0
  223. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/traces.py +0 -0
  224. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/tracker.py +0 -0
  225. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/train.py +0 -0
  226. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/ui.py +0 -0
  227. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/up.py +0 -0
  228. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/version.py +0 -0
  229. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/commands/workflow.py +0 -0
  230. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/config_loader.py +0 -0
  231. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/configuration/__init__.py +0 -0
  232. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/configuration/loader.py +0 -0
  233. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/configuration/paths.py +0 -0
  234. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/configuration/schema.py +0 -0
  235. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/execution/__init__.py +0 -0
  236. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/execution/core.py +0 -0
  237. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/execution/profiler.py +0 -0
  238. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/execution/request.py +0 -0
  239. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/execution/result.py +0 -0
  240. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/fallback_schema.py +0 -0
  241. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/__init__.py +0 -0
  242. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/acp.py +0 -0
  243. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/action_orchestrator.py +0 -0
  244. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/agent_scheduler.py +0 -0
  245. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/agent_tools.py +0 -0
  246. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/agents.py +0 -0
  247. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/approval.py +0 -0
  248. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/at_mentions.py +0 -0
  249. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/audit_cli.py +0 -0
  250. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/auto_memory.py +0 -0
  251. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/auto_mode.py +0 -0
  252. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/autonomy_mode.py +0 -0
  253. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/background.py +0 -0
  254. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/base.py +0 -0
  255. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/benchmark.py +0 -0
  256. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/bots_cli.py +0 -0
  257. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/capabilities.py +0 -0
  258. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/checkpoints.py +0 -0
  259. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/cli_profiler.py +0 -0
  260. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/code_intelligence.py +0 -0
  261. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/compaction.py +0 -0
  262. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/compare.py +0 -0
  263. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/config_hierarchy.py +0 -0
  264. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/context_manager.py +0 -0
  265. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/cost_tracker.py +0 -0
  266. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/csv_test_runner.py +0 -0
  267. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/debug.py +0 -0
  268. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/deploy.py +0 -0
  269. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/diag.py +0 -0
  270. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/display_jsonl.py +0 -0
  271. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/__init__.py +0 -0
  272. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  273. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  274. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  275. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  276. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  277. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  278. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  279. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  280. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  281. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  282. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  283. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  284. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  285. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  286. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  287. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  288. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  289. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  290. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/engine.py +0 -0
  291. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/formatters.py +0 -0
  292. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/handler.py +0 -0
  293. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/models.py +0 -0
  294. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/doctor/registry.py +0 -0
  295. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/endpoints.py +0 -0
  296. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/eval.py +0 -0
  297. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/examples.py +0 -0
  298. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/external_agents.py +0 -0
  299. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/fast_context.py +0 -0
  300. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/file_history.py +0 -0
  301. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/flow_display.py +0 -0
  302. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/gateway.py +0 -0
  303. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/git_attribution.py +0 -0
  304. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/git_integration.py +0 -0
  305. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/guardrail.py +0 -0
  306. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/handoff.py +0 -0
  307. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/hooks.py +0 -0
  308. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/hybrid_workflow.py +0 -0
  309. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/image.py +0 -0
  310. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/interactive_core_headless.py +0 -0
  311. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/interactive_runtime.py +0 -0
  312. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/interactive_test_harness.py +0 -0
  313. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/interactive_tools.py +0 -0
  314. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/interactive_tui.py +0 -0
  315. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/job_workflow.py +0 -0
  316. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/jobs.py +0 -0
  317. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/knowledge.py +0 -0
  318. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/knowledge_cli.py +0 -0
  319. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/lite.py +0 -0
  320. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/logs.py +0 -0
  321. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/lsp_cli.py +0 -0
  322. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  323. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/mcp.py +0 -0
  324. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/message_queue.py +0 -0
  325. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/metrics.py +0 -0
  326. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/migrate.py +0 -0
  327. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/migration_flow.py +0 -0
  328. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/migration_spec.py +0 -0
  329. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/n8n.py +0 -0
  330. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/observability.py +0 -0
  331. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/ollama.py +0 -0
  332. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/onboard.py +0 -0
  333. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/output_modes.py +0 -0
  334. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/output_style.py +0 -0
  335. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/package.py +0 -0
  336. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/performance.py +0 -0
  337. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/persistence.py +0 -0
  338. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/plugin_cli.py +0 -0
  339. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/profile.py +0 -0
  340. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/profiler/__init__.py +0 -0
  341. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/profiler/core.py +0 -0
  342. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/profiler/optimizations.py +0 -0
  343. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/profiler/suite.py +0 -0
  344. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/profiling.py +0 -0
  345. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/queue/__init__.py +0 -0
  346. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/queue/manager.py +0 -0
  347. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/queue/models.py +0 -0
  348. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/queue/persistence.py +0 -0
  349. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/queue/scheduler.py +0 -0
  350. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/queue/worker.py +0 -0
  351. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/recipe.py +0 -0
  352. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/recipe_creator.py +0 -0
  353. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/recipe_optimizer.py +0 -0
  354. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/recipe_prompts.py +0 -0
  355. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/recipes.py +0 -0
  356. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/registry.py +0 -0
  357. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/repo_map.py +0 -0
  358. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/router.py +0 -0
  359. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/safe_shell.py +0 -0
  360. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/sandbox_cli.py +0 -0
  361. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/sandbox_executor.py +0 -0
  362. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/sdk_knowledge.py +0 -0
  363. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/session.py +0 -0
  364. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/setup/__init__.py +0 -0
  365. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/setup/handler.py +0 -0
  366. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/setup/templates.py +0 -0
  367. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/skills.py +0 -0
  368. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/slash_commands.py +0 -0
  369. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/telemetry.py +0 -0
  370. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/templates.py +0 -0
  371. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/thinking.py +0 -0
  372. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/todo.py +0 -0
  373. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tools.py +0 -0
  374. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/__init__.py +0 -0
  375. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/app.py +0 -0
  376. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/cli.py +0 -0
  377. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/config.py +0 -0
  378. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/debug.py +0 -0
  379. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/events.py +0 -0
  380. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/mock_provider.py +0 -0
  381. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/orchestrator.py +0 -0
  382. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  383. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/screens/help.py +0 -0
  384. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/screens/main.py +0 -0
  385. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/screens/queue.py +0 -0
  386. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/screens/session.py +0 -0
  387. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/screens/settings.py +0 -0
  388. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/session_store.py +0 -0
  389. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  390. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  391. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  392. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  393. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  394. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  395. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/widgets/status.py +0 -0
  396. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  397. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/wizard.py +0 -0
  398. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/workflow.py +0 -0
  399. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/features/yaml_utils.py +0 -0
  400. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/__init__.py +0 -0
  401. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/async_tui.py +0 -0
  402. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/config.py +0 -0
  403. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/core.py +0 -0
  404. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/events.py +0 -0
  405. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  406. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  407. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  408. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/praison_io.py +0 -0
  409. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/repl.py +0 -0
  410. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/split_tui.py +0 -0
  411. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/interactive/tui_app.py +0 -0
  412. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/langfuse_client.py +0 -0
  413. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/legacy.py +0 -0
  414. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/main.py +0 -0
  415. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/output/__init__.py +0 -0
  416. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/output/console.py +0 -0
  417. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/schedule_cli.py +0 -0
  418. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/schema_provider.py +0 -0
  419. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/session/__init__.py +0 -0
  420. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/session/unified.py +0 -0
  421. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/state/__init__.py +0 -0
  422. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/state/identifiers.py +0 -0
  423. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/state/sessions.py +0 -0
  424. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/ui/__init__.py +0 -0
  425. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/ui/config.py +0 -0
  426. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/ui/events.py +0 -0
  427. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/ui/mg_backend.py +0 -0
  428. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/ui/plain.py +0 -0
  429. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/ui/rich_backend.py +0 -0
  430. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli/unified_schema.py +0 -0
  431. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli_backends/__init__.py +0 -0
  432. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli_backends/claude.py +0 -0
  433. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/cli_backends/registry.py +0 -0
  434. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/__init__.py +0 -0
  435. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/agent_tools.py +0 -0
  436. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/diff/__init__.py +0 -0
  437. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/diff/diff_strategy.py +0 -0
  438. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/tools/__init__.py +0 -0
  439. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/tools/apply_diff.py +0 -0
  440. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/tools/execute_command.py +0 -0
  441. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/tools/list_files.py +0 -0
  442. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/tools/read_file.py +0 -0
  443. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/tools/search_replace.py +0 -0
  444. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/tools/write_file.py +0 -0
  445. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/utils/__init__.py +0 -0
  446. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/utils/ignore_utils.py +0 -0
  447. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/code/utils/text_utils.py +0 -0
  448. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/context/__init__.py +0 -0
  449. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/context/artifact_store.py +0 -0
  450. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/context/config.py +0 -0
  451. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/context/history_store.py +0 -0
  452. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/context/queue.py +0 -0
  453. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/context/setup.py +0 -0
  454. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/context/terminal_logger.py +0 -0
  455. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/daemon/__init__.py +0 -0
  456. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/daemon/launchd.py +0 -0
  457. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/daemon/systemd.py +0 -0
  458. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/daemon/windows.py +0 -0
  459. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/db/__init__.py +0 -0
  460. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/db/adapter.py +0 -0
  461. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/__init__.py +0 -0
  462. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/api.py +0 -0
  463. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/docker.py +0 -0
  464. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/doctor.py +0 -0
  465. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/main.py +0 -0
  466. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/models.py +0 -0
  467. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/providers/__init__.py +0 -0
  468. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/providers/aws.py +0 -0
  469. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/providers/azure.py +0 -0
  470. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/providers/base.py +0 -0
  471. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/providers/gcp.py +0 -0
  472. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/deploy/schema.py +0 -0
  473. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/docs_runner/__init__.py +0 -0
  474. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/docs_runner/classifier.py +0 -0
  475. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/docs_runner/executor.py +0 -0
  476. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/docs_runner/extractor.py +0 -0
  477. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/docs_runner/reporter.py +0 -0
  478. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/docs_runner/runner.py +0 -0
  479. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/docs_runner/workspace.py +0 -0
  480. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/__init__.py +0 -0
  481. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/a2u_server.py +0 -0
  482. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/discovery.py +0 -0
  483. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/providers/__init__.py +0 -0
  484. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/providers/a2a.py +0 -0
  485. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/providers/a2u.py +0 -0
  486. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/providers/agents_api.py +0 -0
  487. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/providers/base.py +0 -0
  488. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/providers/mcp.py +0 -0
  489. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/providers/recipe.py +0 -0
  490. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  491. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/registry.py +0 -0
  492. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/endpoints/server.py +0 -0
  493. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/flow/__init__.py +0 -0
  494. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/flow/client.py +0 -0
  495. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  496. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  497. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/flow/components/__init__.py +0 -0
  498. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/flow/converter.py +0 -0
  499. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/flow/helpers.py +0 -0
  500. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/framework_adapters/__init__.py +0 -0
  501. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  502. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/framework_adapters/base.py +0 -0
  503. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/framework_adapters/crewai_adapter.py +0 -0
  504. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/framework_adapters/praisonai_adapter.py +0 -0
  505. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/framework_adapters/registry.py +0 -0
  506. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/framework_adapters/validators.py +0 -0
  507. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/__init__.py +0 -0
  508. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/auth.py +0 -0
  509. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/cookie_auth.py +0 -0
  510. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/exec_approval.py +0 -0
  511. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/gateway_approval.py +0 -0
  512. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/kanban_dispatcher.py +0 -0
  513. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/magic_link.py +0 -0
  514. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/origin_check.py +0 -0
  515. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/pairing.py +0 -0
  516. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/pairing_routes.py +0 -0
  517. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/port_utils.py +0 -0
  518. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/push_channels.py +0 -0
  519. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/push_delivery.py +0 -0
  520. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/push_polling.py +0 -0
  521. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/push_presence.py +0 -0
  522. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/rate_limiter.py +0 -0
  523. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/redis_pubsub.py +0 -0
  524. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/server.py +0 -0
  525. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/supervisor.py +0 -0
  526. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/gateway/unicode_utils.py +0 -0
  527. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/inbuilt_tools/__init__.py +0 -0
  528. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  529. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/inc/__init__.py +0 -0
  530. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/inc/config.py +0 -0
  531. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/inc/models.py +0 -0
  532. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/__init__.py +0 -0
  533. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/_legacy_handlers.py +0 -0
  534. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/bridges/__init__.py +0 -0
  535. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  536. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/bridges/hooks_query.py +0 -0
  537. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  538. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/bridges/schedules_runner.py +0 -0
  539. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/bridges/usage_bridge.py +0 -0
  540. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/bridges/workflows_service.py +0 -0
  541. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/context_files.py +0 -0
  542. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/gateway_host.py +0 -0
  543. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/host_app.py +0 -0
  544. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/pages/__init__.py +0 -0
  545. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/pages/bot_health.py +0 -0
  546. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integration/pages/workflow_runs.py +0 -0
  547. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/__init__.py +0 -0
  548. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/_session_info.py +0 -0
  549. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/_tool_aliases.py +0 -0
  550. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/_unified_registry.py +0 -0
  551. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/base.py +0 -0
  552. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/claude_code.py +0 -0
  553. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/codex_cli.py +0 -0
  554. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/compute/__init__.py +0 -0
  555. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/compute/daytona.py +0 -0
  556. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/compute/docker.py +0 -0
  557. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/compute/e2b.py +0 -0
  558. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/compute/flyio.py +0 -0
  559. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/compute/local.py +0 -0
  560. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/compute/modal_compute.py +0 -0
  561. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/cursor_cli.py +0 -0
  562. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/db_session_adapter.py +0 -0
  563. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/gemini_cli.py +0 -0
  564. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/hosted_agent.py +0 -0
  565. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/local_agent.py +0 -0
  566. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/managed_agents.py +0 -0
  567. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/managed_local.py +0 -0
  568. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/registry.py +0 -0
  569. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/integrations/sandboxed_agent.py +0 -0
  570. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/jobs/__init__.py +0 -0
  571. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/jobs/executor.py +0 -0
  572. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/jobs/router.py +0 -0
  573. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/jobs/store.py +0 -0
  574. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/kanban/__init__.py +0 -0
  575. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/kanban/models.py +0 -0
  576. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/kanban/paths.py +0 -0
  577. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/kanban/sqlite_store.py +0 -0
  578. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/llm/__init__.py +0 -0
  579. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/llm/env.py +0 -0
  580. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/llm/registry.py +0 -0
  581. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/__init__.py +0 -0
  582. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/adapters/__init__.py +0 -0
  583. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/adapters/agents.py +0 -0
  584. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  585. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  586. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  587. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  588. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/adapters/memory.py +0 -0
  589. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/adapters/prompts.py +0 -0
  590. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/adapters/resources.py +0 -0
  591. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  592. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/auth/__init__.py +0 -0
  593. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/auth/api_key.py +0 -0
  594. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/auth/oauth.py +0 -0
  595. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/auth/oidc.py +0 -0
  596. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/auth/scopes.py +0 -0
  597. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/cli.py +0 -0
  598. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/elicitation.py +0 -0
  599. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/icons.py +0 -0
  600. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/recipe_adapter.py +0 -0
  601. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/recipe_cli.py +0 -0
  602. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/registry.py +0 -0
  603. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/sampling.py +0 -0
  604. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/tasks.py +0 -0
  605. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/tool_index.py +0 -0
  606. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/transports/__init__.py +0 -0
  607. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/mcp_server/transports/stdio.py +0 -0
  608. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/n8n/__init__.py +0 -0
  609. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/n8n/client.py +0 -0
  610. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/n8n/converter.py +0 -0
  611. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/n8n/preview.py +0 -0
  612. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/n8n/reverse_converter.py +0 -0
  613. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/observability/__init__.py +0 -0
  614. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/observability/hooks.py +0 -0
  615. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/observability/langextract.py +0 -0
  616. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/observability/langfuse.py +0 -0
  617. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/__init__.py +0 -0
  618. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/_valkey_client.py +0 -0
  619. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/config.py +0 -0
  620. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/__init__.py +0 -0
  621. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/_sql_base.py +0 -0
  622. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/async_mysql.py +0 -0
  623. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/async_postgres.py +0 -0
  624. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  625. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/base.py +0 -0
  626. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/json_store.py +0 -0
  627. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/mysql.py +0 -0
  628. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/mysql_new.py +0 -0
  629. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/postgres.py +0 -0
  630. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/singlestore.py +0 -0
  631. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/sqlite.py +0 -0
  632. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/supabase.py +0 -0
  633. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/surrealdb.py +0 -0
  634. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  635. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/conversation/turso.py +0 -0
  636. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/factory.py +0 -0
  637. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/hooks/__init__.py +0 -0
  638. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  639. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/__init__.py +0 -0
  640. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/base.py +0 -0
  641. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/cassandra.py +0 -0
  642. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/chroma.py +0 -0
  643. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  644. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  645. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/couchbase.py +0 -0
  646. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/lancedb.py +0 -0
  647. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  648. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  649. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  650. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/milvus.py +0 -0
  651. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  652. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/pgvector.py +0 -0
  653. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/pinecone.py +0 -0
  654. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/qdrant.py +0 -0
  655. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  656. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  657. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  658. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  659. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  660. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/knowledge/weaviate.py +0 -0
  661. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/migrations/__init__.py +0 -0
  662. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/migrations/manager.py +0 -0
  663. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/orchestrator.py +0 -0
  664. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/registry.py +0 -0
  665. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/__init__.py +0 -0
  666. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/async_mongodb.py +0 -0
  667. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/base.py +0 -0
  668. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/dynamodb.py +0 -0
  669. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/firestore.py +0 -0
  670. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/gcs.py +0 -0
  671. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/memory.py +0 -0
  672. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/mongodb.py +0 -0
  673. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/redis.py +0 -0
  674. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/upstash.py +0 -0
  675. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/state/valkey.py +0 -0
  676. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/tests/__init__.py +0 -0
  677. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/tests/test_all_backends.py +0 -0
  678. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  679. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/profiler.py +0 -0
  680. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/push/__init__.py +0 -0
  681. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/push/client.py +0 -0
  682. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/push/transports.py +0 -0
  683. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/__init__.py +0 -0
  684. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/bridge.py +0 -0
  685. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/core.py +0 -0
  686. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/exceptions.py +0 -0
  687. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/history.py +0 -0
  688. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/models.py +0 -0
  689. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/operations.py +0 -0
  690. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/policy.py +0 -0
  691. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/registry.py +0 -0
  692. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/runtime.py +0 -0
  693. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/security.py +0 -0
  694. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/recipe/server.py +0 -0
  695. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/replay/__init__.py +0 -0
  696. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/replay/analyzer.py +0 -0
  697. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/replay/applier.py +0 -0
  698. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/replay/judge.py +0 -0
  699. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/replay/plan.py +0 -0
  700. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/replay/player.py +0 -0
  701. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/replay/reader.py +0 -0
  702. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/replay/storage.py +0 -0
  703. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/replay/writer.py +0 -0
  704. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/sandbox/__init__.py +0 -0
  705. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/sandbox/_compat.py +0 -0
  706. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/sandbox/_shell.py +0 -0
  707. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/sandbox/daytona.py +0 -0
  708. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/sandbox/docker.py +0 -0
  709. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/sandbox/e2b.py +0 -0
  710. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/sandbox/modal.py +0 -0
  711. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/sandbox/sandlock.py +0 -0
  712. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/sandbox/ssh.py +0 -0
  713. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/sandbox/subprocess.py +0 -0
  714. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/__init__.py +0 -0
  715. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/_base_scheduler.py +0 -0
  716. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/agent_scheduler.py +0 -0
  717. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  718. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/base.py +0 -0
  719. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/daemon_manager.py +0 -0
  720. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/deployment.py +0 -0
  721. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/executor.py +0 -0
  722. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/shared.py +0 -0
  723. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/state_manager.py +0 -0
  724. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/scheduler/yaml_loader.py +0 -0
  725. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/security/__init__.py +0 -0
  726. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/security/audit.py +0 -0
  727. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/security/injection.py +0 -0
  728. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/security/protected.py +0 -0
  729. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/setup/__init__.py +0 -0
  730. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/setup/build.py +0 -0
  731. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/setup/post_install.py +0 -0
  732. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/setup/setup_conda_env.py +0 -0
  733. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/setup.py +0 -0
  734. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/__init__.py +0 -0
  735. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/ai_generator.py +0 -0
  736. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/config.py +0 -0
  737. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/dedupe.py +0 -0
  738. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/discovery.py +0 -0
  739. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/drift.py +0 -0
  740. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/engine.py +0 -0
  741. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/enhanced_templates.py +0 -0
  742. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/example_verifier.py +0 -0
  743. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/manifest.py +0 -0
  744. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/models.py +0 -0
  745. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/reports.py +0 -0
  746. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/templates.py +0 -0
  747. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/undo_redo.py +0 -0
  748. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/standardise/validator.py +0 -0
  749. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/storage/__init__.py +0 -0
  750. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/storage/dynamodb_adapter.py +0 -0
  751. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/storage/mongodb_adapter.py +0 -0
  752. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/storage/postgresql_adapter.py +0 -0
  753. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/storage/redis_adapter.py +0 -0
  754. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/storage/valkey_adapter.py +0 -0
  755. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/__init__.py +0 -0
  756. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/batch_source.py +0 -0
  757. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/cli_docs_source.py +0 -0
  758. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/discovery.py +0 -0
  759. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/docs_source.py +0 -0
  760. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/examples_source.py +0 -0
  761. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/executor.py +0 -0
  762. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/models.py +0 -0
  763. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/report_viewer.py +0 -0
  764. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/reporter.py +0 -0
  765. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/suite_runner/runner.py +0 -0
  766. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/templates/__init__.py +0 -0
  767. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/templates/cache.py +0 -0
  768. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/templates/dependency_checker.py +0 -0
  769. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/templates/discovery.py +0 -0
  770. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/templates/loader.py +0 -0
  771. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/templates/registry.py +0 -0
  772. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/templates/resolver.py +0 -0
  773. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/templates/security.py +0 -0
  774. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/templates/tool_override.py +0 -0
  775. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/templates/tools_doctor.py +0 -0
  776. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/test.py +0 -0
  777. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/tool_registry.py +0 -0
  778. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/tool_resolver.py +0 -0
  779. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/tools/__init__.py +0 -0
  780. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/tools/audio.py +0 -0
  781. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/tools/glob_tool.py +0 -0
  782. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/tools/grep_tool.py +0 -0
  783. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/tools/kanban_tools.py +0 -0
  784. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/tools/multiedit.py +0 -0
  785. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/tools/skill_manage.py +0 -0
  786. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train/__init__.py +0 -0
  787. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train/_ollama.py +0 -0
  788. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train/agents/__init__.py +0 -0
  789. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train/agents/grader.py +0 -0
  790. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train/agents/hook.py +0 -0
  791. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train/agents/models.py +0 -0
  792. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train/agents/orchestrator.py +0 -0
  793. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train/agents/storage.py +0 -0
  794. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train/llm/__init__.py +0 -0
  795. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train/llm/trainer.py +0 -0
  796. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train.py +0 -0
  797. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/train_vision.py +0 -0
  798. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui/_aiui_datastore.py +0 -0
  799. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui/_external_agents.py +0 -0
  800. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui/callbacks.py +0 -0
  801. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui/components/aicoder.py +0 -0
  802. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui/context.py +0 -0
  803. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui/database_config.py +0 -0
  804. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui_agents/__init__.py +0 -0
  805. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui_agents/default_app.py +0 -0
  806. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui_bot/__init__.py +0 -0
  807. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui_bot/default_app.py +0 -0
  808. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui_chat/__init__.py +0 -0
  809. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui_chat/default_app.py +0 -0
  810. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui_dashboard/default_app.py +0 -0
  811. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui_realtime/__init__.py +0 -0
  812. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/ui_realtime/default_app.py +0 -0
  813. {praisonai-4.6.57 → praisonai-4.6.58}/praisonai/upload_vision.py +0 -0
  814. {praisonai-4.6.57 → praisonai-4.6.58}/setup.cfg +0 -0
  815. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test.py +0 -0
  816. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_agents_playbook.py +0 -0
  817. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_approval_system.py +0 -0
  818. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_basic.py +0 -0
  819. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_cli_features.py +0 -0
  820. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_custom_tools_fix.py +0 -0
  821. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_double_api_fix.py +0 -0
  822. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_n8n_agent_invoke.py +0 -0
  823. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_n8n_cli_feature.py +0 -0
  824. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_n8n_integration.py +0 -0
  825. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_phase2_refactor.py +0 -0
  826. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_recipe.py +0 -0
  827. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_registry.py +0 -0
  828. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_runner.py +0 -0
  829. {praisonai-4.6.57 → praisonai-4.6.58}/tests/test_sandboxed_agent_compatibility.py +0 -0
  830. {praisonai-4.6.57 → praisonai-4.6.58}/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.57
3
+ Version: 4.6.58
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.57
14
+ Requires-Dist: praisonaiagents>=1.6.58
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.57
3
+ Version: 4.6.58
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.57
14
+ Requires-Dist: praisonaiagents>=1.6.58
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
@@ -79,6 +79,7 @@ praisonai/bots/_protocol_mixin.py
79
79
  praisonai/bots/_rate_limit.py
80
80
  praisonai/bots/_registry.py
81
81
  praisonai/bots/_resilience.py
82
+ praisonai/bots/_run_control.py
82
83
  praisonai/bots/_session.py
83
84
  praisonai/bots/_slack_approval.py
84
85
  praisonai/bots/_streaming.py
@@ -418,6 +419,7 @@ praisonai/cli/session/__init__.py
418
419
  praisonai/cli/session/unified.py
419
420
  praisonai/cli/state/__init__.py
420
421
  praisonai/cli/state/identifiers.py
422
+ praisonai/cli/state/project_sessions.py
421
423
  praisonai/cli/state/sessions.py
422
424
  praisonai/cli/ui/__init__.py
423
425
  praisonai/cli/ui/config.py
@@ -425,6 +427,7 @@ praisonai/cli/ui/events.py
425
427
  praisonai/cli/ui/mg_backend.py
426
428
  praisonai/cli/ui/plain.py
427
429
  praisonai/cli/ui/rich_backend.py
430
+ praisonai/cli/utils/project.py
428
431
  praisonai/cli_backends/__init__.py
429
432
  praisonai/cli_backends/claude.py
430
433
  praisonai/cli_backends/registry.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.57
4
+ praisonaiagents>=1.6.58
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -12,6 +12,7 @@ from typing import Dict, Optional, TYPE_CHECKING
12
12
 
13
13
  if TYPE_CHECKING:
14
14
  from praisonaiagents import Agent
15
+ from ._run_control import SessionRunControl
15
16
 
16
17
 
17
18
  def format_status(
@@ -64,6 +65,7 @@ def format_help(
64
65
  "Available Commands",
65
66
  "/status - Show bot status and info",
66
67
  "/new - Reset conversation session",
68
+ "/stop - Cancel current agent task",
67
69
  "/help - Show this help message",
68
70
  ]
69
71
  if extra_commands:
@@ -72,3 +74,65 @@ def format_help(
72
74
  lines.append(f"\nAgent: {agent_name}")
73
75
  lines.append(f"Model: {model}")
74
76
  return "\n".join(lines)
77
+
78
+
79
+ async def handle_stop_command(
80
+ user_id: str,
81
+ run_control: Optional["SessionRunControl"] = None,
82
+ ) -> str:
83
+ """Handle /stop command to cancel current agent task.
84
+
85
+ Args:
86
+ user_id: User identifier
87
+ run_control: SessionRunControl instance for managing runs
88
+
89
+ Returns:
90
+ Response message to send to user
91
+ """
92
+ if run_control is None:
93
+ return "❌ Stop command not available (run control not enabled)"
94
+
95
+ try:
96
+ stopped = await run_control.stop(user_id)
97
+ if stopped:
98
+ return "✅ Current task cancelled. Send a new message to start fresh."
99
+ else:
100
+ return "ℹ️ No active task to cancel."
101
+ except Exception as e:
102
+ return f"❌ Error stopping task: {e}"
103
+
104
+
105
+ def handle_run_status_command(
106
+ user_id: str,
107
+ run_control: Optional["SessionRunControl"] = None,
108
+ ) -> str:
109
+ """Handle request for current run status.
110
+
111
+ Args:
112
+ user_id: User identifier
113
+ run_control: SessionRunControl instance
114
+
115
+ Returns:
116
+ Status message
117
+ """
118
+ if run_control is None:
119
+ return "Run control not enabled"
120
+
121
+ try:
122
+ status = run_control.get_run_status(user_id)
123
+
124
+ if not status["is_running"]:
125
+ pending_info = " (has queued message)" if status["has_pending"] else ""
126
+ return f"💤 No active task{pending_info}"
127
+
128
+ elapsed = status.get("elapsed_seconds", 0)
129
+ elapsed_str = f"{elapsed//60}m {elapsed%60}s" if elapsed > 60 else f"{elapsed}s"
130
+
131
+ pending_info = ""
132
+ if status["has_pending"]:
133
+ preview = status.get("pending_preview", "")
134
+ pending_info = f"\n📝 Queued: {preview}"
135
+
136
+ return f"⚡ Task running for {elapsed_str}{pending_info}"
137
+ except Exception as e:
138
+ return f"Error getting status: {e}"
@@ -0,0 +1,346 @@
1
+ """
2
+ Per-session run control for PraisonAI bots.
3
+
4
+ Provides busy feedback, pending message slots, interrupt support, and
5
+ optional steering for in-flight agent runs. Solves the silent lock
6
+ problem where mid-run messages queue invisibly with no user feedback.
7
+
8
+ Usage inside a bot message handler::
9
+
10
+ # Initialize with busy mode policy
11
+ run_ctrl = SessionRunControl(busy_mode="queue") # or "interrupt", "steer"
12
+
13
+ # Handle message with run control
14
+ decision = await run_ctrl.submit(user_id, message_text)
15
+
16
+ if decision == RunDecision.RUN_NOW:
17
+ # Start agent.chat() with interrupt controller
18
+ response = await session_mgr.chat(agent, user_id, text)
19
+ elif decision == RunDecision.QUEUED:
20
+ # Return acknowledgment, message will be processed after current run
21
+ return "⏳ Noted - will consider this after the current task finishes"
22
+ elif decision == RunDecision.MERGED:
23
+ # Message was merged into pending slot
24
+ return "⏳ Added to pending message"
25
+
26
+ Key features:
27
+ - Busy acknowledgment for mid-run messages instead of silent queuing
28
+ - Per-user pending slot that merges follow-ups received mid-run
29
+ - /stop command via InterruptController integration
30
+ - Optional steering mode to inject messages into running turns
31
+ - Run generation tracking to prevent canceled runs overwriting fresh state
32
+ """
33
+
34
+ from __future__ import annotations
35
+
36
+ import asyncio
37
+ import logging
38
+ import time
39
+ from enum import Enum
40
+ from typing import Dict, Optional, Any, TYPE_CHECKING
41
+
42
+ if TYPE_CHECKING:
43
+ from praisonaiagents.agent.interrupt import InterruptController
44
+
45
+ logger = logging.getLogger(__name__)
46
+
47
+
48
+ class RunDecision(Enum):
49
+ """Decision for how to handle a submitted message."""
50
+ RUN_NOW = "run_now" # No current run, start immediately
51
+ QUEUED = "queued" # Current run active, message queued for next turn
52
+ MERGED = "merged" # Message merged into existing pending slot
53
+ INTERRUPTED = "interrupted" # Current run was interrupted, start new run
54
+
55
+
56
+ class BusyMode(Enum):
57
+ """Policy for handling messages during active runs."""
58
+ QUEUE = "queue" # Queue message for next turn (default)
59
+ INTERRUPT = "interrupt" # Cancel current run and start new one
60
+ STEER = "steer" # Inject message into current run via steering
61
+
62
+
63
+ class SessionRunState:
64
+ """Per-user run state tracking."""
65
+
66
+ def __init__(self):
67
+ self.is_running = False
68
+ self.run_generation = 0 # Incremented on each run start
69
+ self.pending_message: Optional[str] = None
70
+ self.interrupt_controller: Optional["InterruptController"] = None
71
+ self.start_time: Optional[float] = None
72
+ self.last_activity: float = time.time() # Always track activity for cleanup
73
+
74
+
75
+ class SessionRunControl:
76
+ """Per-session pending slot + interrupt handle around agent runs.
77
+
78
+ Manages run states, pending messages, and interrupt controllers
79
+ for each user session to provide better UX around long-running
80
+ agent operations.
81
+ """
82
+
83
+ def __init__(
84
+ self,
85
+ busy_mode: str = "queue",
86
+ busy_ack_template: str = "⏳ {action} — will be considered next"
87
+ ):
88
+ """Initialize session run control.
89
+
90
+ Args:
91
+ busy_mode: Policy for mid-run messages ("queue", "interrupt", "steer")
92
+ busy_ack_template: Template for busy acknowledgment messages
93
+ """
94
+ try:
95
+ self._busy_mode = BusyMode(busy_mode)
96
+ except ValueError:
97
+ logger.warning(f"Invalid busy_mode '{busy_mode}', using 'queue'")
98
+ self._busy_mode = BusyMode.QUEUE
99
+
100
+ self._busy_ack_template = busy_ack_template
101
+ self._sessions: Dict[str, SessionRunState] = {}
102
+ self._locks: Dict[str, asyncio.Lock] = {}
103
+
104
+ def _get_lock(self, user_id: str) -> asyncio.Lock:
105
+ """Get or create lock for user."""
106
+ if user_id not in self._locks:
107
+ self._locks[user_id] = asyncio.Lock()
108
+ return self._locks[user_id]
109
+
110
+ def _get_session(self, user_id: str) -> SessionRunState:
111
+ """Get or create session state for user."""
112
+ if user_id not in self._sessions:
113
+ self._sessions[user_id] = SessionRunState()
114
+ return self._sessions[user_id]
115
+
116
+ async def submit(self, user_id: str, text: str) -> RunDecision:
117
+ """Submit a message and get decision on how to handle it.
118
+
119
+ Args:
120
+ user_id: User identifier
121
+ text: Message text
122
+
123
+ Returns:
124
+ RunDecision indicating how to proceed
125
+ """
126
+ lock = self._get_lock(user_id)
127
+ async with lock:
128
+ session = self._get_session(user_id)
129
+ session.last_activity = time.time() # Update activity timestamp
130
+
131
+ if not session.is_running:
132
+ # No active run, start immediately
133
+ session.is_running = True
134
+ session.run_generation += 1
135
+ session.start_time = time.time()
136
+
137
+ # Create interrupt controller for this run
138
+ try:
139
+ from praisonaiagents.agent.interrupt import InterruptController
140
+ session.interrupt_controller = InterruptController()
141
+ except ImportError:
142
+ logger.warning("InterruptController not available")
143
+ session.interrupt_controller = None
144
+
145
+ return RunDecision.RUN_NOW
146
+
147
+ # There's an active run, handle based on busy mode
148
+ if self._busy_mode == BusyMode.INTERRUPT:
149
+ # Cancel current run and start new one
150
+ if session.interrupt_controller:
151
+ session.interrupt_controller.request("user_new_message")
152
+
153
+ session.pending_message = None # Clear any pending
154
+ session.run_generation += 1
155
+ session.start_time = time.time()
156
+
157
+ # Create new interrupt controller
158
+ try:
159
+ from praisonaiagents.agent.interrupt import InterruptController
160
+ session.interrupt_controller = InterruptController()
161
+ except ImportError:
162
+ session.interrupt_controller = None
163
+
164
+ return RunDecision.INTERRUPTED
165
+
166
+ elif self._busy_mode == BusyMode.STEER:
167
+ # Try to inject into running agent via steering
168
+ # Note: This requires the agent to have steering enabled
169
+ # For now, we'll fall back to queueing
170
+ logger.warning("Steer mode is not yet implemented, falling back to queue mode")
171
+ # TODO: Implement steering integration when agent reference is available
172
+
173
+ # Default to queue mode (or steer fallback)
174
+ if session.pending_message is None:
175
+ session.pending_message = text
176
+ return RunDecision.QUEUED
177
+ else:
178
+ # Merge with existing pending message
179
+ session.pending_message = f"{session.pending_message}\n{text}"
180
+ return RunDecision.MERGED
181
+
182
+ async def get_busy_ack_message(self, user_id: str, decision: RunDecision) -> str:
183
+ """Get appropriate busy acknowledgment message.
184
+
185
+ Args:
186
+ user_id: User identifier
187
+ decision: The decision returned by submit()
188
+
189
+ Returns:
190
+ Acknowledgment message to send to user
191
+ """
192
+ session = self._get_session(user_id)
193
+
194
+ if decision == RunDecision.QUEUED:
195
+ action = "noted"
196
+ elif decision == RunDecision.MERGED:
197
+ action = "added to pending request"
198
+ elif decision == RunDecision.INTERRUPTED:
199
+ return "⚠️ Previous task cancelled, starting your new request"
200
+ else:
201
+ return "" # No ack needed for RUN_NOW
202
+
203
+ # Add timing info if available
204
+ timing = ""
205
+ if session.start_time:
206
+ elapsed = int(time.time() - session.start_time)
207
+ if elapsed > 60:
208
+ timing = f" (running for {elapsed//60}m {elapsed%60}s)"
209
+ elif elapsed > 10:
210
+ timing = f" (running for {elapsed}s)"
211
+
212
+ return self._busy_ack_template.format(action=action) + timing
213
+
214
+ async def stop(self, user_id: str) -> bool:
215
+ """Stop the current run for a user.
216
+
217
+ Args:
218
+ user_id: User identifier
219
+
220
+ Returns:
221
+ True if a run was stopped, False if no active run
222
+ """
223
+ lock = self._get_lock(user_id)
224
+ async with lock:
225
+ session = self._get_session(user_id)
226
+
227
+ if not session.is_running:
228
+ return False
229
+
230
+ # Request interrupt
231
+ if session.interrupt_controller:
232
+ session.interrupt_controller.request("user_stop_command")
233
+
234
+ # Clear state
235
+ session.is_running = False
236
+ session.pending_message = None
237
+ session.interrupt_controller = None
238
+ session.start_time = None
239
+
240
+ return True
241
+
242
+ def next_pending(self, user_id: str) -> Optional[str]:
243
+ """Get and clear the next pending message for a user.
244
+
245
+ Args:
246
+ user_id: User identifier
247
+
248
+ Returns:
249
+ Pending message if any, None otherwise
250
+ """
251
+ session = self._get_session(user_id)
252
+ pending = session.pending_message
253
+ session.pending_message = None
254
+ return pending
255
+
256
+ async def finish_run(self, user_id: str, run_generation: Optional[int] = None):
257
+ """Mark a run as finished.
258
+
259
+ Args:
260
+ user_id: User identifier
261
+ run_generation: Generation of the run that finished (for race protection)
262
+ """
263
+ lock = self._get_lock(user_id)
264
+ async with lock:
265
+ session = self._get_session(user_id)
266
+ session.last_activity = time.time() # Update activity timestamp
267
+
268
+ # Race protection: only clear if this is the current generation
269
+ if run_generation is None or run_generation == session.run_generation:
270
+ session.is_running = False
271
+ session.interrupt_controller = None
272
+ session.start_time = None
273
+
274
+ def get_interrupt_controller(self, user_id: str) -> Optional["InterruptController"]:
275
+ """Get the interrupt controller for a user's current run.
276
+
277
+ Args:
278
+ user_id: User identifier
279
+
280
+ Returns:
281
+ InterruptController if run is active, None otherwise
282
+ """
283
+ session = self._get_session(user_id)
284
+ if session.is_running:
285
+ return session.interrupt_controller
286
+ return None
287
+
288
+ def get_run_status(self, user_id: str) -> Dict[str, Any]:
289
+ """Get run status for a user.
290
+
291
+ Args:
292
+ user_id: User identifier
293
+
294
+ Returns:
295
+ Dict with run status information
296
+ """
297
+ session = self._get_session(user_id)
298
+
299
+ status = {
300
+ "is_running": session.is_running,
301
+ "run_generation": session.run_generation,
302
+ "has_pending": session.pending_message is not None,
303
+ "busy_mode": self._busy_mode.value
304
+ }
305
+
306
+ if session.start_time:
307
+ status["elapsed_seconds"] = int(time.time() - session.start_time)
308
+
309
+ if session.pending_message:
310
+ status["pending_preview"] = session.pending_message[:100] + "..." if len(session.pending_message) > 100 else session.pending_message
311
+
312
+ return status
313
+
314
+ @property
315
+ def active_sessions_count(self) -> int:
316
+ """Number of sessions with active runs."""
317
+ return sum(1 for session in self._sessions.values() if session.is_running)
318
+
319
+ def cleanup_stale_sessions(self, max_age_seconds: int = 3600) -> int:
320
+ """Clean up stale sessions older than max_age_seconds.
321
+
322
+ Args:
323
+ max_age_seconds: Maximum age in seconds
324
+
325
+ Returns:
326
+ Number of sessions cleaned up
327
+ """
328
+ if max_age_seconds <= 0:
329
+ return 0
330
+
331
+ now = time.time()
332
+ stale_users = []
333
+
334
+ for user_id, session in self._sessions.items():
335
+ # Clean up based on last activity instead of only active runs
336
+ if (now - session.last_activity) > max_age_seconds:
337
+ stale_users.append(user_id)
338
+
339
+ for user_id in stale_users:
340
+ del self._sessions[user_id]
341
+ self._locks.pop(user_id, None)
342
+
343
+ if stale_users:
344
+ logger.debug(f"SessionRunControl: cleaned up {len(stale_users)} stale sessions")
345
+
346
+ return len(stale_users)
@@ -65,6 +65,7 @@ class BotSessionManager:
65
65
  dlq: Optional[Any] = None,
66
66
  identity_resolver: Optional[Any] = None,
67
67
  ingress_journal: Optional[Any] = None,
68
+ run_control: Optional[Any] = None,
68
69
  ) -> None:
69
70
  self._histories: Dict[str, List[Dict[str, Any]]] = {}
70
71
  self._locks: Dict[str, asyncio.Lock] = {}
@@ -86,6 +87,8 @@ class BotSessionManager:
86
87
  # crash recovery and webhook redelivery protection.
87
88
  self._ingress_journal = ingress_journal
88
89
  self._last_journal_key = None # Store key for delayed completion
90
+ # Run control for in-flight message handling
91
+ self._run_control = run_control
89
92
 
90
93
  def _storage_key(self, user_id: str) -> str:
91
94
  """Resolve a raw platform user id to the in-memory/store key.
@@ -345,6 +348,129 @@ class BotSessionManager:
345
348
  except Exception as e:
346
349
  logger.debug("Failed to clear task-local session context for ctx_token=%r: %s", ctx_token, e)
347
350
 
351
+ async def chat_with_run_control(
352
+ self,
353
+ agent: "Agent",
354
+ user_id: str,
355
+ prompt: str,
356
+ chat_id: str = "",
357
+ thread_id: str = "",
358
+ user_name: str = "",
359
+ ) -> Dict[str, Any]:
360
+ """Run agent.chat() with run control for better UX during long operations.
361
+
362
+ This method integrates with SessionRunControl to provide:
363
+ - Busy acknowledgment for mid-run messages
364
+ - Pending message slot for follow-ups
365
+ - Interrupt support via /stop command
366
+ - Optional steering for real-time guidance
367
+
368
+ Returns:
369
+ Dict with 'response' (str) and 'metadata' (dict) keys.
370
+ Metadata includes run control information.
371
+ """
372
+ if self._run_control is None:
373
+ # Fall back to regular chat if no run control
374
+ response = await self.chat(agent, user_id, prompt, chat_id, thread_id, user_name)
375
+ return {"response": response, "metadata": {"run_control": False}}
376
+
377
+ try:
378
+ # Import here to avoid circular dependency
379
+ from ._run_control import RunDecision
380
+ except ImportError:
381
+ # Fall back if run control not available
382
+ response = await self.chat(agent, user_id, prompt, chat_id, thread_id, user_name)
383
+ return {"response": response, "metadata": {"run_control": False, "error": "run_control_unavailable"}}
384
+
385
+ # Submit message to run control
386
+ decision = await self._run_control.submit(user_id, prompt)
387
+
388
+ if decision in (RunDecision.QUEUED, RunDecision.MERGED):
389
+ # Message was queued or merged, return acknowledgment
390
+ ack_msg = await self._run_control.get_busy_ack_message(user_id, decision)
391
+ return {
392
+ "response": ack_msg,
393
+ "metadata": {
394
+ "run_control": True,
395
+ "decision": decision.value,
396
+ "queued": True
397
+ }
398
+ }
399
+
400
+ # We're running now (RUN_NOW or INTERRUPTED)
401
+ run_generation = None
402
+ interrupt_controller = None
403
+
404
+ if decision == RunDecision.RUN_NOW:
405
+ # Get the interrupt controller for this run
406
+ interrupt_controller = self._run_control.get_interrupt_controller(user_id)
407
+ elif decision == RunDecision.INTERRUPTED:
408
+ # Previous run was cancelled, get new controller
409
+ interrupt_controller = self._run_control.get_interrupt_controller(user_id)
410
+
411
+ # Get current run generation for race protection
412
+ status = self._run_control.get_run_status(user_id)
413
+ run_generation = status.get("run_generation")
414
+
415
+ try:
416
+ # Attach interrupt controller to agent if available
417
+ original_interrupt = None
418
+ if interrupt_controller and hasattr(agent, '_interrupt_controller'):
419
+ original_interrupt = getattr(agent, '_interrupt_controller', None)
420
+ agent._interrupt_controller = interrupt_controller
421
+
422
+ # Run the chat with the existing method
423
+ response = await self.chat(agent, user_id, prompt, chat_id, thread_id, user_name)
424
+
425
+ # Check for pending messages to process next
426
+ pending = self._run_control.next_pending(user_id)
427
+ pending_info = {}
428
+ if pending:
429
+ pending_info = {
430
+ "next_pending": pending[:100] + "..." if len(pending) > 100 else pending
431
+ }
432
+
433
+ return {
434
+ "response": response,
435
+ "metadata": {
436
+ "run_control": True,
437
+ "decision": decision.value,
438
+ "completed": True,
439
+ "run_generation": run_generation,
440
+ **pending_info
441
+ }
442
+ }
443
+
444
+ except Exception as e:
445
+ # Handle interruption specifically
446
+ if interrupt_controller and interrupt_controller.is_set():
447
+ reason = interrupt_controller.reason or "unknown"
448
+ return {
449
+ "response": f"⚠️ Task cancelled: {reason}",
450
+ "metadata": {
451
+ "run_control": True,
452
+ "decision": decision.value,
453
+ "interrupted": True,
454
+ "reason": reason,
455
+ "run_generation": run_generation
456
+ }
457
+ }
458
+ else:
459
+ # Re-raise other exceptions
460
+ raise
461
+
462
+ finally:
463
+ # Restore original interrupt controller
464
+ if interrupt_controller and hasattr(agent, '_interrupt_controller'):
465
+ if original_interrupt is not None:
466
+ agent._interrupt_controller = original_interrupt
467
+ else:
468
+ agent._interrupt_controller = None
469
+
470
+ # Mark run as finished
471
+ if run_generation is not None:
472
+ await self._run_control.finish_run(user_id, run_generation)
473
+
348
474
  def reap_stale(self, max_age_seconds: int) -> int:
349
475
  """Remove sessions older than *max_age_seconds*. Returns count reaped.
350
476
 
@@ -100,9 +100,22 @@ class TelegramBot(ChatCommandMixin, MessageHookMixin):
100
100
  _store = get_default_session_store()
101
101
  except Exception:
102
102
  _store = None
103
+ # Create run control if busy mode is configured
104
+ run_control = None
105
+ if hasattr(self.config, 'busy_mode') and self.config.busy_mode != "queue":
106
+ try:
107
+ from ._run_control import SessionRunControl
108
+ run_control = SessionRunControl(
109
+ busy_mode=self.config.busy_mode,
110
+ busy_ack_template=getattr(self.config, 'busy_ack', "⏳ {action} — will be considered next")
111
+ )
112
+ except ImportError:
113
+ logger.warning("Run control not available, falling back to basic session management")
114
+
103
115
  self._session: BotSessionManager = BotSessionManager(
104
116
  store=_store,
105
117
  platform="telegram",
118
+ run_control=run_control,
106
119
  )
107
120
  self._debouncer: InboundDebouncer = InboundDebouncer(
108
121
  debounce_ms=self.config.debounce_ms,
@@ -120,7 +120,7 @@ class BrowserServer:
120
120
  app.add_middleware(
121
121
  CORSMiddleware,
122
122
  allow_origins=cors_origins,
123
- allow_origin_regex=r"chrome-extension://[a-z0-9]{32}",
123
+ allow_origin_regex=r"chrome-extension://[a-z0-9]{32}$",
124
124
  allow_credentials=True,
125
125
  allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
126
126
  allow_headers=["Authorization", "Content-Type", "Origin", "Accept"],
@@ -183,7 +183,7 @@ class BrowserServer:
183
183
  if origin in cors_origins:
184
184
  is_allowed = True
185
185
  # Check chrome extension regex pattern (same as CORS middleware)
186
- elif parsed_origin.scheme == "chrome-extension" and re.match(r"chrome-extension://[a-z0-9]{32}", origin):
186
+ elif parsed_origin.scheme == "chrome-extension" and re.match(r"chrome-extension://[a-z0-9]{32}$", origin):
187
187
  is_allowed = True
188
188
 
189
189
  if not is_allowed: