praisonai-code 0.0.5__tar.gz → 0.0.7__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.
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/PKG-INFO +1 -1
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/__init__.py +1 -1
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/_wrapper_bridge.py +7 -2
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/app.py +5 -1
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/chat.py +33 -7
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/doctor.py +64 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/capabilities.py +41 -101
- praisonai_code-0.0.7/praisonai_code/cli/features/doctor/checks/_wrapper_checks.py +38 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/acp_checks.py +6 -1
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/bot_checks.py +17 -9
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/config_checks.py +4 -1
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/env_checks.py +126 -23
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/gateway_checks.py +21 -8
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/runtime_checks.py +6 -3
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/serve_checks.py +47 -14
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/formatters.py +30 -2
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/recipe_creator.py +19 -8
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/async_tui.py +132 -1
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/main.py +36 -11
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli_backends/__init__.py +20 -4
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/tool_resolver.py +2 -1
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code.egg-info/PKG-INFO +1 -1
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code.egg-info/SOURCES.txt +1 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/pyproject.toml +1 -1
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/README.md +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/__main__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/_framework_availability.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/_logging.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/_registry.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/_safe_loader.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/_version.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/_forward_shim.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/_paths.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/_warnings.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/approval_backend.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/branding.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/acp.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/agent.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/agents.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/app.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/attach.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/audit.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/auth.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/batch.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/benchmark.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/browser.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/call.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/checkpoint.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/code.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/command.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/commit.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/completion.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/config.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/context.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/daemon.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/debug.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/deploy.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/diag.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/docs.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/endpoints.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/environment.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/eval.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/examples.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/flow.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/github.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/hooks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/init.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/knowledge.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/langextract.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/langfuse.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/loop.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/lsp.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/managed.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/mcp.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/memory.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/models.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/n8n.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/obs.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/package.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/paths.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/permissions.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/plugins.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/port.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/profile.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/publish.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/rag.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/realtime.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/recipe.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/registry.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/replay.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/research.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/retrieval.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/rules.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/run.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/sandbox.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/schedule.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/serve.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/session.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/setup.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/skills.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/standardise.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/templates.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/test.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/todo.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/tools.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/traces.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/tracker.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/train.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/ui.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/up.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/validate.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/version.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/commands/workflow.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/config_loader.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/configuration/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/configuration/config.schema.json +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/configuration/credentials.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/configuration/loader.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/configuration/model_resolver.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/configuration/oauth.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/configuration/paths.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/configuration/resolver.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/configuration/schema.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/execution/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/execution/core.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/execution/profiler.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/execution/request.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/execution/result.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/fallback_schema.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/_approval_bridge.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/_endpoint_registry.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/_search_registry.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/acp.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/action_orchestrator.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/agent_scheduler.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/agent_tools.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/agents.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/at_mentions.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/audit_cli.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/auto_memory.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/auto_mode.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/autonomy_mode.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/background.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/base.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/benchmark.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/checkpoints.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/cli_profiler.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/code_intelligence.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/compaction.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/compare.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/config_hierarchy.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/context_manager.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/cost_tracker.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/csv_test_runner.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/custom_definitions.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/debug.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/deploy.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/diag.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/display_jsonl.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/db_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/lsp_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/mcp_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/memory_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/network_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/obs_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/packaging_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/performance_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/permissions_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/runtime_migration_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/selftest_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/skills_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/checks/tools_checks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/engine.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/handler.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/models.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/doctor/registry.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/endpoints.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/eval.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/examples.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/external_agents.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/fast_context.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/file_history.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/flow_display.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/git_attribution.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/git_integration.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/guardrail.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/handoff.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/hooks.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/hybrid_workflow.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/image.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/interactive_core_headless.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/interactive_runtime.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/interactive_test_harness.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/interactive_tools.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/interactive_tui.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/job_workflow.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/jobs.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/knowledge.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/knowledge_cli.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/lite.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/logs.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/lsp_cli.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/lsp_diagnostics.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/mcp.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/message_queue.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/metrics.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/migrate.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/migration_flow.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/migration_spec.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/n8n.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/observability.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/ollama.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/output_modes.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/output_style.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/package.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/performance.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/persistence.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/profiler/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/profiler/core.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/profiler/optimizations.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/profiler/suite.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/queue/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/queue/manager.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/queue/models.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/queue/persistence.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/queue/scheduler.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/queue/worker.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/recipe.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/recipe_optimizer.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/recipe_prompts.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/registry.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/repo_map.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/router.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/safe_shell.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/sandbox_cli.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/sandbox_executor.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/sdk_knowledge.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/session.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/session_checkpoints.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/setup/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/setup/handler.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/setup/templates.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/skills.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/slash_commands.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/telemetry.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/templates.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/thinking.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/todo.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tools.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/app.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/cli.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/config.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/debug.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/events.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/mock_provider.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/orchestrator.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/screens/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/screens/help.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/screens/main.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/screens/queue.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/screens/session.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/screens/settings.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/session_store.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/widgets/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/widgets/chat.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/widgets/command_popup.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/widgets/composer.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/widgets/file_popup.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/widgets/queue_panel.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/widgets/status.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/tui/widgets/tool_panel.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/wizard.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/workflow.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/features/yaml_utils.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/config.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/core.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/events.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/frontends/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/frontends/rich_frontend.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/frontends/textual_frontend.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/praison_io.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/repl.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/split_tui.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/interactive/tui_app.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/langfuse_client.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/output/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/output/console.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/output/event_bridge.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/schedule_cli.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/schema_provider.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/session/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/session/resume.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/session/unified.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/state/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/state/identifiers.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/state/project_sessions.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/state/sessions.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/ui/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/ui/config.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/ui/events.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/ui/mg_backend.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/ui/plain.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/ui/rich_backend.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/unified_schema.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/utils/env_utils.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli/utils/project.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli_backends/claude.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/cli_backends/registry.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/llm/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/llm/catalogue.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/llm/config.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/llm/credentials.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/llm/env.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/runtime/__init__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/runtime/__main__.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/runtime/client.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/runtime/descriptor.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/runtime/server.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code/tool_registry.py +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code.egg-info/dependency_links.txt +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code.egg-info/entry_points.txt +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code.egg-info/requires.txt +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/praisonai_code.egg-info/top_level.txt +0 -0
- {praisonai_code-0.0.5 → praisonai_code-0.0.7}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: praisonai-code
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.7
|
|
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
|
|
@@ -39,10 +39,15 @@ def get_wrapper_attr(module_name: str, attr: str) -> Any:
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def optional_wrapper_attr(module_name: str, attr: str, default: T | None = None) -> Any | T | None:
|
|
42
|
-
"""Return a wrapper attribute when installed, else ``default``.
|
|
42
|
+
"""Return a wrapper attribute when installed, else ``default``.
|
|
43
|
+
|
|
44
|
+
Falls back to ``default`` when the wrapper package is missing (ImportError)
|
|
45
|
+
or when an installed wrapper module lacks the requested attribute
|
|
46
|
+
(AttributeError), so callers degrade gracefully in both cases.
|
|
47
|
+
"""
|
|
43
48
|
if not wrapper_available():
|
|
44
49
|
return default
|
|
45
50
|
try:
|
|
46
51
|
return get_wrapper_attr(module_name, attr)
|
|
47
|
-
except ImportError:
|
|
52
|
+
except (ImportError, AttributeError):
|
|
48
53
|
return default
|
|
@@ -223,6 +223,9 @@ _LAZY_COMMANDS: Dict[str, Tuple[str, str, str]] = {
|
|
|
223
223
|
# relative ``.commands.*`` path would resolve to ``praisonai_code`` where the
|
|
224
224
|
# modules do not live. The import happens lazily at invocation time only, so
|
|
225
225
|
# ``praisonai_code`` keeps no static dependency on ``praisonai``.
|
|
226
|
+
# C7.1 audit: wrapper-resident Typer modules only (no praisonai_code.cli.commands.*
|
|
227
|
+
# copy). Do NOT add train/serve here — their impl lives in praisonai_code; bridge
|
|
228
|
+
# internal wrapper imports instead. mint_link is wrapper-only but not in Typer registry.
|
|
226
229
|
_WRAPPER_COMMANDS = frozenset({
|
|
227
230
|
"bot",
|
|
228
231
|
"gateway",
|
|
@@ -455,7 +458,8 @@ class LazyCommandGroup(TyperGroup):
|
|
|
455
458
|
console = Console()
|
|
456
459
|
|
|
457
460
|
try:
|
|
458
|
-
from
|
|
461
|
+
from praisonai_code._wrapper_bridge import get_wrapper_attr
|
|
462
|
+
AgentOS = get_wrapper_attr("praisonai", "AgentOS")
|
|
459
463
|
from praisonaiagents import AgentOSConfig
|
|
460
464
|
except ImportError as e:
|
|
461
465
|
console.print(f"[red]Error importing AgentOS: {e}[/red]")
|
|
@@ -5,6 +5,7 @@ Provides terminal-native interactive chat mode.
|
|
|
5
5
|
This command NEVER opens a browser - it runs entirely in the terminal.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
+
import logging
|
|
8
9
|
from typing import List, Optional, Union
|
|
9
10
|
|
|
10
11
|
import typer
|
|
@@ -231,6 +232,10 @@ def chat_main(
|
|
|
231
232
|
response = tui.run_single(prompt)
|
|
232
233
|
if response:
|
|
233
234
|
print(response)
|
|
235
|
+
# Propagate a non-zero exit code on failure (e.g. invalid API key)
|
|
236
|
+
# so shell scripts and CI can detect authentication failures (#2562).
|
|
237
|
+
if tui.execution_failed:
|
|
238
|
+
raise typer.Exit(1)
|
|
234
239
|
else:
|
|
235
240
|
# Interactive split-pane TUI mode
|
|
236
241
|
tui.run()
|
|
@@ -278,20 +283,41 @@ def _run_profiled_chat(
|
|
|
278
283
|
agent = Agent(**agent_config)
|
|
279
284
|
profiler.mark_init_end()
|
|
280
285
|
|
|
281
|
-
# Execution phase
|
|
286
|
+
# Execution phase. Capture auth failures (raised or logged-then-swallowed)
|
|
287
|
+
# so profiling still runs and CI can detect the failure (#2562).
|
|
288
|
+
from praisonai_code.cli.interactive.async_tui import _LogCapture
|
|
289
|
+
|
|
290
|
+
log_capture = _LogCapture()
|
|
291
|
+
root_logger = logging.getLogger()
|
|
292
|
+
root_logger.addHandler(log_capture)
|
|
293
|
+
|
|
294
|
+
response = None
|
|
295
|
+
failed = False
|
|
282
296
|
profiler.mark_exec_start()
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
297
|
+
try:
|
|
298
|
+
response = agent.start(prompt)
|
|
299
|
+
except Exception as exc: # noqa: BLE001 - surface any failure via exit code
|
|
300
|
+
typer.echo(f"Error: {exc}", err=True)
|
|
301
|
+
failed = True
|
|
302
|
+
finally:
|
|
303
|
+
profiler.mark_exec_end()
|
|
304
|
+
root_logger.removeHandler(log_capture)
|
|
305
|
+
|
|
286
306
|
profiler.stop()
|
|
287
|
-
|
|
307
|
+
|
|
288
308
|
# Print response
|
|
289
309
|
if response:
|
|
290
310
|
print(response)
|
|
291
|
-
|
|
292
|
-
# Print profiling report
|
|
311
|
+
|
|
312
|
+
# Print profiling report (always, even on failure)
|
|
293
313
|
profiler.print_report()
|
|
294
314
|
|
|
315
|
+
# Propagate failure (e.g. invalid API key) so CI can detect it (#2562).
|
|
316
|
+
# An empty-but-successful response is NOT treated as a failure on its own;
|
|
317
|
+
# only a raised exception or a logged auth error (with no response) exits 1.
|
|
318
|
+
if failed or (not response and log_capture.find_auth_error()):
|
|
319
|
+
raise typer.Exit(1)
|
|
320
|
+
|
|
295
321
|
|
|
296
322
|
def _run_legacy_terminal_chat(
|
|
297
323
|
prompt: Optional[str] = None,
|
|
@@ -14,6 +14,38 @@ from ..output.console import get_output_controller
|
|
|
14
14
|
app = typer.Typer(help="Health checks and diagnostics")
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
@app.callback(invoke_without_command=True)
|
|
18
|
+
def doctor_main(
|
|
19
|
+
ctx: typer.Context,
|
|
20
|
+
quick: bool = typer.Option(False, "--quick", help="Fast env-only checks (alias for 'doctor env')"),
|
|
21
|
+
live: bool = typer.Option(False, "--live", help="Include live provider pings (validate keys, not just presence)"),
|
|
22
|
+
deep: bool = typer.Option(False, "--deep", help="Enable deeper probes"),
|
|
23
|
+
strict: bool = typer.Option(False, "--strict", help="Treat warnings as failures"),
|
|
24
|
+
json_output: bool = typer.Option(False, "--json", help="Output machine-readable JSON"),
|
|
25
|
+
):
|
|
26
|
+
"""Run a full setup report when no subcommand is given.
|
|
27
|
+
|
|
28
|
+
``praisonai doctor`` (no subcommand) now runs a comprehensive first-run /
|
|
29
|
+
operator troubleshooting report instead of failing with "Missing command".
|
|
30
|
+
Use ``praisonai doctor env`` (or ``--quick``) for the fast, CI-friendly path.
|
|
31
|
+
"""
|
|
32
|
+
if ctx.invoked_subcommand is not None:
|
|
33
|
+
return
|
|
34
|
+
|
|
35
|
+
args: list = []
|
|
36
|
+
if quick:
|
|
37
|
+
args.append("env")
|
|
38
|
+
if live:
|
|
39
|
+
args.append("--live")
|
|
40
|
+
if deep:
|
|
41
|
+
args.append("--deep")
|
|
42
|
+
if strict:
|
|
43
|
+
args.append("--strict")
|
|
44
|
+
if json_output:
|
|
45
|
+
args.append("--json")
|
|
46
|
+
raise typer.Exit(_run_doctor(args))
|
|
47
|
+
|
|
48
|
+
|
|
17
49
|
def _run_doctor(args: list) -> int:
|
|
18
50
|
"""Run doctor command with args."""
|
|
19
51
|
try:
|
|
@@ -292,6 +324,38 @@ def doctor_runtime(
|
|
|
292
324
|
raise typer.Exit(_run_doctor(args))
|
|
293
325
|
|
|
294
326
|
|
|
327
|
+
@app.command("fix")
|
|
328
|
+
def doctor_fix(
|
|
329
|
+
dry_run: bool = typer.Option(True, "--dry-run/--execute", help="Show proposed changes without applying them (default: dry-run)"),
|
|
330
|
+
no_backup: bool = typer.Option(False, "--no-backup", help="Skip creating backup files before applying fixes"),
|
|
331
|
+
file: Optional[str] = typer.Option(None, "--file", "-f", help="Config file to fix (default: search for YAML files in the current directory)"),
|
|
332
|
+
quiet: bool = typer.Option(False, "--quiet", "-q", help="Minimal output"),
|
|
333
|
+
):
|
|
334
|
+
"""
|
|
335
|
+
Run safe auto-remediation for common setup issues.
|
|
336
|
+
|
|
337
|
+
Dry-run by default: lists proposed changes without modifying anything.
|
|
338
|
+
Use --execute to apply fixes (a .bak backup is created unless --no-backup).
|
|
339
|
+
|
|
340
|
+
Scope (phase 1):
|
|
341
|
+
• Migrate deprecated cli_backend YAML configuration
|
|
342
|
+
|
|
343
|
+
Examples:
|
|
344
|
+
praisonai doctor fix # Dry-run: list proposed changes
|
|
345
|
+
praisonai doctor fix --execute # Apply safe fixes with backup
|
|
346
|
+
"""
|
|
347
|
+
args = ["fix"]
|
|
348
|
+
if not dry_run:
|
|
349
|
+
args.append("--execute")
|
|
350
|
+
if no_backup:
|
|
351
|
+
args.append("--no-backup")
|
|
352
|
+
if file:
|
|
353
|
+
args.extend(["--file", file])
|
|
354
|
+
if quiet:
|
|
355
|
+
args.append("--quiet")
|
|
356
|
+
raise typer.Exit(_run_doctor(args))
|
|
357
|
+
|
|
358
|
+
|
|
295
359
|
@app.command("troubleshoot")
|
|
296
360
|
def doctor_troubleshoot():
|
|
297
361
|
"""
|
|
@@ -9,6 +9,12 @@ import sys
|
|
|
9
9
|
from typing import Optional, List
|
|
10
10
|
|
|
11
11
|
|
|
12
|
+
def _cap(submodule: str, attr: str):
|
|
13
|
+
"""Load a wrapper capabilities symbol (requires pip install praisonai)."""
|
|
14
|
+
from praisonai_code._wrapper_bridge import get_wrapper_attr
|
|
15
|
+
return get_wrapper_attr(f"praisonai.capabilities.{submodule}", attr)
|
|
16
|
+
|
|
17
|
+
|
|
12
18
|
class CapabilitiesHandler:
|
|
13
19
|
"""Handler for capabilities CLI commands."""
|
|
14
20
|
|
|
@@ -50,9 +56,7 @@ class CapabilitiesHandler:
|
|
|
50
56
|
parsed = parser.parse_args(remaining_args)
|
|
51
57
|
except SystemExit:
|
|
52
58
|
return 1
|
|
53
|
-
|
|
54
|
-
from praisonai.capabilities.audio import transcribe
|
|
55
|
-
|
|
59
|
+
transcribe = _cap("audio", "transcribe")
|
|
56
60
|
try:
|
|
57
61
|
result = transcribe(
|
|
58
62
|
audio=parsed.file,
|
|
@@ -93,9 +97,7 @@ class CapabilitiesHandler:
|
|
|
93
97
|
parsed = parser.parse_args(remaining_args)
|
|
94
98
|
except SystemExit:
|
|
95
99
|
return 1
|
|
96
|
-
|
|
97
|
-
from praisonai.capabilities.audio import speech
|
|
98
|
-
|
|
100
|
+
speech = _cap("audio", "speech")
|
|
99
101
|
try:
|
|
100
102
|
result = speech(
|
|
101
103
|
text=parsed.text,
|
|
@@ -149,9 +151,7 @@ class CapabilitiesHandler:
|
|
|
149
151
|
parsed = parser.parse_args(remaining_args)
|
|
150
152
|
except SystemExit:
|
|
151
153
|
return 1
|
|
152
|
-
|
|
153
|
-
from praisonai.capabilities.images import image_generate
|
|
154
|
-
|
|
154
|
+
image_generate = _cap("images", "image_generate")
|
|
155
155
|
try:
|
|
156
156
|
results = image_generate(
|
|
157
157
|
prompt=parsed.prompt,
|
|
@@ -184,9 +184,7 @@ class CapabilitiesHandler:
|
|
|
184
184
|
parsed = parser.parse_args(remaining_args)
|
|
185
185
|
except SystemExit:
|
|
186
186
|
return 1
|
|
187
|
-
|
|
188
|
-
from praisonai.capabilities.images import image_edit
|
|
189
|
-
|
|
187
|
+
image_edit = _cap("images", "image_edit")
|
|
190
188
|
try:
|
|
191
189
|
results = image_edit(
|
|
192
190
|
image=parsed.image,
|
|
@@ -244,9 +242,7 @@ class CapabilitiesHandler:
|
|
|
244
242
|
parsed = parser.parse_args(remaining_args)
|
|
245
243
|
except SystemExit:
|
|
246
244
|
return 1
|
|
247
|
-
|
|
248
|
-
from praisonai.capabilities.files import file_create
|
|
249
|
-
|
|
245
|
+
file_create = _cap("files", "file_create")
|
|
250
246
|
try:
|
|
251
247
|
result = file_create(
|
|
252
248
|
file=parsed.file,
|
|
@@ -273,9 +269,7 @@ class CapabilitiesHandler:
|
|
|
273
269
|
parsed = parser.parse_args(remaining_args)
|
|
274
270
|
except SystemExit:
|
|
275
271
|
return 1
|
|
276
|
-
|
|
277
|
-
from praisonai.capabilities.files import file_list
|
|
278
|
-
|
|
272
|
+
file_list = _cap("files", "file_list")
|
|
279
273
|
try:
|
|
280
274
|
results = file_list(purpose=parsed.purpose)
|
|
281
275
|
|
|
@@ -300,9 +294,7 @@ class CapabilitiesHandler:
|
|
|
300
294
|
parsed = parser.parse_args(remaining_args)
|
|
301
295
|
except SystemExit:
|
|
302
296
|
return 1
|
|
303
|
-
|
|
304
|
-
from praisonai.capabilities.files import file_retrieve
|
|
305
|
-
|
|
297
|
+
file_retrieve = _cap("files", "file_retrieve")
|
|
306
298
|
try:
|
|
307
299
|
result = file_retrieve(file_id=parsed.file_id)
|
|
308
300
|
|
|
@@ -327,9 +319,7 @@ class CapabilitiesHandler:
|
|
|
327
319
|
parsed = parser.parse_args(remaining_args)
|
|
328
320
|
except SystemExit:
|
|
329
321
|
return 1
|
|
330
|
-
|
|
331
|
-
from praisonai.capabilities.files import file_delete
|
|
332
|
-
|
|
322
|
+
file_delete = _cap("files", "file_delete")
|
|
333
323
|
try:
|
|
334
324
|
result = file_delete(file_id=parsed.file_id)
|
|
335
325
|
|
|
@@ -389,9 +379,7 @@ class CapabilitiesHandler:
|
|
|
389
379
|
parsed = parser.parse_args(unknown_args)
|
|
390
380
|
except SystemExit:
|
|
391
381
|
return 1
|
|
392
|
-
|
|
393
|
-
from praisonai.capabilities.rerank import rerank
|
|
394
|
-
|
|
382
|
+
rerank = _cap("rerank", "rerank")
|
|
395
383
|
try:
|
|
396
384
|
result = rerank(
|
|
397
385
|
query=parsed.query,
|
|
@@ -420,9 +408,7 @@ class CapabilitiesHandler:
|
|
|
420
408
|
parsed = parser.parse_args(unknown_args)
|
|
421
409
|
except SystemExit:
|
|
422
410
|
return 1
|
|
423
|
-
|
|
424
|
-
from praisonai.capabilities.moderations import moderate
|
|
425
|
-
|
|
411
|
+
moderate = _cap("moderations", "moderate")
|
|
426
412
|
try:
|
|
427
413
|
text_input = " ".join(parsed.text)
|
|
428
414
|
results = moderate(
|
|
@@ -454,9 +440,7 @@ class CapabilitiesHandler:
|
|
|
454
440
|
parsed = parser.parse_args(unknown_args)
|
|
455
441
|
except SystemExit:
|
|
456
442
|
return 1
|
|
457
|
-
|
|
458
|
-
from praisonai.capabilities.ocr import ocr
|
|
459
|
-
|
|
443
|
+
ocr = _cap("ocr", "ocr")
|
|
460
444
|
try:
|
|
461
445
|
result = ocr(
|
|
462
446
|
document=parsed.document,
|
|
@@ -514,9 +498,7 @@ class CapabilitiesHandler:
|
|
|
514
498
|
parsed = parser.parse_args(remaining_args)
|
|
515
499
|
except SystemExit:
|
|
516
500
|
return 1
|
|
517
|
-
|
|
518
|
-
from praisonai.capabilities.batches import batch_create
|
|
519
|
-
|
|
501
|
+
batch_create = _cap("batches", "batch_create")
|
|
520
502
|
try:
|
|
521
503
|
result = batch_create(
|
|
522
504
|
input_file_id=parsed.file_id,
|
|
@@ -534,8 +516,7 @@ class CapabilitiesHandler:
|
|
|
534
516
|
@staticmethod
|
|
535
517
|
def _handle_batches_list(args, remaining_args):
|
|
536
518
|
"""Handle: praisonai batches list"""
|
|
537
|
-
|
|
538
|
-
|
|
519
|
+
batch_list = _cap("batches", "batch_list")
|
|
539
520
|
try:
|
|
540
521
|
results = batch_list()
|
|
541
522
|
|
|
@@ -560,9 +541,7 @@ class CapabilitiesHandler:
|
|
|
560
541
|
parsed = parser.parse_args(remaining_args)
|
|
561
542
|
except SystemExit:
|
|
562
543
|
return 1
|
|
563
|
-
|
|
564
|
-
from praisonai.capabilities.batches import batch_retrieve
|
|
565
|
-
|
|
544
|
+
batch_retrieve = _cap("batches", "batch_retrieve")
|
|
566
545
|
try:
|
|
567
546
|
result = batch_retrieve(batch_id=parsed.batch_id)
|
|
568
547
|
|
|
@@ -587,9 +566,7 @@ class CapabilitiesHandler:
|
|
|
587
566
|
parsed = parser.parse_args(remaining_args)
|
|
588
567
|
except SystemExit:
|
|
589
568
|
return 1
|
|
590
|
-
|
|
591
|
-
from praisonai.capabilities.batches import batch_cancel
|
|
592
|
-
|
|
569
|
+
batch_cancel = _cap("batches", "batch_cancel")
|
|
593
570
|
try:
|
|
594
571
|
result = batch_cancel(batch_id=parsed.batch_id)
|
|
595
572
|
|
|
@@ -633,9 +610,7 @@ class CapabilitiesHandler:
|
|
|
633
610
|
parsed = parser.parse_args(remaining_args)
|
|
634
611
|
except SystemExit:
|
|
635
612
|
return 1
|
|
636
|
-
|
|
637
|
-
from praisonai.capabilities.vector_stores import vector_store_create
|
|
638
|
-
|
|
613
|
+
vector_store_create = _cap("vector_stores", "vector_store_create")
|
|
639
614
|
try:
|
|
640
615
|
result = vector_store_create(
|
|
641
616
|
name=parsed.name,
|
|
@@ -663,9 +638,7 @@ class CapabilitiesHandler:
|
|
|
663
638
|
parsed = parser.parse_args(remaining_args)
|
|
664
639
|
except SystemExit:
|
|
665
640
|
return 1
|
|
666
|
-
|
|
667
|
-
from praisonai.capabilities.vector_stores import vector_store_search
|
|
668
|
-
|
|
641
|
+
vector_store_search = _cap("vector_stores", "vector_store_search")
|
|
669
642
|
try:
|
|
670
643
|
result = vector_store_search(
|
|
671
644
|
vector_store_id=parsed.store_id,
|
|
@@ -719,9 +692,7 @@ class CapabilitiesHandler:
|
|
|
719
692
|
parsed = parser.parse_args(remaining_args)
|
|
720
693
|
except SystemExit:
|
|
721
694
|
return 1
|
|
722
|
-
|
|
723
|
-
from praisonai.capabilities.assistants import assistant_create
|
|
724
|
-
|
|
695
|
+
assistant_create = _cap("assistants", "assistant_create")
|
|
725
696
|
try:
|
|
726
697
|
result = assistant_create(
|
|
727
698
|
name=parsed.name,
|
|
@@ -741,8 +712,7 @@ class CapabilitiesHandler:
|
|
|
741
712
|
@staticmethod
|
|
742
713
|
def _handle_assistants_list(args, remaining_args):
|
|
743
714
|
"""Handle: praisonai assistants list"""
|
|
744
|
-
|
|
745
|
-
|
|
715
|
+
assistant_list = _cap("assistants", "assistant_list")
|
|
746
716
|
try:
|
|
747
717
|
results = assistant_list()
|
|
748
718
|
|
|
@@ -790,9 +760,7 @@ class CapabilitiesHandler:
|
|
|
790
760
|
parsed = parser.parse_args(remaining_args)
|
|
791
761
|
except SystemExit:
|
|
792
762
|
return 1
|
|
793
|
-
|
|
794
|
-
from praisonai.capabilities.fine_tuning import fine_tuning_create
|
|
795
|
-
|
|
763
|
+
fine_tuning_create = _cap("fine_tuning", "fine_tuning_create")
|
|
796
764
|
try:
|
|
797
765
|
result = fine_tuning_create(
|
|
798
766
|
training_file=parsed.file_id,
|
|
@@ -812,8 +780,7 @@ class CapabilitiesHandler:
|
|
|
812
780
|
@staticmethod
|
|
813
781
|
def _handle_fine_tuning_list(args, remaining_args):
|
|
814
782
|
"""Handle: praisonai fine-tuning list"""
|
|
815
|
-
|
|
816
|
-
|
|
783
|
+
fine_tuning_list = _cap("fine_tuning", "fine_tuning_list")
|
|
817
784
|
try:
|
|
818
785
|
results = fine_tuning_list()
|
|
819
786
|
|
|
@@ -846,9 +813,7 @@ class CapabilitiesHandler:
|
|
|
846
813
|
if not parsed.prompt:
|
|
847
814
|
print("Usage: praisonai completions <prompt> [options]")
|
|
848
815
|
return 1
|
|
849
|
-
|
|
850
|
-
from praisonai.capabilities.completions import chat_completion
|
|
851
|
-
|
|
816
|
+
chat_completion = _cap("completions", "chat_completion")
|
|
852
817
|
try:
|
|
853
818
|
messages = []
|
|
854
819
|
if parsed.system:
|
|
@@ -899,9 +864,7 @@ class CapabilitiesHandler:
|
|
|
899
864
|
parsed = parser.parse_args(remaining_args)
|
|
900
865
|
except SystemExit:
|
|
901
866
|
return 1
|
|
902
|
-
|
|
903
|
-
from praisonai.capabilities.messages import messages_create
|
|
904
|
-
|
|
867
|
+
messages_create = _cap("messages", "messages_create")
|
|
905
868
|
try:
|
|
906
869
|
result = messages_create(
|
|
907
870
|
messages=[{"role": "user", "content": parsed.prompt}],
|
|
@@ -931,9 +894,7 @@ class CapabilitiesHandler:
|
|
|
931
894
|
parsed = parser.parse_args(remaining_args)
|
|
932
895
|
except SystemExit:
|
|
933
896
|
return 1
|
|
934
|
-
|
|
935
|
-
from praisonai.capabilities.messages import count_tokens
|
|
936
|
-
|
|
897
|
+
count_tokens = _cap("messages", "count_tokens")
|
|
937
898
|
try:
|
|
938
899
|
result = count_tokens(
|
|
939
900
|
messages=[{"role": "user", "content": parsed.text}],
|
|
@@ -958,9 +919,7 @@ class CapabilitiesHandler:
|
|
|
958
919
|
parsed = parser.parse_args(unknown_args)
|
|
959
920
|
except SystemExit:
|
|
960
921
|
return 1
|
|
961
|
-
|
|
962
|
-
from praisonai.capabilities.guardrails import apply_guardrail
|
|
963
|
-
|
|
922
|
+
apply_guardrail = _cap("guardrails", "apply_guardrail")
|
|
964
923
|
try:
|
|
965
924
|
result = apply_guardrail(
|
|
966
925
|
content=parsed.content,
|
|
@@ -994,9 +953,7 @@ class CapabilitiesHandler:
|
|
|
994
953
|
parsed = parser.parse_args(unknown_args)
|
|
995
954
|
except SystemExit:
|
|
996
955
|
return 1
|
|
997
|
-
|
|
998
|
-
from praisonai.capabilities.rag import rag_query
|
|
999
|
-
|
|
956
|
+
rag_query = _cap("rag", "rag_query")
|
|
1000
957
|
try:
|
|
1001
958
|
result = rag_query(
|
|
1002
959
|
query=parsed.query,
|
|
@@ -1028,9 +985,7 @@ class CapabilitiesHandler:
|
|
|
1028
985
|
parsed = parser.parse_args(unknown_args)
|
|
1029
986
|
except SystemExit:
|
|
1030
987
|
return 1
|
|
1031
|
-
|
|
1032
|
-
from praisonai.capabilities.realtime import realtime_connect
|
|
1033
|
-
|
|
988
|
+
realtime_connect = _cap("realtime", "realtime_connect")
|
|
1034
989
|
try:
|
|
1035
990
|
if parsed.action == "connect":
|
|
1036
991
|
session = realtime_connect(model=parsed.model)
|
|
@@ -1059,9 +1014,7 @@ class CapabilitiesHandler:
|
|
|
1059
1014
|
parsed = parser.parse_args(unknown_args)
|
|
1060
1015
|
except SystemExit:
|
|
1061
1016
|
return 1
|
|
1062
|
-
|
|
1063
|
-
from praisonai.capabilities.videos import video_generate
|
|
1064
|
-
|
|
1017
|
+
video_generate = _cap("videos", "video_generate")
|
|
1065
1018
|
try:
|
|
1066
1019
|
result = video_generate(
|
|
1067
1020
|
prompt=parsed.prompt,
|
|
@@ -1089,9 +1042,7 @@ class CapabilitiesHandler:
|
|
|
1089
1042
|
parsed = parser.parse_args(unknown_args)
|
|
1090
1043
|
except SystemExit:
|
|
1091
1044
|
return 1
|
|
1092
|
-
|
|
1093
|
-
from praisonai.capabilities.a2a import a2a_send
|
|
1094
|
-
|
|
1045
|
+
a2a_send = _cap("a2a", "a2a_send")
|
|
1095
1046
|
try:
|
|
1096
1047
|
result = a2a_send(
|
|
1097
1048
|
message=parsed.message,
|
|
@@ -1137,9 +1088,7 @@ class CapabilitiesHandler:
|
|
|
1137
1088
|
parsed = parser.parse_args(remaining_args)
|
|
1138
1089
|
except SystemExit:
|
|
1139
1090
|
return 1
|
|
1140
|
-
|
|
1141
|
-
from praisonai.capabilities.containers import container_create
|
|
1142
|
-
|
|
1091
|
+
container_create = _cap("containers", "container_create")
|
|
1143
1092
|
try:
|
|
1144
1093
|
result = container_create(
|
|
1145
1094
|
image=parsed.image,
|
|
@@ -1173,9 +1122,7 @@ class CapabilitiesHandler:
|
|
|
1173
1122
|
parsed = parser.parse_args(action_args)
|
|
1174
1123
|
except SystemExit:
|
|
1175
1124
|
return 1
|
|
1176
|
-
|
|
1177
|
-
from praisonai.capabilities.container_files import container_file_read
|
|
1178
|
-
|
|
1125
|
+
container_file_read = _cap("container_files", "container_file_read")
|
|
1179
1126
|
try:
|
|
1180
1127
|
result = container_file_read(
|
|
1181
1128
|
container_id=parsed.container_id,
|
|
@@ -1201,9 +1148,7 @@ class CapabilitiesHandler:
|
|
|
1201
1148
|
parsed = parser.parse_args(action_args)
|
|
1202
1149
|
except SystemExit:
|
|
1203
1150
|
return 1
|
|
1204
|
-
|
|
1205
|
-
from praisonai.capabilities.container_files import container_file_list
|
|
1206
|
-
|
|
1151
|
+
container_file_list = _cap("container_files", "container_file_list")
|
|
1207
1152
|
try:
|
|
1208
1153
|
results = container_file_list(
|
|
1209
1154
|
container_id=parsed.container_id,
|
|
@@ -1238,8 +1183,7 @@ class CapabilitiesHandler:
|
|
|
1238
1183
|
parsed = parser.parse_args(unknown_args)
|
|
1239
1184
|
except SystemExit:
|
|
1240
1185
|
return 1
|
|
1241
|
-
|
|
1242
|
-
from praisonai.capabilities.passthrough import passthrough
|
|
1186
|
+
passthrough = _cap("passthrough", "passthrough")
|
|
1243
1187
|
import json
|
|
1244
1188
|
|
|
1245
1189
|
try:
|
|
@@ -1273,9 +1217,7 @@ class CapabilitiesHandler:
|
|
|
1273
1217
|
parsed = parser.parse_args(unknown_args)
|
|
1274
1218
|
except SystemExit:
|
|
1275
1219
|
return 1
|
|
1276
|
-
|
|
1277
|
-
from praisonai.capabilities.responses import responses_create
|
|
1278
|
-
|
|
1220
|
+
responses_create = _cap("responses", "responses_create")
|
|
1279
1221
|
try:
|
|
1280
1222
|
result = responses_create(
|
|
1281
1223
|
input=parsed.input,
|
|
@@ -1301,9 +1243,7 @@ class CapabilitiesHandler:
|
|
|
1301
1243
|
parsed = parser.parse_args(unknown_args)
|
|
1302
1244
|
except SystemExit:
|
|
1303
1245
|
return 1
|
|
1304
|
-
|
|
1305
|
-
from praisonai.capabilities.search import search
|
|
1306
|
-
|
|
1246
|
+
search = _cap("search", "search")
|
|
1307
1247
|
try:
|
|
1308
1248
|
result = search(
|
|
1309
1249
|
query=parsed.query,
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Shared helpers for doctor checks that require the praisonai wrapper."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import time
|
|
6
|
+
from typing import Optional
|
|
7
|
+
|
|
8
|
+
from ..models import CheckResult, CheckStatus, CheckCategory
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def skip_if_no_wrapper(
|
|
12
|
+
check_id: str,
|
|
13
|
+
title: str,
|
|
14
|
+
*,
|
|
15
|
+
start: Optional[float] = None,
|
|
16
|
+
category: CheckCategory = CheckCategory.BOTS,
|
|
17
|
+
) -> Optional[CheckResult]:
|
|
18
|
+
"""Return a SKIP result when the full wrapper is not installed."""
|
|
19
|
+
from praisonai_code._wrapper_bridge import wrapper_available
|
|
20
|
+
|
|
21
|
+
if wrapper_available():
|
|
22
|
+
return None
|
|
23
|
+
duration_ms = (time.time() - start) * 1000 if start is not None else None
|
|
24
|
+
return CheckResult(
|
|
25
|
+
id=check_id,
|
|
26
|
+
title=title,
|
|
27
|
+
category=category,
|
|
28
|
+
status=CheckStatus.SKIP,
|
|
29
|
+
message="Install full wrapper: pip install praisonai",
|
|
30
|
+
duration_ms=duration_ms,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def bots_config_schema():
|
|
35
|
+
"""Load ``praisonai.bots._config_schema`` via the wrapper bridge."""
|
|
36
|
+
from praisonai_code._wrapper_bridge import import_wrapper_module
|
|
37
|
+
|
|
38
|
+
return import_wrapper_module("praisonai.bots._config_schema")
|
|
@@ -8,6 +8,7 @@ import os
|
|
|
8
8
|
|
|
9
9
|
from ..models import CheckCategory, CheckResult, CheckStatus
|
|
10
10
|
from ..registry import register_check
|
|
11
|
+
from ._wrapper_checks import skip_if_no_wrapper
|
|
11
12
|
|
|
12
13
|
logger = logging.getLogger(__name__)
|
|
13
14
|
|
|
@@ -102,8 +103,12 @@ def check_acp_sdk(config=None) -> CheckResult:
|
|
|
102
103
|
)
|
|
103
104
|
def check_acp_server(config=None) -> CheckResult:
|
|
104
105
|
"""Check if ACP server can be imported."""
|
|
106
|
+
skipped = skip_if_no_wrapper("acp_server", "ACP Server Import", category=CheckCategory.TOOLS)
|
|
107
|
+
if skipped:
|
|
108
|
+
return skipped
|
|
105
109
|
try:
|
|
106
|
-
from
|
|
110
|
+
from praisonai_code._wrapper_bridge import get_wrapper_attr
|
|
111
|
+
get_wrapper_attr("praisonai.acp", "ACPServer")
|
|
107
112
|
|
|
108
113
|
return CheckResult(
|
|
109
114
|
id="acp_server",
|