praisonai-code 0.0.6__tar.gz → 0.0.8__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 (331) hide show
  1. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/PKG-INFO +1 -1
  2. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/async_tui.py +48 -2
  3. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli_backends/__init__.py +20 -4
  4. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code.egg-info/PKG-INFO +1 -1
  5. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/pyproject.toml +1 -1
  6. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/README.md +0 -0
  7. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/__init__.py +0 -0
  8. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/__main__.py +0 -0
  9. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/_framework_availability.py +0 -0
  10. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/_logging.py +0 -0
  11. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/_registry.py +0 -0
  12. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/_safe_loader.py +0 -0
  13. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/_version.py +0 -0
  14. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/_wrapper_bridge.py +0 -0
  15. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/__init__.py +0 -0
  16. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/_forward_shim.py +0 -0
  17. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/_paths.py +0 -0
  18. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/_warnings.py +0 -0
  19. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/app.py +0 -0
  20. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/approval_backend.py +0 -0
  21. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/branding.py +0 -0
  22. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/__init__.py +0 -0
  23. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/acp.py +0 -0
  24. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/agent.py +0 -0
  25. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/agents.py +0 -0
  26. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/app.py +0 -0
  27. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/attach.py +0 -0
  28. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/audit.py +0 -0
  29. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/auth.py +0 -0
  30. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/batch.py +0 -0
  31. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/benchmark.py +0 -0
  32. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/browser.py +0 -0
  33. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/call.py +0 -0
  34. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/chat.py +0 -0
  35. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/checkpoint.py +0 -0
  36. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/code.py +0 -0
  37. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/command.py +0 -0
  38. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/commit.py +0 -0
  39. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/completion.py +0 -0
  40. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/config.py +0 -0
  41. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/context.py +0 -0
  42. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/daemon.py +0 -0
  43. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/debug.py +0 -0
  44. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/deploy.py +0 -0
  45. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/diag.py +0 -0
  46. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/docs.py +0 -0
  47. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/doctor.py +0 -0
  48. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/endpoints.py +0 -0
  49. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/environment.py +0 -0
  50. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/eval.py +0 -0
  51. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/examples.py +0 -0
  52. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/flow.py +0 -0
  53. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/github.py +0 -0
  54. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/hooks.py +0 -0
  55. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/init.py +0 -0
  56. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/knowledge.py +0 -0
  57. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/langextract.py +0 -0
  58. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/langfuse.py +0 -0
  59. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/loop.py +0 -0
  60. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/lsp.py +0 -0
  61. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/managed.py +0 -0
  62. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/mcp.py +0 -0
  63. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/memory.py +0 -0
  64. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/models.py +0 -0
  65. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/n8n.py +0 -0
  66. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/obs.py +0 -0
  67. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/package.py +0 -0
  68. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/paths.py +0 -0
  69. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/permissions.py +0 -0
  70. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/plugins.py +0 -0
  71. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/port.py +0 -0
  72. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/profile.py +0 -0
  73. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/publish.py +0 -0
  74. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/rag.py +0 -0
  75. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/realtime.py +0 -0
  76. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/recipe.py +0 -0
  77. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/registry.py +0 -0
  78. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/replay.py +0 -0
  79. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/research.py +0 -0
  80. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/retrieval.py +0 -0
  81. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/rules.py +0 -0
  82. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/run.py +0 -0
  83. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/sandbox.py +0 -0
  84. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/schedule.py +0 -0
  85. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/serve.py +0 -0
  86. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/session.py +0 -0
  87. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/setup.py +0 -0
  88. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/skills.py +0 -0
  89. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/standardise.py +0 -0
  90. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/templates.py +0 -0
  91. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/test.py +0 -0
  92. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/todo.py +0 -0
  93. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/tools.py +0 -0
  94. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/traces.py +0 -0
  95. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/tracker.py +0 -0
  96. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/train.py +0 -0
  97. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/ui.py +0 -0
  98. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/up.py +0 -0
  99. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/validate.py +0 -0
  100. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/version.py +0 -0
  101. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/commands/workflow.py +0 -0
  102. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/config_loader.py +0 -0
  103. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/configuration/__init__.py +0 -0
  104. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/configuration/config.schema.json +0 -0
  105. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/configuration/credentials.py +0 -0
  106. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/configuration/loader.py +0 -0
  107. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/configuration/model_resolver.py +0 -0
  108. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/configuration/oauth.py +0 -0
  109. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/configuration/paths.py +0 -0
  110. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/configuration/resolver.py +0 -0
  111. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/configuration/schema.py +0 -0
  112. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/execution/__init__.py +0 -0
  113. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/execution/core.py +0 -0
  114. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/execution/profiler.py +0 -0
  115. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/execution/request.py +0 -0
  116. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/execution/result.py +0 -0
  117. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/fallback_schema.py +0 -0
  118. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/__init__.py +0 -0
  119. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/_approval_bridge.py +0 -0
  120. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/_endpoint_registry.py +0 -0
  121. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/_search_registry.py +0 -0
  122. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/acp.py +0 -0
  123. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/action_orchestrator.py +0 -0
  124. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/agent_scheduler.py +0 -0
  125. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/agent_tools.py +0 -0
  126. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/agents.py +0 -0
  127. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/at_mentions.py +0 -0
  128. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/audit_cli.py +0 -0
  129. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/auto_memory.py +0 -0
  130. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/auto_mode.py +0 -0
  131. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/autonomy_mode.py +0 -0
  132. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/background.py +0 -0
  133. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/base.py +0 -0
  134. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/benchmark.py +0 -0
  135. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/capabilities.py +0 -0
  136. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/checkpoints.py +0 -0
  137. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/cli_profiler.py +0 -0
  138. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/code_intelligence.py +0 -0
  139. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/compaction.py +0 -0
  140. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/compare.py +0 -0
  141. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/config_hierarchy.py +0 -0
  142. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/context_manager.py +0 -0
  143. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/cost_tracker.py +0 -0
  144. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/csv_test_runner.py +0 -0
  145. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/custom_definitions.py +0 -0
  146. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/debug.py +0 -0
  147. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/deploy.py +0 -0
  148. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/diag.py +0 -0
  149. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/display_jsonl.py +0 -0
  150. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/__init__.py +0 -0
  151. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/__init__.py +0 -0
  152. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/_wrapper_checks.py +0 -0
  153. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/acp_checks.py +0 -0
  154. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/bot_checks.py +0 -0
  155. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/config_checks.py +0 -0
  156. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/db_checks.py +0 -0
  157. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/env_checks.py +0 -0
  158. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/gateway_checks.py +0 -0
  159. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/lsp_checks.py +0 -0
  160. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/mcp_checks.py +0 -0
  161. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/memory_checks.py +0 -0
  162. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/network_checks.py +0 -0
  163. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/obs_checks.py +0 -0
  164. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/packaging_checks.py +0 -0
  165. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/performance_checks.py +0 -0
  166. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/permissions_checks.py +0 -0
  167. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/runtime_checks.py +0 -0
  168. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
  169. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/selftest_checks.py +0 -0
  170. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/serve_checks.py +0 -0
  171. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/skills_checks.py +0 -0
  172. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/checks/tools_checks.py +0 -0
  173. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/engine.py +0 -0
  174. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/formatters.py +0 -0
  175. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/handler.py +0 -0
  176. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/models.py +0 -0
  177. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/doctor/registry.py +0 -0
  178. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/endpoints.py +0 -0
  179. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/eval.py +0 -0
  180. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/examples.py +0 -0
  181. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/external_agents.py +0 -0
  182. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/fast_context.py +0 -0
  183. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/file_history.py +0 -0
  184. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/flow_display.py +0 -0
  185. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/git_attribution.py +0 -0
  186. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/git_integration.py +0 -0
  187. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/guardrail.py +0 -0
  188. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/handoff.py +0 -0
  189. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/hooks.py +0 -0
  190. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/hybrid_workflow.py +0 -0
  191. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/image.py +0 -0
  192. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/interactive_core_headless.py +0 -0
  193. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/interactive_runtime.py +0 -0
  194. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/interactive_test_harness.py +0 -0
  195. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/interactive_tools.py +0 -0
  196. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/interactive_tui.py +0 -0
  197. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/job_workflow.py +0 -0
  198. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/jobs.py +0 -0
  199. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/knowledge.py +0 -0
  200. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/knowledge_cli.py +0 -0
  201. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/lite.py +0 -0
  202. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/logs.py +0 -0
  203. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/lsp_cli.py +0 -0
  204. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/lsp_diagnostics.py +0 -0
  205. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/mcp.py +0 -0
  206. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/message_queue.py +0 -0
  207. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/metrics.py +0 -0
  208. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/migrate.py +0 -0
  209. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/migration_flow.py +0 -0
  210. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/migration_spec.py +0 -0
  211. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/n8n.py +0 -0
  212. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/observability.py +0 -0
  213. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/ollama.py +0 -0
  214. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/output_modes.py +0 -0
  215. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/output_style.py +0 -0
  216. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/package.py +0 -0
  217. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/performance.py +0 -0
  218. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/persistence.py +0 -0
  219. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/profiler/__init__.py +0 -0
  220. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/profiler/core.py +0 -0
  221. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/profiler/optimizations.py +0 -0
  222. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/profiler/suite.py +0 -0
  223. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/queue/__init__.py +0 -0
  224. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/queue/manager.py +0 -0
  225. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/queue/models.py +0 -0
  226. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/queue/persistence.py +0 -0
  227. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/queue/scheduler.py +0 -0
  228. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/queue/worker.py +0 -0
  229. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/recipe.py +0 -0
  230. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/recipe_creator.py +0 -0
  231. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/recipe_optimizer.py +0 -0
  232. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/recipe_prompts.py +0 -0
  233. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/registry.py +0 -0
  234. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/repo_map.py +0 -0
  235. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/router.py +0 -0
  236. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/safe_shell.py +0 -0
  237. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/sandbox_cli.py +0 -0
  238. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/sandbox_executor.py +0 -0
  239. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/sdk_knowledge.py +0 -0
  240. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/session.py +0 -0
  241. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/session_checkpoints.py +0 -0
  242. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/setup/__init__.py +0 -0
  243. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/setup/handler.py +0 -0
  244. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/setup/templates.py +0 -0
  245. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/skills.py +0 -0
  246. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/slash_commands.py +0 -0
  247. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/telemetry.py +0 -0
  248. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/templates.py +0 -0
  249. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/thinking.py +0 -0
  250. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/todo.py +0 -0
  251. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tools.py +0 -0
  252. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/__init__.py +0 -0
  253. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/app.py +0 -0
  254. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/cli.py +0 -0
  255. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/config.py +0 -0
  256. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/debug.py +0 -0
  257. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/events.py +0 -0
  258. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/mock_provider.py +0 -0
  259. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/orchestrator.py +0 -0
  260. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/screens/__init__.py +0 -0
  261. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/screens/help.py +0 -0
  262. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/screens/main.py +0 -0
  263. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/screens/queue.py +0 -0
  264. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/screens/session.py +0 -0
  265. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/screens/settings.py +0 -0
  266. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/session_store.py +0 -0
  267. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/widgets/__init__.py +0 -0
  268. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/widgets/chat.py +0 -0
  269. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/widgets/command_popup.py +0 -0
  270. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/widgets/composer.py +0 -0
  271. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/widgets/file_popup.py +0 -0
  272. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/widgets/queue_panel.py +0 -0
  273. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/widgets/status.py +0 -0
  274. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/tui/widgets/tool_panel.py +0 -0
  275. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/wizard.py +0 -0
  276. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/workflow.py +0 -0
  277. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/features/yaml_utils.py +0 -0
  278. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/__init__.py +0 -0
  279. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/config.py +0 -0
  280. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/core.py +0 -0
  281. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/events.py +0 -0
  282. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/frontends/__init__.py +0 -0
  283. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/frontends/rich_frontend.py +0 -0
  284. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/frontends/textual_frontend.py +0 -0
  285. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/praison_io.py +0 -0
  286. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/repl.py +0 -0
  287. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/split_tui.py +0 -0
  288. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/interactive/tui_app.py +0 -0
  289. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/langfuse_client.py +0 -0
  290. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/main.py +0 -0
  291. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/output/__init__.py +0 -0
  292. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/output/console.py +0 -0
  293. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/output/event_bridge.py +0 -0
  294. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/schedule_cli.py +0 -0
  295. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/schema_provider.py +0 -0
  296. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/session/__init__.py +0 -0
  297. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/session/resume.py +0 -0
  298. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/session/unified.py +0 -0
  299. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/state/__init__.py +0 -0
  300. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/state/identifiers.py +0 -0
  301. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/state/project_sessions.py +0 -0
  302. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/state/sessions.py +0 -0
  303. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/ui/__init__.py +0 -0
  304. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/ui/config.py +0 -0
  305. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/ui/events.py +0 -0
  306. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/ui/mg_backend.py +0 -0
  307. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/ui/plain.py +0 -0
  308. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/ui/rich_backend.py +0 -0
  309. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/unified_schema.py +0 -0
  310. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/utils/env_utils.py +0 -0
  311. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli/utils/project.py +0 -0
  312. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli_backends/claude.py +0 -0
  313. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/cli_backends/registry.py +0 -0
  314. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/llm/__init__.py +0 -0
  315. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/llm/catalogue.py +0 -0
  316. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/llm/config.py +0 -0
  317. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/llm/credentials.py +0 -0
  318. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/llm/env.py +0 -0
  319. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/runtime/__init__.py +0 -0
  320. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/runtime/__main__.py +0 -0
  321. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/runtime/client.py +0 -0
  322. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/runtime/descriptor.py +0 -0
  323. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/runtime/server.py +0 -0
  324. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/tool_registry.py +0 -0
  325. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code/tool_resolver.py +0 -0
  326. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code.egg-info/SOURCES.txt +0 -0
  327. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code.egg-info/dependency_links.txt +0 -0
  328. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code.egg-info/entry_points.txt +0 -0
  329. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code.egg-info/requires.txt +0 -0
  330. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/praisonai_code.egg-info/top_level.txt +0 -0
  331. {praisonai_code-0.0.6 → praisonai_code-0.0.8}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: praisonai-code
3
- Version: 0.0.6
3
+ Version: 0.0.8
4
4
  Summary: Agentic terminal CLI for PraisonAI — the terminal-native agent (run, chat, code, runtime, cli backends) extracted from the praisonai wrapper.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -111,6 +111,33 @@ def _detect_auth_error(text: Optional[str]) -> Optional[str]:
111
111
  return None
112
112
 
113
113
 
114
+ def _extract_response_output(response) -> Optional[str]:
115
+ """Extract user-visible text from an agent response.
116
+
117
+ Handles plain strings as well as wrapper objects such as
118
+ ``AutonomyResult`` returned by ``agent.astart()`` which expose the
119
+ generated text via an ``output`` attribute.
120
+ """
121
+ if response is None:
122
+ return None
123
+ output = getattr(response, "output", None)
124
+ if output is not None:
125
+ text = str(output).strip()
126
+ return text or None
127
+ text = str(response).strip()
128
+ return text or None
129
+
130
+
131
+ def _is_empty_agent_response(response) -> bool:
132
+ """True when the agent produced no user-visible output.
133
+
134
+ ``agent.astart()`` may return a truthy wrapper object (e.g.
135
+ ``AutonomyResult(success=True, output='')``) even on auth failure, so a
136
+ plain ``not response`` check is insufficient (issue #2568).
137
+ """
138
+ return _extract_response_output(response) is None
139
+
140
+
114
141
  class _LogCapture(logging.Handler):
115
142
  """Lightweight logging handler that records messages for failure detection."""
116
143
 
@@ -852,12 +879,31 @@ Example: /handoff code "refactor the auth module" """
852
879
  # Detect silent failures: some providers log an auth/permission
853
880
  # error and return None instead of raising. Surface these so the
854
881
  # CLI can exit with a non-zero status (issue #2562).
882
+ #
883
+ # NOTE: agent.astart() may return a truthy wrapper object such as
884
+ # AutonomyResult(success=True, output='') even on auth failure, so
885
+ # we must inspect the actual output rather than the object's
886
+ # truthiness (issue #2568).
887
+ output_text = _extract_response_output(response)
855
888
  auth_error = log_capture.find_auth_error()
856
- if auth_error and not response:
889
+ if auth_error and output_text is None:
857
890
  self._last_error = RuntimeError(auth_error)
858
891
  return f"Error: {auth_error}"
859
892
 
860
- return str(response) if response else None
893
+ # Surface explicit failures reported by wrapper objects even when
894
+ # no auth signature matched (e.g. AutonomyResult.success is False).
895
+ result_error = getattr(response, "error", None)
896
+ if result_error:
897
+ self._last_error = RuntimeError(str(result_error))
898
+ return f"Error: {result_error}"
899
+ if getattr(response, "success", None) is False:
900
+ self._last_error = RuntimeError("Agent execution failed")
901
+ # Preserve any partial/diagnostic output for the user instead
902
+ # of hiding it behind a generic message (still exits non-zero
903
+ # via ``execution_failed``).
904
+ return output_text if output_text is not None else "Error: Agent execution failed"
905
+
906
+ return output_text
861
907
  except Exception as e:
862
908
  logger.error(f"Error executing prompt: {e}", exc_info=True)
863
909
  self._last_error = e
@@ -6,6 +6,16 @@ Wrapper implementations of CLI backend protocols following AGENTS.md:
6
6
  - Lazy loading to avoid heavy imports at startup
7
7
  """
8
8
 
9
+ def _is_cli_backend_instance(obj) -> bool:
10
+ """Return True if ``obj`` is a pre-resolved CliBackendProtocol instance.
11
+
12
+ A CliBackendProtocol instance exposes both ``execute()`` and ``stream()``.
13
+ This single predicate is the one place the protocol shape is checked, so any
14
+ future protocol change touches exactly one function.
15
+ """
16
+ return hasattr(obj, "execute") and hasattr(obj, "stream")
17
+
18
+
9
19
  def resolve_cli_backend_config(value):
10
20
  """Resolve a YAML/Python cli_backend value (str | dict | instance) to a CliBackendProtocol.
11
21
 
@@ -22,11 +32,16 @@ def resolve_cli_backend_config(value):
22
32
  """
23
33
  if value is None:
24
34
  return None
25
-
26
- # If already an instance, return as-is (duck typing)
27
- if callable(value) or hasattr(value, 'process_turn'):
35
+
36
+ # Pre-resolved protocol instance: a CliBackendProtocol exposes execute() + stream().
37
+ if _is_cli_backend_instance(value):
28
38
  return value
29
-
39
+
40
+ # Factory callable (not itself a protocol instance) - return as-is; the core
41
+ # Agent invokes it to obtain the protocol instance.
42
+ if callable(value):
43
+ return value
44
+
30
45
  # Import registry functions
31
46
  from .registry import resolve_cli_backend
32
47
 
@@ -68,6 +83,7 @@ __all__ = [
68
83
  "register_cli_backend",
69
84
  "resolve_cli_backend",
70
85
  "resolve_cli_backend_config",
86
+ "_is_cli_backend_instance",
71
87
  "ClaudeCodeBackend",
72
88
  "list_cli_backends"
73
89
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: praisonai-code
3
- Version: 0.0.6
3
+ Version: 0.0.8
4
4
  Summary: Agentic terminal CLI for PraisonAI — the terminal-native agent (run, chat, code, runtime, cli backends) extracted from the praisonai wrapper.
5
5
  Author: Mervin Praison
6
6
  License: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "praisonai-code"
3
- version = "0.0.6"
3
+ version = "0.0.8"
4
4
  description = "Agentic terminal CLI for PraisonAI — the terminal-native agent (run, chat, code, runtime, cli backends) extracted from the praisonai wrapper."
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
File without changes