PraisonAI 3.0.0__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/__init__.py +54 -0
- praisonai/__main__.py +15 -0
- praisonai/acp/__init__.py +54 -0
- praisonai/acp/config.py +159 -0
- praisonai/acp/server.py +587 -0
- praisonai/acp/session.py +219 -0
- praisonai/adapters/__init__.py +50 -0
- praisonai/adapters/readers.py +395 -0
- praisonai/adapters/rerankers.py +315 -0
- praisonai/adapters/retrievers.py +394 -0
- praisonai/adapters/vector_stores.py +409 -0
- praisonai/agent_scheduler.py +337 -0
- praisonai/agents_generator.py +903 -0
- praisonai/api/call.py +292 -0
- praisonai/auto.py +1197 -0
- praisonai/capabilities/__init__.py +275 -0
- praisonai/capabilities/a2a.py +140 -0
- praisonai/capabilities/assistants.py +283 -0
- praisonai/capabilities/audio.py +320 -0
- praisonai/capabilities/batches.py +469 -0
- praisonai/capabilities/completions.py +336 -0
- praisonai/capabilities/container_files.py +155 -0
- praisonai/capabilities/containers.py +93 -0
- praisonai/capabilities/embeddings.py +158 -0
- praisonai/capabilities/files.py +467 -0
- praisonai/capabilities/fine_tuning.py +293 -0
- praisonai/capabilities/guardrails.py +182 -0
- praisonai/capabilities/images.py +330 -0
- praisonai/capabilities/mcp.py +190 -0
- praisonai/capabilities/messages.py +270 -0
- praisonai/capabilities/moderations.py +154 -0
- praisonai/capabilities/ocr.py +217 -0
- praisonai/capabilities/passthrough.py +204 -0
- praisonai/capabilities/rag.py +207 -0
- praisonai/capabilities/realtime.py +160 -0
- praisonai/capabilities/rerank.py +165 -0
- praisonai/capabilities/responses.py +266 -0
- praisonai/capabilities/search.py +109 -0
- praisonai/capabilities/skills.py +133 -0
- praisonai/capabilities/vector_store_files.py +334 -0
- praisonai/capabilities/vector_stores.py +304 -0
- praisonai/capabilities/videos.py +141 -0
- praisonai/chainlit_ui.py +304 -0
- praisonai/chat/__init__.py +106 -0
- praisonai/chat/app.py +125 -0
- praisonai/cli/__init__.py +26 -0
- praisonai/cli/app.py +213 -0
- praisonai/cli/commands/__init__.py +75 -0
- praisonai/cli/commands/acp.py +70 -0
- praisonai/cli/commands/completion.py +333 -0
- praisonai/cli/commands/config.py +166 -0
- praisonai/cli/commands/debug.py +142 -0
- praisonai/cli/commands/diag.py +55 -0
- praisonai/cli/commands/doctor.py +166 -0
- praisonai/cli/commands/environment.py +179 -0
- praisonai/cli/commands/lsp.py +112 -0
- praisonai/cli/commands/mcp.py +210 -0
- praisonai/cli/commands/profile.py +457 -0
- praisonai/cli/commands/run.py +228 -0
- praisonai/cli/commands/schedule.py +150 -0
- praisonai/cli/commands/serve.py +97 -0
- praisonai/cli/commands/session.py +212 -0
- praisonai/cli/commands/traces.py +145 -0
- praisonai/cli/commands/version.py +101 -0
- praisonai/cli/configuration/__init__.py +18 -0
- praisonai/cli/configuration/loader.py +353 -0
- praisonai/cli/configuration/paths.py +114 -0
- praisonai/cli/configuration/schema.py +164 -0
- praisonai/cli/features/__init__.py +268 -0
- praisonai/cli/features/acp.py +236 -0
- praisonai/cli/features/action_orchestrator.py +546 -0
- praisonai/cli/features/agent_scheduler.py +773 -0
- praisonai/cli/features/agent_tools.py +474 -0
- praisonai/cli/features/agents.py +375 -0
- praisonai/cli/features/at_mentions.py +471 -0
- praisonai/cli/features/auto_memory.py +182 -0
- praisonai/cli/features/autonomy_mode.py +490 -0
- praisonai/cli/features/background.py +356 -0
- praisonai/cli/features/base.py +168 -0
- praisonai/cli/features/capabilities.py +1326 -0
- praisonai/cli/features/checkpoints.py +338 -0
- praisonai/cli/features/code_intelligence.py +652 -0
- praisonai/cli/features/compaction.py +294 -0
- praisonai/cli/features/compare.py +534 -0
- praisonai/cli/features/cost_tracker.py +514 -0
- praisonai/cli/features/debug.py +810 -0
- praisonai/cli/features/deploy.py +517 -0
- praisonai/cli/features/diag.py +289 -0
- praisonai/cli/features/doctor/__init__.py +63 -0
- praisonai/cli/features/doctor/checks/__init__.py +24 -0
- praisonai/cli/features/doctor/checks/acp_checks.py +240 -0
- praisonai/cli/features/doctor/checks/config_checks.py +366 -0
- praisonai/cli/features/doctor/checks/db_checks.py +366 -0
- praisonai/cli/features/doctor/checks/env_checks.py +543 -0
- praisonai/cli/features/doctor/checks/lsp_checks.py +199 -0
- praisonai/cli/features/doctor/checks/mcp_checks.py +349 -0
- praisonai/cli/features/doctor/checks/memory_checks.py +268 -0
- praisonai/cli/features/doctor/checks/network_checks.py +251 -0
- praisonai/cli/features/doctor/checks/obs_checks.py +328 -0
- praisonai/cli/features/doctor/checks/performance_checks.py +235 -0
- praisonai/cli/features/doctor/checks/permissions_checks.py +259 -0
- praisonai/cli/features/doctor/checks/selftest_checks.py +322 -0
- praisonai/cli/features/doctor/checks/serve_checks.py +426 -0
- praisonai/cli/features/doctor/checks/skills_checks.py +231 -0
- praisonai/cli/features/doctor/checks/tools_checks.py +371 -0
- praisonai/cli/features/doctor/engine.py +266 -0
- praisonai/cli/features/doctor/formatters.py +310 -0
- praisonai/cli/features/doctor/handler.py +397 -0
- praisonai/cli/features/doctor/models.py +264 -0
- praisonai/cli/features/doctor/registry.py +239 -0
- praisonai/cli/features/endpoints.py +1019 -0
- praisonai/cli/features/eval.py +560 -0
- praisonai/cli/features/external_agents.py +231 -0
- praisonai/cli/features/fast_context.py +410 -0
- praisonai/cli/features/flow_display.py +566 -0
- praisonai/cli/features/git_integration.py +651 -0
- praisonai/cli/features/guardrail.py +171 -0
- praisonai/cli/features/handoff.py +185 -0
- praisonai/cli/features/hooks.py +583 -0
- praisonai/cli/features/image.py +384 -0
- praisonai/cli/features/interactive_runtime.py +585 -0
- praisonai/cli/features/interactive_tools.py +380 -0
- praisonai/cli/features/interactive_tui.py +603 -0
- praisonai/cli/features/jobs.py +632 -0
- praisonai/cli/features/knowledge.py +531 -0
- praisonai/cli/features/lite.py +244 -0
- praisonai/cli/features/lsp_cli.py +225 -0
- praisonai/cli/features/mcp.py +169 -0
- praisonai/cli/features/message_queue.py +587 -0
- praisonai/cli/features/metrics.py +211 -0
- praisonai/cli/features/n8n.py +673 -0
- praisonai/cli/features/observability.py +293 -0
- praisonai/cli/features/ollama.py +361 -0
- praisonai/cli/features/output_style.py +273 -0
- praisonai/cli/features/package.py +631 -0
- praisonai/cli/features/performance.py +308 -0
- praisonai/cli/features/persistence.py +636 -0
- praisonai/cli/features/profile.py +226 -0
- praisonai/cli/features/profiler/__init__.py +81 -0
- praisonai/cli/features/profiler/core.py +558 -0
- praisonai/cli/features/profiler/optimizations.py +652 -0
- praisonai/cli/features/profiler/suite.py +386 -0
- praisonai/cli/features/profiling.py +350 -0
- praisonai/cli/features/queue/__init__.py +73 -0
- praisonai/cli/features/queue/manager.py +395 -0
- praisonai/cli/features/queue/models.py +286 -0
- praisonai/cli/features/queue/persistence.py +564 -0
- praisonai/cli/features/queue/scheduler.py +484 -0
- praisonai/cli/features/queue/worker.py +372 -0
- praisonai/cli/features/recipe.py +1723 -0
- praisonai/cli/features/recipes.py +449 -0
- praisonai/cli/features/registry.py +229 -0
- praisonai/cli/features/repo_map.py +860 -0
- praisonai/cli/features/router.py +466 -0
- praisonai/cli/features/sandbox_executor.py +515 -0
- praisonai/cli/features/serve.py +829 -0
- praisonai/cli/features/session.py +222 -0
- praisonai/cli/features/skills.py +856 -0
- praisonai/cli/features/slash_commands.py +650 -0
- praisonai/cli/features/telemetry.py +179 -0
- praisonai/cli/features/templates.py +1384 -0
- praisonai/cli/features/thinking.py +305 -0
- praisonai/cli/features/todo.py +334 -0
- praisonai/cli/features/tools.py +680 -0
- praisonai/cli/features/tui/__init__.py +83 -0
- praisonai/cli/features/tui/app.py +580 -0
- praisonai/cli/features/tui/cli.py +566 -0
- praisonai/cli/features/tui/debug.py +511 -0
- praisonai/cli/features/tui/events.py +99 -0
- praisonai/cli/features/tui/mock_provider.py +328 -0
- praisonai/cli/features/tui/orchestrator.py +652 -0
- praisonai/cli/features/tui/screens/__init__.py +50 -0
- praisonai/cli/features/tui/screens/main.py +245 -0
- praisonai/cli/features/tui/screens/queue.py +174 -0
- praisonai/cli/features/tui/screens/session.py +124 -0
- praisonai/cli/features/tui/screens/settings.py +148 -0
- praisonai/cli/features/tui/widgets/__init__.py +56 -0
- praisonai/cli/features/tui/widgets/chat.py +261 -0
- praisonai/cli/features/tui/widgets/composer.py +224 -0
- praisonai/cli/features/tui/widgets/queue_panel.py +200 -0
- praisonai/cli/features/tui/widgets/status.py +167 -0
- praisonai/cli/features/tui/widgets/tool_panel.py +248 -0
- praisonai/cli/features/workflow.py +720 -0
- praisonai/cli/legacy.py +236 -0
- praisonai/cli/main.py +5559 -0
- praisonai/cli/schedule_cli.py +54 -0
- praisonai/cli/state/__init__.py +31 -0
- praisonai/cli/state/identifiers.py +161 -0
- praisonai/cli/state/sessions.py +313 -0
- praisonai/code/__init__.py +93 -0
- praisonai/code/agent_tools.py +344 -0
- praisonai/code/diff/__init__.py +21 -0
- praisonai/code/diff/diff_strategy.py +432 -0
- praisonai/code/tools/__init__.py +27 -0
- praisonai/code/tools/apply_diff.py +221 -0
- praisonai/code/tools/execute_command.py +275 -0
- praisonai/code/tools/list_files.py +274 -0
- praisonai/code/tools/read_file.py +206 -0
- praisonai/code/tools/search_replace.py +248 -0
- praisonai/code/tools/write_file.py +217 -0
- praisonai/code/utils/__init__.py +46 -0
- praisonai/code/utils/file_utils.py +307 -0
- praisonai/code/utils/ignore_utils.py +308 -0
- praisonai/code/utils/text_utils.py +276 -0
- praisonai/db/__init__.py +64 -0
- praisonai/db/adapter.py +531 -0
- praisonai/deploy/__init__.py +62 -0
- praisonai/deploy/api.py +231 -0
- praisonai/deploy/docker.py +454 -0
- praisonai/deploy/doctor.py +367 -0
- praisonai/deploy/main.py +327 -0
- praisonai/deploy/models.py +179 -0
- praisonai/deploy/providers/__init__.py +33 -0
- praisonai/deploy/providers/aws.py +331 -0
- praisonai/deploy/providers/azure.py +358 -0
- praisonai/deploy/providers/base.py +101 -0
- praisonai/deploy/providers/gcp.py +314 -0
- praisonai/deploy/schema.py +208 -0
- praisonai/deploy.py +185 -0
- praisonai/endpoints/__init__.py +53 -0
- praisonai/endpoints/a2u_server.py +410 -0
- praisonai/endpoints/discovery.py +165 -0
- praisonai/endpoints/providers/__init__.py +28 -0
- praisonai/endpoints/providers/a2a.py +253 -0
- praisonai/endpoints/providers/a2u.py +208 -0
- praisonai/endpoints/providers/agents_api.py +171 -0
- praisonai/endpoints/providers/base.py +231 -0
- praisonai/endpoints/providers/mcp.py +263 -0
- praisonai/endpoints/providers/recipe.py +206 -0
- praisonai/endpoints/providers/tools_mcp.py +150 -0
- praisonai/endpoints/registry.py +131 -0
- praisonai/endpoints/server.py +161 -0
- praisonai/inbuilt_tools/__init__.py +24 -0
- praisonai/inbuilt_tools/autogen_tools.py +117 -0
- praisonai/inc/__init__.py +2 -0
- praisonai/inc/config.py +96 -0
- praisonai/inc/models.py +155 -0
- praisonai/integrations/__init__.py +56 -0
- praisonai/integrations/base.py +303 -0
- praisonai/integrations/claude_code.py +270 -0
- praisonai/integrations/codex_cli.py +255 -0
- praisonai/integrations/cursor_cli.py +195 -0
- praisonai/integrations/gemini_cli.py +222 -0
- praisonai/jobs/__init__.py +67 -0
- praisonai/jobs/executor.py +425 -0
- praisonai/jobs/models.py +230 -0
- praisonai/jobs/router.py +314 -0
- praisonai/jobs/server.py +186 -0
- praisonai/jobs/store.py +203 -0
- praisonai/llm/__init__.py +66 -0
- praisonai/llm/registry.py +382 -0
- praisonai/mcp_server/__init__.py +152 -0
- praisonai/mcp_server/adapters/__init__.py +74 -0
- praisonai/mcp_server/adapters/agents.py +128 -0
- praisonai/mcp_server/adapters/capabilities.py +168 -0
- praisonai/mcp_server/adapters/cli_tools.py +568 -0
- praisonai/mcp_server/adapters/extended_capabilities.py +462 -0
- praisonai/mcp_server/adapters/knowledge.py +93 -0
- praisonai/mcp_server/adapters/memory.py +104 -0
- praisonai/mcp_server/adapters/prompts.py +306 -0
- praisonai/mcp_server/adapters/resources.py +124 -0
- praisonai/mcp_server/adapters/tools_bridge.py +280 -0
- praisonai/mcp_server/auth/__init__.py +48 -0
- praisonai/mcp_server/auth/api_key.py +291 -0
- praisonai/mcp_server/auth/oauth.py +460 -0
- praisonai/mcp_server/auth/oidc.py +289 -0
- praisonai/mcp_server/auth/scopes.py +260 -0
- praisonai/mcp_server/cli.py +852 -0
- praisonai/mcp_server/elicitation.py +445 -0
- praisonai/mcp_server/icons.py +302 -0
- praisonai/mcp_server/recipe_adapter.py +573 -0
- praisonai/mcp_server/recipe_cli.py +824 -0
- praisonai/mcp_server/registry.py +703 -0
- praisonai/mcp_server/sampling.py +422 -0
- praisonai/mcp_server/server.py +490 -0
- praisonai/mcp_server/tasks.py +443 -0
- praisonai/mcp_server/transports/__init__.py +18 -0
- praisonai/mcp_server/transports/http_stream.py +376 -0
- praisonai/mcp_server/transports/stdio.py +132 -0
- praisonai/persistence/__init__.py +84 -0
- praisonai/persistence/config.py +238 -0
- praisonai/persistence/conversation/__init__.py +25 -0
- praisonai/persistence/conversation/async_mysql.py +427 -0
- praisonai/persistence/conversation/async_postgres.py +410 -0
- praisonai/persistence/conversation/async_sqlite.py +371 -0
- praisonai/persistence/conversation/base.py +151 -0
- praisonai/persistence/conversation/json_store.py +250 -0
- praisonai/persistence/conversation/mysql.py +387 -0
- praisonai/persistence/conversation/postgres.py +401 -0
- praisonai/persistence/conversation/singlestore.py +240 -0
- praisonai/persistence/conversation/sqlite.py +341 -0
- praisonai/persistence/conversation/supabase.py +203 -0
- praisonai/persistence/conversation/surrealdb.py +287 -0
- praisonai/persistence/factory.py +301 -0
- praisonai/persistence/hooks/__init__.py +18 -0
- praisonai/persistence/hooks/agent_hooks.py +297 -0
- praisonai/persistence/knowledge/__init__.py +26 -0
- praisonai/persistence/knowledge/base.py +144 -0
- praisonai/persistence/knowledge/cassandra.py +232 -0
- praisonai/persistence/knowledge/chroma.py +295 -0
- praisonai/persistence/knowledge/clickhouse.py +242 -0
- praisonai/persistence/knowledge/cosmosdb_vector.py +438 -0
- praisonai/persistence/knowledge/couchbase.py +286 -0
- praisonai/persistence/knowledge/lancedb.py +216 -0
- praisonai/persistence/knowledge/langchain_adapter.py +291 -0
- praisonai/persistence/knowledge/lightrag_adapter.py +212 -0
- praisonai/persistence/knowledge/llamaindex_adapter.py +256 -0
- praisonai/persistence/knowledge/milvus.py +277 -0
- praisonai/persistence/knowledge/mongodb_vector.py +306 -0
- praisonai/persistence/knowledge/pgvector.py +335 -0
- praisonai/persistence/knowledge/pinecone.py +253 -0
- praisonai/persistence/knowledge/qdrant.py +301 -0
- praisonai/persistence/knowledge/redis_vector.py +291 -0
- praisonai/persistence/knowledge/singlestore_vector.py +299 -0
- praisonai/persistence/knowledge/surrealdb_vector.py +309 -0
- praisonai/persistence/knowledge/upstash_vector.py +266 -0
- praisonai/persistence/knowledge/weaviate.py +223 -0
- praisonai/persistence/migrations/__init__.py +10 -0
- praisonai/persistence/migrations/manager.py +251 -0
- praisonai/persistence/orchestrator.py +406 -0
- praisonai/persistence/state/__init__.py +21 -0
- praisonai/persistence/state/async_mongodb.py +200 -0
- praisonai/persistence/state/base.py +107 -0
- praisonai/persistence/state/dynamodb.py +226 -0
- praisonai/persistence/state/firestore.py +175 -0
- praisonai/persistence/state/gcs.py +155 -0
- praisonai/persistence/state/memory.py +245 -0
- praisonai/persistence/state/mongodb.py +158 -0
- praisonai/persistence/state/redis.py +190 -0
- praisonai/persistence/state/upstash.py +144 -0
- praisonai/persistence/tests/__init__.py +3 -0
- praisonai/persistence/tests/test_all_backends.py +633 -0
- praisonai/profiler.py +1214 -0
- praisonai/recipe/__init__.py +134 -0
- praisonai/recipe/bridge.py +278 -0
- praisonai/recipe/core.py +893 -0
- praisonai/recipe/exceptions.py +54 -0
- praisonai/recipe/history.py +402 -0
- praisonai/recipe/models.py +266 -0
- praisonai/recipe/operations.py +440 -0
- praisonai/recipe/policy.py +422 -0
- praisonai/recipe/registry.py +849 -0
- praisonai/recipe/runtime.py +214 -0
- praisonai/recipe/security.py +711 -0
- praisonai/recipe/serve.py +859 -0
- praisonai/recipe/server.py +613 -0
- praisonai/scheduler/__init__.py +45 -0
- praisonai/scheduler/agent_scheduler.py +552 -0
- praisonai/scheduler/base.py +124 -0
- praisonai/scheduler/daemon_manager.py +225 -0
- praisonai/scheduler/state_manager.py +155 -0
- praisonai/scheduler/yaml_loader.py +193 -0
- praisonai/scheduler.py +194 -0
- praisonai/setup/__init__.py +1 -0
- praisonai/setup/build.py +21 -0
- praisonai/setup/post_install.py +23 -0
- praisonai/setup/setup_conda_env.py +25 -0
- praisonai/setup.py +16 -0
- praisonai/templates/__init__.py +116 -0
- praisonai/templates/cache.py +364 -0
- praisonai/templates/dependency_checker.py +358 -0
- praisonai/templates/discovery.py +391 -0
- praisonai/templates/loader.py +564 -0
- praisonai/templates/registry.py +511 -0
- praisonai/templates/resolver.py +206 -0
- praisonai/templates/security.py +327 -0
- praisonai/templates/tool_override.py +498 -0
- praisonai/templates/tools_doctor.py +256 -0
- praisonai/test.py +105 -0
- praisonai/train.py +562 -0
- praisonai/train_vision.py +306 -0
- praisonai/ui/agents.py +824 -0
- praisonai/ui/callbacks.py +57 -0
- praisonai/ui/chainlit_compat.py +246 -0
- praisonai/ui/chat.py +532 -0
- praisonai/ui/code.py +717 -0
- praisonai/ui/colab.py +474 -0
- praisonai/ui/colab_chainlit.py +81 -0
- praisonai/ui/components/aicoder.py +284 -0
- praisonai/ui/context.py +283 -0
- praisonai/ui/database_config.py +56 -0
- praisonai/ui/db.py +294 -0
- praisonai/ui/realtime.py +488 -0
- praisonai/ui/realtimeclient/__init__.py +756 -0
- praisonai/ui/realtimeclient/tools.py +242 -0
- praisonai/ui/sql_alchemy.py +710 -0
- praisonai/upload_vision.py +140 -0
- praisonai/version.py +1 -0
- praisonai-3.0.0.dist-info/METADATA +3493 -0
- praisonai-3.0.0.dist-info/RECORD +393 -0
- praisonai-3.0.0.dist-info/WHEEL +5 -0
- praisonai-3.0.0.dist-info/entry_points.txt +4 -0
- praisonai-3.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Configuration paths for PraisonAI CLI.
|
|
3
|
+
|
|
4
|
+
Defines standard locations for configuration files.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import List, Optional
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def get_user_config_dir() -> Path:
|
|
13
|
+
"""Get user configuration directory (~/.praison/)."""
|
|
14
|
+
return Path.home() / ".praison"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def get_user_config_path() -> Path:
|
|
18
|
+
"""Get user configuration file path (~/.praison/config.toml)."""
|
|
19
|
+
return get_user_config_dir() / "config.toml"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def get_project_config_dir(project_root: Optional[Path] = None) -> Path:
|
|
23
|
+
"""Get project configuration directory (.praison/)."""
|
|
24
|
+
root = project_root or Path.cwd()
|
|
25
|
+
return root / ".praison"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_project_config_path(project_root: Optional[Path] = None) -> Path:
|
|
29
|
+
"""Get project configuration file path (.praison/config.toml)."""
|
|
30
|
+
return get_project_config_dir(project_root) / "config.toml"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def get_sessions_dir() -> Path:
|
|
34
|
+
"""Get sessions directory (~/.praison/sessions/)."""
|
|
35
|
+
return get_user_config_dir() / "sessions"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def get_traces_dir() -> Path:
|
|
39
|
+
"""Get traces directory (~/.praison/traces/)."""
|
|
40
|
+
return get_user_config_dir() / "traces"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def get_logs_dir() -> Path:
|
|
44
|
+
"""Get logs directory (~/.praison/logs/)."""
|
|
45
|
+
return get_user_config_dir() / "logs"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def get_cache_dir() -> Path:
|
|
49
|
+
"""Get cache directory (~/.praison/cache/)."""
|
|
50
|
+
return get_user_config_dir() / "cache"
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def get_config_paths(project_root: Optional[Path] = None) -> List[Path]:
|
|
54
|
+
"""
|
|
55
|
+
Get all configuration file paths in precedence order (highest first).
|
|
56
|
+
|
|
57
|
+
Precedence:
|
|
58
|
+
1. Project config: .praison/config.toml
|
|
59
|
+
2. User config: ~/.praison/config.toml
|
|
60
|
+
|
|
61
|
+
Returns:
|
|
62
|
+
List of paths in precedence order
|
|
63
|
+
"""
|
|
64
|
+
paths = []
|
|
65
|
+
|
|
66
|
+
# Project config (highest precedence)
|
|
67
|
+
project_config = get_project_config_path(project_root)
|
|
68
|
+
if project_config.exists():
|
|
69
|
+
paths.append(project_config)
|
|
70
|
+
|
|
71
|
+
# User config
|
|
72
|
+
user_config = get_user_config_path()
|
|
73
|
+
if user_config.exists():
|
|
74
|
+
paths.append(user_config)
|
|
75
|
+
|
|
76
|
+
return paths
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def ensure_config_dirs() -> None:
|
|
80
|
+
"""Ensure all configuration directories exist."""
|
|
81
|
+
dirs = [
|
|
82
|
+
get_user_config_dir(),
|
|
83
|
+
get_sessions_dir(),
|
|
84
|
+
get_traces_dir(),
|
|
85
|
+
get_logs_dir(),
|
|
86
|
+
get_cache_dir(),
|
|
87
|
+
]
|
|
88
|
+
for d in dirs:
|
|
89
|
+
d.mkdir(parents=True, exist_ok=True)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def get_env_prefix() -> str:
|
|
93
|
+
"""Get environment variable prefix."""
|
|
94
|
+
return "PRAISONAI_"
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def env_to_config_key(env_var: str) -> Optional[str]:
|
|
98
|
+
"""
|
|
99
|
+
Convert environment variable name to config key.
|
|
100
|
+
|
|
101
|
+
Example: PRAISONAI_OUTPUT_FORMAT -> output.format
|
|
102
|
+
"""
|
|
103
|
+
prefix = get_env_prefix()
|
|
104
|
+
if not env_var.startswith(prefix):
|
|
105
|
+
return None
|
|
106
|
+
|
|
107
|
+
key = env_var[len(prefix):].lower()
|
|
108
|
+
# Convert underscores to dots for nested keys
|
|
109
|
+
# Single underscore = dot, double underscore = single underscore
|
|
110
|
+
parts = key.split("__")
|
|
111
|
+
result_parts = []
|
|
112
|
+
for part in parts:
|
|
113
|
+
result_parts.append(part.replace("_", "."))
|
|
114
|
+
return "_".join(result_parts)
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Configuration schema for PraisonAI CLI.
|
|
3
|
+
|
|
4
|
+
Defines the structure and defaults for configuration.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from dataclasses import dataclass, field
|
|
8
|
+
from typing import Any, Dict, List, Optional
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class OutputConfig:
|
|
13
|
+
"""Output configuration."""
|
|
14
|
+
format: str = "text" # text, json, stream-json
|
|
15
|
+
color: bool = True
|
|
16
|
+
verbose: bool = False
|
|
17
|
+
quiet: bool = False
|
|
18
|
+
screen_reader: bool = False
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@dataclass
|
|
22
|
+
class TracesConfig:
|
|
23
|
+
"""Traces configuration."""
|
|
24
|
+
enabled: bool = False
|
|
25
|
+
endpoint: Optional[str] = None
|
|
26
|
+
sample_rate: float = 1.0
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class MCPServerConfig:
|
|
31
|
+
"""MCP server configuration."""
|
|
32
|
+
command: str = ""
|
|
33
|
+
args: List[str] = field(default_factory=list)
|
|
34
|
+
env: Dict[str, str] = field(default_factory=dict)
|
|
35
|
+
enabled: bool = True
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@dataclass
|
|
39
|
+
class MCPConfig:
|
|
40
|
+
"""MCP configuration."""
|
|
41
|
+
servers: Dict[str, MCPServerConfig] = field(default_factory=dict)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
@dataclass
|
|
45
|
+
class ModelConfig:
|
|
46
|
+
"""Model configuration."""
|
|
47
|
+
default: str = "gpt-4o-mini"
|
|
48
|
+
temperature: float = 0.7
|
|
49
|
+
max_tokens: int = 16000
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@dataclass
|
|
53
|
+
class SessionConfig:
|
|
54
|
+
"""Session configuration."""
|
|
55
|
+
auto_save: bool = False
|
|
56
|
+
history_limit: int = 10
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@dataclass
|
|
60
|
+
class ConfigSchema:
|
|
61
|
+
"""
|
|
62
|
+
Complete configuration schema.
|
|
63
|
+
|
|
64
|
+
Represents all configurable options for PraisonAI CLI.
|
|
65
|
+
"""
|
|
66
|
+
output: OutputConfig = field(default_factory=OutputConfig)
|
|
67
|
+
traces: TracesConfig = field(default_factory=TracesConfig)
|
|
68
|
+
mcp: MCPConfig = field(default_factory=MCPConfig)
|
|
69
|
+
model: ModelConfig = field(default_factory=ModelConfig)
|
|
70
|
+
session: SessionConfig = field(default_factory=SessionConfig)
|
|
71
|
+
|
|
72
|
+
# Additional settings stored as dict for flexibility
|
|
73
|
+
extra: Dict[str, Any] = field(default_factory=dict)
|
|
74
|
+
|
|
75
|
+
def to_dict(self) -> Dict[str, Any]:
|
|
76
|
+
"""Convert to dictionary."""
|
|
77
|
+
return {
|
|
78
|
+
"output": {
|
|
79
|
+
"format": self.output.format,
|
|
80
|
+
"color": self.output.color,
|
|
81
|
+
"verbose": self.output.verbose,
|
|
82
|
+
"quiet": self.output.quiet,
|
|
83
|
+
"screen_reader": self.output.screen_reader,
|
|
84
|
+
},
|
|
85
|
+
"traces": {
|
|
86
|
+
"enabled": self.traces.enabled,
|
|
87
|
+
"endpoint": self.traces.endpoint,
|
|
88
|
+
"sample_rate": self.traces.sample_rate,
|
|
89
|
+
},
|
|
90
|
+
"mcp": {
|
|
91
|
+
"servers": {
|
|
92
|
+
name: {
|
|
93
|
+
"command": server.command,
|
|
94
|
+
"args": server.args,
|
|
95
|
+
"env": server.env,
|
|
96
|
+
"enabled": server.enabled,
|
|
97
|
+
}
|
|
98
|
+
for name, server in self.mcp.servers.items()
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"model": {
|
|
102
|
+
"default": self.model.default,
|
|
103
|
+
"temperature": self.model.temperature,
|
|
104
|
+
"max_tokens": self.model.max_tokens,
|
|
105
|
+
},
|
|
106
|
+
"session": {
|
|
107
|
+
"auto_save": self.session.auto_save,
|
|
108
|
+
"history_limit": self.session.history_limit,
|
|
109
|
+
},
|
|
110
|
+
**self.extra,
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@classmethod
|
|
114
|
+
def from_dict(cls, data: Dict[str, Any]) -> "ConfigSchema":
|
|
115
|
+
"""Create from dictionary."""
|
|
116
|
+
output_data = data.get("output", {})
|
|
117
|
+
traces_data = data.get("traces", {})
|
|
118
|
+
mcp_data = data.get("mcp", {})
|
|
119
|
+
model_data = data.get("model", {})
|
|
120
|
+
session_data = data.get("session", {})
|
|
121
|
+
|
|
122
|
+
# Extract known keys
|
|
123
|
+
known_keys = {"output", "traces", "mcp", "model", "session"}
|
|
124
|
+
extra = {k: v for k, v in data.items() if k not in known_keys}
|
|
125
|
+
|
|
126
|
+
# Parse MCP servers
|
|
127
|
+
mcp_servers = {}
|
|
128
|
+
for name, server_data in mcp_data.get("servers", {}).items():
|
|
129
|
+
mcp_servers[name] = MCPServerConfig(
|
|
130
|
+
command=server_data.get("command", ""),
|
|
131
|
+
args=server_data.get("args", []),
|
|
132
|
+
env=server_data.get("env", {}),
|
|
133
|
+
enabled=server_data.get("enabled", True),
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
return cls(
|
|
137
|
+
output=OutputConfig(
|
|
138
|
+
format=output_data.get("format", "text"),
|
|
139
|
+
color=output_data.get("color", True),
|
|
140
|
+
verbose=output_data.get("verbose", False),
|
|
141
|
+
quiet=output_data.get("quiet", False),
|
|
142
|
+
screen_reader=output_data.get("screen_reader", False),
|
|
143
|
+
),
|
|
144
|
+
traces=TracesConfig(
|
|
145
|
+
enabled=traces_data.get("enabled", False),
|
|
146
|
+
endpoint=traces_data.get("endpoint"),
|
|
147
|
+
sample_rate=traces_data.get("sample_rate", 1.0),
|
|
148
|
+
),
|
|
149
|
+
mcp=MCPConfig(servers=mcp_servers),
|
|
150
|
+
model=ModelConfig(
|
|
151
|
+
default=model_data.get("default", "gpt-4o-mini"),
|
|
152
|
+
temperature=model_data.get("temperature", 0.7),
|
|
153
|
+
max_tokens=model_data.get("max_tokens", 16000),
|
|
154
|
+
),
|
|
155
|
+
session=SessionConfig(
|
|
156
|
+
auto_save=session_data.get("auto_save", False),
|
|
157
|
+
history_limit=session_data.get("history_limit", 10),
|
|
158
|
+
),
|
|
159
|
+
extra=extra,
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# Default configuration
|
|
164
|
+
DEFAULT_CONFIG = ConfigSchema()
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CLI Features Module for PraisonAI
|
|
3
|
+
|
|
4
|
+
This module contains modular CLI feature handlers that extend the base CLI functionality.
|
|
5
|
+
Each feature is implemented as a separate module for maintainability and testability.
|
|
6
|
+
|
|
7
|
+
Features:
|
|
8
|
+
- guardrail: Output validation using LLM guardrails
|
|
9
|
+
- metrics: Token usage and cost tracking
|
|
10
|
+
- image: Image processing with ImageAgent
|
|
11
|
+
- telemetry: Usage monitoring and analytics
|
|
12
|
+
- mcp: Model Context Protocol server integration
|
|
13
|
+
- fast_context: Codebase search capability
|
|
14
|
+
- knowledge: RAG/vector store management
|
|
15
|
+
- session: Session management for multi-turn conversations
|
|
16
|
+
- tools: Tool registry management
|
|
17
|
+
- handoff: Agent-to-agent delegation
|
|
18
|
+
- auto_memory: Automatic memory extraction
|
|
19
|
+
- todo: Todo list management
|
|
20
|
+
- router: Smart model selection
|
|
21
|
+
- flow_display: Visual workflow tracking
|
|
22
|
+
- workflow: YAML workflow management
|
|
23
|
+
- n8n: Export workflows to n8n visual editor
|
|
24
|
+
- external_agents: External AI CLI tool integrations (Claude, Gemini, Codex, Cursor)
|
|
25
|
+
- slash_commands: Interactive slash commands (/help, /cost, /plan, etc.)
|
|
26
|
+
- autonomy_mode: Autonomy levels (suggest, auto-edit, full-auto)
|
|
27
|
+
- cost_tracker: Real-time cost and token tracking
|
|
28
|
+
- message_queue: Message queuing while agent is processing
|
|
29
|
+
- at_mentions: @ mention autocomplete for files and directories
|
|
30
|
+
- compare: CLI command comparison feature
|
|
31
|
+
- eval: Agent evaluation framework (accuracy, performance, reliability, criteria)
|
|
32
|
+
- hooks: Hook system for intercepting and modifying agent behavior
|
|
33
|
+
- checkpoints: Shadow git checkpointing for file-level undo/restore
|
|
34
|
+
- background: Background agent task execution and management
|
|
35
|
+
- thinking: Thinking budget management
|
|
36
|
+
- compaction: Context compaction settings
|
|
37
|
+
- output_style: Output style configuration
|
|
38
|
+
- ollama: Ollama provider and Weak-Model-Proof execution
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
# Type hints available for IDE support
|
|
42
|
+
|
|
43
|
+
# Lazy imports to avoid performance impact
|
|
44
|
+
__all__ = [
|
|
45
|
+
'GuardrailHandler',
|
|
46
|
+
'MetricsHandler',
|
|
47
|
+
'ImageHandler',
|
|
48
|
+
'TelemetryHandler',
|
|
49
|
+
'MCPHandler',
|
|
50
|
+
'FastContextHandler',
|
|
51
|
+
'KnowledgeHandler',
|
|
52
|
+
'SessionHandler',
|
|
53
|
+
'ToolsHandler',
|
|
54
|
+
'HandoffHandler',
|
|
55
|
+
'AutoMemoryHandler',
|
|
56
|
+
'TodoHandler',
|
|
57
|
+
'RouterHandler',
|
|
58
|
+
'FlowDisplayHandler',
|
|
59
|
+
'WorkflowHandler',
|
|
60
|
+
'N8nHandler',
|
|
61
|
+
'ExternalAgentsHandler',
|
|
62
|
+
# New CLI enhancement features
|
|
63
|
+
'SlashCommandHandler',
|
|
64
|
+
'AutonomyModeHandler',
|
|
65
|
+
'CostTrackerHandler',
|
|
66
|
+
'RepoMapHandler',
|
|
67
|
+
'InteractiveTUIHandler',
|
|
68
|
+
'GitIntegrationHandler',
|
|
69
|
+
'SandboxExecutorHandler',
|
|
70
|
+
'MessageQueueHandler',
|
|
71
|
+
# @ mention autocomplete
|
|
72
|
+
'AtMentionCompleter',
|
|
73
|
+
'CombinedCompleter',
|
|
74
|
+
'FileSearchService',
|
|
75
|
+
# Evaluation
|
|
76
|
+
'EvalHandler',
|
|
77
|
+
# Compare feature
|
|
78
|
+
'CompareHandler',
|
|
79
|
+
# Agent Skills
|
|
80
|
+
'SkillsHandler',
|
|
81
|
+
# Hooks
|
|
82
|
+
'HooksHandler',
|
|
83
|
+
# Checkpoints
|
|
84
|
+
'CheckpointsHandler',
|
|
85
|
+
# Background
|
|
86
|
+
'BackgroundHandler',
|
|
87
|
+
# Thinking, Compaction, Output Style
|
|
88
|
+
'ThinkingHandler',
|
|
89
|
+
'CompactionHandler',
|
|
90
|
+
'OutputStyleHandler',
|
|
91
|
+
# Ollama + WMP
|
|
92
|
+
'OllamaHandler',
|
|
93
|
+
# Capabilities (LiteLLM endpoint parity)
|
|
94
|
+
'CapabilitiesHandler',
|
|
95
|
+
# Performance benchmarking
|
|
96
|
+
'PerformanceHandler',
|
|
97
|
+
# Lite agent (BYO-LLM)
|
|
98
|
+
'LiteHandler',
|
|
99
|
+
# Agent-centric tools (LSP/ACP powered)
|
|
100
|
+
'create_agent_centric_tools',
|
|
101
|
+
'InteractiveRuntime',
|
|
102
|
+
'RuntimeConfig',
|
|
103
|
+
'CodeIntelligenceRouter',
|
|
104
|
+
'ActionOrchestrator',
|
|
105
|
+
# Interactive tools provider (canonical source)
|
|
106
|
+
'get_interactive_tools',
|
|
107
|
+
'resolve_tool_groups',
|
|
108
|
+
'ToolConfig',
|
|
109
|
+
'TOOL_GROUPS',
|
|
110
|
+
]
|
|
111
|
+
|
|
112
|
+
def __getattr__(name):
|
|
113
|
+
"""Lazy load handlers to minimize import overhead."""
|
|
114
|
+
if name == 'GuardrailHandler':
|
|
115
|
+
from .guardrail import GuardrailHandler
|
|
116
|
+
return GuardrailHandler
|
|
117
|
+
elif name == 'MetricsHandler':
|
|
118
|
+
from .metrics import MetricsHandler
|
|
119
|
+
return MetricsHandler
|
|
120
|
+
elif name == 'ImageHandler':
|
|
121
|
+
from .image import ImageHandler
|
|
122
|
+
return ImageHandler
|
|
123
|
+
elif name == 'TelemetryHandler':
|
|
124
|
+
from .telemetry import TelemetryHandler
|
|
125
|
+
return TelemetryHandler
|
|
126
|
+
elif name == 'MCPHandler':
|
|
127
|
+
from .mcp import MCPHandler
|
|
128
|
+
return MCPHandler
|
|
129
|
+
elif name == 'FastContextHandler':
|
|
130
|
+
from .fast_context import FastContextHandler
|
|
131
|
+
return FastContextHandler
|
|
132
|
+
elif name == 'KnowledgeHandler':
|
|
133
|
+
from .knowledge import KnowledgeHandler
|
|
134
|
+
return KnowledgeHandler
|
|
135
|
+
elif name == 'SessionHandler':
|
|
136
|
+
from .session import SessionHandler
|
|
137
|
+
return SessionHandler
|
|
138
|
+
elif name == 'ToolsHandler':
|
|
139
|
+
from .tools import ToolsHandler
|
|
140
|
+
return ToolsHandler
|
|
141
|
+
elif name == 'HandoffHandler':
|
|
142
|
+
from .handoff import HandoffHandler
|
|
143
|
+
return HandoffHandler
|
|
144
|
+
elif name == 'AutoMemoryHandler':
|
|
145
|
+
from .auto_memory import AutoMemoryHandler
|
|
146
|
+
return AutoMemoryHandler
|
|
147
|
+
elif name == 'TodoHandler':
|
|
148
|
+
from .todo import TodoHandler
|
|
149
|
+
return TodoHandler
|
|
150
|
+
elif name == 'RouterHandler':
|
|
151
|
+
from .router import RouterHandler
|
|
152
|
+
return RouterHandler
|
|
153
|
+
elif name == 'FlowDisplayHandler':
|
|
154
|
+
from .flow_display import FlowDisplayHandler
|
|
155
|
+
return FlowDisplayHandler
|
|
156
|
+
elif name == 'WorkflowHandler':
|
|
157
|
+
from .workflow import WorkflowHandler
|
|
158
|
+
return WorkflowHandler
|
|
159
|
+
elif name == 'N8nHandler':
|
|
160
|
+
from .n8n import N8nHandler
|
|
161
|
+
return N8nHandler
|
|
162
|
+
elif name == 'ExternalAgentsHandler':
|
|
163
|
+
from .external_agents import ExternalAgentsHandler
|
|
164
|
+
return ExternalAgentsHandler
|
|
165
|
+
# New CLI enhancement features
|
|
166
|
+
elif name == 'SlashCommandHandler':
|
|
167
|
+
from .slash_commands import SlashCommandHandler
|
|
168
|
+
return SlashCommandHandler
|
|
169
|
+
elif name == 'AutonomyModeHandler':
|
|
170
|
+
from .autonomy_mode import AutonomyModeHandler
|
|
171
|
+
return AutonomyModeHandler
|
|
172
|
+
elif name == 'CostTrackerHandler':
|
|
173
|
+
from .cost_tracker import CostTrackerHandler
|
|
174
|
+
return CostTrackerHandler
|
|
175
|
+
elif name == 'RepoMapHandler':
|
|
176
|
+
from .repo_map import RepoMapHandler
|
|
177
|
+
return RepoMapHandler
|
|
178
|
+
elif name == 'InteractiveTUIHandler':
|
|
179
|
+
from .interactive_tui import InteractiveTUIHandler
|
|
180
|
+
return InteractiveTUIHandler
|
|
181
|
+
elif name == 'GitIntegrationHandler':
|
|
182
|
+
from .git_integration import GitIntegrationHandler
|
|
183
|
+
return GitIntegrationHandler
|
|
184
|
+
elif name == 'SandboxExecutorHandler':
|
|
185
|
+
from .sandbox_executor import SandboxExecutorHandler
|
|
186
|
+
return SandboxExecutorHandler
|
|
187
|
+
elif name == 'MessageQueueHandler':
|
|
188
|
+
from .message_queue import MessageQueueHandler
|
|
189
|
+
return MessageQueueHandler
|
|
190
|
+
# @ mention autocomplete
|
|
191
|
+
elif name == 'AtMentionCompleter':
|
|
192
|
+
from .at_mentions import AtMentionCompleter
|
|
193
|
+
return AtMentionCompleter
|
|
194
|
+
elif name == 'CombinedCompleter':
|
|
195
|
+
from .at_mentions import CombinedCompleter
|
|
196
|
+
return CombinedCompleter
|
|
197
|
+
elif name == 'FileSearchService':
|
|
198
|
+
from .at_mentions import FileSearchService
|
|
199
|
+
return FileSearchService
|
|
200
|
+
elif name == 'CompareHandler':
|
|
201
|
+
from .compare import CompareHandler
|
|
202
|
+
return CompareHandler
|
|
203
|
+
elif name == 'EvalHandler':
|
|
204
|
+
from .eval import EvalHandler
|
|
205
|
+
return EvalHandler
|
|
206
|
+
elif name == 'SkillsHandler':
|
|
207
|
+
from .skills import SkillsHandler
|
|
208
|
+
return SkillsHandler
|
|
209
|
+
elif name == 'HooksHandler':
|
|
210
|
+
from .hooks import HooksHandler
|
|
211
|
+
return HooksHandler
|
|
212
|
+
elif name == 'CheckpointsHandler':
|
|
213
|
+
from .checkpoints import CheckpointsHandler
|
|
214
|
+
return CheckpointsHandler
|
|
215
|
+
elif name == 'BackgroundHandler':
|
|
216
|
+
from .background import BackgroundHandler
|
|
217
|
+
return BackgroundHandler
|
|
218
|
+
elif name == 'ThinkingHandler':
|
|
219
|
+
from .thinking import ThinkingHandler
|
|
220
|
+
return ThinkingHandler
|
|
221
|
+
elif name == 'CompactionHandler':
|
|
222
|
+
from .compaction import CompactionHandler
|
|
223
|
+
return CompactionHandler
|
|
224
|
+
elif name == 'OutputStyleHandler':
|
|
225
|
+
from .output_style import OutputStyleHandler
|
|
226
|
+
return OutputStyleHandler
|
|
227
|
+
elif name == 'OllamaHandler':
|
|
228
|
+
from .ollama import OllamaHandler
|
|
229
|
+
return OllamaHandler
|
|
230
|
+
elif name == 'CapabilitiesHandler':
|
|
231
|
+
from .capabilities import CapabilitiesHandler
|
|
232
|
+
return CapabilitiesHandler
|
|
233
|
+
elif name == 'PerformanceHandler':
|
|
234
|
+
from .performance import PerformanceHandler
|
|
235
|
+
return PerformanceHandler
|
|
236
|
+
elif name == 'LiteHandler':
|
|
237
|
+
from .lite import LiteHandler
|
|
238
|
+
return LiteHandler
|
|
239
|
+
# Agent-centric tools (LSP/ACP powered)
|
|
240
|
+
elif name == 'create_agent_centric_tools':
|
|
241
|
+
from .agent_tools import create_agent_centric_tools
|
|
242
|
+
return create_agent_centric_tools
|
|
243
|
+
elif name == 'InteractiveRuntime':
|
|
244
|
+
from .interactive_runtime import InteractiveRuntime
|
|
245
|
+
return InteractiveRuntime
|
|
246
|
+
elif name == 'RuntimeConfig':
|
|
247
|
+
from .interactive_runtime import RuntimeConfig
|
|
248
|
+
return RuntimeConfig
|
|
249
|
+
elif name == 'CodeIntelligenceRouter':
|
|
250
|
+
from .code_intelligence import CodeIntelligenceRouter
|
|
251
|
+
return CodeIntelligenceRouter
|
|
252
|
+
elif name == 'ActionOrchestrator':
|
|
253
|
+
from .action_orchestrator import ActionOrchestrator
|
|
254
|
+
return ActionOrchestrator
|
|
255
|
+
# Interactive tools provider (canonical source)
|
|
256
|
+
elif name == 'get_interactive_tools':
|
|
257
|
+
from .interactive_tools import get_interactive_tools
|
|
258
|
+
return get_interactive_tools
|
|
259
|
+
elif name == 'resolve_tool_groups':
|
|
260
|
+
from .interactive_tools import resolve_tool_groups
|
|
261
|
+
return resolve_tool_groups
|
|
262
|
+
elif name == 'ToolConfig':
|
|
263
|
+
from .interactive_tools import ToolConfig
|
|
264
|
+
return ToolConfig
|
|
265
|
+
elif name == 'TOOL_GROUPS':
|
|
266
|
+
from .interactive_tools import TOOL_GROUPS
|
|
267
|
+
return TOOL_GROUPS
|
|
268
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|