praisonAI 3.2.0__tar.gz → 3.2.1__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 (476) hide show
  1. {praisonai-3.2.0 → praisonai-3.2.1}/PKG-INFO +2 -2
  2. {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/SOURCES.txt +1 -0
  4. {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/app.py +6 -2
  6. praisonai-3.2.1/praisonai/cli/commands/retrieval.py +377 -0
  7. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/main.py +38 -0
  8. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy.py +1 -1
  9. praisonai-3.2.1/praisonai/version.py +1 -0
  10. {praisonai-3.2.0 → praisonai-3.2.1}/pyproject.toml +1 -1
  11. praisonai-3.2.0/praisonai/version.py +0 -1
  12. {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/dependency_links.txt +0 -0
  13. {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/entry_points.txt +0 -0
  14. {praisonai-3.2.0 → praisonai-3.2.1}/PraisonAI.egg-info/top_level.txt +0 -0
  15. {praisonai-3.2.0 → praisonai-3.2.1}/README.md +0 -0
  16. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/__init__.py +0 -0
  17. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/__main__.py +0 -0
  18. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/acp/__init__.py +0 -0
  19. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/acp/config.py +0 -0
  20. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/acp/safe_edit.py +0 -0
  21. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/acp/server.py +0 -0
  22. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/acp/session.py +0 -0
  23. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/adapters/__init__.py +0 -0
  24. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/adapters/readers.py +0 -0
  25. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/adapters/rerankers.py +0 -0
  26. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/adapters/retrievers.py +0 -0
  27. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/adapters/vector_stores.py +0 -0
  28. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/agent_scheduler.py +0 -0
  29. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/agents_generator.py +0 -0
  30. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/api/call.py +0 -0
  31. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/auto.py +0 -0
  32. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/__init__.py +0 -0
  33. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/a2a.py +0 -0
  34. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/assistants.py +0 -0
  35. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/audio.py +0 -0
  36. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/batches.py +0 -0
  37. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/completions.py +0 -0
  38. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/container_files.py +0 -0
  39. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/containers.py +0 -0
  40. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/embeddings.py +0 -0
  41. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/files.py +0 -0
  42. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/fine_tuning.py +0 -0
  43. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/guardrails.py +0 -0
  44. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/images.py +0 -0
  45. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/mcp.py +0 -0
  46. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/messages.py +0 -0
  47. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/moderations.py +0 -0
  48. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/ocr.py +0 -0
  49. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/passthrough.py +0 -0
  50. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/rag.py +0 -0
  51. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/realtime.py +0 -0
  52. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/rerank.py +0 -0
  53. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/responses.py +0 -0
  54. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/search.py +0 -0
  55. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/skills.py +0 -0
  56. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/vector_store_files.py +0 -0
  57. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/vector_stores.py +0 -0
  58. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/capabilities/videos.py +0 -0
  59. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/chainlit_ui.py +0 -0
  60. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/chat/__init__.py +0 -0
  61. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/chat/app.py +0 -0
  62. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/__init__.py +0 -0
  63. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/__init__.py +0 -0
  64. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/acp.py +0 -0
  65. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/agents.py +0 -0
  66. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/benchmark.py +0 -0
  67. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/call.py +0 -0
  68. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/chat.py +0 -0
  69. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/code.py +0 -0
  70. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/commit.py +0 -0
  71. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/completion.py +0 -0
  72. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/config.py +0 -0
  73. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/context.py +0 -0
  74. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/debug.py +0 -0
  75. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/deploy.py +0 -0
  76. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/diag.py +0 -0
  77. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/docs.py +0 -0
  78. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/doctor.py +0 -0
  79. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/endpoints.py +0 -0
  80. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/environment.py +0 -0
  81. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/eval.py +0 -0
  82. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/hooks.py +0 -0
  83. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/knowledge.py +0 -0
  84. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/lsp.py +0 -0
  85. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/mcp.py +0 -0
  86. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/memory.py +0 -0
  87. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/package.py +0 -0
  88. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/profile.py +0 -0
  89. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/rag.py +0 -0
  90. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/realtime.py +0 -0
  91. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/recipe.py +0 -0
  92. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/registry.py +0 -0
  93. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/research.py +0 -0
  94. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/rules.py +0 -0
  95. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/run.py +0 -0
  96. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/schedule.py +0 -0
  97. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/serve.py +0 -0
  98. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/session.py +0 -0
  99. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/skills.py +0 -0
  100. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/templates.py +0 -0
  101. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/todo.py +0 -0
  102. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/tools.py +0 -0
  103. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/traces.py +0 -0
  104. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/train.py +0 -0
  105. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/ui.py +0 -0
  106. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/version.py +0 -0
  107. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/commands/workflow.py +0 -0
  108. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/config_loader.py +0 -0
  109. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/configuration/__init__.py +0 -0
  110. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/configuration/loader.py +0 -0
  111. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/configuration/paths.py +0 -0
  112. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/configuration/schema.py +0 -0
  113. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/execution/__init__.py +0 -0
  114. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/execution/core.py +0 -0
  115. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/execution/profiler.py +0 -0
  116. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/execution/request.py +0 -0
  117. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/execution/result.py +0 -0
  118. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/__init__.py +0 -0
  119. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/acp.py +0 -0
  120. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/action_orchestrator.py +0 -0
  121. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/agent_scheduler.py +0 -0
  122. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/agent_tools.py +0 -0
  123. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/agents.py +0 -0
  124. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/at_mentions.py +0 -0
  125. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/auto_memory.py +0 -0
  126. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/autonomy_mode.py +0 -0
  127. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/background.py +0 -0
  128. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/base.py +0 -0
  129. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/benchmark.py +0 -0
  130. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/capabilities.py +0 -0
  131. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/checkpoints.py +0 -0
  132. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/cli_profiler.py +0 -0
  133. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/code_intelligence.py +0 -0
  134. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/compaction.py +0 -0
  135. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/compare.py +0 -0
  136. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/config_hierarchy.py +0 -0
  137. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/context_manager.py +0 -0
  138. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/cost_tracker.py +0 -0
  139. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/debug.py +0 -0
  140. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/deploy.py +0 -0
  141. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/diag.py +0 -0
  142. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/__init__.py +0 -0
  143. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  144. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  145. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  146. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  147. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  148. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  149. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  150. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  151. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  152. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  153. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  154. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  155. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  156. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  157. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  158. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  159. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/engine.py +0 -0
  160. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/formatters.py +0 -0
  161. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/handler.py +0 -0
  162. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/models.py +0 -0
  163. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/doctor/registry.py +0 -0
  164. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/endpoints.py +0 -0
  165. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/eval.py +0 -0
  166. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/external_agents.py +0 -0
  167. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/fast_context.py +0 -0
  168. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/file_history.py +0 -0
  169. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/flow_display.py +0 -0
  170. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/git_attribution.py +0 -0
  171. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/git_integration.py +0 -0
  172. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/guardrail.py +0 -0
  173. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/handoff.py +0 -0
  174. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/hooks.py +0 -0
  175. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/image.py +0 -0
  176. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/interactive_runtime.py +0 -0
  177. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/interactive_tools.py +0 -0
  178. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/interactive_tui.py +0 -0
  179. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/jobs.py +0 -0
  180. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/knowledge.py +0 -0
  181. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/lite.py +0 -0
  182. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/logs.py +0 -0
  183. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/lsp_cli.py +0 -0
  184. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  185. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/mcp.py +0 -0
  186. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/message_queue.py +0 -0
  187. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/metrics.py +0 -0
  188. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/n8n.py +0 -0
  189. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/observability.py +0 -0
  190. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/ollama.py +0 -0
  191. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/output_modes.py +0 -0
  192. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/output_style.py +0 -0
  193. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/package.py +0 -0
  194. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/performance.py +0 -0
  195. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/persistence.py +0 -0
  196. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profile.py +0 -0
  197. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profiler/__init__.py +0 -0
  198. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profiler/core.py +0 -0
  199. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profiler/optimizations.py +0 -0
  200. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profiler/suite.py +0 -0
  201. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/profiling.py +0 -0
  202. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/__init__.py +0 -0
  203. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/manager.py +0 -0
  204. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/models.py +0 -0
  205. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/persistence.py +0 -0
  206. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/scheduler.py +0 -0
  207. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/queue/worker.py +0 -0
  208. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/recipe.py +0 -0
  209. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/recipes.py +0 -0
  210. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/registry.py +0 -0
  211. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/repo_map.py +0 -0
  212. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/router.py +0 -0
  213. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/safe_shell.py +0 -0
  214. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/sandbox_executor.py +0 -0
  215. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/serve.py +0 -0
  216. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/session.py +0 -0
  217. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/skills.py +0 -0
  218. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/slash_commands.py +0 -0
  219. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/telemetry.py +0 -0
  220. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/templates.py +0 -0
  221. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/thinking.py +0 -0
  222. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/todo.py +0 -0
  223. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tools.py +0 -0
  224. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/__init__.py +0 -0
  225. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/app.py +0 -0
  226. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/cli.py +0 -0
  227. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/config.py +0 -0
  228. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/debug.py +0 -0
  229. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/events.py +0 -0
  230. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/mock_provider.py +0 -0
  231. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/orchestrator.py +0 -0
  232. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  233. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/help.py +0 -0
  234. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/main.py +0 -0
  235. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/queue.py +0 -0
  236. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/session.py +0 -0
  237. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/screens/settings.py +0 -0
  238. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/session_store.py +0 -0
  239. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  240. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  241. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  242. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  243. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  244. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  245. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/status.py +0 -0
  246. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  247. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/features/workflow.py +0 -0
  248. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/__init__.py +0 -0
  249. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/config.py +0 -0
  250. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/core.py +0 -0
  251. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/events.py +0 -0
  252. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  253. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  254. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  255. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/legacy.py +0 -0
  256. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/schedule_cli.py +0 -0
  257. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/session/__init__.py +0 -0
  258. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/session/unified.py +0 -0
  259. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/state/__init__.py +0 -0
  260. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/state/identifiers.py +0 -0
  261. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/cli/state/sessions.py +0 -0
  262. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/__init__.py +0 -0
  263. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/agent_tools.py +0 -0
  264. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/diff/__init__.py +0 -0
  265. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/diff/diff_strategy.py +0 -0
  266. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/__init__.py +0 -0
  267. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/apply_diff.py +0 -0
  268. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/execute_command.py +0 -0
  269. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/list_files.py +0 -0
  270. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/read_file.py +0 -0
  271. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/search_replace.py +0 -0
  272. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/tools/write_file.py +0 -0
  273. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/utils/__init__.py +0 -0
  274. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/utils/file_utils.py +0 -0
  275. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/utils/ignore_utils.py +0 -0
  276. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/code/utils/text_utils.py +0 -0
  277. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/db/__init__.py +0 -0
  278. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/db/adapter.py +0 -0
  279. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/__init__.py +0 -0
  280. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/api.py +0 -0
  281. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/docker.py +0 -0
  282. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/doctor.py +0 -0
  283. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/main.py +0 -0
  284. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/models.py +0 -0
  285. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/providers/__init__.py +0 -0
  286. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/providers/aws.py +0 -0
  287. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/providers/azure.py +0 -0
  288. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/providers/base.py +0 -0
  289. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/providers/gcp.py +0 -0
  290. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/deploy/schema.py +0 -0
  291. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/__init__.py +0 -0
  292. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/a2u_server.py +0 -0
  293. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/discovery.py +0 -0
  294. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/__init__.py +0 -0
  295. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/a2a.py +0 -0
  296. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/a2u.py +0 -0
  297. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/agents_api.py +0 -0
  298. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/base.py +0 -0
  299. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/mcp.py +0 -0
  300. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/recipe.py +0 -0
  301. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  302. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/registry.py +0 -0
  303. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/endpoints/server.py +0 -0
  304. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/inbuilt_tools/__init__.py +0 -0
  305. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  306. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/inc/__init__.py +0 -0
  307. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/inc/config.py +0 -0
  308. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/inc/models.py +0 -0
  309. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/__init__.py +0 -0
  310. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/base.py +0 -0
  311. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/claude_code.py +0 -0
  312. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/codex_cli.py +0 -0
  313. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/cursor_cli.py +0 -0
  314. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/integrations/gemini_cli.py +0 -0
  315. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/__init__.py +0 -0
  316. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/executor.py +0 -0
  317. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/models.py +0 -0
  318. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/router.py +0 -0
  319. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/server.py +0 -0
  320. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/jobs/store.py +0 -0
  321. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/llm/__init__.py +0 -0
  322. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/llm/registry.py +0 -0
  323. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/__init__.py +0 -0
  324. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/__init__.py +0 -0
  325. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/agents.py +0 -0
  326. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  327. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  328. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  329. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  330. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/memory.py +0 -0
  331. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/prompts.py +0 -0
  332. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/resources.py +0 -0
  333. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  334. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/auth/__init__.py +0 -0
  335. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/auth/api_key.py +0 -0
  336. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/auth/oauth.py +0 -0
  337. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/auth/oidc.py +0 -0
  338. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/auth/scopes.py +0 -0
  339. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/cli.py +0 -0
  340. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/elicitation.py +0 -0
  341. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/icons.py +0 -0
  342. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/recipe_adapter.py +0 -0
  343. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/recipe_cli.py +0 -0
  344. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/registry.py +0 -0
  345. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/sampling.py +0 -0
  346. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/server.py +0 -0
  347. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/tasks.py +0 -0
  348. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/transports/__init__.py +0 -0
  349. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/transports/http_stream.py +0 -0
  350. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/mcp_server/transports/stdio.py +0 -0
  351. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/__init__.py +0 -0
  352. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/config.py +0 -0
  353. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/__init__.py +0 -0
  354. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/async_mysql.py +0 -0
  355. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/async_postgres.py +0 -0
  356. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  357. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/base.py +0 -0
  358. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/json_store.py +0 -0
  359. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/mysql.py +0 -0
  360. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/postgres.py +0 -0
  361. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/singlestore.py +0 -0
  362. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/sqlite.py +0 -0
  363. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/supabase.py +0 -0
  364. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/conversation/surrealdb.py +0 -0
  365. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/factory.py +0 -0
  366. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/hooks/__init__.py +0 -0
  367. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  368. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/__init__.py +0 -0
  369. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/base.py +0 -0
  370. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/cassandra.py +0 -0
  371. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/chroma.py +0 -0
  372. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  373. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  374. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/couchbase.py +0 -0
  375. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/lancedb.py +0 -0
  376. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  377. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  378. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  379. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/milvus.py +0 -0
  380. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  381. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/pgvector.py +0 -0
  382. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/pinecone.py +0 -0
  383. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/qdrant.py +0 -0
  384. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  385. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  386. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  387. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  388. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/knowledge/weaviate.py +0 -0
  389. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/migrations/__init__.py +0 -0
  390. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/migrations/manager.py +0 -0
  391. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/orchestrator.py +0 -0
  392. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/__init__.py +0 -0
  393. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/async_mongodb.py +0 -0
  394. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/base.py +0 -0
  395. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/dynamodb.py +0 -0
  396. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/firestore.py +0 -0
  397. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/gcs.py +0 -0
  398. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/memory.py +0 -0
  399. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/mongodb.py +0 -0
  400. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/redis.py +0 -0
  401. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/state/upstash.py +0 -0
  402. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/tests/__init__.py +0 -0
  403. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/persistence/tests/test_all_backends.py +0 -0
  404. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/profiler.py +0 -0
  405. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/__init__.py +0 -0
  406. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/bridge.py +0 -0
  407. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/core.py +0 -0
  408. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/exceptions.py +0 -0
  409. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/history.py +0 -0
  410. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/models.py +0 -0
  411. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/operations.py +0 -0
  412. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/policy.py +0 -0
  413. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/registry.py +0 -0
  414. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/runtime.py +0 -0
  415. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/security.py +0 -0
  416. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/serve.py +0 -0
  417. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/recipe/server.py +0 -0
  418. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/__init__.py +0 -0
  419. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/agent_scheduler.py +0 -0
  420. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/base.py +0 -0
  421. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/daemon_manager.py +0 -0
  422. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/state_manager.py +0 -0
  423. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler/yaml_loader.py +0 -0
  424. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/scheduler.py +0 -0
  425. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/setup/__init__.py +0 -0
  426. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/setup/build.py +0 -0
  427. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/setup/post_install.py +0 -0
  428. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/setup/setup_conda_env.py +0 -0
  429. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/setup.py +0 -0
  430. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/__init__.py +0 -0
  431. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/cache.py +0 -0
  432. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/dependency_checker.py +0 -0
  433. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/discovery.py +0 -0
  434. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/loader.py +0 -0
  435. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/registry.py +0 -0
  436. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/resolver.py +0 -0
  437. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/security.py +0 -0
  438. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/tool_override.py +0 -0
  439. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/templates/tools_doctor.py +0 -0
  440. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/test.py +0 -0
  441. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/tools/__init__.py +0 -0
  442. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/tools/glob_tool.py +0 -0
  443. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/tools/grep_tool.py +0 -0
  444. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/tools/multiedit.py +0 -0
  445. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/train.py +0 -0
  446. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/train_vision.py +0 -0
  447. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/agents.py +0 -0
  448. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/callbacks.py +0 -0
  449. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/chainlit_compat.py +0 -0
  450. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/chat.py +0 -0
  451. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/code.py +0 -0
  452. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/colab.py +0 -0
  453. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/colab_chainlit.py +0 -0
  454. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/components/aicoder.py +0 -0
  455. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/context.py +0 -0
  456. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/database_config.py +0 -0
  457. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/db.py +0 -0
  458. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/realtime.py +0 -0
  459. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/realtimeclient/__init__.py +0 -0
  460. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/realtimeclient/tools.py +0 -0
  461. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/ui/sql_alchemy.py +0 -0
  462. {praisonai-3.2.0 → praisonai-3.2.1}/praisonai/upload_vision.py +0 -0
  463. {praisonai-3.2.0 → praisonai-3.2.1}/setup.cfg +0 -0
  464. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test.py +0 -0
  465. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_agents_playbook.py +0 -0
  466. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_approval_system.py +0 -0
  467. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_basic.py +0 -0
  468. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_cli_features.py +0 -0
  469. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_custom_tools_fix.py +0 -0
  470. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_double_api_fix.py +0 -0
  471. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_n8n_integration.py +0 -0
  472. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_phase2_refactor.py +0 -0
  473. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_recipe.py +0 -0
  474. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_registry.py +0 -0
  475. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_runner.py +0 -0
  476. {praisonai-3.2.0 → praisonai-3.2.1}/tests/test_serve_features.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 3.2.0
3
+ Version: 3.2.1
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>=0.7.0
14
+ Requires-Dist: praisonaiagents>=0.7.1
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: instructor>=1.3.3
17
17
  Requires-Dist: PyYAML>=6.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PraisonAI
3
- Version: 3.2.0
3
+ Version: 3.2.1
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>=0.7.0
14
+ Requires-Dist: praisonaiagents>=0.7.1
15
15
  Requires-Dist: python-dotenv>=0.19.0
16
16
  Requires-Dist: instructor>=1.3.3
17
17
  Requires-Dist: PyYAML>=6.0
@@ -98,6 +98,7 @@ praisonai/cli/commands/realtime.py
98
98
  praisonai/cli/commands/recipe.py
99
99
  praisonai/cli/commands/registry.py
100
100
  praisonai/cli/commands/research.py
101
+ praisonai/cli/commands/retrieval.py
101
102
  praisonai/cli/commands/rules.py
102
103
  praisonai/cli/commands/run.py
103
104
  praisonai/cli/commands/schedule.py
@@ -1,7 +1,7 @@
1
1
  rich>=13.7
2
2
  markdown>=3.5
3
3
  pyparsing>=3.0.0
4
- praisonaiagents>=0.7.0
4
+ praisonaiagents>=0.7.1
5
5
  python-dotenv>=0.19.0
6
6
  instructor>=1.3.3
7
7
  PyYAML>=6.0
@@ -191,6 +191,7 @@ def register_commands():
191
191
  from .commands.tools import app as tools_app
192
192
  from .commands.knowledge import app as knowledge_app
193
193
  from .commands.rag import app as rag_app
194
+ from .commands import retrieval as retrieval_module
194
195
  from .commands.deploy import app as deploy_app
195
196
  from .commands.agents import app as agents_app
196
197
  from .commands.skills import app as skills_app
@@ -241,8 +242,11 @@ def register_commands():
241
242
  app.add_typer(memory_app, name="memory", help="Memory management")
242
243
  app.add_typer(workflow_app, name="workflow", help="Workflow management")
243
244
  app.add_typer(tools_app, name="tools", help="Tool management")
244
- app.add_typer(knowledge_app, name="knowledge", help="Knowledge base management")
245
- app.add_typer(rag_app, name="rag", help="RAG (Retrieval Augmented Generation)")
245
+ app.add_typer(knowledge_app, name="knowledge", help="Knowledge base management (legacy)")
246
+ app.add_typer(rag_app, name="rag", help="RAG commands (legacy - use index/query instead)")
247
+
248
+ # Register unified retrieval commands (Agent-first)
249
+ retrieval_module.register_commands(app)
246
250
  app.add_typer(deploy_app, name="deploy", help="Deployment management")
247
251
  app.add_typer(agents_app, name="agents", help="Agent management")
248
252
  app.add_typer(skills_app, name="skills", help="Skill management")
@@ -0,0 +1,377 @@
1
+ """
2
+ Unified Retrieval CLI Commands - Agent-First Experience
3
+
4
+ This module provides the unified CLI commands for knowledge and retrieval:
5
+ - `praisonai index` - Index documents into knowledge base
6
+ - `praisonai query` - Query with structured answer and citations
7
+ - `praisonai chat` - Conversational interface with knowledge (handled by chat.py)
8
+
9
+ These commands replace the separate `knowledge` and `rag` command families.
10
+ """
11
+
12
+ import typer
13
+ from pathlib import Path
14
+ from typing import List, Optional
15
+ from contextlib import contextmanager
16
+ import time
17
+ import sys
18
+
19
+ app = typer.Typer(
20
+ name="retrieval",
21
+ help="Knowledge indexing and retrieval commands",
22
+ no_args_is_help=True,
23
+ )
24
+
25
+
26
+ @contextmanager
27
+ def retrieval_profiler(profile: bool, profile_out: Optional[Path], profile_top: int):
28
+ """Context manager for profiling retrieval operations."""
29
+ if not profile:
30
+ yield None
31
+ return
32
+
33
+ import json as json_module
34
+
35
+ start_time = time.perf_counter()
36
+ start_modules = set(sys.modules.keys())
37
+
38
+ profile_data = {
39
+ "metrics": {},
40
+ "modules_loaded": [],
41
+ }
42
+
43
+ try:
44
+ import tracemalloc
45
+ tracemalloc.start()
46
+ has_tracemalloc = True
47
+ except ImportError:
48
+ has_tracemalloc = False
49
+
50
+ yield profile_data
51
+
52
+ elapsed_ms = (time.perf_counter() - start_time) * 1000
53
+ profile_data["metrics"]["elapsed_ms"] = elapsed_ms
54
+
55
+ if has_tracemalloc:
56
+ current, peak = tracemalloc.get_traced_memory()
57
+ tracemalloc.stop()
58
+ profile_data["metrics"]["peak_memory_mb"] = peak / 1024 / 1024
59
+
60
+ new_modules = set(sys.modules.keys()) - start_modules
61
+ profile_data["modules_loaded"] = sorted(list(new_modules))[:profile_top]
62
+
63
+ if profile_out:
64
+ try:
65
+ profile_out.parent.mkdir(parents=True, exist_ok=True)
66
+ with open(profile_out, "w") as f:
67
+ json_module.dump(profile_data, f, indent=2, default=str)
68
+ except Exception as e:
69
+ print(f"Warning: Failed to save profile: {e}")
70
+
71
+ from rich.console import Console
72
+ console = Console(stderr=True)
73
+ console.print(f"\n[dim]Profile: {elapsed_ms:.2f}ms wall time[/dim]")
74
+ if "peak_memory_mb" in profile_data["metrics"]:
75
+ console.print(f"[dim]Profile: {profile_data['metrics']['peak_memory_mb']:.2f}MB peak memory[/dim]")
76
+ console.print(f"[dim]Profile: {len(new_modules)} modules imported[/dim]")
77
+ if profile_out:
78
+ console.print(f"[dim]Profile saved to: {profile_out}[/dim]")
79
+
80
+
81
+ @app.command("index")
82
+ def index_command(
83
+ sources: List[str] = typer.Argument(..., help="Source files, directories, or URLs to index"),
84
+ collection: str = typer.Option("default", "--collection", "-c", help="Collection/knowledge base name"),
85
+ config: Optional[Path] = typer.Option(None, "--config", "-f", help="Config file path"),
86
+ verbose: bool = typer.Option(False, "--verbose", "-v", help="Verbose output"),
87
+ profile: bool = typer.Option(False, "--profile", help="Enable performance profiling"),
88
+ profile_out: Optional[Path] = typer.Option(None, "--profile-out", help="Save profile to JSON file"),
89
+ profile_top: int = typer.Option(20, "--profile-top", help="Top N items in profile"),
90
+ ):
91
+ """
92
+ Index documents into a knowledge base.
93
+
94
+ This is the canonical command for adding documents to a knowledge base.
95
+ Use `praisonai query` to get answers with citations from the indexed knowledge.
96
+
97
+ Examples:
98
+ praisonai index ./docs
99
+ praisonai index paper.pdf --collection research
100
+ praisonai index ./data --profile --profile-out ./profile.json
101
+ """
102
+ from rich.console import Console
103
+ from rich.progress import Progress, SpinnerColumn, TextColumn
104
+
105
+ console = Console()
106
+
107
+ with retrieval_profiler(profile, profile_out, profile_top) as profile_data:
108
+ try:
109
+ from praisonaiagents.knowledge import Knowledge
110
+
111
+ knowledge_config = {
112
+ "vector_store": {
113
+ "provider": "chroma",
114
+ "config": {
115
+ "collection_name": collection,
116
+ "path": f"./.praison/knowledge/{collection}",
117
+ }
118
+ }
119
+ }
120
+
121
+ if config and config.exists():
122
+ import yaml
123
+ with open(config) as f:
124
+ file_config = yaml.safe_load(f)
125
+ if "knowledge" in file_config:
126
+ knowledge_config.update(file_config["knowledge"])
127
+
128
+ knowledge = Knowledge(config=knowledge_config, verbose=verbose)
129
+
130
+ with Progress(
131
+ SpinnerColumn(),
132
+ TextColumn("[progress.description]{task.description}"),
133
+ console=console,
134
+ transient=True,
135
+ ) as progress:
136
+ for source in sources:
137
+ task = progress.add_task(f"Indexing {source}...", total=None)
138
+ try:
139
+ result = knowledge.add(source)
140
+ count = len(result.get("results", [])) if isinstance(result, dict) else 0
141
+ console.print(f"[green]✓[/green] Indexed {source}: {count} chunks")
142
+ except Exception as e:
143
+ console.print(f"[red]✗[/red] Failed to index {source}: {e}")
144
+ progress.remove_task(task)
145
+
146
+ console.print(f"\n[bold green]Indexing complete![/bold green] Collection: {collection}")
147
+ if profile_data:
148
+ profile_data["command"] = "index"
149
+ profile_data["collection"] = collection
150
+ profile_data["sources"] = sources
151
+
152
+ except ImportError as e:
153
+ console.print(f"[red]Error:[/red] Missing dependency: {e}")
154
+ console.print("Install with: pip install 'praisonaiagents[knowledge]'")
155
+ raise typer.Exit(1)
156
+ except Exception as e:
157
+ console.print(f"[red]Error:[/red] {e}")
158
+ raise typer.Exit(1)
159
+
160
+
161
+ @app.command("query")
162
+ def query_command(
163
+ question: str = typer.Argument(..., help="Question to answer"),
164
+ collection: str = typer.Option("default", "--collection", "-c", help="Collection to query"),
165
+ top_k: int = typer.Option(5, "--top-k", "-k", help="Number of results to retrieve"),
166
+ min_score: float = typer.Option(0.0, "--min-score", help="Minimum relevance score (0.0-1.0)"),
167
+ hybrid: bool = typer.Option(False, "--hybrid", help="Use hybrid retrieval (dense + keyword)"),
168
+ rerank: bool = typer.Option(False, "--rerank", help="Enable reranking of results"),
169
+ citations: bool = typer.Option(True, "--citations/--no-citations", help="Include citations"),
170
+ citations_mode: str = typer.Option("append", "--citations-mode", help="Citations mode: append, inline, hidden"),
171
+ max_context_tokens: int = typer.Option(4000, "--max-context-tokens", help="Maximum context tokens"),
172
+ config: Optional[Path] = typer.Option(None, "--config", "-f", help="Config file path"),
173
+ verbose: bool = typer.Option(False, "--verbose", "-v", help="Verbose output"),
174
+ profile: bool = typer.Option(False, "--profile", help="Enable performance profiling"),
175
+ profile_out: Optional[Path] = typer.Option(None, "--profile-out", help="Save profile to JSON file"),
176
+ profile_top: int = typer.Option(20, "--profile-top", help="Top N items in profile"),
177
+ ):
178
+ """
179
+ Query knowledge and get a structured answer with citations.
180
+
181
+ Uses the Agent-first retrieval pipeline with token-aware context building.
182
+
183
+ Examples:
184
+ praisonai query "What is the main finding?"
185
+ praisonai query "Summarize the document" --collection research
186
+ praisonai query "Key points?" --top-k 10 --no-citations
187
+ praisonai query "Summary?" --hybrid --rerank
188
+ """
189
+ from rich.console import Console
190
+ from rich.panel import Panel
191
+ from rich.markdown import Markdown
192
+
193
+ console = Console()
194
+
195
+ with retrieval_profiler(profile, profile_out, profile_top) as profile_data:
196
+ try:
197
+ from praisonaiagents import Agent
198
+ from praisonaiagents.rag.retrieval_config import RetrievalConfig, RetrievalPolicy, CitationsMode
199
+
200
+ retrieval_config = RetrievalConfig(
201
+ enabled=True,
202
+ policy=RetrievalPolicy.ALWAYS,
203
+ top_k=top_k,
204
+ min_score=min_score,
205
+ max_context_tokens=max_context_tokens,
206
+ rerank=rerank,
207
+ hybrid=hybrid,
208
+ citations=citations,
209
+ citations_mode=CitationsMode(citations_mode),
210
+ vector_store_provider="chroma",
211
+ persist_path=f"./.praison/knowledge/{collection}",
212
+ collection_name=collection,
213
+ )
214
+
215
+ if config and config.exists():
216
+ import yaml
217
+ with open(config) as f:
218
+ file_config = yaml.safe_load(f)
219
+ if "retrieval" in file_config:
220
+ for key, value in file_config["retrieval"].items():
221
+ if hasattr(retrieval_config, key):
222
+ setattr(retrieval_config, key, value)
223
+
224
+ agent = Agent(
225
+ name="QueryAgent",
226
+ instructions="You are a helpful assistant that answers questions based on the provided knowledge.",
227
+ knowledge=[], # Empty - we'll use existing indexed knowledge
228
+ retrieval_config=retrieval_config,
229
+ verbose=verbose,
230
+ )
231
+
232
+ agent._ensure_knowledge_processed = lambda: None
233
+ from praisonaiagents.knowledge import Knowledge
234
+ agent.knowledge = Knowledge(config=retrieval_config.to_knowledge_config(), verbose=verbose)
235
+ agent._knowledge_processed = True
236
+
237
+ if verbose:
238
+ strategy_str = "hybrid (dense + keyword)" if hybrid else "dense"
239
+ rerank_str = " with reranking" if rerank else ""
240
+ console.print(f"[dim]Querying collection '{collection}' using {strategy_str}{rerank_str}, top_k={top_k}...[/dim]")
241
+
242
+ result = agent.query(question)
243
+
244
+ console.print(Panel(
245
+ Markdown(result.answer),
246
+ title="[bold]Answer[/bold]",
247
+ border_style="green",
248
+ ))
249
+
250
+ if citations and result.citations:
251
+ console.print("\n[bold]Sources:[/bold]")
252
+ for citation in result.citations:
253
+ score_str = f"[dim](score: {citation.score:.2f})[/dim]" if citation.score else ""
254
+ console.print(f" [{citation.id}] {citation.source} {score_str}")
255
+ if verbose:
256
+ snippet = citation.text[:200] + "..." if len(citation.text) > 200 else citation.text
257
+ console.print(f" [dim]{snippet}[/dim]")
258
+
259
+ if verbose and result.metadata:
260
+ elapsed = result.metadata.get('elapsed_seconds', 0)
261
+ console.print(f"\n[dim]Elapsed: {elapsed:.2f}s[/dim]")
262
+
263
+ if profile_data:
264
+ profile_data["command"] = "query"
265
+ profile_data["collection"] = collection
266
+ profile_data["question"] = question
267
+
268
+ except ImportError as e:
269
+ console.print(f"[red]Error:[/red] Missing dependency: {e}")
270
+ console.print("Install with: pip install 'praisonaiagents[knowledge]'")
271
+ raise typer.Exit(1)
272
+ except Exception as e:
273
+ console.print(f"[red]Error:[/red] {e}")
274
+ if verbose:
275
+ import traceback
276
+ console.print(traceback.format_exc())
277
+ raise typer.Exit(1)
278
+
279
+
280
+ @app.command("search")
281
+ def search_command(
282
+ query: str = typer.Argument(..., help="Search query"),
283
+ collection: str = typer.Option("default", "--collection", "-c", help="Collection to search"),
284
+ top_k: int = typer.Option(5, "--top-k", "-k", help="Number of results to retrieve"),
285
+ hybrid: bool = typer.Option(False, "--hybrid", help="Use hybrid retrieval (dense + keyword)"),
286
+ config: Optional[Path] = typer.Option(None, "--config", "-f", help="Config file path"),
287
+ verbose: bool = typer.Option(False, "--verbose", "-v", help="Verbose output"),
288
+ ):
289
+ """
290
+ Search/retrieve from a knowledge base (no LLM generation).
291
+
292
+ Returns raw search results without generating an answer.
293
+ For answers with citations, use `praisonai query`.
294
+
295
+ Examples:
296
+ praisonai search "capital of France"
297
+ praisonai search "main findings" --collection research --top-k 10
298
+ """
299
+ from rich.console import Console
300
+ from rich.table import Table
301
+
302
+ console = Console()
303
+
304
+ try:
305
+ from praisonaiagents.knowledge import Knowledge
306
+
307
+ knowledge_config = {
308
+ "vector_store": {
309
+ "provider": "chroma",
310
+ "config": {
311
+ "collection_name": collection,
312
+ "path": f"./.praison/knowledge/{collection}",
313
+ }
314
+ }
315
+ }
316
+
317
+ if hybrid:
318
+ knowledge_config["retrieval"] = {"strategy": "hybrid"}
319
+
320
+ if config and config.exists():
321
+ import yaml
322
+ with open(config) as f:
323
+ file_config = yaml.safe_load(f)
324
+ if "knowledge" in file_config:
325
+ knowledge_config.update(file_config["knowledge"])
326
+
327
+ knowledge = Knowledge(config=knowledge_config, verbose=verbose)
328
+
329
+ if verbose:
330
+ console.print(f"[dim]Searching collection '{collection}' for: {query}[/dim]")
331
+
332
+ results = knowledge.search(query)
333
+
334
+ if not results:
335
+ console.print("[yellow]No results found.[/yellow]")
336
+ return
337
+
338
+ if isinstance(results, dict) and 'results' in results:
339
+ result_list = results['results']
340
+ elif isinstance(results, list):
341
+ result_list = results
342
+ else:
343
+ result_list = [results]
344
+
345
+ table = Table(title=f"Search Results ({len(result_list[:top_k])} of {len(result_list)})")
346
+ table.add_column("#", style="dim", width=3)
347
+ table.add_column("Score", width=8)
348
+ table.add_column("Content", overflow="fold")
349
+
350
+ for i, result in enumerate(result_list[:top_k], 1):
351
+ if isinstance(result, dict):
352
+ content = result.get('memory', result.get('text', str(result)))
353
+ score = result.get('score', result.get('distance', 'N/A'))
354
+ else:
355
+ content = str(result)
356
+ score = 'N/A'
357
+
358
+ content_preview = content[:300] + "..." if len(content) > 300 else content
359
+ score_str = f"{score:.3f}" if isinstance(score, float) else str(score)
360
+ table.add_row(str(i), score_str, content_preview)
361
+
362
+ console.print(table)
363
+
364
+ except ImportError as e:
365
+ console.print(f"[red]Error:[/red] Missing dependency: {e}")
366
+ console.print("Install with: pip install 'praisonaiagents[knowledge]'")
367
+ raise typer.Exit(1)
368
+ except Exception as e:
369
+ console.print(f"[red]Error:[/red] {e}")
370
+ raise typer.Exit(1)
371
+
372
+
373
+ def register_commands(main_app: typer.Typer):
374
+ """Register unified retrieval commands with the main CLI app."""
375
+ main_app.command("index")(index_command)
376
+ main_app.command("query")(query_command)
377
+ main_app.command("search")(search_command)
@@ -898,6 +898,30 @@ class PraisonAI:
898
898
  parser.add_argument("--compare", type=str, help="Compare CLI modes (comma-separated: basic,tools,research,planning)")
899
899
  parser.add_argument("--compare-output", type=str, help="Save comparison results to file")
900
900
 
901
+ # Context Management - context budgeting, optimization, and monitoring
902
+ parser.add_argument("--context-auto-compact", action="store_true", dest="context_auto_compact",
903
+ help="Enable automatic context compaction (default in interactive mode)")
904
+ parser.add_argument("--no-context-auto-compact", action="store_false", dest="context_auto_compact",
905
+ help="Disable automatic context compaction")
906
+ parser.add_argument("--context-strategy", type=str, choices=["truncate", "sliding_window", "prune_tools", "summarize", "smart"],
907
+ help="Context optimization strategy (default: smart)")
908
+ parser.add_argument("--context-threshold", type=float, metavar="0.0-1.0",
909
+ help="Trigger compaction at this utilization (default: 0.8)")
910
+ parser.add_argument("--context-monitor", action="store_true", dest="context_monitor",
911
+ help="Enable real-time context monitoring (writes to context.txt)")
912
+ parser.add_argument("--context-monitor-path", type=str, metavar="PATH",
913
+ help="Path for context monitor output (default: ./context.txt)")
914
+ parser.add_argument("--context-monitor-format", type=str, choices=["human", "json"],
915
+ help="Context monitor output format (default: human)")
916
+ parser.add_argument("--context-monitor-frequency", type=str, choices=["turn", "tool_call", "manual", "overflow"],
917
+ help="Context monitor update frequency (default: turn)")
918
+ parser.add_argument("--context-redact", action="store_true", dest="context_redact",
919
+ help="Redact sensitive data in context monitor output (default: true)")
920
+ parser.add_argument("--no-context-redact", action="store_false", dest="context_redact",
921
+ help="Disable sensitive data redaction in context monitor")
922
+ parser.add_argument("--context-output-reserve", type=int, metavar="TOKENS",
923
+ help="Reserve tokens for model output (default: 8000)")
924
+
901
925
  # Agent Scheduler - for schedule command
902
926
  parser.add_argument("--interval", dest="schedule_interval", type=str, help="Schedule interval (e.g., 'hourly', '*/30m', 'daily')")
903
927
  parser.add_argument("--schedule-max-retries", dest="schedule_max_retries", type=int, help="Maximum retry attempts for scheduled execution")
@@ -4935,6 +4959,20 @@ Now, {final_instruction.lower()}:"""
4935
4959
  'session_store': session_store, # Reference to store for saving
4936
4960
  }
4937
4961
 
4962
+ # Initialize context manager with CLI flags
4963
+ context_config = {
4964
+ 'auto_compact': getattr(args, 'context_auto_compact', True), # Default True in interactive
4965
+ 'strategy': getattr(args, 'context_strategy', 'smart'),
4966
+ 'threshold': getattr(args, 'context_threshold', 0.8),
4967
+ 'monitor_enabled': getattr(args, 'context_monitor', False),
4968
+ 'monitor_path': getattr(args, 'context_monitor_path', './context.txt'),
4969
+ 'monitor_format': getattr(args, 'context_monitor_format', 'human'),
4970
+ 'monitor_frequency': getattr(args, 'context_monitor_frequency', 'turn'),
4971
+ 'redact_sensitive': getattr(args, 'context_redact', True),
4972
+ 'output_reserve': getattr(args, 'context_output_reserve', 8000),
4973
+ }
4974
+ session_state['context_config'] = context_config
4975
+
4938
4976
  # Start the execution worker thread (TRUE ASYNC - runs in background)
4939
4977
  worker_thread = self._start_execution_worker(tools_list, console, session_state)
4940
4978
 
@@ -57,7 +57,7 @@ class CloudDeployer:
57
57
  file.write("FROM python:3.11-slim\n")
58
58
  file.write("WORKDIR /app\n")
59
59
  file.write("COPY . .\n")
60
- file.write("RUN pip install flask praisonai==3.2.0 gunicorn markdown\n")
60
+ file.write("RUN pip install flask praisonai==3.2.1 gunicorn markdown\n")
61
61
  file.write("EXPOSE 8080\n")
62
62
  file.write('CMD ["gunicorn", "-b", "0.0.0.0:8080", "api:app"]\n')
63
63
 
@@ -0,0 +1 @@
1
+ __version__ = "3.2.1"
@@ -12,7 +12,7 @@ dependencies = [
12
12
  "rich>=13.7",
13
13
  "markdown>=3.5",
14
14
  "pyparsing>=3.0.0",
15
- "praisonaiagents>=0.7.0",
15
+ "praisonaiagents>=0.7.1",
16
16
  "python-dotenv>=0.19.0",
17
17
  "instructor>=1.3.3",
18
18
  "PyYAML>=6.0",
@@ -1 +0,0 @@
1
- __version__ = "3.2.0"
File without changes
File without changes