PraisonAI 4.6.71__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 (886) hide show
  1. {praisonai-4.6.71 → praisonai-4.6.74}/PKG-INFO +2 -2
  2. {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/PKG-INFO +2 -2
  3. {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/SOURCES.txt +9 -0
  4. {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/requires.txt +1 -1
  5. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/docs_generator.py +47 -3
  6. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_lockmap.py +45 -27
  7. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/agents_generator.py +29 -13
  8. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/__init__.py +5 -0
  9. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_config_schema.py +41 -0
  10. praisonai-4.6.74/praisonai/bots/_identity.py +199 -0
  11. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_presentation_renderer.py +30 -22
  12. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_protocol_mixin.py +191 -0
  13. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_session.py +198 -3
  14. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/botos.py +42 -1
  15. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/delivery.py +221 -3
  16. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/app.py +16 -89
  17. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/agent.py +2 -1
  18. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/command.py +2 -1
  19. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/config.py +78 -24
  20. praisonai-4.6.74/praisonai/cli/commands/identity.py +110 -0
  21. praisonai-4.6.74/praisonai/cli/commands/init.py +136 -0
  22. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/run.py +286 -6
  23. praisonai-4.6.74/praisonai/cli/commands/schedule.py +529 -0
  24. praisonai-4.6.74/praisonai/cli/configuration/config.schema.json +57 -0
  25. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/resolver.py +145 -5
  26. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/custom_definitions.py +159 -2
  27. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/output/__init__.py +10 -0
  28. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/output/console.py +8 -1
  29. praisonai-4.6.74/praisonai/cli/output/event_bridge.py +191 -0
  30. praisonai-4.6.74/praisonai/framework_adapters/crewai_adapter.py +183 -0
  31. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/praisonai_adapter.py +28 -16
  32. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/pairing_routes.py +20 -1
  33. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/server.py +491 -59
  34. praisonai-4.6.74/praisonai/integration/context_files.py +129 -0
  35. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/registry.py +4 -1
  36. praisonai-4.6.74/praisonai/observability/hooks.py +150 -0
  37. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/_valkey_client.py +0 -1
  38. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/__init__.py +13 -0
  39. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/_base_scheduler.py +64 -1
  40. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/agent_scheduler.py +128 -5
  41. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/async_agent_scheduler.py +10 -5
  42. praisonai-4.6.74/praisonai/scheduler/blueprint_catalogue.py +364 -0
  43. praisonai-4.6.74/praisonai/scheduler/condition_gate.py +111 -0
  44. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/enhanced_executor.py +3 -0
  45. praisonai-4.6.74/praisonai/scheduler/executor.py +566 -0
  46. praisonai-4.6.74/praisonai/scheduler/run_policy.py +187 -0
  47. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/shared.py +43 -6
  48. praisonai-4.6.74/praisonai/scheduler/suggestion_engine.py +123 -0
  49. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/yaml_loader.py +1 -1
  50. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tool_resolver.py +64 -56
  51. praisonai-4.6.74/praisonai/version.py +1 -0
  52. {praisonai-4.6.71 → praisonai-4.6.74}/pyproject.toml +4 -1
  53. praisonai-4.6.71/praisonai/cli/commands/schedule.py +0 -209
  54. praisonai-4.6.71/praisonai/framework_adapters/crewai_adapter.py +0 -172
  55. praisonai-4.6.71/praisonai/integration/context_files.py +0 -22
  56. praisonai-4.6.71/praisonai/observability/hooks.py +0 -81
  57. praisonai-4.6.71/praisonai/scheduler/executor.py +0 -301
  58. praisonai-4.6.71/praisonai/version.py +0 -1
  59. {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/dependency_links.txt +0 -0
  60. {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/entry_points.txt +0 -0
  61. {praisonai-4.6.71 → praisonai-4.6.74}/PraisonAI.egg-info/top_level.txt +0 -0
  62. {praisonai-4.6.71 → praisonai-4.6.74}/README.md +0 -0
  63. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/__init__.py +0 -0
  64. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/__main__.py +0 -0
  65. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_approval_spec.py +0 -0
  66. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_async_bridge.py +0 -0
  67. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/__init__.py +0 -0
  68. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/api_md.py +0 -0
  69. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/__init__.py +0 -0
  70. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/docs_extractor.py +0 -0
  71. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/generator.py +0 -0
  72. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/python_docs_extractor.py +0 -0
  73. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/python_extractor.py +0 -0
  74. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/rust_docs_extractor.py +0 -0
  75. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/rust_extractor.py +0 -0
  76. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/topic_normalizer.py +0 -0
  77. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/ts_docs_extractor.py +0 -0
  78. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_dev/parity/typescript_extractor.py +0 -0
  79. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_entrypoint.py +0 -0
  80. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_framework_availability.py +0 -0
  81. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_lazy_cache.py +0 -0
  82. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_logging.py +0 -0
  83. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_registry.py +0 -0
  84. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/_safe_loader.py +0 -0
  85. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/acp/__init__.py +0 -0
  86. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/acp/config.py +0 -0
  87. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/acp/safe_edit.py +0 -0
  88. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/acp/server.py +0 -0
  89. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/acp/session.py +0 -0
  90. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/adapters/__init__.py +0 -0
  91. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/adapters/readers.py +0 -0
  92. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/adapters/rerankers.py +0 -0
  93. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/adapters/retrievers.py +0 -0
  94. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/adapters/vector_stores.py +0 -0
  95. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/agent.py +0 -0
  96. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/agent_scheduler.py +0 -0
  97. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/api/agent_invoke.py +0 -0
  98. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/api/call.py +0 -0
  99. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/app/__init__.py +0 -0
  100. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/app/agentos.py +0 -0
  101. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/async_agent_scheduler.py +0 -0
  102. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/audit/__init__.py +0 -0
  103. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/audit/agent_centric.py +0 -0
  104. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/auto.py +0 -0
  105. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_ack.py +0 -0
  106. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_approval.py +0 -0
  107. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_approval_base.py +0 -0
  108. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_auth.py +0 -0
  109. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_chunk.py +0 -0
  110. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_commands.py +0 -0
  111. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_debounce.py +0 -0
  112. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_defaults.py +0 -0
  113. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_delivery.py +0 -0
  114. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_discord_approval.py +0 -0
  115. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_dlq.py +0 -0
  116. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_durable_adapter.py +0 -0
  117. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_email_utils.py +0 -0
  118. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_http_approval.py +0 -0
  119. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_ingress.py +0 -0
  120. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_mirror.py +0 -0
  121. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_outbox.py +0 -0
  122. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_pairing_ui.py +0 -0
  123. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_presentation_approval.py +0 -0
  124. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_rate_limit.py +0 -0
  125. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_registry.py +0 -0
  126. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_reset_policy.py +0 -0
  127. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_resilience.py +0 -0
  128. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_run_control.py +0 -0
  129. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_slack_approval.py +0 -0
  130. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_status.py +0 -0
  131. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_streaming.py +0 -0
  132. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_telegram_approval.py +0 -0
  133. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_typing.py +0 -0
  134. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_typing_indicator.py +0 -0
  135. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_unknown_user.py +0 -0
  136. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_webhook_approval.py +0 -0
  137. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/_whatsapp_web_adapter.py +0 -0
  138. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/agentmail.py +0 -0
  139. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/bot.py +0 -0
  140. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/discord.py +0 -0
  141. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/email.py +0 -0
  142. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/linear.py +0 -0
  143. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/media.py +0 -0
  144. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/slack.py +0 -0
  145. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/telegram.py +0 -0
  146. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/webhook_security.py +0 -0
  147. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/bots/whatsapp.py +0 -0
  148. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/__init__.py +0 -0
  149. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/agent.py +0 -0
  150. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/benchmark.py +0 -0
  151. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/cdp_agent.py +0 -0
  152. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/cdp_utils.py +0 -0
  153. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/cli.py +0 -0
  154. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/diagnostics.py +0 -0
  155. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/launcher.py +0 -0
  156. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/playwright_agent.py +0 -0
  157. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/profiling.py +0 -0
  158. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/protocol.py +0 -0
  159. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/report.py +0 -0
  160. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/server.py +0 -0
  161. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/sessions.py +0 -0
  162. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/browser/video.py +0 -0
  163. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/__init__.py +0 -0
  164. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/a2a.py +0 -0
  165. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/assistants.py +0 -0
  166. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/audio.py +0 -0
  167. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/batches.py +0 -0
  168. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/completions.py +0 -0
  169. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/container_files.py +0 -0
  170. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/containers.py +0 -0
  171. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/embeddings.py +0 -0
  172. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/files.py +0 -0
  173. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/fine_tuning.py +0 -0
  174. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/guardrails.py +0 -0
  175. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/images.py +0 -0
  176. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/mcp.py +0 -0
  177. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/messages.py +0 -0
  178. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/moderations.py +0 -0
  179. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/ocr.py +0 -0
  180. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/passthrough.py +0 -0
  181. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/rag.py +0 -0
  182. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/realtime.py +0 -0
  183. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/rerank.py +0 -0
  184. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/responses.py +0 -0
  185. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/search.py +0 -0
  186. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/skills.py +0 -0
  187. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/vector_store_files.py +0 -0
  188. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/vector_stores.py +0 -0
  189. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/capabilities/videos.py +0 -0
  190. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/claw/__init__.py +0 -0
  191. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/claw/default_app.py +0 -0
  192. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/__init__.py +0 -0
  193. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/_paths.py +0 -0
  194. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/_warnings.py +0 -0
  195. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/approval_backend.py +0 -0
  196. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/branding.py +0 -0
  197. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/__init__.py +0 -0
  198. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/acp.py +0 -0
  199. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/agents.py +0 -0
  200. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/app.py +0 -0
  201. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/audit.py +0 -0
  202. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/auth.py +0 -0
  203. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/batch.py +0 -0
  204. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/benchmark.py +0 -0
  205. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/bot.py +0 -0
  206. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/browser.py +0 -0
  207. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/call.py +0 -0
  208. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/chat.py +0 -0
  209. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/claw.py +0 -0
  210. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/code.py +0 -0
  211. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/commit.py +0 -0
  212. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/completion.py +0 -0
  213. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/context.py +0 -0
  214. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/dashboard.py +0 -0
  215. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/debug.py +0 -0
  216. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/deploy.py +0 -0
  217. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/diag.py +0 -0
  218. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/docs.py +0 -0
  219. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/doctor.py +0 -0
  220. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/endpoints.py +0 -0
  221. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/environment.py +0 -0
  222. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/eval.py +0 -0
  223. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/examples.py +0 -0
  224. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/flow.py +0 -0
  225. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/gateway.py +0 -0
  226. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/github.py +0 -0
  227. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/hooks.py +0 -0
  228. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/kanban.py +0 -0
  229. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/knowledge.py +0 -0
  230. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/langextract.py +0 -0
  231. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/langfuse.py +0 -0
  232. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/loop.py +0 -0
  233. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/lsp.py +0 -0
  234. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/managed.py +0 -0
  235. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/mcp.py +0 -0
  236. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/memory.py +0 -0
  237. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/mint_link.py +0 -0
  238. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/models.py +0 -0
  239. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/n8n.py +0 -0
  240. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/obs.py +0 -0
  241. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/onboard.py +0 -0
  242. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/package.py +0 -0
  243. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/pairing.py +0 -0
  244. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/paths.py +0 -0
  245. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/permissions.py +0 -0
  246. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/plugins.py +0 -0
  247. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/port.py +0 -0
  248. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/profile.py +0 -0
  249. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/publish.py +0 -0
  250. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/rag.py +0 -0
  251. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/realtime.py +0 -0
  252. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/recipe.py +0 -0
  253. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/registry.py +0 -0
  254. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/replay.py +0 -0
  255. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/research.py +0 -0
  256. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/retrieval.py +0 -0
  257. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/rules.py +0 -0
  258. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/sandbox.py +0 -0
  259. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/serve.py +0 -0
  260. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/session.py +0 -0
  261. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/setup.py +0 -0
  262. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/skills.py +0 -0
  263. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/standardise.py +0 -0
  264. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/templates.py +0 -0
  265. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/test.py +0 -0
  266. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/todo.py +0 -0
  267. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/tools.py +0 -0
  268. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/traces.py +0 -0
  269. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/tracker.py +0 -0
  270. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/train.py +0 -0
  271. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/ui.py +0 -0
  272. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/up.py +0 -0
  273. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/validate.py +0 -0
  274. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/version.py +0 -0
  275. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/commands/workflow.py +0 -0
  276. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/config_loader.py +0 -0
  277. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/__init__.py +0 -0
  278. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/credentials.py +0 -0
  279. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/loader.py +0 -0
  280. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/paths.py +0 -0
  281. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/configuration/schema.py +0 -0
  282. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/execution/__init__.py +0 -0
  283. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/execution/core.py +0 -0
  284. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/execution/profiler.py +0 -0
  285. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/execution/request.py +0 -0
  286. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/execution/result.py +0 -0
  287. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/fallback_schema.py +0 -0
  288. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/__init__.py +0 -0
  289. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/_endpoint_registry.py +0 -0
  290. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/_search_registry.py +0 -0
  291. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/acp.py +0 -0
  292. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/action_orchestrator.py +0 -0
  293. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/agent_scheduler.py +0 -0
  294. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/agent_tools.py +0 -0
  295. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/agents.py +0 -0
  296. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/approval.py +0 -0
  297. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/at_mentions.py +0 -0
  298. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/audit_cli.py +0 -0
  299. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/auto_memory.py +0 -0
  300. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/auto_mode.py +0 -0
  301. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/autonomy_mode.py +0 -0
  302. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/background.py +0 -0
  303. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/base.py +0 -0
  304. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/benchmark.py +0 -0
  305. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/bots_cli.py +0 -0
  306. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/capabilities.py +0 -0
  307. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/checkpoints.py +0 -0
  308. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/cli_profiler.py +0 -0
  309. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/code_intelligence.py +0 -0
  310. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/compaction.py +0 -0
  311. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/compare.py +0 -0
  312. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/config_hierarchy.py +0 -0
  313. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/context_manager.py +0 -0
  314. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/cost_tracker.py +0 -0
  315. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/csv_test_runner.py +0 -0
  316. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/debug.py +0 -0
  317. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/deploy.py +0 -0
  318. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/diag.py +0 -0
  319. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/display_jsonl.py +0 -0
  320. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/__init__.py +0 -0
  321. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/__init__.py +0 -0
  322. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/acp_checks.py +0 -0
  323. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/bot_checks.py +0 -0
  324. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/config_checks.py +0 -0
  325. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/db_checks.py +0 -0
  326. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/env_checks.py +0 -0
  327. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/gateway_checks.py +0 -0
  328. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/lsp_checks.py +0 -0
  329. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/mcp_checks.py +0 -0
  330. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/memory_checks.py +0 -0
  331. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/network_checks.py +0 -0
  332. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/obs_checks.py +0 -0
  333. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/packaging_checks.py +0 -0
  334. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/performance_checks.py +0 -0
  335. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/permissions_checks.py +0 -0
  336. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/runtime_checks.py +0 -0
  337. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
  338. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/selftest_checks.py +0 -0
  339. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/serve_checks.py +0 -0
  340. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/skills_checks.py +0 -0
  341. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/checks/tools_checks.py +0 -0
  342. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/engine.py +0 -0
  343. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/formatters.py +0 -0
  344. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/handler.py +0 -0
  345. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/models.py +0 -0
  346. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/doctor/registry.py +0 -0
  347. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/endpoints.py +0 -0
  348. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/eval.py +0 -0
  349. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/examples.py +0 -0
  350. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/external_agents.py +0 -0
  351. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/fast_context.py +0 -0
  352. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/file_history.py +0 -0
  353. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/flow_display.py +0 -0
  354. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/gateway.py +0 -0
  355. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/git_attribution.py +0 -0
  356. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/git_integration.py +0 -0
  357. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/guardrail.py +0 -0
  358. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/handoff.py +0 -0
  359. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/hooks.py +0 -0
  360. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/hybrid_workflow.py +0 -0
  361. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/image.py +0 -0
  362. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/interactive_core_headless.py +0 -0
  363. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/interactive_runtime.py +0 -0
  364. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/interactive_test_harness.py +0 -0
  365. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/interactive_tools.py +0 -0
  366. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/interactive_tui.py +0 -0
  367. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/job_workflow.py +0 -0
  368. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/jobs.py +0 -0
  369. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/knowledge.py +0 -0
  370. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/knowledge_cli.py +0 -0
  371. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/lite.py +0 -0
  372. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/logs.py +0 -0
  373. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/lsp_cli.py +0 -0
  374. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/lsp_diagnostics.py +0 -0
  375. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/mcp.py +0 -0
  376. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/message_queue.py +0 -0
  377. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/metrics.py +0 -0
  378. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/migrate.py +0 -0
  379. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/migration_flow.py +0 -0
  380. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/migration_spec.py +0 -0
  381. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/n8n.py +0 -0
  382. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/observability.py +0 -0
  383. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/ollama.py +0 -0
  384. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/onboard.py +0 -0
  385. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/output_modes.py +0 -0
  386. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/output_style.py +0 -0
  387. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/package.py +0 -0
  388. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/performance.py +0 -0
  389. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/persistence.py +0 -0
  390. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/plugin_cli.py +0 -0
  391. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profile.py +0 -0
  392. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profiler/__init__.py +0 -0
  393. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profiler/core.py +0 -0
  394. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profiler/optimizations.py +0 -0
  395. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profiler/suite.py +0 -0
  396. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/profiling.py +0 -0
  397. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/__init__.py +0 -0
  398. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/manager.py +0 -0
  399. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/models.py +0 -0
  400. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/persistence.py +0 -0
  401. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/scheduler.py +0 -0
  402. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/queue/worker.py +0 -0
  403. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/recipe.py +0 -0
  404. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/recipe_creator.py +0 -0
  405. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/recipe_optimizer.py +0 -0
  406. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/recipe_prompts.py +0 -0
  407. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/recipes.py +0 -0
  408. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/registry.py +0 -0
  409. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/repo_map.py +0 -0
  410. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/router.py +0 -0
  411. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/safe_shell.py +0 -0
  412. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/sandbox_cli.py +0 -0
  413. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/sandbox_executor.py +0 -0
  414. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/sdk_knowledge.py +0 -0
  415. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/serve.py +0 -0
  416. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/session.py +0 -0
  417. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/setup/__init__.py +0 -0
  418. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/setup/handler.py +0 -0
  419. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/setup/templates.py +0 -0
  420. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/skills.py +0 -0
  421. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/slash_commands.py +0 -0
  422. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/telemetry.py +0 -0
  423. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/templates.py +0 -0
  424. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/thinking.py +0 -0
  425. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/todo.py +0 -0
  426. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tools.py +0 -0
  427. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/__init__.py +0 -0
  428. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/app.py +0 -0
  429. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/cli.py +0 -0
  430. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/config.py +0 -0
  431. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/debug.py +0 -0
  432. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/events.py +0 -0
  433. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/mock_provider.py +0 -0
  434. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/orchestrator.py +0 -0
  435. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/__init__.py +0 -0
  436. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/help.py +0 -0
  437. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/main.py +0 -0
  438. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/queue.py +0 -0
  439. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/session.py +0 -0
  440. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/screens/settings.py +0 -0
  441. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/session_store.py +0 -0
  442. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/__init__.py +0 -0
  443. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/chat.py +0 -0
  444. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/command_popup.py +0 -0
  445. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/composer.py +0 -0
  446. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/file_popup.py +0 -0
  447. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/queue_panel.py +0 -0
  448. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/status.py +0 -0
  449. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/tui/widgets/tool_panel.py +0 -0
  450. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/wizard.py +0 -0
  451. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/workflow.py +0 -0
  452. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/features/yaml_utils.py +0 -0
  453. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/__init__.py +0 -0
  454. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/async_tui.py +0 -0
  455. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/config.py +0 -0
  456. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/core.py +0 -0
  457. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/events.py +0 -0
  458. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/frontends/__init__.py +0 -0
  459. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/frontends/rich_frontend.py +0 -0
  460. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/frontends/textual_frontend.py +0 -0
  461. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/praison_io.py +0 -0
  462. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/repl.py +0 -0
  463. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/split_tui.py +0 -0
  464. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/interactive/tui_app.py +0 -0
  465. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/langfuse_client.py +0 -0
  466. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/main.py +0 -0
  467. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/schedule_cli.py +0 -0
  468. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/schema_provider.py +0 -0
  469. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/session/__init__.py +0 -0
  470. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/session/unified.py +0 -0
  471. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/state/__init__.py +0 -0
  472. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/state/identifiers.py +0 -0
  473. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/state/project_sessions.py +0 -0
  474. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/state/sessions.py +0 -0
  475. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/__init__.py +0 -0
  476. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/config.py +0 -0
  477. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/events.py +0 -0
  478. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/mg_backend.py +0 -0
  479. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/plain.py +0 -0
  480. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/ui/rich_backend.py +0 -0
  481. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/unified_schema.py +0 -0
  482. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/utils/env_utils.py +0 -0
  483. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli/utils/project.py +0 -0
  484. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli_backends/__init__.py +0 -0
  485. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli_backends/claude.py +0 -0
  486. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/cli_backends/registry.py +0 -0
  487. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/__init__.py +0 -0
  488. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/agent_tools.py +0 -0
  489. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/diff/__init__.py +0 -0
  490. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/diff/diff_strategy.py +0 -0
  491. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/__init__.py +0 -0
  492. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/apply_diff.py +0 -0
  493. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/execute_command.py +0 -0
  494. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/list_files.py +0 -0
  495. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/read_file.py +0 -0
  496. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/search_replace.py +0 -0
  497. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/tools/write_file.py +0 -0
  498. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/utils/__init__.py +0 -0
  499. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/utils/file_utils.py +0 -0
  500. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/utils/ignore_utils.py +0 -0
  501. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/code/utils/text_utils.py +0 -0
  502. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/config/__init__.py +0 -0
  503. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/config/schema.py +0 -0
  504. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/config/validator.py +0 -0
  505. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/__init__.py +0 -0
  506. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/_storage_path.py +0 -0
  507. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/artifact_store.py +0 -0
  508. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/config.py +0 -0
  509. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/history_store.py +0 -0
  510. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/queue.py +0 -0
  511. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/setup.py +0 -0
  512. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/context/terminal_logger.py +0 -0
  513. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/daemon/__init__.py +0 -0
  514. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/daemon/launchd.py +0 -0
  515. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/daemon/systemd.py +0 -0
  516. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/daemon/windows.py +0 -0
  517. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/db/__init__.py +0 -0
  518. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/db/adapter.py +0 -0
  519. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/__init__.py +0 -0
  520. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/api.py +0 -0
  521. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/docker.py +0 -0
  522. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/doctor.py +0 -0
  523. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/main.py +0 -0
  524. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/models.py +0 -0
  525. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/__init__.py +0 -0
  526. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/_registry.py +0 -0
  527. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/aws.py +0 -0
  528. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/azure.py +0 -0
  529. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/base.py +0 -0
  530. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/providers/gcp.py +0 -0
  531. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/deploy/schema.py +0 -0
  532. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/__init__.py +0 -0
  533. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/classifier.py +0 -0
  534. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/executor.py +0 -0
  535. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/extractor.py +0 -0
  536. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/reporter.py +0 -0
  537. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/runner.py +0 -0
  538. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/docs_runner/workspace.py +0 -0
  539. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/__init__.py +0 -0
  540. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/a2u_server.py +0 -0
  541. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/discovery.py +0 -0
  542. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/__init__.py +0 -0
  543. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/a2a.py +0 -0
  544. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/a2u.py +0 -0
  545. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/agents_api.py +0 -0
  546. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/base.py +0 -0
  547. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/mcp.py +0 -0
  548. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/openai_compat.py +0 -0
  549. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/recipe.py +0 -0
  550. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/providers/tools_mcp.py +0 -0
  551. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/registry.py +0 -0
  552. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/endpoints/server.py +0 -0
  553. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/__init__.py +0 -0
  554. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/client.py +0 -0
  555. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/components/PraisonAI/praisonai_agent.py +0 -0
  556. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/components/PraisonAI/praisonai_agents.py +0 -0
  557. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/components/__init__.py +0 -0
  558. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/converter.py +0 -0
  559. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/flow/helpers.py +0 -0
  560. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/__init__.py +0 -0
  561. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/autogen_adapter.py +0 -0
  562. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/base.py +0 -0
  563. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/registry.py +0 -0
  564. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/framework_adapters/validators.py +0 -0
  565. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/__init__.py +0 -0
  566. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/auth.py +0 -0
  567. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/client.py +0 -0
  568. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/cookie_auth.py +0 -0
  569. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/exec_approval.py +0 -0
  570. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/gateway_approval.py +0 -0
  571. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/health_monitor.py +0 -0
  572. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/home_channels.py +0 -0
  573. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/kanban_dispatcher.py +0 -0
  574. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/magic_link.py +0 -0
  575. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/origin_check.py +0 -0
  576. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/pairing.py +0 -0
  577. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/port_utils.py +0 -0
  578. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/push_channels.py +0 -0
  579. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/push_delivery.py +0 -0
  580. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/push_polling.py +0 -0
  581. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/push_presence.py +0 -0
  582. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/rate_limiter.py +0 -0
  583. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/redis_pubsub.py +0 -0
  584. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/supervisor.py +0 -0
  585. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/gateway/unicode_utils.py +0 -0
  586. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/inbuilt_tools/__init__.py +0 -0
  587. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/inbuilt_tools/autogen_tools.py +0 -0
  588. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/inc/__init__.py +0 -0
  589. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/inc/config.py +0 -0
  590. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/inc/models.py +0 -0
  591. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/__init__.py +0 -0
  592. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/__init__.py +0 -0
  593. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/approvals_bridge.py +0 -0
  594. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/hooks_query.py +0 -0
  595. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/kanban_bridge.py +0 -0
  596. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/schedules_runner.py +0 -0
  597. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/usage_bridge.py +0 -0
  598. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/bridges/workflows_service.py +0 -0
  599. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/gateway_host.py +0 -0
  600. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/host_app.py +0 -0
  601. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/pages/__init__.py +0 -0
  602. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/pages/bot_health.py +0 -0
  603. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integration/pages/workflow_runs.py +0 -0
  604. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/__init__.py +0 -0
  605. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/_session_info.py +0 -0
  606. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/_tool_aliases.py +0 -0
  607. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/_unified_registry.py +0 -0
  608. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/base.py +0 -0
  609. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/claude_code.py +0 -0
  610. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/codex_cli.py +0 -0
  611. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/__init__.py +0 -0
  612. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/daytona.py +0 -0
  613. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/docker.py +0 -0
  614. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/e2b.py +0 -0
  615. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/flyio.py +0 -0
  616. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/local.py +0 -0
  617. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/compute/modal_compute.py +0 -0
  618. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/cursor_cli.py +0 -0
  619. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/db_session_adapter.py +0 -0
  620. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/gemini_cli.py +0 -0
  621. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/hosted_agent.py +0 -0
  622. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/local_agent.py +0 -0
  623. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/managed_agents.py +0 -0
  624. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/managed_local.py +0 -0
  625. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/registry.py +0 -0
  626. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/integrations/sandboxed_agent.py +0 -0
  627. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/__init__.py +0 -0
  628. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/executor.py +0 -0
  629. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/models.py +0 -0
  630. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/path_validation.py +0 -0
  631. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/router.py +0 -0
  632. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/server.py +0 -0
  633. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/jobs/store.py +0 -0
  634. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/kanban/__init__.py +0 -0
  635. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/kanban/models.py +0 -0
  636. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/kanban/paths.py +0 -0
  637. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/kanban/sqlite_store.py +0 -0
  638. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/__init__.py +0 -0
  639. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/catalogue.py +0 -0
  640. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/credentials.py +0 -0
  641. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/env.py +0 -0
  642. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/llm/gateways.py +0 -0
  643. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/__init__.py +0 -0
  644. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/__init__.py +0 -0
  645. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/agents.py +0 -0
  646. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/capabilities.py +0 -0
  647. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/cli_tools.py +0 -0
  648. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/extended_capabilities.py +0 -0
  649. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/knowledge.py +0 -0
  650. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/memory.py +0 -0
  651. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/prompts.py +0 -0
  652. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/resources.py +0 -0
  653. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/adapters/tools_bridge.py +0 -0
  654. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/auth/__init__.py +0 -0
  655. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/auth/api_key.py +0 -0
  656. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/auth/oauth.py +0 -0
  657. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/auth/oidc.py +0 -0
  658. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/auth/scopes.py +0 -0
  659. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/cli.py +0 -0
  660. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/elicitation.py +0 -0
  661. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/icons.py +0 -0
  662. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/recipe_adapter.py +0 -0
  663. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/recipe_cli.py +0 -0
  664. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/registry.py +0 -0
  665. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/sampling.py +0 -0
  666. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/server.py +0 -0
  667. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/tasks.py +0 -0
  668. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/tool_index.py +0 -0
  669. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/transports/__init__.py +0 -0
  670. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/transports/http_stream.py +0 -0
  671. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/mcp_server/transports/stdio.py +0 -0
  672. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/n8n/__init__.py +0 -0
  673. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/n8n/client.py +0 -0
  674. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/n8n/converter.py +0 -0
  675. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/n8n/preview.py +0 -0
  676. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/n8n/reverse_converter.py +0 -0
  677. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/observability/__init__.py +0 -0
  678. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/observability/langextract.py +0 -0
  679. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/observability/langfuse.py +0 -0
  680. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/__init__.py +0 -0
  681. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/config.py +0 -0
  682. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/__init__.py +0 -0
  683. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/_sql_base.py +0 -0
  684. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/async_mysql.py +0 -0
  685. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/async_postgres.py +0 -0
  686. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/async_sqlite.py +0 -0
  687. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/base.py +0 -0
  688. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/json_store.py +0 -0
  689. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/mysql.py +0 -0
  690. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/postgres.py +0 -0
  691. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/singlestore.py +0 -0
  692. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/sqlite.py +0 -0
  693. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/supabase.py +0 -0
  694. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/surrealdb.py +0 -0
  695. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/sync_sqlite.py +0 -0
  696. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/conversation/turso.py +0 -0
  697. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/factory.py +0 -0
  698. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/hooks/__init__.py +0 -0
  699. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/hooks/agent_hooks.py +0 -0
  700. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/__init__.py +0 -0
  701. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/base.py +0 -0
  702. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/cassandra.py +0 -0
  703. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/chroma.py +0 -0
  704. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/clickhouse.py +0 -0
  705. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/cosmosdb_vector.py +0 -0
  706. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/couchbase.py +0 -0
  707. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/lancedb.py +0 -0
  708. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/langchain_adapter.py +0 -0
  709. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/lightrag_adapter.py +0 -0
  710. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/llamaindex_adapter.py +0 -0
  711. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/milvus.py +0 -0
  712. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/mongodb_vector.py +0 -0
  713. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/pgvector.py +0 -0
  714. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/pinecone.py +0 -0
  715. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/qdrant.py +0 -0
  716. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/redis_vector.py +0 -0
  717. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/singlestore_vector.py +0 -0
  718. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/surrealdb_vector.py +0 -0
  719. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/upstash_vector.py +0 -0
  720. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/valkey_vector.py +0 -0
  721. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/knowledge/weaviate.py +0 -0
  722. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/migrations/__init__.py +0 -0
  723. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/migrations/manager.py +0 -0
  724. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/orchestrator.py +0 -0
  725. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/registry.py +0 -0
  726. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/__init__.py +0 -0
  727. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/async_mongodb.py +0 -0
  728. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/base.py +0 -0
  729. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/dynamodb.py +0 -0
  730. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/firestore.py +0 -0
  731. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/gcs.py +0 -0
  732. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/memory.py +0 -0
  733. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/mongodb.py +0 -0
  734. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/redis.py +0 -0
  735. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/upstash.py +0 -0
  736. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/state/valkey.py +0 -0
  737. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/tests/__init__.py +0 -0
  738. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/tests/test_all_backends.py +0 -0
  739. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/persistence/tests/test_valkey_backends.py +0 -0
  740. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/profiler.py +0 -0
  741. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/push/__init__.py +0 -0
  742. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/push/client.py +0 -0
  743. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/push/transports.py +0 -0
  744. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/__init__.py +0 -0
  745. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/bridge.py +0 -0
  746. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/core.py +0 -0
  747. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/exceptions.py +0 -0
  748. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/history.py +0 -0
  749. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/models.py +0 -0
  750. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/operations.py +0 -0
  751. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/policy.py +0 -0
  752. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/registry.py +0 -0
  753. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/runtime.py +0 -0
  754. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/security.py +0 -0
  755. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/serve.py +0 -0
  756. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/recipe/server.py +0 -0
  757. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/__init__.py +0 -0
  758. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/analyzer.py +0 -0
  759. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/applier.py +0 -0
  760. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/judge.py +0 -0
  761. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/plan.py +0 -0
  762. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/player.py +0 -0
  763. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/reader.py +0 -0
  764. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/storage.py +0 -0
  765. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/replay/writer.py +0 -0
  766. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/__init__.py +0 -0
  767. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/_compat.py +0 -0
  768. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/_registry.py +0 -0
  769. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/_shell.py +0 -0
  770. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/daytona.py +0 -0
  771. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/docker.py +0 -0
  772. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/e2b.py +0 -0
  773. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/modal.py +0 -0
  774. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/sandlock.py +0 -0
  775. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/ssh.py +0 -0
  776. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/sandbox/subprocess.py +0 -0
  777. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/_dispatch.py +0 -0
  778. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/base.py +0 -0
  779. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/daemon_manager.py +0 -0
  780. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/deployment.py +0 -0
  781. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/scheduler/state_manager.py +0 -0
  782. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/security/__init__.py +0 -0
  783. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/security/audit.py +0 -0
  784. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/security/injection.py +0 -0
  785. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/security/protected.py +0 -0
  786. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/setup/__init__.py +0 -0
  787. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/setup/build.py +0 -0
  788. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/setup/post_install.py +0 -0
  789. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/setup/setup_conda_env.py +0 -0
  790. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/setup.py +0 -0
  791. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/__init__.py +0 -0
  792. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/ai_generator.py +0 -0
  793. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/config.py +0 -0
  794. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/dedupe.py +0 -0
  795. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/discovery.py +0 -0
  796. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/drift.py +0 -0
  797. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/engine.py +0 -0
  798. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/enhanced_templates.py +0 -0
  799. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/example_verifier.py +0 -0
  800. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/manifest.py +0 -0
  801. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/models.py +0 -0
  802. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/reports.py +0 -0
  803. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/templates.py +0 -0
  804. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/undo_redo.py +0 -0
  805. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/standardise/validator.py +0 -0
  806. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/__init__.py +0 -0
  807. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/dynamodb_adapter.py +0 -0
  808. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/mongodb_adapter.py +0 -0
  809. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/postgresql_adapter.py +0 -0
  810. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/redis_adapter.py +0 -0
  811. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/storage/valkey_adapter.py +0 -0
  812. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/__init__.py +0 -0
  813. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/batch_source.py +0 -0
  814. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/cli_docs_source.py +0 -0
  815. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/discovery.py +0 -0
  816. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/docs_source.py +0 -0
  817. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/examples_source.py +0 -0
  818. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/executor.py +0 -0
  819. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/models.py +0 -0
  820. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/report_viewer.py +0 -0
  821. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/reporter.py +0 -0
  822. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/suite_runner/runner.py +0 -0
  823. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/__init__.py +0 -0
  824. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/cache.py +0 -0
  825. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/dependency_checker.py +0 -0
  826. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/discovery.py +0 -0
  827. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/loader.py +0 -0
  828. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/registry.py +0 -0
  829. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/resolver.py +0 -0
  830. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/security.py +0 -0
  831. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/tool_override.py +0 -0
  832. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/templates/tools_doctor.py +0 -0
  833. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/test.py +0 -0
  834. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tool_registry.py +0 -0
  835. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/__init__.py +0 -0
  836. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/audio.py +0 -0
  837. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/glob_tool.py +0 -0
  838. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/grep_tool.py +0 -0
  839. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/kanban_tools.py +0 -0
  840. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/multiedit.py +0 -0
  841. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/tools/skill_manage.py +0 -0
  842. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/__init__.py +0 -0
  843. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/_ollama.py +0 -0
  844. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/__init__.py +0 -0
  845. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/grader.py +0 -0
  846. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/hook.py +0 -0
  847. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/models.py +0 -0
  848. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/orchestrator.py +0 -0
  849. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/agents/storage.py +0 -0
  850. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/llm/__init__.py +0 -0
  851. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train/llm/trainer.py +0 -0
  852. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train.py +0 -0
  853. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/train_vision.py +0 -0
  854. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/_aiui_datastore.py +0 -0
  855. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/_external_agents.py +0 -0
  856. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/callbacks.py +0 -0
  857. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/components/aicoder.py +0 -0
  858. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/context.py +0 -0
  859. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui/database_config.py +0 -0
  860. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_agents/__init__.py +0 -0
  861. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_agents/default_app.py +0 -0
  862. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_bot/__init__.py +0 -0
  863. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_bot/default_app.py +0 -0
  864. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_chat/__init__.py +0 -0
  865. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_chat/default_app.py +0 -0
  866. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_dashboard/default_app.py +0 -0
  867. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_realtime/__init__.py +0 -0
  868. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/ui_realtime/default_app.py +0 -0
  869. {praisonai-4.6.71 → praisonai-4.6.74}/praisonai/upload_vision.py +0 -0
  870. {praisonai-4.6.71 → praisonai-4.6.74}/setup.cfg +0 -0
  871. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test.py +0 -0
  872. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_agents_playbook.py +0 -0
  873. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_approval_system.py +0 -0
  874. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_basic.py +0 -0
  875. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_cli_features.py +0 -0
  876. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_custom_tools_fix.py +0 -0
  877. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_double_api_fix.py +0 -0
  878. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_n8n_agent_invoke.py +0 -0
  879. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_n8n_cli_feature.py +0 -0
  880. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_n8n_integration.py +0 -0
  881. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_phase2_refactor.py +0 -0
  882. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_recipe.py +0 -0
  883. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_registry.py +0 -0
  884. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_runner.py +0 -0
  885. {praisonai-4.6.71 → praisonai-4.6.74}/tests/test_sandboxed_agent_compatibility.py +0 -0
  886. {praisonai-4.6.71 → 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.71
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.71
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.71
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.71
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
@@ -76,6 +76,7 @@ praisonai/bots/_dlq.py
76
76
  praisonai/bots/_durable_adapter.py
77
77
  praisonai/bots/_email_utils.py
78
78
  praisonai/bots/_http_approval.py
79
+ praisonai/bots/_identity.py
79
80
  praisonai/bots/_ingress.py
80
81
  praisonai/bots/_mirror.py
81
82
  praisonai/bots/_outbox.py
@@ -201,6 +202,8 @@ praisonai/cli/commands/flow.py
201
202
  praisonai/cli/commands/gateway.py
202
203
  praisonai/cli/commands/github.py
203
204
  praisonai/cli/commands/hooks.py
205
+ praisonai/cli/commands/identity.py
206
+ praisonai/cli/commands/init.py
204
207
  praisonai/cli/commands/kanban.py
205
208
  praisonai/cli/commands/knowledge.py
206
209
  praisonai/cli/commands/langextract.py
@@ -252,6 +255,7 @@ praisonai/cli/commands/validate.py
252
255
  praisonai/cli/commands/version.py
253
256
  praisonai/cli/commands/workflow.py
254
257
  praisonai/cli/configuration/__init__.py
258
+ praisonai/cli/configuration/config.schema.json
255
259
  praisonai/cli/configuration/credentials.py
256
260
  praisonai/cli/configuration/loader.py
257
261
  praisonai/cli/configuration/paths.py
@@ -442,6 +446,7 @@ praisonai/cli/interactive/frontends/rich_frontend.py
442
446
  praisonai/cli/interactive/frontends/textual_frontend.py
443
447
  praisonai/cli/output/__init__.py
444
448
  praisonai/cli/output/console.py
449
+ praisonai/cli/output/event_bridge.py
445
450
  praisonai/cli/session/__init__.py
446
451
  praisonai/cli/session/unified.py
447
452
  praisonai/cli/state/__init__.py
@@ -762,12 +767,16 @@ praisonai/scheduler/_dispatch.py
762
767
  praisonai/scheduler/agent_scheduler.py
763
768
  praisonai/scheduler/async_agent_scheduler.py
764
769
  praisonai/scheduler/base.py
770
+ praisonai/scheduler/blueprint_catalogue.py
771
+ praisonai/scheduler/condition_gate.py
765
772
  praisonai/scheduler/daemon_manager.py
766
773
  praisonai/scheduler/deployment.py
767
774
  praisonai/scheduler/enhanced_executor.py
768
775
  praisonai/scheduler/executor.py
776
+ praisonai/scheduler/run_policy.py
769
777
  praisonai/scheduler/shared.py
770
778
  praisonai/scheduler/state_manager.py
779
+ praisonai/scheduler/suggestion_engine.py
771
780
  praisonai/scheduler/yaml_loader.py
772
781
  praisonai/security/__init__.py
773
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.71
4
+ praisonaiagents>=1.6.74
5
5
  python-dotenv>=0.19.0
6
6
  litellm<2,>=1.83.14
7
7
  PyYAML>=6.0
@@ -184,6 +184,40 @@ FEATURE_CATEGORIES = {
184
184
  'resource': 'Sandbox', # ResourceLimits is part of sandbox execution
185
185
  }
186
186
 
187
+ # Doc categories excluded from Python "Documentation Without Features" orphan reporting.
188
+ # These pages document infra, other SDKs, or user-facing tooling outside praisonaiagents exports.
189
+ PYTHON_DOC_ORPHAN_EXCLUSIONS = frozenset({
190
+ 'Deployment', # docs/deploy — CI/infra guidance, not Python SDK feature exports
191
+ 'AI SDK', # TypeScript SDK pages; tracked in docs/js/ parity separately
192
+ })
193
+
194
+ # Map doc-only category display names to SDK feature display names for parity matching.
195
+ DOC_FEATURE_CATEGORY_ALIASES = {
196
+ 'Callbacks': 'Hooks',
197
+ 'Middleware': 'Hooks',
198
+ 'Vector Store': 'Knowledge',
199
+ 'Token Management': 'Context Management',
200
+ 'Jobs': 'Workflows',
201
+ 'Chat': 'Agent',
202
+ 'Streaming': 'LLM',
203
+ 'Scheduler': 'Tools',
204
+ 'Storage': 'Database',
205
+ 'Process': 'Workflows',
206
+ }
207
+
208
+ # Module-path hints when export names do not match FEATURE_CATEGORIES prefixes.
209
+ MODULE_PATH_CATEGORY = (
210
+ ('deep_research_agent', 'deep-research'),
211
+ ('hooks', 'hook'),
212
+ ('streaming', 'stream'),
213
+ ('scheduler', 'scheduler'),
214
+ ('storage', 'storage'),
215
+ ('process', 'process'),
216
+ ('context.tokens', 'token'),
217
+ ('chat_handler', 'chat'),
218
+ ('chat_mixin', 'chat'),
219
+ )
220
+
187
221
 
188
222
  # Minimum lines for a doc to be considered "real" (not a stub)
189
223
  MIN_DOC_LINES = 50
@@ -257,8 +291,14 @@ class DocsParityGenerator:
257
291
  current = current.parent
258
292
  return Path("/Users/praison/praisonai-package")
259
293
 
260
- def _categorize_feature(self, feature_name: str) -> str:
261
- """Map a feature name to its category."""
294
+ def _categorize_feature(self, feature_name: str, module_path: str = '') -> str:
295
+ """Map a feature name (and optional module path) to its category."""
296
+ if module_path:
297
+ path = module_path.replace('praisonaiagents.', '')
298
+ for hint, prefix in MODULE_PATH_CATEGORY:
299
+ if hint in path:
300
+ return prefix
301
+
262
302
  normalized = normalize_topic(feature_name)
263
303
 
264
304
  # Try to find a matching prefix
@@ -305,7 +345,8 @@ class DocsParityGenerator:
305
345
 
306
346
  for export in exports:
307
347
  name = export.name if hasattr(export, 'name') else str(export)
308
- category = self._categorize_feature(name)
348
+ module_path = export.module_path if hasattr(export, 'module_path') else ''
349
+ category = self._categorize_feature(name, module_path)
309
350
  if category not in groups:
310
351
  groups[category] = []
311
352
  groups[category].append(name)
@@ -357,6 +398,9 @@ class DocsParityGenerator:
357
398
  if prefix == 'other':
358
399
  continue
359
400
  display_name = FEATURE_CATEGORIES.get(prefix, prefix.title())
401
+ if display_name in PYTHON_DOC_ORPHAN_EXCLUSIONS:
402
+ continue
403
+ display_name = DOC_FEATURE_CATEGORY_ALIASES.get(display_name, display_name)
360
404
  if display_name not in result:
361
405
  result[display_name] = ([], 0)
362
406
  existing_names, existing_lines = result[display_name]
@@ -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())
@@ -1,25 +1,41 @@
1
1
  # praisonai/agents_generator.py
2
2
 
3
3
  import sys
4
- from typing import Dict, Any, Optional, List
5
- from .version import __version__
6
- import yaml, os
7
- from rich import print
8
- import inspect
9
- from pathlib import Path
10
- import importlib
11
- import importlib.util
12
4
  import os
5
+ import inspect
13
6
  import logging
14
7
  import re
15
8
  import keyword
16
9
  import difflib
10
+ import importlib
11
+ import importlib.util
12
+ from pathlib import Path
13
+ from typing import Dict, Any, Optional, List
14
+
15
+ from .version import __version__
17
16
 
18
17
  # Import new architecture components
19
18
  from .framework_adapters.base import FrameworkAdapter
20
- from .framework_adapters.registry import FrameworkAdapterRegistry, get_default_registry
21
19
  from .tool_registry import ToolRegistry
22
20
 
21
+
22
+ def _rich_print(*args, **kwargs):
23
+ """Lazy alias for rich.print — pays the import cost only on first use."""
24
+ from rich import print as _rp
25
+ return _rp(*args, **kwargs)
26
+
27
+
28
+ def _yaml_safe_load(stream):
29
+ """Lazy alias for yaml.safe_load."""
30
+ import yaml
31
+ return yaml.safe_load(stream)
32
+
33
+
34
+ def _get_default_adapter_registry():
35
+ """Lazy import for the adapter registry — defers entry-point discovery."""
36
+ from .framework_adapters.registry import get_default_registry
37
+ return get_default_registry()
38
+
23
39
  # Import availability flags
24
40
  # Compatibility imports - now handled by centralized detection
25
41
  # (inbuilt_tools still defines these but they're read-only compatibility)
@@ -233,7 +249,7 @@ class AgentsGenerator:
233
249
 
234
250
  # DI-friendly: tests/multi-tenant runtimes pass their own registry;
235
251
  # CLI users get the process default.
236
- self._adapter_registry = adapter_registry or get_default_registry()
252
+ self._adapter_registry = adapter_registry or _get_default_adapter_registry()
237
253
 
238
254
  # Defer framework adapter creation until YAML is loaded
239
255
  # This fixes the issue where empty framework string fails before YAML framework is read
@@ -543,15 +559,15 @@ class AgentsGenerator:
543
559
  def _load_config(self):
544
560
  """Load configuration from agent file or agent_yaml."""
545
561
  if self.agent_yaml:
546
- config = yaml.safe_load(self.agent_yaml)
562
+ config = _yaml_safe_load(self.agent_yaml)
547
563
  else:
548
564
  if self.agent_file in ('/app/api:app', 'api:app'):
549
565
  self.agent_file = 'agents.yaml'
550
566
  try:
551
567
  with open(self.agent_file, 'r') as f:
552
- config = yaml.safe_load(f)
568
+ config = _yaml_safe_load(f)
553
569
  except FileNotFoundError:
554
- print(f"File not found: {self.agent_file}")
570
+ _rich_print(f"File not found: {self.agent_file}")
555
571
  return None
556
572
 
557
573
  # Apply CLI config overrides to both paths (agent_yaml and agent_file)
@@ -18,6 +18,7 @@ if TYPE_CHECKING:
18
18
  from .bot import Bot
19
19
  from .botos import BotOS
20
20
  from ._session import BotSessionManager
21
+ from ._identity import StoreBackedIdentityResolver
21
22
  from ._dlq import InboundDLQ, DLQEntry
22
23
  from ._ingress import InboundJournal, JournalEntry
23
24
  from ._slack_approval import SlackApproval
@@ -81,6 +82,9 @@ def __getattr__(name: str):
81
82
  if name == "BotSessionManager":
82
83
  from ._session import BotSessionManager
83
84
  return BotSessionManager
85
+ if name == "StoreBackedIdentityResolver":
86
+ from ._identity import StoreBackedIdentityResolver
87
+ return StoreBackedIdentityResolver
84
88
  # N4 — inbound dead-letter queue
85
89
  if name == "InboundDLQ":
86
90
  from ._dlq import InboundDLQ
@@ -130,6 +134,7 @@ __all__ = [
130
134
  "TelegramBot", "DiscordBot", "SlackBot", "WhatsAppBot", "LinearBot", "EmailBot", "AgentMailBot",
131
135
  "Bot", "BotOS",
132
136
  "BotSessionManager",
137
+ "StoreBackedIdentityResolver",
133
138
  "InboundDLQ", "DLQEntry",
134
139
  "InboundJournal", "JournalEntry",
135
140
  "OutboundQueue", "OutboundEntry",
@@ -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
@@ -0,0 +1,199 @@
1
+ """
2
+ Store-backed cross-platform identity resolver (wrapper implementation).
3
+
4
+ The core SDK ships the ``IdentityResolverProtocol`` and lightweight
5
+ in-memory / file-backed resolvers (``praisonaiagents.session.identity``).
6
+ This module provides a *heavy* implementation that reuses the wrapper's
7
+ persistence and **pairing** data so a linked/paired user shares one
8
+ session, history and memory across channels **by default**.
9
+
10
+ ``StoreBackedIdentityResolver``:
11
+
12
+ 1. Keeps an explicit, persisted ``(platform, user_id) -> canonical_id``
13
+ link map (inherited from the core ``FileIdentityResolver``).
14
+ 2. Falls back to the gateway pairing store: when two channels were paired
15
+ under the same label/canonical id, they resolve to that id.
16
+ 3. Otherwise returns the per-platform id ``f"{platform}:{user_id}"`` — a
17
+ safe, non-merging default identical to the core resolver.
18
+
19
+ Construction::
20
+
21
+ from praisonai.bots import StoreBackedIdentityResolver
22
+
23
+ resolver = StoreBackedIdentityResolver.from_env()
24
+ botos = BotOS(agent=agent, platforms=[...], identity_resolver=resolver)
25
+
26
+ # Link two channels to one canonical id
27
+ resolver.link("telegram", "12345", "alice")
28
+ resolver.link("whatsapp", "+44...", "alice")
29
+ """
30
+
31
+ from __future__ import annotations
32
+
33
+ import logging
34
+ from pathlib import Path
35
+ from typing import Any, Optional
36
+
37
+ from praisonaiagents.session.identity import FileIdentityResolver
38
+
39
+ logger = logging.getLogger(__name__)
40
+
41
+
42
+ class StoreBackedIdentityResolver(FileIdentityResolver):
43
+ """File-backed identity resolver augmented with pairing data.
44
+
45
+ Inherits the thread-safe, atomically-persisted link map from
46
+ :class:`praisonaiagents.session.identity.FileIdentityResolver` and adds
47
+ an optional read-through to a gateway :class:`PairingStore` so that
48
+ already-paired channels are recognised without an explicit ``link()``.
49
+
50
+ Resolution order for ``resolve(platform, user_id)``:
51
+
52
+ 1. An explicit link registered via :meth:`link` (highest priority).
53
+ 2. The pairing store's label for ``(user_id, platform)`` when that
54
+ channel is paired and carries a non-empty label (treated as the
55
+ canonical id) — lets paired users share a session out of the box.
56
+ 3. ``f"{platform}:{user_id}"`` — the safe per-platform fallback.
57
+
58
+ Args:
59
+ path: JSON file for the explicit link map. Defaults to the core
60
+ resolver default (``$PRAISONAI_IDENTITY_PATH`` or
61
+ ``~/.praisonai/identity.json``).
62
+ pairing_store: Optional object exposing ``is_paired`` /
63
+ ``list_paired`` (e.g. ``praisonai.gateway.pairing.PairingStore``).
64
+ When ``None``, behaviour matches the plain file resolver.
65
+ use_pairing_label: When ``True`` (default) a paired channel's
66
+ ``label`` is used as its canonical id. Set ``False`` to ignore
67
+ labels and rely solely on explicit links.
68
+ """
69
+
70
+ def __init__(
71
+ self,
72
+ path: Optional[Path | str] = None,
73
+ pairing_store: Optional[Any] = None,
74
+ use_pairing_label: bool = True,
75
+ ) -> None:
76
+ super().__init__(path=path)
77
+ self._pairing_store = pairing_store
78
+ self._use_pairing_label = use_pairing_label
79
+
80
+ @classmethod
81
+ def from_env(
82
+ cls,
83
+ path: Optional[Path | str] = None,
84
+ store_dir: Optional[str] = None,
85
+ use_pairing_label: bool = True,
86
+ ) -> "StoreBackedIdentityResolver":
87
+ """Build a resolver wired to the default gateway pairing store.
88
+
89
+ The pairing store is loaded lazily and any failure (e.g. optional
90
+ deps unavailable) degrades gracefully to a plain file resolver.
91
+
92
+ Args:
93
+ path: Override for the explicit link-map JSON path.
94
+ store_dir: Override for the pairing store directory.
95
+ use_pairing_label: Forwarded to ``__init__``.
96
+ """
97
+ pairing_store = None
98
+ try:
99
+ from praisonai.gateway.pairing import PairingStore
100
+
101
+ pairing_store = PairingStore(store_dir=store_dir)
102
+ except Exception as e: # pragma: no cover — optional/degraded path
103
+ logger.warning(
104
+ "StoreBackedIdentityResolver: pairing store unavailable, "
105
+ "falling back to link-map only: %s",
106
+ e,
107
+ )
108
+ return cls(
109
+ path=path,
110
+ pairing_store=pairing_store,
111
+ use_pairing_label=use_pairing_label,
112
+ )
113
+
114
+ def resolve(self, platform: str, platform_user_id: str) -> str:
115
+ # 1. Explicit links take precedence. The parent returns the
116
+ # per-platform fallback when no explicit link exists; detect
117
+ # that so we can consult the pairing store before giving up.
118
+ fallback = f"{platform}:{platform_user_id}"
119
+ with self._lock:
120
+ explicit = self._links.get((platform, platform_user_id))
121
+ if explicit is not None:
122
+ return explicit
123
+
124
+ # 2. Pairing-store read-through: a paired channel's label is the
125
+ # canonical id shared across channels paired under it.
126
+ if self._pairing_store is not None and self._use_pairing_label:
127
+ try:
128
+ canonical = self._canonical_from_pairing(platform, platform_user_id)
129
+ if canonical:
130
+ return canonical
131
+ except Exception as e: # pragma: no cover — defensive
132
+ logger.warning("identity pairing lookup failed: %s", e)
133
+
134
+ # 3. Safe per-platform fallback.
135
+ return fallback
136
+
137
+ def link_paired(self) -> int:
138
+ """Materialise pairing-store labels as explicit links.
139
+
140
+ Scans the pairing store and registers an explicit link for every
141
+ paired channel whose label is non-empty, so paired users keep a
142
+ stable canonical id even if the pairing store later changes.
143
+
144
+ Returns the number of links created/updated.
145
+ """
146
+ if self._pairing_store is None:
147
+ return 0
148
+ count = 0
149
+ try:
150
+ paired = self._pairing_store.list_paired()
151
+ except Exception as e: # pragma: no cover — defensive
152
+ logger.warning("identity link_paired failed to list pairings: %s", e)
153
+ return 0
154
+ for ch in paired:
155
+ label = getattr(ch, "label", "") or ""
156
+ channel_type = getattr(ch, "channel_type", "")
157
+ channel_id = getattr(ch, "channel_id", "")
158
+ if label and channel_type and channel_id:
159
+ # Write in-memory only; flush once after the loop to avoid
160
+ # N atomic disk writes when materialising many pairings.
161
+ with self._lock:
162
+ self._links[(channel_type, channel_id)] = label
163
+ count += 1
164
+ if count:
165
+ self._flush()
166
+ return count
167
+
168
+ def all_links(self) -> list[tuple[str, str, str]]:
169
+ """Return every explicit link as ``(platform, user_id, canonical)``."""
170
+ with self._lock:
171
+ return [
172
+ (platform, user_id, canonical)
173
+ for (platform, user_id), canonical in self._links.items()
174
+ ]
175
+
176
+ def _canonical_from_pairing(
177
+ self, platform: str, platform_user_id: str
178
+ ) -> Optional[str]:
179
+ """Return the pairing label (canonical id) for a paired channel."""
180
+ store = self._pairing_store
181
+ # Fast path: most messages come from unpaired users. ``is_paired`` is
182
+ # an O(1) dict lookup, so short-circuit before the O(n) scan below.
183
+ is_paired = getattr(store, "is_paired", None)
184
+ if callable(is_paired) and not is_paired(platform_user_id, platform):
185
+ return None
186
+ list_paired = getattr(store, "list_paired", None)
187
+ if not callable(list_paired):
188
+ return None
189
+ for ch in list_paired():
190
+ if (
191
+ getattr(ch, "channel_id", None) == platform_user_id
192
+ and getattr(ch, "channel_type", None) == platform
193
+ ):
194
+ label = getattr(ch, "label", "") or ""
195
+ return label or None
196
+ return None
197
+
198
+
199
+ __all__ = ["StoreBackedIdentityResolver"]