praisonai-code 0.0.1__py3-none-any.whl
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/__init__.py +17 -0
- praisonai_code/cli/__init__.py +12 -0
- praisonai_code/cli/_forward_shim.py +10 -0
- praisonai_code/cli/_paths.py +88 -0
- praisonai_code/cli/_warnings.py +58 -0
- praisonai_code/cli/app.py +757 -0
- praisonai_code/cli/approval_backend.py +272 -0
- praisonai_code/cli/branding.py +94 -0
- praisonai_code/cli/commands/__init__.py +114 -0
- praisonai_code/cli/commands/acp.py +80 -0
- praisonai_code/cli/commands/agent.py +116 -0
- praisonai_code/cli/commands/agents.py +80 -0
- praisonai_code/cli/commands/app.py +139 -0
- praisonai_code/cli/commands/attach.py +95 -0
- praisonai_code/cli/commands/audit.py +102 -0
- praisonai_code/cli/commands/auth.py +508 -0
- praisonai_code/cli/commands/batch.py +848 -0
- praisonai_code/cli/commands/benchmark.py +286 -0
- praisonai_code/cli/commands/browser.py +299 -0
- praisonai_code/cli/commands/call.py +45 -0
- praisonai_code/cli/commands/chat.py +332 -0
- praisonai_code/cli/commands/checkpoint.py +170 -0
- praisonai_code/cli/commands/code.py +276 -0
- praisonai_code/cli/commands/command.py +114 -0
- praisonai_code/cli/commands/commit.py +47 -0
- praisonai_code/cli/commands/completion.py +333 -0
- praisonai_code/cli/commands/config.py +681 -0
- praisonai_code/cli/commands/context.py +414 -0
- praisonai_code/cli/commands/daemon.py +203 -0
- praisonai_code/cli/commands/debug.py +142 -0
- praisonai_code/cli/commands/deploy.py +71 -0
- praisonai_code/cli/commands/diag.py +55 -0
- praisonai_code/cli/commands/docs.py +1575 -0
- praisonai_code/cli/commands/doctor.py +332 -0
- praisonai_code/cli/commands/endpoints.py +51 -0
- praisonai_code/cli/commands/environment.py +179 -0
- praisonai_code/cli/commands/eval.py +131 -0
- praisonai_code/cli/commands/examples.py +953 -0
- praisonai_code/cli/commands/flow.py +436 -0
- praisonai_code/cli/commands/github.py +752 -0
- praisonai_code/cli/commands/hooks.py +74 -0
- praisonai_code/cli/commands/init.py +174 -0
- praisonai_code/cli/commands/knowledge.py +440 -0
- praisonai_code/cli/commands/langextract.py +120 -0
- praisonai_code/cli/commands/langfuse.py +984 -0
- praisonai_code/cli/commands/loop.py +211 -0
- praisonai_code/cli/commands/lsp.py +112 -0
- praisonai_code/cli/commands/managed.py +659 -0
- praisonai_code/cli/commands/mcp.py +763 -0
- praisonai_code/cli/commands/memory.py +298 -0
- praisonai_code/cli/commands/models.py +264 -0
- praisonai_code/cli/commands/n8n.py +326 -0
- praisonai_code/cli/commands/obs.py +19 -0
- praisonai_code/cli/commands/package.py +76 -0
- praisonai_code/cli/commands/paths.py +106 -0
- praisonai_code/cli/commands/permissions.py +272 -0
- praisonai_code/cli/commands/plugins.py +609 -0
- praisonai_code/cli/commands/port.py +530 -0
- praisonai_code/cli/commands/profile.py +466 -0
- praisonai_code/cli/commands/publish.py +193 -0
- praisonai_code/cli/commands/rag.py +913 -0
- praisonai_code/cli/commands/realtime.py +52 -0
- praisonai_code/cli/commands/recipe.py +684 -0
- praisonai_code/cli/commands/registry.py +59 -0
- praisonai_code/cli/commands/replay.py +830 -0
- praisonai_code/cli/commands/research.py +49 -0
- praisonai_code/cli/commands/retrieval.py +377 -0
- praisonai_code/cli/commands/rules.py +71 -0
- praisonai_code/cli/commands/run.py +1573 -0
- praisonai_code/cli/commands/sandbox.py +371 -0
- praisonai_code/cli/commands/schedule.py +529 -0
- praisonai_code/cli/commands/serve.py +690 -0
- praisonai_code/cli/commands/session.py +450 -0
- praisonai_code/cli/commands/setup.py +174 -0
- praisonai_code/cli/commands/skills.py +545 -0
- praisonai_code/cli/commands/standardise.py +711 -0
- praisonai_code/cli/commands/templates.py +54 -0
- praisonai_code/cli/commands/test.py +558 -0
- praisonai_code/cli/commands/todo.py +74 -0
- praisonai_code/cli/commands/tools.py +205 -0
- praisonai_code/cli/commands/traces.py +145 -0
- praisonai_code/cli/commands/tracker.py +852 -0
- praisonai_code/cli/commands/train.py +613 -0
- praisonai_code/cli/commands/ui.py +172 -0
- praisonai_code/cli/commands/up.py +354 -0
- praisonai_code/cli/commands/validate.py +291 -0
- praisonai_code/cli/commands/version.py +101 -0
- praisonai_code/cli/commands/workflow.py +97 -0
- praisonai_code/cli/config_loader.py +437 -0
- praisonai_code/cli/configuration/__init__.py +27 -0
- praisonai_code/cli/configuration/config.schema.json +57 -0
- praisonai_code/cli/configuration/credentials.py +446 -0
- praisonai_code/cli/configuration/loader.py +364 -0
- praisonai_code/cli/configuration/model_resolver.py +161 -0
- praisonai_code/cli/configuration/oauth.py +389 -0
- praisonai_code/cli/configuration/paths.py +224 -0
- praisonai_code/cli/configuration/resolver.py +687 -0
- praisonai_code/cli/configuration/schema.py +317 -0
- praisonai_code/cli/execution/__init__.py +99 -0
- praisonai_code/cli/execution/core.py +208 -0
- praisonai_code/cli/execution/profiler.py +898 -0
- praisonai_code/cli/execution/request.py +85 -0
- praisonai_code/cli/execution/result.py +74 -0
- praisonai_code/cli/fallback_schema.py +416 -0
- praisonai_code/cli/features/__init__.py +278 -0
- praisonai_code/cli/features/_endpoint_registry.py +64 -0
- praisonai_code/cli/features/_search_registry.py +43 -0
- praisonai_code/cli/features/acp.py +236 -0
- praisonai_code/cli/features/action_orchestrator.py +576 -0
- praisonai_code/cli/features/agent_scheduler.py +773 -0
- praisonai_code/cli/features/agent_tools.py +603 -0
- praisonai_code/cli/features/agents.py +397 -0
- praisonai_code/cli/features/at_mentions.py +471 -0
- praisonai_code/cli/features/audit_cli.py +270 -0
- praisonai_code/cli/features/auto_memory.py +182 -0
- praisonai_code/cli/features/auto_mode.py +552 -0
- praisonai_code/cli/features/autonomy_mode.py +546 -0
- praisonai_code/cli/features/background.py +356 -0
- praisonai_code/cli/features/base.py +168 -0
- praisonai_code/cli/features/benchmark.py +1462 -0
- praisonai_code/cli/features/capabilities.py +1326 -0
- praisonai_code/cli/features/checkpoints.py +345 -0
- praisonai_code/cli/features/cli_profiler.py +335 -0
- praisonai_code/cli/features/code_intelligence.py +666 -0
- praisonai_code/cli/features/compaction.py +294 -0
- praisonai_code/cli/features/compare.py +534 -0
- praisonai_code/cli/features/config_hierarchy.py +366 -0
- praisonai_code/cli/features/context_manager.py +597 -0
- praisonai_code/cli/features/cost_tracker.py +514 -0
- praisonai_code/cli/features/csv_test_runner.py +736 -0
- praisonai_code/cli/features/custom_definitions.py +790 -0
- praisonai_code/cli/features/debug.py +810 -0
- praisonai_code/cli/features/deploy.py +605 -0
- praisonai_code/cli/features/diag.py +289 -0
- praisonai_code/cli/features/display_jsonl.py +173 -0
- praisonai_code/cli/features/doctor/__init__.py +63 -0
- praisonai_code/cli/features/doctor/checks/__init__.py +29 -0
- praisonai_code/cli/features/doctor/checks/acp_checks.py +220 -0
- praisonai_code/cli/features/doctor/checks/bot_checks.py +340 -0
- praisonai_code/cli/features/doctor/checks/config_checks.py +373 -0
- praisonai_code/cli/features/doctor/checks/db_checks.py +366 -0
- praisonai_code/cli/features/doctor/checks/env_checks.py +637 -0
- praisonai_code/cli/features/doctor/checks/gateway_checks.py +387 -0
- praisonai_code/cli/features/doctor/checks/lsp_checks.py +231 -0
- praisonai_code/cli/features/doctor/checks/mcp_checks.py +367 -0
- praisonai_code/cli/features/doctor/checks/memory_checks.py +268 -0
- praisonai_code/cli/features/doctor/checks/network_checks.py +251 -0
- praisonai_code/cli/features/doctor/checks/obs_checks.py +328 -0
- praisonai_code/cli/features/doctor/checks/packaging_checks.py +422 -0
- praisonai_code/cli/features/doctor/checks/performance_checks.py +235 -0
- praisonai_code/cli/features/doctor/checks/permissions_checks.py +259 -0
- praisonai_code/cli/features/doctor/checks/runtime_checks.py +650 -0
- praisonai_code/cli/features/doctor/checks/runtime_migration_checks.py +220 -0
- praisonai_code/cli/features/doctor/checks/selftest_checks.py +322 -0
- praisonai_code/cli/features/doctor/checks/serve_checks.py +426 -0
- praisonai_code/cli/features/doctor/checks/skills_checks.py +327 -0
- praisonai_code/cli/features/doctor/checks/tools_checks.py +371 -0
- praisonai_code/cli/features/doctor/engine.py +266 -0
- praisonai_code/cli/features/doctor/formatters.py +377 -0
- praisonai_code/cli/features/doctor/handler.py +564 -0
- praisonai_code/cli/features/doctor/models.py +276 -0
- praisonai_code/cli/features/doctor/registry.py +239 -0
- praisonai_code/cli/features/endpoints.py +1016 -0
- praisonai_code/cli/features/eval.py +559 -0
- praisonai_code/cli/features/examples.py +707 -0
- praisonai_code/cli/features/external_agents.py +231 -0
- praisonai_code/cli/features/fast_context.py +410 -0
- praisonai_code/cli/features/file_history.py +320 -0
- praisonai_code/cli/features/flow_display.py +566 -0
- praisonai_code/cli/features/git_attribution.py +159 -0
- praisonai_code/cli/features/git_integration.py +651 -0
- praisonai_code/cli/features/guardrail.py +171 -0
- praisonai_code/cli/features/handoff.py +252 -0
- praisonai_code/cli/features/hooks.py +583 -0
- praisonai_code/cli/features/hybrid_workflow.py +391 -0
- praisonai_code/cli/features/image.py +384 -0
- praisonai_code/cli/features/interactive_core_headless.py +450 -0
- praisonai_code/cli/features/interactive_runtime.py +600 -0
- praisonai_code/cli/features/interactive_test_harness.py +537 -0
- praisonai_code/cli/features/interactive_tools.py +428 -0
- praisonai_code/cli/features/interactive_tui.py +603 -0
- praisonai_code/cli/features/job_workflow.py +906 -0
- praisonai_code/cli/features/jobs.py +632 -0
- praisonai_code/cli/features/knowledge.py +531 -0
- praisonai_code/cli/features/knowledge_cli.py +438 -0
- praisonai_code/cli/features/lite.py +244 -0
- praisonai_code/cli/features/logs.py +200 -0
- praisonai_code/cli/features/lsp_cli.py +225 -0
- praisonai_code/cli/features/lsp_diagnostics.py +185 -0
- praisonai_code/cli/features/mcp.py +344 -0
- praisonai_code/cli/features/message_queue.py +587 -0
- praisonai_code/cli/features/metrics.py +210 -0
- praisonai_code/cli/features/migrate.py +1329 -0
- praisonai_code/cli/features/migration_flow.py +463 -0
- praisonai_code/cli/features/migration_spec.py +276 -0
- praisonai_code/cli/features/n8n.py +703 -0
- praisonai_code/cli/features/observability.py +293 -0
- praisonai_code/cli/features/ollama.py +361 -0
- praisonai_code/cli/features/output_modes.py +155 -0
- praisonai_code/cli/features/output_style.py +273 -0
- praisonai_code/cli/features/package.py +631 -0
- praisonai_code/cli/features/performance.py +308 -0
- praisonai_code/cli/features/persistence.py +636 -0
- praisonai_code/cli/features/profiler/__init__.py +81 -0
- praisonai_code/cli/features/profiler/core.py +558 -0
- praisonai_code/cli/features/profiler/optimizations.py +652 -0
- praisonai_code/cli/features/profiler/suite.py +386 -0
- praisonai_code/cli/features/queue/__init__.py +73 -0
- praisonai_code/cli/features/queue/manager.py +435 -0
- praisonai_code/cli/features/queue/models.py +289 -0
- praisonai_code/cli/features/queue/persistence.py +564 -0
- praisonai_code/cli/features/queue/scheduler.py +529 -0
- praisonai_code/cli/features/queue/worker.py +400 -0
- praisonai_code/cli/features/recipe.py +2187 -0
- praisonai_code/cli/features/recipe_creator.py +996 -0
- praisonai_code/cli/features/recipe_optimizer.py +1364 -0
- praisonai_code/cli/features/recipe_prompts.py +226 -0
- praisonai_code/cli/features/registry.py +229 -0
- praisonai_code/cli/features/repo_map.py +860 -0
- praisonai_code/cli/features/router.py +466 -0
- praisonai_code/cli/features/safe_shell.py +427 -0
- praisonai_code/cli/features/sandbox_cli.py +283 -0
- praisonai_code/cli/features/sandbox_executor.py +536 -0
- praisonai_code/cli/features/sdk_knowledge.py +500 -0
- praisonai_code/cli/features/session.py +222 -0
- praisonai_code/cli/features/session_checkpoints.py +208 -0
- praisonai_code/cli/features/setup/__init__.py +9 -0
- praisonai_code/cli/features/setup/handler.py +355 -0
- praisonai_code/cli/features/setup/templates.py +62 -0
- praisonai_code/cli/features/skills.py +940 -0
- praisonai_code/cli/features/slash_commands.py +692 -0
- praisonai_code/cli/features/telemetry.py +179 -0
- praisonai_code/cli/features/templates.py +1390 -0
- praisonai_code/cli/features/thinking.py +343 -0
- praisonai_code/cli/features/todo.py +334 -0
- praisonai_code/cli/features/tools.py +680 -0
- praisonai_code/cli/features/tui/__init__.py +83 -0
- praisonai_code/cli/features/tui/app.py +871 -0
- praisonai_code/cli/features/tui/cli.py +580 -0
- praisonai_code/cli/features/tui/config.py +150 -0
- praisonai_code/cli/features/tui/debug.py +526 -0
- praisonai_code/cli/features/tui/events.py +99 -0
- praisonai_code/cli/features/tui/mock_provider.py +328 -0
- praisonai_code/cli/features/tui/orchestrator.py +652 -0
- praisonai_code/cli/features/tui/screens/__init__.py +50 -0
- praisonai_code/cli/features/tui/screens/help.py +157 -0
- praisonai_code/cli/features/tui/screens/main.py +568 -0
- praisonai_code/cli/features/tui/screens/queue.py +174 -0
- praisonai_code/cli/features/tui/screens/session.py +124 -0
- praisonai_code/cli/features/tui/screens/settings.py +148 -0
- praisonai_code/cli/features/tui/session_store.py +198 -0
- praisonai_code/cli/features/tui/widgets/__init__.py +56 -0
- praisonai_code/cli/features/tui/widgets/chat.py +263 -0
- praisonai_code/cli/features/tui/widgets/command_popup.py +258 -0
- praisonai_code/cli/features/tui/widgets/composer.py +292 -0
- praisonai_code/cli/features/tui/widgets/file_popup.py +207 -0
- praisonai_code/cli/features/tui/widgets/queue_panel.py +223 -0
- praisonai_code/cli/features/tui/widgets/status.py +181 -0
- praisonai_code/cli/features/tui/widgets/tool_panel.py +307 -0
- praisonai_code/cli/features/wizard.py +289 -0
- praisonai_code/cli/features/workflow.py +802 -0
- praisonai_code/cli/features/yaml_utils.py +321 -0
- praisonai_code/cli/interactive/__init__.py +48 -0
- praisonai_code/cli/interactive/async_tui.py +1218 -0
- praisonai_code/cli/interactive/config.py +139 -0
- praisonai_code/cli/interactive/core.py +618 -0
- praisonai_code/cli/interactive/events.py +131 -0
- praisonai_code/cli/interactive/frontends/__init__.py +31 -0
- praisonai_code/cli/interactive/frontends/rich_frontend.py +462 -0
- praisonai_code/cli/interactive/frontends/textual_frontend.py +157 -0
- praisonai_code/cli/interactive/praison_io.py +502 -0
- praisonai_code/cli/interactive/repl.py +297 -0
- praisonai_code/cli/interactive/split_tui.py +456 -0
- praisonai_code/cli/interactive/tui_app.py +457 -0
- praisonai_code/cli/langfuse_client.py +360 -0
- praisonai_code/cli/main.py +7421 -0
- praisonai_code/cli/output/__init__.py +25 -0
- praisonai_code/cli/output/console.py +456 -0
- praisonai_code/cli/output/event_bridge.py +191 -0
- praisonai_code/cli/schedule_cli.py +54 -0
- praisonai_code/cli/schema_provider.py +23 -0
- praisonai_code/cli/session/__init__.py +16 -0
- praisonai_code/cli/session/resume.py +148 -0
- praisonai_code/cli/session/unified.py +548 -0
- praisonai_code/cli/state/__init__.py +31 -0
- praisonai_code/cli/state/identifiers.py +161 -0
- praisonai_code/cli/state/project_sessions.py +383 -0
- praisonai_code/cli/state/sessions.py +390 -0
- praisonai_code/cli/ui/__init__.py +160 -0
- praisonai_code/cli/ui/config.py +46 -0
- praisonai_code/cli/ui/events.py +61 -0
- praisonai_code/cli/ui/mg_backend.py +342 -0
- praisonai_code/cli/ui/plain.py +133 -0
- praisonai_code/cli/ui/rich_backend.py +162 -0
- praisonai_code/cli/unified_schema.py +655 -0
- praisonai_code/cli/utils/env_utils.py +126 -0
- praisonai_code/cli/utils/project.py +131 -0
- praisonai_code/cli_backends/__init__.py +73 -0
- praisonai_code/cli_backends/claude.py +373 -0
- praisonai_code/cli_backends/registry.py +113 -0
- praisonai_code/runtime/__init__.py +36 -0
- praisonai_code/runtime/__main__.py +81 -0
- praisonai_code/runtime/client.py +131 -0
- praisonai_code/runtime/descriptor.py +209 -0
- praisonai_code/runtime/server.py +356 -0
- praisonai_code-0.0.1.dist-info/METADATA +80 -0
- praisonai_code-0.0.1.dist-info/RECORD +309 -0
- praisonai_code-0.0.1.dist-info/WHEEL +5 -0
- praisonai_code-0.0.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""praisonai-code — agentic terminal CLI for PraisonAI.
|
|
2
|
+
|
|
3
|
+
This package hosts the terminal-native agent product (``run``, ``chat``,
|
|
4
|
+
``code``, warm runtime, CLI backends) extracted from the ``praisonai``
|
|
5
|
+
wrapper. It depends on ``praisonaiagents`` only — never on ``praisonai`` —
|
|
6
|
+
to avoid a PyPI dependency cycle.
|
|
7
|
+
|
|
8
|
+
Migration in progress: ``runtime/`` and ``cli_backends/`` have moved here
|
|
9
|
+
(step C1), and the ``interactive``/``execution``/``ui``/``output``/``state``
|
|
10
|
+
CLI sub-packages have moved here (step C2). Subsequent steps (C3–C6) migrate
|
|
11
|
+
the remaining terminal-agent modules, with PEP 562 shims left behind at the
|
|
12
|
+
old ``praisonai.*`` paths for backward compatibility.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
__version__ = "0.0.0"
|
|
16
|
+
|
|
17
|
+
__all__ = ["__version__"]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""praisonai_code.cli: terminal agent CLI package.
|
|
2
|
+
|
|
3
|
+
Sub-packages are moved here incrementally (see parent migration issue). During
|
|
4
|
+
the migration, old import paths under ``praisonai.cli`` remain valid through
|
|
5
|
+
shims in the main package, and not-yet-moved siblings (``configuration``,
|
|
6
|
+
``utils``, ``session``, ``features``) are forwarded back to ``praisonai.cli``
|
|
7
|
+
via a temporary meta-path shim.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from ._forward_shim import install as _install_forward_shim
|
|
11
|
+
|
|
12
|
+
_install_forward_shim()
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""Temporary forward shims removed in C5 — configuration, session, and utils
|
|
2
|
+
now live in ``praisonai_code.cli``. Bot-channel feature modules remain under
|
|
3
|
+
``praisonai.cli.features`` and are reached via that package's ``__path__`` extension.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def install() -> None:
|
|
10
|
+
"""No-op — forward shims no longer required after C5."""
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Canonical filesystem paths for PraisonAI user state.
|
|
2
|
+
|
|
3
|
+
Mirrors the conventions used by ``hermes-agent`` (``~/.hermes``) and
|
|
4
|
+
``openclaw`` (``~/.openclaw``): one user-home directory per tool, with
|
|
5
|
+
configurable overrides via environment variables, so ``bot.yaml`` and
|
|
6
|
+
``.env`` don't pollute whatever working directory the user happened to
|
|
7
|
+
run ``praisonai onboard`` from.
|
|
8
|
+
|
|
9
|
+
Layout::
|
|
10
|
+
|
|
11
|
+
~/.praisonai/
|
|
12
|
+
├── .env # secrets (chmod 600) — managed by onboard
|
|
13
|
+
├── bot.yaml # default bot / gateway config
|
|
14
|
+
└── logs/ # daemon stdout / stderr (created by launchd helper)
|
|
15
|
+
|
|
16
|
+
Overrides (first match wins for each key):
|
|
17
|
+
|
|
18
|
+
* ``PRAISONAI_HOME`` — full path for the directory (e.g. Nix store)
|
|
19
|
+
* ``PRAISONAI_ENV_FILE`` — full path for the ``.env`` file
|
|
20
|
+
* ``PRAISONAI_BOT_CONFIG`` — full path for the default ``bot.yaml``
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
import os
|
|
26
|
+
from pathlib import Path
|
|
27
|
+
|
|
28
|
+
__all__ = [
|
|
29
|
+
"praison_home",
|
|
30
|
+
"default_env_file",
|
|
31
|
+
"default_bot_config_path",
|
|
32
|
+
"resolve_bot_config_path",
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def praison_home() -> Path:
|
|
37
|
+
"""Return the canonical PraisonAI home directory.
|
|
38
|
+
|
|
39
|
+
Honours ``PRAISONAI_HOME`` so packaging systems (Nix, Docker) can
|
|
40
|
+
relocate state. Defaults to ``~/.praisonai``.
|
|
41
|
+
"""
|
|
42
|
+
override = os.environ.get("PRAISONAI_HOME")
|
|
43
|
+
return Path(override).expanduser() if override else Path.home() / ".praisonai"
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def default_env_file() -> Path:
|
|
47
|
+
"""Return the path to the canonical ``.env`` file."""
|
|
48
|
+
override = os.environ.get("PRAISONAI_ENV_FILE")
|
|
49
|
+
return Path(override).expanduser() if override else praison_home() / ".env"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def default_bot_config_path() -> Path:
|
|
53
|
+
"""Return the path where ``praisonai onboard`` writes ``bot.yaml``.
|
|
54
|
+
|
|
55
|
+
Users can force a custom path with ``PRAISONAI_BOT_CONFIG``.
|
|
56
|
+
"""
|
|
57
|
+
override = os.environ.get("PRAISONAI_BOT_CONFIG")
|
|
58
|
+
return Path(override).expanduser() if override else praison_home() / "bot.yaml"
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def resolve_bot_config_path(cli_value: str = "bot.yaml") -> str:
|
|
62
|
+
"""Resolve the bot config path for CLI commands with sensible fallback.
|
|
63
|
+
|
|
64
|
+
Precedence:
|
|
65
|
+
|
|
66
|
+
1. ``cli_value`` if it is not the sentinel ``"bot.yaml"`` (i.e. user
|
|
67
|
+
passed an explicit ``--config X``).
|
|
68
|
+
2. ``./bot.yaml`` if it exists in the current working directory
|
|
69
|
+
(back-compat for projects that already keep bot.yaml checked in).
|
|
70
|
+
3. ``~/.praisonai/bot.yaml`` (or ``PRAISONAI_BOT_CONFIG``) — the
|
|
71
|
+
canonical location written by ``praisonai onboard``.
|
|
72
|
+
4. Fall back to ``cli_value`` unchanged so existing error messages
|
|
73
|
+
("config not found at bot.yaml") keep working.
|
|
74
|
+
"""
|
|
75
|
+
# (1) explicit override from the caller
|
|
76
|
+
if cli_value and cli_value != "bot.yaml":
|
|
77
|
+
return cli_value
|
|
78
|
+
# (2) honour an existing cwd file (back-compat)
|
|
79
|
+
cwd_path = Path.cwd() / "bot.yaml"
|
|
80
|
+
if cwd_path.is_file():
|
|
81
|
+
return str(cwd_path)
|
|
82
|
+
# (3) canonical home location
|
|
83
|
+
home_path = default_bot_config_path()
|
|
84
|
+
if home_path.is_file():
|
|
85
|
+
return str(home_path)
|
|
86
|
+
# (4) give up — return the caller's value so their own error handling
|
|
87
|
+
# surfaces a useful "not found" message.
|
|
88
|
+
return cli_value
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# praisonai/cli/_warnings.py
|
|
2
|
+
"""Lightweight warning filter support for CLI usage.
|
|
3
|
+
|
|
4
|
+
This module contains self-contained warning filter functions that were
|
|
5
|
+
previously in cli/main.py. Extracted to avoid importing the heavy 7000-line
|
|
6
|
+
main.py module (with its yaml/rich/dotenv dependencies) just to set up
|
|
7
|
+
warning filters.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import warnings
|
|
11
|
+
import atexit
|
|
12
|
+
|
|
13
|
+
_SUPPRESSED_PATTERNS = (
|
|
14
|
+
"Pydantic serializer warnings",
|
|
15
|
+
"PydanticSerializationUnexpectedValue",
|
|
16
|
+
"Expected ", # Narrowed from just "Expected" to avoid false positives
|
|
17
|
+
"StreamingChoices",
|
|
18
|
+
"serialized value may not be as expected",
|
|
19
|
+
"duckduckgo_search",
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
_installed = False
|
|
23
|
+
_original_showwarning = None
|
|
24
|
+
_original_filters = None
|
|
25
|
+
|
|
26
|
+
def install_warning_filters() -> None:
|
|
27
|
+
"""Install PraisonAI's noise filters. Idempotent. CLI-only."""
|
|
28
|
+
global _installed, _original_showwarning, _original_filters
|
|
29
|
+
if _installed:
|
|
30
|
+
return
|
|
31
|
+
_original_showwarning = warnings.showwarning
|
|
32
|
+
_original_filters = list(warnings.filters)
|
|
33
|
+
|
|
34
|
+
# Install filterwarnings for common patterns
|
|
35
|
+
for pattern in _SUPPRESSED_PATTERNS:
|
|
36
|
+
warnings.filterwarnings("ignore", message=f".*{pattern}.*")
|
|
37
|
+
warnings.filterwarnings("ignore", category=UserWarning, module="pydantic.*")
|
|
38
|
+
|
|
39
|
+
def _filtered_showwarning(message, category, filename, lineno, file=None, line=None):
|
|
40
|
+
msg_str = str(message)
|
|
41
|
+
if any(pattern in msg_str for pattern in _SUPPRESSED_PATTERNS):
|
|
42
|
+
return
|
|
43
|
+
if category is UserWarning and "pydantic" in filename.lower():
|
|
44
|
+
return
|
|
45
|
+
_original_showwarning(message, category, filename, lineno, file, line)
|
|
46
|
+
|
|
47
|
+
warnings.showwarning = _filtered_showwarning
|
|
48
|
+
atexit.register(_uninstall_warning_filters)
|
|
49
|
+
_installed = True
|
|
50
|
+
|
|
51
|
+
def _uninstall_warning_filters() -> None:
|
|
52
|
+
"""Restore original warnings behavior on exit."""
|
|
53
|
+
global _installed, _original_filters, _original_showwarning
|
|
54
|
+
if _installed and _original_showwarning is not None:
|
|
55
|
+
warnings.showwarning = _original_showwarning
|
|
56
|
+
if _original_filters is not None:
|
|
57
|
+
warnings.filters[:] = _original_filters
|
|
58
|
+
_installed = False
|