PraisonAI 4.6.72__tar.gz → 4.6.74__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 (884) hide show
  1. {praisonai-4.6.72 → praisonai-4.6.74}/PKG-INFO +2 -2
  2. {praisonai-4.6.72 → praisonai-4.6.74}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.72 → praisonai-4.6.74}/PraisonAI.egg-info/SOURCES.txt +5 -0
  4. {praisonai-4.6.72 → praisonai-4.6.74}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_lockmap.py +45 -27
  6. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_config_schema.py +41 -0
  7. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_session.py +123 -2
  8. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/app.py +14 -91
  9. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/config.py +78 -24
  10. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/init.py +6 -2
  11. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/run.py +286 -6
  12. praisonai-4.6.74/praisonai/cli/commands/schedule.py +529 -0
  13. praisonai-4.6.74/praisonai/cli/configuration/config.schema.json +57 -0
  14. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/configuration/resolver.py +145 -5
  15. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/custom_definitions.py +159 -2
  16. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/output/__init__.py +10 -0
  17. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/output/console.py +8 -1
  18. praisonai-4.6.74/praisonai/cli/output/event_bridge.py +191 -0
  19. praisonai-4.6.74/praisonai/framework_adapters/crewai_adapter.py +183 -0
  20. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/framework_adapters/praisonai_adapter.py +28 -16
  21. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/server.py +233 -38
  22. praisonai-4.6.74/praisonai/observability/hooks.py +150 -0
  23. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/__init__.py +8 -0
  24. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/agent_scheduler.py +118 -0
  25. praisonai-4.6.74/praisonai/scheduler/blueprint_catalogue.py +364 -0
  26. praisonai-4.6.74/praisonai/scheduler/condition_gate.py +111 -0
  27. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/executor.py +79 -0
  28. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/shared.py +43 -6
  29. praisonai-4.6.74/praisonai/scheduler/suggestion_engine.py +123 -0
  30. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/yaml_loader.py +1 -1
  31. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/tool_resolver.py +64 -56
  32. praisonai-4.6.74/praisonai/version.py +1 -0
  33. {praisonai-4.6.72 → praisonai-4.6.74}/pyproject.toml +4 -1
  34. praisonai-4.6.72/praisonai/cli/commands/schedule.py +0 -209
  35. praisonai-4.6.72/praisonai/framework_adapters/crewai_adapter.py +0 -172
  36. praisonai-4.6.72/praisonai/observability/hooks.py +0 -81
  37. praisonai-4.6.72/praisonai/version.py +0 -1
  38. {praisonai-4.6.72 → praisonai-4.6.74}/PraisonAI.egg-info/dependency_links.txt +0 -0
  39. {praisonai-4.6.72 → praisonai-4.6.74}/PraisonAI.egg-info/entry_points.txt +0 -0
  40. {praisonai-4.6.72 → praisonai-4.6.74}/PraisonAI.egg-info/top_level.txt +0 -0
  41. {praisonai-4.6.72 → praisonai-4.6.74}/README.md +0 -0
  42. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/__init__.py +0 -0
  43. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/__main__.py +0 -0
  44. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_approval_spec.py +0 -0
  45. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_async_bridge.py +0 -0
  46. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/__init__.py +0 -0
  47. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/api_md.py +0 -0
  48. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/__init__.py +0 -0
  49. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/docs_extractor.py +0 -0
  50. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/docs_generator.py +0 -0
  51. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/generator.py +0 -0
  52. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  53. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/python_extractor.py +0 -0
  54. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  55. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/rust_extractor.py +0 -0
  56. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  57. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  58. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  59. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_entrypoint.py +0 -0
  60. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_framework_availability.py +0 -0
  61. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_lazy_cache.py +0 -0
  62. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_logging.py +0 -0
  63. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_registry.py +0 -0
  64. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/_safe_loader.py +0 -0
  65. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/acp/__init__.py +0 -0
  66. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/acp/config.py +0 -0
  67. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/acp/safe_edit.py +0 -0
  68. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/acp/server.py +0 -0
  69. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/acp/session.py +0 -0
  70. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/adapters/__init__.py +0 -0
  71. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/adapters/readers.py +0 -0
  72. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/adapters/rerankers.py +0 -0
  73. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/adapters/retrievers.py +0 -0
  74. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/adapters/vector_stores.py +0 -0
  75. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/agent.py +0 -0
  76. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/agent_scheduler.py +0 -0
  77. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/agents_generator.py +0 -0
  78. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/api/agent_invoke.py +0 -0
  79. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/api/call.py +0 -0
  80. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/app/__init__.py +0 -0
  81. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/app/agentos.py +0 -0
  82. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/async_agent_scheduler.py +0 -0
  83. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/audit/__init__.py +0 -0
  84. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/audit/agent_centric.py +0 -0
  85. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/auto.py +0 -0
  86. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/__init__.py +0 -0
  87. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_ack.py +0 -0
  88. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_approval.py +0 -0
  89. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_approval_base.py +0 -0
  90. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_auth.py +0 -0
  91. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_chunk.py +0 -0
  92. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_commands.py +0 -0
  93. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_debounce.py +0 -0
  94. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_defaults.py +0 -0
  95. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_delivery.py +0 -0
  96. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_discord_approval.py +0 -0
  97. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_dlq.py +0 -0
  98. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_durable_adapter.py +0 -0
  99. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_email_utils.py +0 -0
  100. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_http_approval.py +0 -0
  101. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_identity.py +0 -0
  102. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_ingress.py +0 -0
  103. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_mirror.py +0 -0
  104. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_outbox.py +0 -0
  105. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_pairing_ui.py +0 -0
  106. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_presentation_approval.py +0 -0
  107. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_presentation_renderer.py +0 -0
  108. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_protocol_mixin.py +0 -0
  109. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_rate_limit.py +0 -0
  110. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_registry.py +0 -0
  111. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_reset_policy.py +0 -0
  112. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_resilience.py +0 -0
  113. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_run_control.py +0 -0
  114. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_slack_approval.py +0 -0
  115. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_status.py +0 -0
  116. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_streaming.py +0 -0
  117. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_telegram_approval.py +0 -0
  118. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_typing.py +0 -0
  119. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_typing_indicator.py +0 -0
  120. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_unknown_user.py +0 -0
  121. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_webhook_approval.py +0 -0
  122. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  123. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/agentmail.py +0 -0
  124. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/bot.py +0 -0
  125. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/botos.py +0 -0
  126. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/delivery.py +0 -0
  127. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/discord.py +0 -0
  128. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/email.py +0 -0
  129. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/linear.py +0 -0
  130. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/media.py +0 -0
  131. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/slack.py +0 -0
  132. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/telegram.py +0 -0
  133. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/webhook_security.py +0 -0
  134. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/bots/whatsapp.py +0 -0
  135. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/__init__.py +0 -0
  136. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/agent.py +0 -0
  137. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/benchmark.py +0 -0
  138. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/cdp_agent.py +0 -0
  139. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/cdp_utils.py +0 -0
  140. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/cli.py +0 -0
  141. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/diagnostics.py +0 -0
  142. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/launcher.py +0 -0
  143. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/playwright_agent.py +0 -0
  144. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/profiling.py +0 -0
  145. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/protocol.py +0 -0
  146. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/report.py +0 -0
  147. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/server.py +0 -0
  148. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/sessions.py +0 -0
  149. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/browser/video.py +0 -0
  150. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/__init__.py +0 -0
  151. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/a2a.py +0 -0
  152. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/assistants.py +0 -0
  153. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/audio.py +0 -0
  154. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/batches.py +0 -0
  155. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/completions.py +0 -0
  156. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/container_files.py +0 -0
  157. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/containers.py +0 -0
  158. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/embeddings.py +0 -0
  159. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/files.py +0 -0
  160. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/fine_tuning.py +0 -0
  161. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/guardrails.py +0 -0
  162. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/images.py +0 -0
  163. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/mcp.py +0 -0
  164. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/messages.py +0 -0
  165. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/moderations.py +0 -0
  166. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/ocr.py +0 -0
  167. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/passthrough.py +0 -0
  168. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/rag.py +0 -0
  169. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/realtime.py +0 -0
  170. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/rerank.py +0 -0
  171. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/responses.py +0 -0
  172. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/search.py +0 -0
  173. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/skills.py +0 -0
  174. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/vector_store_files.py +0 -0
  175. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/vector_stores.py +0 -0
  176. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/capabilities/videos.py +0 -0
  177. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/claw/__init__.py +0 -0
  178. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/claw/default_app.py +0 -0
  179. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/__init__.py +0 -0
  180. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/_paths.py +0 -0
  181. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/_warnings.py +0 -0
  182. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/approval_backend.py +0 -0
  183. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/branding.py +0 -0
  184. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/__init__.py +0 -0
  185. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/acp.py +0 -0
  186. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/agent.py +0 -0
  187. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/agents.py +0 -0
  188. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/app.py +0 -0
  189. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/audit.py +0 -0
  190. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/auth.py +0 -0
  191. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/batch.py +0 -0
  192. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/benchmark.py +0 -0
  193. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/bot.py +0 -0
  194. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/browser.py +0 -0
  195. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/call.py +0 -0
  196. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/chat.py +0 -0
  197. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/claw.py +0 -0
  198. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/code.py +0 -0
  199. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/command.py +0 -0
  200. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/commit.py +0 -0
  201. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/completion.py +0 -0
  202. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/context.py +0 -0
  203. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/dashboard.py +0 -0
  204. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/debug.py +0 -0
  205. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/deploy.py +0 -0
  206. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/diag.py +0 -0
  207. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/docs.py +0 -0
  208. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/doctor.py +0 -0
  209. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/endpoints.py +0 -0
  210. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/environment.py +0 -0
  211. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/eval.py +0 -0
  212. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/examples.py +0 -0
  213. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/flow.py +0 -0
  214. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/gateway.py +0 -0
  215. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/github.py +0 -0
  216. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/hooks.py +0 -0
  217. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/identity.py +0 -0
  218. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/kanban.py +0 -0
  219. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/knowledge.py +0 -0
  220. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/langextract.py +0 -0
  221. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/langfuse.py +0 -0
  222. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/loop.py +0 -0
  223. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/lsp.py +0 -0
  224. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/managed.py +0 -0
  225. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/mcp.py +0 -0
  226. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/memory.py +0 -0
  227. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/mint_link.py +0 -0
  228. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/models.py +0 -0
  229. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/n8n.py +0 -0
  230. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/obs.py +0 -0
  231. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/onboard.py +0 -0
  232. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/package.py +0 -0
  233. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/pairing.py +0 -0
  234. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/paths.py +0 -0
  235. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/permissions.py +0 -0
  236. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/plugins.py +0 -0
  237. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/port.py +0 -0
  238. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/profile.py +0 -0
  239. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/publish.py +0 -0
  240. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/rag.py +0 -0
  241. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/realtime.py +0 -0
  242. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/recipe.py +0 -0
  243. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/registry.py +0 -0
  244. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/replay.py +0 -0
  245. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/research.py +0 -0
  246. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/retrieval.py +0 -0
  247. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/rules.py +0 -0
  248. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/sandbox.py +0 -0
  249. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/serve.py +0 -0
  250. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/session.py +0 -0
  251. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/setup.py +0 -0
  252. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/skills.py +0 -0
  253. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/standardise.py +0 -0
  254. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/templates.py +0 -0
  255. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/test.py +0 -0
  256. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/todo.py +0 -0
  257. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/tools.py +0 -0
  258. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/traces.py +0 -0
  259. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/tracker.py +0 -0
  260. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/train.py +0 -0
  261. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/ui.py +0 -0
  262. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/up.py +0 -0
  263. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/validate.py +0 -0
  264. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/version.py +0 -0
  265. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/commands/workflow.py +0 -0
  266. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/config_loader.py +0 -0
  267. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/configuration/__init__.py +0 -0
  268. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/configuration/credentials.py +0 -0
  269. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/configuration/loader.py +0 -0
  270. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/configuration/paths.py +0 -0
  271. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/configuration/schema.py +0 -0
  272. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/execution/__init__.py +0 -0
  273. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/execution/core.py +0 -0
  274. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/execution/profiler.py +0 -0
  275. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/execution/request.py +0 -0
  276. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/execution/result.py +0 -0
  277. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/fallback_schema.py +0 -0
  278. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/__init__.py +0 -0
  279. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/_endpoint_registry.py +0 -0
  280. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/_search_registry.py +0 -0
  281. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/acp.py +0 -0
  282. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/action_orchestrator.py +0 -0
  283. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/agent_scheduler.py +0 -0
  284. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/agent_tools.py +0 -0
  285. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/agents.py +0 -0
  286. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/approval.py +0 -0
  287. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/at_mentions.py +0 -0
  288. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/audit_cli.py +0 -0
  289. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/auto_memory.py +0 -0
  290. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/auto_mode.py +0 -0
  291. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/autonomy_mode.py +0 -0
  292. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/background.py +0 -0
  293. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/base.py +0 -0
  294. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/benchmark.py +0 -0
  295. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/bots_cli.py +0 -0
  296. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/capabilities.py +0 -0
  297. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/checkpoints.py +0 -0
  298. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/cli_profiler.py +0 -0
  299. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/code_intelligence.py +0 -0
  300. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/compaction.py +0 -0
  301. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/compare.py +0 -0
  302. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/config_hierarchy.py +0 -0
  303. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/context_manager.py +0 -0
  304. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/cost_tracker.py +0 -0
  305. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/csv_test_runner.py +0 -0
  306. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/debug.py +0 -0
  307. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/deploy.py +0 -0
  308. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/diag.py +0 -0
  309. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/display_jsonl.py +0 -0
  310. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/__init__.py +0 -0
  311. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  312. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  313. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  314. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  315. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  316. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  317. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
  318. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  319. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  320. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  321. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  322. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  323. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  324. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  325. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  326. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/runtime_checks.py +0 -0
  327. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
  328. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  329. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  330. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  331. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  332. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/engine.py +0 -0
  333. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/formatters.py +0 -0
  334. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/handler.py +0 -0
  335. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/models.py +0 -0
  336. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/doctor/registry.py +0 -0
  337. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/endpoints.py +0 -0
  338. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/eval.py +0 -0
  339. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/examples.py +0 -0
  340. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/external_agents.py +0 -0
  341. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/fast_context.py +0 -0
  342. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/file_history.py +0 -0
  343. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/flow_display.py +0 -0
  344. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/gateway.py +0 -0
  345. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/git_attribution.py +0 -0
  346. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/git_integration.py +0 -0
  347. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/guardrail.py +0 -0
  348. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/handoff.py +0 -0
  349. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/hooks.py +0 -0
  350. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/hybrid_workflow.py +0 -0
  351. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/image.py +0 -0
  352. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/interactive_core_headless.py +0 -0
  353. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/interactive_runtime.py +0 -0
  354. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/interactive_test_harness.py +0 -0
  355. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/interactive_tools.py +0 -0
  356. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/interactive_tui.py +0 -0
  357. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/job_workflow.py +0 -0
  358. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/jobs.py +0 -0
  359. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/knowledge.py +0 -0
  360. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/knowledge_cli.py +0 -0
  361. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/lite.py +0 -0
  362. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/logs.py +0 -0
  363. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/lsp_cli.py +0 -0
  364. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  365. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/mcp.py +0 -0
  366. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/message_queue.py +0 -0
  367. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/metrics.py +0 -0
  368. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/migrate.py +0 -0
  369. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/migration_flow.py +0 -0
  370. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/migration_spec.py +0 -0
  371. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/n8n.py +0 -0
  372. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/observability.py +0 -0
  373. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/ollama.py +0 -0
  374. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/onboard.py +0 -0
  375. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/output_modes.py +0 -0
  376. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/output_style.py +0 -0
  377. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/package.py +0 -0
  378. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/performance.py +0 -0
  379. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/persistence.py +0 -0
  380. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/plugin_cli.py +0 -0
  381. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/profile.py +0 -0
  382. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/profiler/__init__.py +0 -0
  383. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/profiler/core.py +0 -0
  384. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/profiler/optimizations.py +0 -0
  385. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/profiler/suite.py +0 -0
  386. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/profiling.py +0 -0
  387. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/queue/__init__.py +0 -0
  388. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/queue/manager.py +0 -0
  389. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/queue/models.py +0 -0
  390. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/queue/persistence.py +0 -0
  391. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/queue/scheduler.py +0 -0
  392. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/queue/worker.py +0 -0
  393. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/recipe.py +0 -0
  394. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/recipe_creator.py +0 -0
  395. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/recipe_optimizer.py +0 -0
  396. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/recipe_prompts.py +0 -0
  397. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/recipes.py +0 -0
  398. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/registry.py +0 -0
  399. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/repo_map.py +0 -0
  400. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/router.py +0 -0
  401. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/safe_shell.py +0 -0
  402. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/sandbox_cli.py +0 -0
  403. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/sandbox_executor.py +0 -0
  404. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/sdk_knowledge.py +0 -0
  405. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/serve.py +0 -0
  406. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/session.py +0 -0
  407. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/setup/__init__.py +0 -0
  408. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/setup/handler.py +0 -0
  409. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/setup/templates.py +0 -0
  410. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/skills.py +0 -0
  411. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/slash_commands.py +0 -0
  412. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/telemetry.py +0 -0
  413. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/templates.py +0 -0
  414. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/thinking.py +0 -0
  415. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/todo.py +0 -0
  416. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tools.py +0 -0
  417. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/__init__.py +0 -0
  418. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/app.py +0 -0
  419. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/cli.py +0 -0
  420. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/config.py +0 -0
  421. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/debug.py +0 -0
  422. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/events.py +0 -0
  423. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/mock_provider.py +0 -0
  424. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/orchestrator.py +0 -0
  425. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  426. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/help.py +0 -0
  427. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/main.py +0 -0
  428. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/queue.py +0 -0
  429. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/session.py +0 -0
  430. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/settings.py +0 -0
  431. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/session_store.py +0 -0
  432. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  433. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  434. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  435. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  436. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  437. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  438. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/status.py +0 -0
  439. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  440. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/wizard.py +0 -0
  441. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/workflow.py +0 -0
  442. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/features/yaml_utils.py +0 -0
  443. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/__init__.py +0 -0
  444. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/async_tui.py +0 -0
  445. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/config.py +0 -0
  446. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/core.py +0 -0
  447. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/events.py +0 -0
  448. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  449. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  450. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  451. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/praison_io.py +0 -0
  452. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/repl.py +0 -0
  453. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/split_tui.py +0 -0
  454. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/interactive/tui_app.py +0 -0
  455. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/langfuse_client.py +0 -0
  456. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/main.py +0 -0
  457. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/schedule_cli.py +0 -0
  458. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/schema_provider.py +0 -0
  459. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/session/__init__.py +0 -0
  460. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/session/unified.py +0 -0
  461. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/state/__init__.py +0 -0
  462. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/state/identifiers.py +0 -0
  463. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/state/project_sessions.py +0 -0
  464. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/state/sessions.py +0 -0
  465. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/ui/__init__.py +0 -0
  466. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/ui/config.py +0 -0
  467. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/ui/events.py +0 -0
  468. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/ui/mg_backend.py +0 -0
  469. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/ui/plain.py +0 -0
  470. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/ui/rich_backend.py +0 -0
  471. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/unified_schema.py +0 -0
  472. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/utils/env_utils.py +0 -0
  473. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli/utils/project.py +0 -0
  474. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli_backends/__init__.py +0 -0
  475. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli_backends/claude.py +0 -0
  476. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/cli_backends/registry.py +0 -0
  477. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/__init__.py +0 -0
  478. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/agent_tools.py +0 -0
  479. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/diff/__init__.py +0 -0
  480. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/diff/diff_strategy.py +0 -0
  481. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/tools/__init__.py +0 -0
  482. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/tools/apply_diff.py +0 -0
  483. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/tools/execute_command.py +0 -0
  484. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/tools/list_files.py +0 -0
  485. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/tools/read_file.py +0 -0
  486. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/tools/search_replace.py +0 -0
  487. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/tools/write_file.py +0 -0
  488. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/utils/__init__.py +0 -0
  489. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/utils/file_utils.py +0 -0
  490. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/utils/ignore_utils.py +0 -0
  491. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/code/utils/text_utils.py +0 -0
  492. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/config/__init__.py +0 -0
  493. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/config/schema.py +0 -0
  494. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/config/validator.py +0 -0
  495. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/context/__init__.py +0 -0
  496. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/context/_storage_path.py +0 -0
  497. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/context/artifact_store.py +0 -0
  498. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/context/config.py +0 -0
  499. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/context/history_store.py +0 -0
  500. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/context/queue.py +0 -0
  501. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/context/setup.py +0 -0
  502. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/context/terminal_logger.py +0 -0
  503. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/daemon/__init__.py +0 -0
  504. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/daemon/launchd.py +0 -0
  505. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/daemon/systemd.py +0 -0
  506. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/daemon/windows.py +0 -0
  507. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/db/__init__.py +0 -0
  508. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/db/adapter.py +0 -0
  509. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/__init__.py +0 -0
  510. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/api.py +0 -0
  511. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/docker.py +0 -0
  512. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/doctor.py +0 -0
  513. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/main.py +0 -0
  514. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/models.py +0 -0
  515. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/providers/__init__.py +0 -0
  516. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/providers/_registry.py +0 -0
  517. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/providers/aws.py +0 -0
  518. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/providers/azure.py +0 -0
  519. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/providers/base.py +0 -0
  520. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/providers/gcp.py +0 -0
  521. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/deploy/schema.py +0 -0
  522. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/docs_runner/__init__.py +0 -0
  523. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/docs_runner/classifier.py +0 -0
  524. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/docs_runner/executor.py +0 -0
  525. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/docs_runner/extractor.py +0 -0
  526. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/docs_runner/reporter.py +0 -0
  527. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/docs_runner/runner.py +0 -0
  528. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/docs_runner/workspace.py +0 -0
  529. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/__init__.py +0 -0
  530. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/a2u_server.py +0 -0
  531. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/discovery.py +0 -0
  532. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/providers/__init__.py +0 -0
  533. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/providers/a2a.py +0 -0
  534. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/providers/a2u.py +0 -0
  535. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/providers/agents_api.py +0 -0
  536. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/providers/base.py +0 -0
  537. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/providers/mcp.py +0 -0
  538. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/providers/openai_compat.py +0 -0
  539. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/providers/recipe.py +0 -0
  540. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  541. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/registry.py +0 -0
  542. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/endpoints/server.py +0 -0
  543. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/flow/__init__.py +0 -0
  544. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/flow/client.py +0 -0
  545. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  546. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  547. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/flow/components/__init__.py +0 -0
  548. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/flow/converter.py +0 -0
  549. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/flow/helpers.py +0 -0
  550. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/framework_adapters/__init__.py +0 -0
  551. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  552. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/framework_adapters/base.py +0 -0
  553. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/framework_adapters/registry.py +0 -0
  554. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/framework_adapters/validators.py +0 -0
  555. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/__init__.py +0 -0
  556. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/auth.py +0 -0
  557. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/client.py +0 -0
  558. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/cookie_auth.py +0 -0
  559. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/exec_approval.py +0 -0
  560. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/gateway_approval.py +0 -0
  561. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/health_monitor.py +0 -0
  562. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/home_channels.py +0 -0
  563. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/kanban_dispatcher.py +0 -0
  564. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/magic_link.py +0 -0
  565. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/origin_check.py +0 -0
  566. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/pairing.py +0 -0
  567. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/pairing_routes.py +0 -0
  568. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/port_utils.py +0 -0
  569. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/push_channels.py +0 -0
  570. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/push_delivery.py +0 -0
  571. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/push_polling.py +0 -0
  572. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/push_presence.py +0 -0
  573. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/rate_limiter.py +0 -0
  574. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/redis_pubsub.py +0 -0
  575. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/supervisor.py +0 -0
  576. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/gateway/unicode_utils.py +0 -0
  577. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/inbuilt_tools/__init__.py +0 -0
  578. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  579. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/inc/__init__.py +0 -0
  580. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/inc/config.py +0 -0
  581. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/inc/models.py +0 -0
  582. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/__init__.py +0 -0
  583. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/bridges/__init__.py +0 -0
  584. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  585. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/bridges/hooks_query.py +0 -0
  586. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  587. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/bridges/schedules_runner.py +0 -0
  588. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/bridges/usage_bridge.py +0 -0
  589. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/bridges/workflows_service.py +0 -0
  590. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/context_files.py +0 -0
  591. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/gateway_host.py +0 -0
  592. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/host_app.py +0 -0
  593. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/pages/__init__.py +0 -0
  594. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/pages/bot_health.py +0 -0
  595. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integration/pages/workflow_runs.py +0 -0
  596. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/__init__.py +0 -0
  597. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/_session_info.py +0 -0
  598. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/_tool_aliases.py +0 -0
  599. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/_unified_registry.py +0 -0
  600. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/base.py +0 -0
  601. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/claude_code.py +0 -0
  602. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/codex_cli.py +0 -0
  603. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/compute/__init__.py +0 -0
  604. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/compute/daytona.py +0 -0
  605. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/compute/docker.py +0 -0
  606. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/compute/e2b.py +0 -0
  607. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/compute/flyio.py +0 -0
  608. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/compute/local.py +0 -0
  609. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/compute/modal_compute.py +0 -0
  610. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/cursor_cli.py +0 -0
  611. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/db_session_adapter.py +0 -0
  612. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/gemini_cli.py +0 -0
  613. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/hosted_agent.py +0 -0
  614. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/local_agent.py +0 -0
  615. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/managed_agents.py +0 -0
  616. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/managed_local.py +0 -0
  617. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/registry.py +0 -0
  618. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/integrations/sandboxed_agent.py +0 -0
  619. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/jobs/__init__.py +0 -0
  620. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/jobs/executor.py +0 -0
  621. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/jobs/models.py +0 -0
  622. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/jobs/path_validation.py +0 -0
  623. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/jobs/router.py +0 -0
  624. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/jobs/server.py +0 -0
  625. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/jobs/store.py +0 -0
  626. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/kanban/__init__.py +0 -0
  627. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/kanban/models.py +0 -0
  628. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/kanban/paths.py +0 -0
  629. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/kanban/sqlite_store.py +0 -0
  630. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/llm/__init__.py +0 -0
  631. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/llm/catalogue.py +0 -0
  632. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/llm/credentials.py +0 -0
  633. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/llm/env.py +0 -0
  634. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/llm/gateways.py +0 -0
  635. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/llm/registry.py +0 -0
  636. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/__init__.py +0 -0
  637. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/adapters/__init__.py +0 -0
  638. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/adapters/agents.py +0 -0
  639. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  640. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  641. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  642. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  643. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/adapters/memory.py +0 -0
  644. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/adapters/prompts.py +0 -0
  645. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/adapters/resources.py +0 -0
  646. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  647. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/auth/__init__.py +0 -0
  648. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/auth/api_key.py +0 -0
  649. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/auth/oauth.py +0 -0
  650. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/auth/oidc.py +0 -0
  651. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/auth/scopes.py +0 -0
  652. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/cli.py +0 -0
  653. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/elicitation.py +0 -0
  654. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/icons.py +0 -0
  655. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/recipe_adapter.py +0 -0
  656. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/recipe_cli.py +0 -0
  657. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/registry.py +0 -0
  658. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/sampling.py +0 -0
  659. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/server.py +0 -0
  660. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/tasks.py +0 -0
  661. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/tool_index.py +0 -0
  662. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/transports/__init__.py +0 -0
  663. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/transports/http_stream.py +0 -0
  664. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/mcp_server/transports/stdio.py +0 -0
  665. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/n8n/__init__.py +0 -0
  666. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/n8n/client.py +0 -0
  667. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/n8n/converter.py +0 -0
  668. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/n8n/preview.py +0 -0
  669. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/n8n/reverse_converter.py +0 -0
  670. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/observability/__init__.py +0 -0
  671. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/observability/langextract.py +0 -0
  672. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/observability/langfuse.py +0 -0
  673. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/__init__.py +0 -0
  674. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/_valkey_client.py +0 -0
  675. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/config.py +0 -0
  676. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/__init__.py +0 -0
  677. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/_sql_base.py +0 -0
  678. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/async_mysql.py +0 -0
  679. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/async_postgres.py +0 -0
  680. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  681. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/base.py +0 -0
  682. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/json_store.py +0 -0
  683. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/mysql.py +0 -0
  684. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/postgres.py +0 -0
  685. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/singlestore.py +0 -0
  686. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/sqlite.py +0 -0
  687. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/supabase.py +0 -0
  688. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/surrealdb.py +0 -0
  689. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  690. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/conversation/turso.py +0 -0
  691. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/factory.py +0 -0
  692. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/hooks/__init__.py +0 -0
  693. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  694. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/__init__.py +0 -0
  695. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/base.py +0 -0
  696. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/cassandra.py +0 -0
  697. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/chroma.py +0 -0
  698. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  699. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  700. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/couchbase.py +0 -0
  701. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/lancedb.py +0 -0
  702. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  703. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  704. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  705. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/milvus.py +0 -0
  706. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  707. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/pgvector.py +0 -0
  708. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/pinecone.py +0 -0
  709. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/qdrant.py +0 -0
  710. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  711. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  712. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  713. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  714. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  715. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/knowledge/weaviate.py +0 -0
  716. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/migrations/__init__.py +0 -0
  717. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/migrations/manager.py +0 -0
  718. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/orchestrator.py +0 -0
  719. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/registry.py +0 -0
  720. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/__init__.py +0 -0
  721. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/async_mongodb.py +0 -0
  722. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/base.py +0 -0
  723. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/dynamodb.py +0 -0
  724. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/firestore.py +0 -0
  725. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/gcs.py +0 -0
  726. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/memory.py +0 -0
  727. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/mongodb.py +0 -0
  728. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/redis.py +0 -0
  729. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/upstash.py +0 -0
  730. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/state/valkey.py +0 -0
  731. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/tests/__init__.py +0 -0
  732. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/tests/test_all_backends.py +0 -0
  733. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  734. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/profiler.py +0 -0
  735. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/push/__init__.py +0 -0
  736. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/push/client.py +0 -0
  737. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/push/transports.py +0 -0
  738. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/__init__.py +0 -0
  739. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/bridge.py +0 -0
  740. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/core.py +0 -0
  741. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/exceptions.py +0 -0
  742. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/history.py +0 -0
  743. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/models.py +0 -0
  744. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/operations.py +0 -0
  745. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/policy.py +0 -0
  746. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/registry.py +0 -0
  747. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/runtime.py +0 -0
  748. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/security.py +0 -0
  749. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/serve.py +0 -0
  750. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/recipe/server.py +0 -0
  751. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/replay/__init__.py +0 -0
  752. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/replay/analyzer.py +0 -0
  753. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/replay/applier.py +0 -0
  754. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/replay/judge.py +0 -0
  755. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/replay/plan.py +0 -0
  756. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/replay/player.py +0 -0
  757. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/replay/reader.py +0 -0
  758. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/replay/storage.py +0 -0
  759. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/replay/writer.py +0 -0
  760. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/__init__.py +0 -0
  761. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/_compat.py +0 -0
  762. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/_registry.py +0 -0
  763. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/_shell.py +0 -0
  764. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/daytona.py +0 -0
  765. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/docker.py +0 -0
  766. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/e2b.py +0 -0
  767. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/modal.py +0 -0
  768. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/sandlock.py +0 -0
  769. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/ssh.py +0 -0
  770. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/sandbox/subprocess.py +0 -0
  771. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/_base_scheduler.py +0 -0
  772. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/_dispatch.py +0 -0
  773. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/async_agent_scheduler.py +0 -0
  774. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/base.py +0 -0
  775. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/daemon_manager.py +0 -0
  776. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/deployment.py +0 -0
  777. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/enhanced_executor.py +0 -0
  778. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/run_policy.py +0 -0
  779. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/scheduler/state_manager.py +0 -0
  780. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/security/__init__.py +0 -0
  781. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/security/audit.py +0 -0
  782. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/security/injection.py +0 -0
  783. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/security/protected.py +0 -0
  784. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/setup/__init__.py +0 -0
  785. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/setup/build.py +0 -0
  786. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/setup/post_install.py +0 -0
  787. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/setup/setup_conda_env.py +0 -0
  788. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/setup.py +0 -0
  789. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/__init__.py +0 -0
  790. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/ai_generator.py +0 -0
  791. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/config.py +0 -0
  792. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/dedupe.py +0 -0
  793. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/discovery.py +0 -0
  794. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/drift.py +0 -0
  795. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/engine.py +0 -0
  796. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/enhanced_templates.py +0 -0
  797. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/example_verifier.py +0 -0
  798. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/manifest.py +0 -0
  799. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/models.py +0 -0
  800. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/reports.py +0 -0
  801. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/templates.py +0 -0
  802. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/undo_redo.py +0 -0
  803. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/standardise/validator.py +0 -0
  804. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/storage/__init__.py +0 -0
  805. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/storage/dynamodb_adapter.py +0 -0
  806. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/storage/mongodb_adapter.py +0 -0
  807. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/storage/postgresql_adapter.py +0 -0
  808. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/storage/redis_adapter.py +0 -0
  809. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/storage/valkey_adapter.py +0 -0
  810. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/__init__.py +0 -0
  811. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/batch_source.py +0 -0
  812. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/cli_docs_source.py +0 -0
  813. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/discovery.py +0 -0
  814. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/docs_source.py +0 -0
  815. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/examples_source.py +0 -0
  816. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/executor.py +0 -0
  817. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/models.py +0 -0
  818. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/report_viewer.py +0 -0
  819. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/reporter.py +0 -0
  820. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/suite_runner/runner.py +0 -0
  821. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/templates/__init__.py +0 -0
  822. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/templates/cache.py +0 -0
  823. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/templates/dependency_checker.py +0 -0
  824. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/templates/discovery.py +0 -0
  825. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/templates/loader.py +0 -0
  826. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/templates/registry.py +0 -0
  827. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/templates/resolver.py +0 -0
  828. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/templates/security.py +0 -0
  829. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/templates/tool_override.py +0 -0
  830. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/templates/tools_doctor.py +0 -0
  831. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/test.py +0 -0
  832. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/tool_registry.py +0 -0
  833. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/tools/__init__.py +0 -0
  834. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/tools/audio.py +0 -0
  835. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/tools/glob_tool.py +0 -0
  836. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/tools/grep_tool.py +0 -0
  837. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/tools/kanban_tools.py +0 -0
  838. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/tools/multiedit.py +0 -0
  839. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/tools/skill_manage.py +0 -0
  840. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train/__init__.py +0 -0
  841. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train/_ollama.py +0 -0
  842. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train/agents/__init__.py +0 -0
  843. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train/agents/grader.py +0 -0
  844. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train/agents/hook.py +0 -0
  845. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train/agents/models.py +0 -0
  846. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train/agents/orchestrator.py +0 -0
  847. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train/agents/storage.py +0 -0
  848. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train/llm/__init__.py +0 -0
  849. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train/llm/trainer.py +0 -0
  850. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train.py +0 -0
  851. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/train_vision.py +0 -0
  852. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui/_aiui_datastore.py +0 -0
  853. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui/_external_agents.py +0 -0
  854. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui/callbacks.py +0 -0
  855. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui/components/aicoder.py +0 -0
  856. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui/context.py +0 -0
  857. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui/database_config.py +0 -0
  858. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui_agents/__init__.py +0 -0
  859. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui_agents/default_app.py +0 -0
  860. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui_bot/__init__.py +0 -0
  861. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui_bot/default_app.py +0 -0
  862. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui_chat/__init__.py +0 -0
  863. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui_chat/default_app.py +0 -0
  864. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui_dashboard/default_app.py +0 -0
  865. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui_realtime/__init__.py +0 -0
  866. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/ui_realtime/default_app.py +0 -0
  867. {praisonai-4.6.72 → praisonai-4.6.74}/praisonai/upload_vision.py +0 -0
  868. {praisonai-4.6.72 → praisonai-4.6.74}/setup.cfg +0 -0
  869. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test.py +0 -0
  870. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_agents_playbook.py +0 -0
  871. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_approval_system.py +0 -0
  872. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_basic.py +0 -0
  873. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_cli_features.py +0 -0
  874. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_custom_tools_fix.py +0 -0
  875. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_double_api_fix.py +0 -0
  876. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_n8n_agent_invoke.py +0 -0
  877. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_n8n_cli_feature.py +0 -0
  878. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_n8n_integration.py +0 -0
  879. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_phase2_refactor.py +0 -0
  880. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_recipe.py +0 -0
  881. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_registry.py +0 -0
  882. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_runner.py +0 -0
  883. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_sandboxed_agent_compatibility.py +0 -0
  884. {praisonai-4.6.72 → praisonai-4.6.74}/tests/test_serve_features.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.72
3
+ Version: 4.6.74
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=1.6.72
14
+ Requires-Dist: praisonaiagents>=1.6.74
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: litellm<2,>=1.83.14
17
17
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 4.6.72
3
+ Version: 4.6.74
4
4
  Summary: PraisonAI is an AI Agents Framework with Self Reflection. PraisonAI application combines PraisonAI Agents, AutoGen, and CrewAI into a low-code solution for building and managing multi-agent LLM systems, focusing on simplicity, customisation, and efficient human-agent collaboration.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
11
11
  Requires-Dist: rich>=13.7
12
12
  Requires-Dist: markdown>=3.5
13
13
  Requires-Dist: pyparsing>=3.0.0
14
- Requires-Dist: praisonaiagents>=1.6.72
14
+ Requires-Dist: praisonaiagents>=1.6.74
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
@@ -255,6 +255,7 @@ praisonai/cli/commands/validate.py
255
255
  praisonai/cli/commands/version.py
256
256
  praisonai/cli/commands/workflow.py
257
257
  praisonai/cli/configuration/__init__.py
258
+ praisonai/cli/configuration/config.schema.json
258
259
  praisonai/cli/configuration/credentials.py
259
260
  praisonai/cli/configuration/loader.py
260
261
  praisonai/cli/configuration/paths.py
@@ -445,6 +446,7 @@ praisonai/cli/interactive/frontends/rich_frontend.py
445
446
  praisonai/cli/interactive/frontends/textual_frontend.py
446
447
  praisonai/cli/output/__init__.py
447
448
  praisonai/cli/output/console.py
449
+ praisonai/cli/output/event_bridge.py
448
450
  praisonai/cli/session/__init__.py
449
451
  praisonai/cli/session/unified.py
450
452
  praisonai/cli/state/__init__.py
@@ -765,6 +767,8 @@ praisonai/scheduler/_dispatch.py
765
767
  praisonai/scheduler/agent_scheduler.py
766
768
  praisonai/scheduler/async_agent_scheduler.py
767
769
  praisonai/scheduler/base.py
770
+ praisonai/scheduler/blueprint_catalogue.py
771
+ praisonai/scheduler/condition_gate.py
768
772
  praisonai/scheduler/daemon_manager.py
769
773
  praisonai/scheduler/deployment.py
770
774
  praisonai/scheduler/enhanced_executor.py
@@ -772,6 +776,7 @@ praisonai/scheduler/executor.py
772
776
  praisonai/scheduler/run_policy.py
773
777
  praisonai/scheduler/shared.py
774
778
  praisonai/scheduler/state_manager.py
779
+ praisonai/scheduler/suggestion_engine.py
775
780
  praisonai/scheduler/yaml_loader.py
776
781
  praisonai/security/__init__.py
777
782
  praisonai/security/audit.py
@@ -1,7 +1,7 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=1.6.72
4
+ praisonaiagents>=1.6.74
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -5,6 +5,7 @@ re-implementing the dict-of-Lock pattern.
5
5
  """
6
6
  from __future__ import annotations
7
7
  import asyncio
8
+ import threading
8
9
  import time
9
10
  import weakref
10
11
  from collections import OrderedDict
@@ -17,9 +18,11 @@ class LockMap:
17
18
  Provides a lock per key with LRU eviction and TTL-based cleanup to prevent
18
19
  unbounded memory growth in long-running applications.
19
20
 
20
- Note: Safe for use within a single asyncio event loop (cooperative
21
- multitasking means no interleaving between non-awaited calls), but NOT
22
- safe for concurrent access from multiple OS threads.
21
+ Buckets are keyed by event loop (one loop per OS thread). Structural
22
+ mutations of the bucket/loop maps are guarded by a ``threading.Lock`` so
23
+ the same instance can be safely shared across multiple OS threads, each
24
+ running its own event loop. Per-loop buckets are only ever touched from
25
+ their owning loop, so intra-loop access remains lock-free.
23
26
  """
24
27
 
25
28
  def __init__(self, *, max_entries: int = 10_000, ttl_seconds: float = 3600.0):
@@ -32,6 +35,8 @@ class LockMap:
32
35
  # Bucket locks by event loop to avoid cross-loop issues
33
36
  self._buckets: Dict[int, "OrderedDict[Hashable, tuple[asyncio.Lock, float]]"] = {}
34
37
  self._loop_refs: Dict[int, weakref.ref] = {}
38
+ # Guards structural mutations of _buckets / _loop_refs across OS threads.
39
+ self._struct_lock = threading.Lock()
35
40
  self._max = max_entries
36
41
  self._ttl = ttl_seconds
37
42
 
@@ -47,16 +52,25 @@ class LockMap:
47
52
  # Get the current running loop
48
53
  loop = asyncio.get_running_loop()
49
54
  loop_id = id(loop)
50
-
51
- # Clean up dead loops
52
- self._cleanup_dead_loops()
53
-
54
- # Get or create bucket for this loop
55
- if loop_id not in self._buckets:
56
- self._buckets[loop_id] = OrderedDict()
57
- self._loop_refs[loop_id] = weakref.ref(loop)
58
-
59
- bucket = self._buckets[loop_id]
55
+
56
+ # Fast path: a bucket for this loop already exists. The bucket is only
57
+ # ever mutated by its owning loop's thread, so a single dict read is
58
+ # safe under CPython's GIL without taking the cross-thread struct lock.
59
+ bucket = self._buckets.get(loop_id)
60
+ if bucket is None:
61
+ # Slow path: structural mutation shared across threads needs the lock.
62
+ with self._struct_lock:
63
+ # Clean up dead loops (only on first-touch to avoid per-call cost)
64
+ self._cleanup_dead_loops_locked()
65
+
66
+ # Re-check after acquiring the lock (another thread may have raced).
67
+ bucket = self._buckets.get(loop_id)
68
+ if bucket is None:
69
+ bucket = OrderedDict()
70
+ self._buckets[loop_id] = bucket
71
+ self._loop_refs[loop_id] = weakref.ref(loop)
72
+
73
+ # From here on only this loop's owning thread touches the bucket.
60
74
  now = time.monotonic()
61
75
 
62
76
  entry = bucket.get(key)
@@ -99,27 +113,31 @@ class LockMap:
99
113
  bucket.popitem(last=False)
100
114
  break
101
115
 
102
- def _cleanup_dead_loops(self) -> None:
103
- """Remove buckets for event loops that no longer exist."""
104
- dead_loops = []
105
- for loop_id, ref in self._loop_refs.items():
106
- loop = ref()
107
- if loop is None or loop.is_closed():
108
- dead_loops.append(loop_id)
109
-
116
+ def _cleanup_dead_loops_locked(self) -> None:
117
+ """Remove buckets for event loops that no longer exist.
118
+
119
+ Caller must hold ``self._struct_lock``.
120
+ """
121
+ dead_loops = [
122
+ loop_id
123
+ for loop_id, ref in self._loop_refs.items()
124
+ if (loop := ref()) is None or loop.is_closed()
125
+ ]
110
126
  for loop_id in dead_loops:
111
- del self._loop_refs[loop_id]
112
- if loop_id in self._buckets:
113
- del self._buckets[loop_id]
127
+ self._loop_refs.pop(loop_id, None)
128
+ self._buckets.pop(loop_id, None)
114
129
 
115
130
  def drop(self, key: Hashable) -> None:
116
131
  """Manually remove a lock for the given key."""
117
132
  # Get the current running loop
118
133
  loop = asyncio.get_running_loop()
119
134
  loop_id = id(loop)
120
- if loop_id in self._buckets:
121
- self._buckets[loop_id].pop(key, None)
135
+ with self._struct_lock:
136
+ bucket = self._buckets.get(loop_id)
137
+ if bucket is not None:
138
+ bucket.pop(key, None)
122
139
 
123
140
  def size(self) -> int:
124
141
  """Return current number of cached locks across all buckets."""
125
- return sum(len(bucket) for bucket in self._buckets.values())
142
+ with self._struct_lock:
143
+ return sum(len(bucket) for bucket in self._buckets.values())
@@ -76,10 +76,50 @@ class SessionResetConfigSchema(BaseModel):
76
76
  return self
77
77
 
78
78
 
79
+ class SessionCompactionConfigSchema(BaseModel):
80
+ """Schema for session history compaction configuration.
81
+
82
+ When enabled, older turns in a long-lived bot/gateway session are
83
+ summarised (rather than hard-truncated) once the history exceeds the
84
+ configured budget, so context survives across weeks-long conversations
85
+ and restarts. Disabled by default to preserve legacy behaviour.
86
+ """
87
+ enabled: bool = False
88
+ strategy: str = "summarize" # truncate | sliding | summarize | smart | prune | llm_summarize
89
+ max_messages: int = 100 # Approx. compaction threshold (converted to a token budget; max_history remains a hard cap)
90
+ max_tokens: Optional[int] = None # Optional token-based budget (overrides messages)
91
+ keep_recent: int = 10 # Number of most-recent messages kept verbatim
92
+
93
+ @field_validator("strategy")
94
+ @classmethod
95
+ def validate_strategy(cls, v: str) -> str:
96
+ allowed = {"truncate", "sliding", "summarize", "smart", "prune", "llm_summarize"}
97
+ if v not in allowed:
98
+ raise ValueError(
99
+ f"Invalid compaction strategy '{v}'. Must be one of: {', '.join(sorted(allowed))}"
100
+ )
101
+ return v
102
+
103
+ @field_validator("max_messages")
104
+ @classmethod
105
+ def validate_max_messages(cls, v: int) -> int:
106
+ if v < 1:
107
+ raise ValueError("max_messages must be at least 1")
108
+ return v
109
+
110
+ @field_validator("keep_recent")
111
+ @classmethod
112
+ def validate_keep_recent(cls, v: int) -> int:
113
+ if v < 0:
114
+ raise ValueError("keep_recent must be non-negative")
115
+ return v
116
+
117
+
79
118
  class SessionConfigSchema(BaseModel):
80
119
  """Schema for session configuration."""
81
120
  max_history: int = 100
82
121
  reset: Optional[SessionResetConfigSchema] = None
122
+ compaction: Optional[SessionCompactionConfigSchema] = None
83
123
 
84
124
 
85
125
  class StreamingConfigSchema(BaseModel):
@@ -156,6 +196,7 @@ class ChannelConfigSchema(BaseModel):
156
196
  user_allowed_commands: Optional[str] = None # Comma-separated list of allowed commands
157
197
  routes: Dict[str, str] = Field(default_factory=dict) # Context -> agent_id mapping
158
198
  routing: Optional[Dict[str, str]] = None # Alias for routes
199
+ bindings: List[Dict[str, Any]] = Field(default_factory=list) # Priority-ordered route bindings (Issue #2225)
159
200
  webhook_url: Optional[str] = None
160
201
  webhook_port: int = 8080
161
202
  streaming: Optional[StreamingConfigSchema] = None
@@ -79,6 +79,7 @@ class BotSessionManager:
79
79
  reset_policy: Optional[SessionResetPolicy] = None,
80
80
  channel_directory: Optional[Any] = None,
81
81
  inject_session_context: bool = True,
82
+ compaction: Optional[Any] = None,
82
83
  ) -> None:
83
84
  self._histories: Dict[str, List[Dict[str, Any]]] = {}
84
85
  self._locks = LockMap()
@@ -118,6 +119,83 @@ class BotSessionManager:
118
119
  # storage_key: (HookRunner, agent_name). Lets any clear path emit
119
120
  # SESSION_END with the *correct* runner/agent — never another user's.
120
121
  self._session_hook_context: Dict[str, Any] = {}
122
+ # Optional history compaction. When configured, older turns are
123
+ # summarised (instead of hard-truncated) once history exceeds the
124
+ # configured budget, so long-lived conversations retain context.
125
+ # Default ``None`` preserves the legacy tail-slice truncation.
126
+ #
127
+ # We store only the *config* and build a fresh ``ContextCompactor``
128
+ # per ``_save_history`` call. The core compactor carries mutable
129
+ # per-conversation state (iterative summary, anti-thrashing streaks),
130
+ # so a single shared instance would leak context across users and
131
+ # race under concurrent saves on the executor thread pool.
132
+ self._compaction_config = compaction
133
+ # Probe availability once so behaviour/tests can detect whether
134
+ # compaction is active without sharing the stateful instance.
135
+ self._compaction_enabled = self._build_compactor(compaction) is not None
136
+
137
+ @staticmethod
138
+ def _build_compactor(compaction: Optional[Any]) -> Optional[Any]:
139
+ """Lazily construct a ``ContextCompactor`` from a compaction config.
140
+
141
+ Accepts a ``SessionCompactionConfigSchema`` (or any object/dict with
142
+ the same fields). Returns ``None`` when compaction is disabled or the
143
+ core compaction engine is unavailable, in which case the manager falls
144
+ back to the legacy tail-slice truncation.
145
+ """
146
+ if compaction is None:
147
+ return None
148
+
149
+ # Normalise to attribute access from either a pydantic model or dict.
150
+ def _get(name, default=None):
151
+ if isinstance(compaction, dict):
152
+ return compaction.get(name, default)
153
+ return getattr(compaction, name, default)
154
+
155
+ if not _get("enabled", False):
156
+ return None
157
+
158
+ strategy = _get("strategy", "summarize")
159
+ max_tokens = _get("max_tokens", None)
160
+ max_messages = _get("max_messages", 100)
161
+ keep_recent = _get("keep_recent", 10)
162
+
163
+ try:
164
+ from praisonaiagents.compaction import ContextCompactor, CompactionStrategy
165
+ except Exception as e: # pragma: no cover — optional dependency
166
+ logger.warning(
167
+ "Compaction requested but praisonaiagents.compaction is unavailable: %s",
168
+ e,
169
+ )
170
+ return None
171
+
172
+ try:
173
+ strategy_enum = CompactionStrategy(strategy)
174
+ except ValueError:
175
+ logger.warning(
176
+ "Unknown compaction strategy %r; falling back to 'summarize'", strategy
177
+ )
178
+ strategy_enum = CompactionStrategy.SUMMARIZE
179
+
180
+ # Message-count budgets are translated to a rough token budget so the
181
+ # core token-based compactor triggers at the intended history length.
182
+ # ~4 chars/token and an estimated ~80 tokens/message keeps this simple
183
+ # and avoids touching the core engine. NOTE: this is only an estimate —
184
+ # actual compaction depth varies with message size. The caller keeps
185
+ # ``max_history`` as a hard upper bound so short-message bots never grow
186
+ # in-memory history unbounded before the token threshold is reached.
187
+ if max_tokens is None:
188
+ max_tokens = max(1, int(max_messages) * 80)
189
+
190
+ try:
191
+ return ContextCompactor(
192
+ max_tokens=int(max_tokens),
193
+ strategy=strategy_enum,
194
+ preserve_recent=int(keep_recent),
195
+ )
196
+ except Exception as e: # pragma: no cover — defensive
197
+ logger.warning("Failed to build ContextCompactor: %s", e)
198
+ return None
121
199
 
122
200
  def _storage_key(self, user_id: str) -> str:
123
201
  """Resolve a raw platform user id to the in-memory/store key.
@@ -240,8 +318,45 @@ class BotSessionManager:
240
318
  def _save_history(
241
319
  self, user_id: str, history: List[Dict[str, Any]]
242
320
  ) -> None:
243
- """Save user history to store (if available) and in-memory cache."""
244
- if self._max_history > 0 and len(history) > self._max_history:
321
+ """Save user history to store (if available) and in-memory cache.
322
+
323
+ When a compactor is configured, older turns are summarised (keeping a
324
+ recent verbatim tail) instead of being permanently discarded, so
325
+ long-lived conversations retain context across restarts. Without a
326
+ compactor, the legacy tail-slice truncation is applied.
327
+
328
+ A fresh ``ContextCompactor`` is built per call (not shared on the
329
+ instance) so per-conversation state never leaks across users and
330
+ concurrent saves on the executor pool don't race.
331
+ """
332
+ # Build a per-call compactor so its mutable per-conversation state
333
+ # (iterative summary, anti-thrashing streaks) stays isolated per user.
334
+ compactor = (
335
+ self._build_compactor(self._compaction_config)
336
+ if self._compaction_enabled
337
+ else None
338
+ )
339
+ if compactor is not None:
340
+ try:
341
+ if compactor.needs_compaction(history):
342
+ compacted, _result = compactor.compact(history)
343
+ history = compacted
344
+ except Exception as e: # pragma: no cover — defensive
345
+ logger.warning(
346
+ "History compaction failed; falling back to truncation: %s", e
347
+ )
348
+ if self._max_history > 0 and len(history) > self._max_history:
349
+ history = history[-self._max_history:]
350
+ else:
351
+ # Hard cap safety valve: even when the token-based compactor
352
+ # hasn't triggered (e.g. short messages under-shoot the token
353
+ # estimate), never let history grow unbounded. Allow headroom
354
+ # so the cap doesn't fight compaction's recent-tail + summary.
355
+ if self._max_history > 0:
356
+ hard_cap = self._max_history * 4
357
+ if len(history) > hard_cap:
358
+ history = history[-hard_cap:]
359
+ elif self._max_history > 0 and len(history) > self._max_history:
245
360
  history = history[-self._max_history:]
246
361
 
247
362
  # Always update in-memory cache (keyed by storage key)
@@ -949,6 +1064,11 @@ def build_session_manager(config, platform: str, *, run_control=None) -> BotSess
949
1064
  reset_policy = None
950
1065
  if getattr(config, "session", None) and getattr(config.session, "reset", None):
951
1066
  reset_policy = SessionResetPolicy.from_dict(config.session.reset.model_dump())
1067
+
1068
+ # Extract optional history compaction config (disabled unless configured)
1069
+ compaction = None
1070
+ if getattr(config, "session", None) and getattr(config.session, "compaction", None):
1071
+ compaction = config.session.compaction
952
1072
 
953
1073
  # Support backward compatibility with max_history at channel level
954
1074
  max_history = 100
@@ -963,4 +1083,5 @@ def build_session_manager(config, platform: str, *, run_control=None) -> BotSess
963
1083
  platform=platform,
964
1084
  reset_policy=reset_policy,
965
1085
  run_control=run_control,
1086
+ compaction=compaction,
966
1087
  )
@@ -704,102 +704,25 @@ def get_output_controller() -> OutputController:
704
704
  return state.output_controller
705
705
 
706
706
 
707
- # Command name to module mapping for lazy loading
708
- _COMMAND_GROUPS = {
709
- # Core commands
710
- "init": ".commands.init",
711
- "config": ".commands.config",
712
- "traces": ".commands.traces",
713
- "env": ".commands.environment",
714
- "session": ".commands.session",
715
- "completion": ".commands.completion",
716
- "version": ".commands.version",
717
- "debug": ".commands.debug",
718
- "lsp": ".commands.lsp",
719
- "diag": ".commands.diag",
720
- "doctor": ".commands.doctor",
721
- "setup": ".commands.setup",
722
- "onboard": ".commands.onboard",
723
- "obs": ".commands.obs",
724
- "acp": ".commands.acp",
725
- "mcp": ".commands.mcp",
726
- "serve": ".commands.serve",
727
- "schedule": ".commands.schedule",
728
- "kanban": ".commands.kanban",
729
- "run": ".commands.run",
730
- "profile": ".commands.profile",
731
- "benchmark": ".commands.benchmark",
732
- "paths": ".commands.paths",
733
- # Terminal-native commands
734
- "chat": ".commands.chat",
735
- "code": ".commands.code",
736
- "call": ".commands.call",
737
- "realtime": ".commands.realtime",
738
- "train": ".commands.train",
739
- "ui": ".commands.ui",
740
- "context": ".commands.context",
741
- "research": ".commands.research",
742
- "memory": ".commands.memory",
743
- "workflow": ".commands.workflow",
744
- "tools": ".commands.tools",
745
- "n8n": ".commands.n8n",
746
- "knowledge": ".commands.knowledge",
747
- "rag": ".commands.rag",
748
- "deploy": ".commands.deploy",
749
- "agents": ".commands.agents",
750
- "skills": ".commands.skills",
751
- "eval": ".commands.eval",
752
- "templates": ".commands.templates",
753
- "recipe": ".commands.recipe",
754
- "todo": ".commands.todo",
755
- "docs": ".commands.docs",
756
- "commit": ".commands.commit",
757
- "publish": ".commands.publish",
758
- "hooks": ".commands.hooks",
759
- "rules": ".commands.rules",
760
- "registry": ".commands.registry",
761
- "package": ".commands.package",
762
- "endpoints": ".commands.endpoints",
763
- "test": ".commands.test",
764
- "examples": ".commands.examples",
765
- "batch": ".commands.batch",
766
- "replay": ".commands.replay",
767
- "loop": ".commands.loop",
768
- "tracker": ".commands.tracker",
769
- "github": ".commands.github",
770
- # Moltbot-inspired commands
771
- "bot": ".commands.bot",
772
- "gateway": ".commands.gateway",
773
- "pairing": ".commands.pairing",
774
- "identity": ".commands.identity",
775
- "browser": ".commands.browser",
776
- "plugins": ".commands.plugins",
777
- "sandbox": ".commands.sandbox",
778
- "claw": ".commands.claw",
779
- "flow": ".commands.flow",
780
- "dashboard": ".commands.dashboard",
781
- "langfuse": ".commands.langfuse",
782
- "langextract": ".commands.langextract",
783
- "port": ".commands.port",
784
- "managed": ".commands.managed",
785
- "up": ".commands.up",
786
- "standardise": "standardise_app_special", # Special case
787
- "standardize": "standardise_app_special", # Special case
788
- "app": "app_special", # Special case
789
- "tui": "tui_special", # Special case
790
- "queue": "queue_special", # Special case
791
- # Retrieval commands are registered dynamically
792
- }
793
-
794
707
  # Import and register command groups
795
708
  _commands_registered = False
796
709
 
797
710
  def get_command_names():
798
- """Get all available command names without importing the modules."""
799
- names = set(_COMMAND_GROUPS.keys())
800
- # Add dynamically registered commands that don't have modules
711
+ """Get all available command names without importing the modules.
712
+
713
+ Derived from the authoritative ``_LAZY_COMMANDS`` registry (the single
714
+ source of truth that also drives ``--help``) so routing can never drift
715
+ from the advertised command set. Special and dynamically-registered
716
+ commands that are not in ``_LAZY_COMMANDS`` are added explicitly.
717
+ """
718
+ names = set(_LAZY_COMMANDS.keys())
719
+ # Special commands with custom handling (tui, queue)
720
+ names.update(_SPECIAL_COMMANDS.keys())
721
+ # Inline special commands handled outside the registries
722
+ names.update({"app", "standardise", "standardize"})
723
+ # Dynamically registered retrieval commands (no static module entry)
801
724
  # NOTE: retrieval_module.register_commands(app) adds these commands dynamically
802
- names.update({"index", "query"}) # retrieval commands
725
+ names.update({"index", "query"})
803
726
  return names
804
727
 
805
728
  def register_commands():
@@ -532,42 +532,96 @@ def config_validate(
532
532
  None,
533
533
  help="Configuration file to validate (defaults to current config)",
534
534
  ),
535
+ strict: bool = typer.Option(
536
+ False,
537
+ "--strict-config",
538
+ "--strict",
539
+ help="Treat unknown/typo keys as errors instead of warnings",
540
+ ),
535
541
  ):
536
- """Validate configuration file syntax and schema."""
542
+ """Validate configuration file syntax and schema (catches typos)."""
537
543
  output = get_output_controller()
538
-
544
+
545
+ from ..configuration.resolver import (
546
+ ConfigResolver,
547
+ ResolvedConfig,
548
+ validate_config_data,
549
+ )
550
+
551
+ # (raw config dict, source label) pairs to validate.
552
+ targets: list = []
553
+
539
554
  try:
540
555
  if file:
541
- # Validate specific file
556
+ # Validate a specific file.
542
557
  config_path = Path(file)
543
558
  if not config_path.exists():
544
559
  output.print_error(f"File not found: {file}")
545
560
  raise typer.Exit(1)
546
-
561
+
547
562
  with open(config_path, 'r') as f:
548
563
  data = yaml.safe_load(f)
549
-
564
+ targets.append((data, str(config_path)))
550
565
  else:
551
- # Validate current resolved config
552
- config = resolve_config()
553
- data = config.to_dict()
554
- config_path = "resolved configuration"
555
-
556
- # Check schema validity
557
- from ..configuration.resolver import ResolvedConfig
558
-
559
- try:
560
- if isinstance(data, dict):
561
- validated = ResolvedConfig.from_dict(data)
562
- output.print_success(f" Configuration is valid: {config_path}")
563
- else:
564
- output.print_error(f"Configuration must be a dictionary/object: {config_path}")
566
+ # Validate the RAW discovered config(s) so nested typos (e.g.
567
+ # agent.temprature) are caught instead of being normalised away.
568
+ # Discover with strict=False so loading never raises here; we run
569
+ # the explicit (optionally strict) validation pass below.
570
+ resolver = ConfigResolver(strict=False)
571
+ import warnings as _warnings
572
+ with _warnings.catch_warnings():
573
+ _warnings.simplefilter("ignore")
574
+ raw_configs = resolver.discover_raw_configs()
575
+ if not raw_configs:
576
+ if output.is_json_mode:
577
+ output.print_json({"valid": True, "warnings": [], "sources": []})
578
+ else:
579
+ output.print_success(" No project/global configuration found (defaults in use)")
580
+ return
581
+ for raw in raw_configs:
582
+ targets.append((raw, raw.get("_source", "resolved configuration")))
583
+
584
+ messages: list = []
585
+ for data, source in targets:
586
+ if not isinstance(data, dict):
587
+ output.print_error(f"Configuration must be a dictionary/object: {source}")
565
588
  raise typer.Exit(1)
566
-
567
- except Exception as e:
568
- output.print_error(f"Schema validation failed: {e}")
569
- raise typer.Exit(1)
570
-
589
+
590
+ # Schema/typo validation (collect-and-report in warn mode).
591
+ try:
592
+ messages.extend(validate_config_data(data, source=source, strict=strict))
593
+ except ValueError as e:
594
+ output.print_error(f"Schema validation failed: {e}")
595
+ raise typer.Exit(1) from e
596
+
597
+ # Ensure it can also be parsed by the resolver.
598
+ ResolvedConfig.from_dict(data)
599
+
600
+ sources = [source for _, source in targets]
601
+
602
+ if messages:
603
+ if output.is_json_mode:
604
+ output.print_json({
605
+ "valid": False,
606
+ "warnings": messages,
607
+ "sources": sources,
608
+ "hint": "Use --strict-config (or PRAISONAI_STRICT_CONFIG=1) to fail on these.",
609
+ })
610
+ else:
611
+ for message in messages:
612
+ output.print_warning(message)
613
+ output.print_warning(
614
+ f"Configuration loaded with {len(messages)} warning(s)."
615
+ )
616
+ output.print_info(
617
+ "Use --strict-config (or PRAISONAI_STRICT_CONFIG=1) to fail on these."
618
+ )
619
+ else:
620
+ if output.is_json_mode:
621
+ output.print_json({"valid": True, "warnings": [], "sources": sources})
622
+ else:
623
+ output.print_success(f"✓ Configuration is valid: {', '.join(sources)}")
624
+
571
625
  except typer.Exit:
572
626
  raise
573
627
  except yaml.YAMLError as e:
@@ -24,10 +24,14 @@ app = typer.Typer(help="Initialise the .praisonai/ project convention")
24
24
 
25
25
 
26
26
  STARTER_CONFIG = """\
27
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/MervinPraison/PraisonAI/main/src/praisonai/praisonai/cli/configuration/config.schema.json
27
28
  # PraisonAI project configuration
28
29
  # Defaults applied to scaffolded agents and commands.
29
- model: gpt-4o-mini
30
- output: text
30
+ # Sections are nested exactly as the resolver consumes them.
31
+ agent:
32
+ model: gpt-4o-mini
33
+ output:
34
+ format: text
31
35
  """
32
36
 
33
37
  STARTER_AGENT_MD = """\