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,568 @@
|
|
|
1
|
+
"""
|
|
2
|
+
CLI Tools Adapter
|
|
3
|
+
|
|
4
|
+
Maps PraisonAI CLI features to MCP tools:
|
|
5
|
+
- Workflow management
|
|
6
|
+
- Rules management
|
|
7
|
+
- Hooks management
|
|
8
|
+
- Session management
|
|
9
|
+
- Todo management
|
|
10
|
+
- Docs management
|
|
11
|
+
- Schedule management
|
|
12
|
+
- Profile management
|
|
13
|
+
- Deploy management
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import logging
|
|
17
|
+
from typing import Optional
|
|
18
|
+
|
|
19
|
+
from ..registry import register_tool
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def register_cli_tools() -> None:
|
|
25
|
+
"""Register CLI-based MCP tools."""
|
|
26
|
+
|
|
27
|
+
# Workflow tools
|
|
28
|
+
@register_tool("praisonai.workflow.list")
|
|
29
|
+
def workflow_list() -> str:
|
|
30
|
+
"""List available workflows."""
|
|
31
|
+
try:
|
|
32
|
+
import glob
|
|
33
|
+
workflows = []
|
|
34
|
+
for pattern in ["*.yaml", "*.yml", "agents*.yaml", "workflow*.yaml"]:
|
|
35
|
+
workflows.extend(glob.glob(pattern))
|
|
36
|
+
if not workflows:
|
|
37
|
+
return "No workflows found in current directory"
|
|
38
|
+
return f"Available workflows: {workflows}"
|
|
39
|
+
except Exception as e:
|
|
40
|
+
return f"Error: {e}"
|
|
41
|
+
|
|
42
|
+
@register_tool("praisonai.workflow.validate")
|
|
43
|
+
def workflow_validate(file_path: str) -> str:
|
|
44
|
+
"""Validate a workflow YAML file."""
|
|
45
|
+
try:
|
|
46
|
+
import yaml
|
|
47
|
+
with open(file_path, 'r') as f:
|
|
48
|
+
config = yaml.safe_load(f)
|
|
49
|
+
|
|
50
|
+
required = ["framework", "topic"]
|
|
51
|
+
missing = [k for k in required if k not in config]
|
|
52
|
+
if missing:
|
|
53
|
+
return f"Invalid workflow: missing {missing}"
|
|
54
|
+
|
|
55
|
+
return f"Workflow valid: {file_path}"
|
|
56
|
+
except yaml.YAMLError as e:
|
|
57
|
+
return f"YAML error: {e}"
|
|
58
|
+
except FileNotFoundError:
|
|
59
|
+
return f"File not found: {file_path}"
|
|
60
|
+
except Exception as e:
|
|
61
|
+
return f"Error: {e}"
|
|
62
|
+
|
|
63
|
+
@register_tool("praisonai.workflow.show")
|
|
64
|
+
def workflow_show(file_path: str) -> str:
|
|
65
|
+
"""Show workflow configuration."""
|
|
66
|
+
try:
|
|
67
|
+
with open(file_path, 'r') as f:
|
|
68
|
+
content = f.read()
|
|
69
|
+
return content
|
|
70
|
+
except FileNotFoundError:
|
|
71
|
+
return f"File not found: {file_path}"
|
|
72
|
+
except Exception as e:
|
|
73
|
+
return f"Error: {e}"
|
|
74
|
+
|
|
75
|
+
@register_tool("praisonai.workflow.auto")
|
|
76
|
+
def workflow_auto(topic: str, pattern: str = "sequential") -> str:
|
|
77
|
+
"""Auto-generate a workflow for a topic."""
|
|
78
|
+
try:
|
|
79
|
+
from praisonai.auto import AutoGenerator
|
|
80
|
+
generator = AutoGenerator(topic=topic)
|
|
81
|
+
result = generator.generate(pattern=pattern)
|
|
82
|
+
return str(result)
|
|
83
|
+
except ImportError:
|
|
84
|
+
return "Error: AutoGenerator not available"
|
|
85
|
+
except Exception as e:
|
|
86
|
+
return f"Error: {e}"
|
|
87
|
+
|
|
88
|
+
# Rules tools
|
|
89
|
+
@register_tool("praisonai.rules.list")
|
|
90
|
+
def rules_list() -> str:
|
|
91
|
+
"""List active rules."""
|
|
92
|
+
try:
|
|
93
|
+
import os
|
|
94
|
+
rules_dir = os.path.expanduser("~/.praison/rules")
|
|
95
|
+
if not os.path.exists(rules_dir):
|
|
96
|
+
return "No rules directory found"
|
|
97
|
+
rules = os.listdir(rules_dir)
|
|
98
|
+
return f"Active rules: {rules}"
|
|
99
|
+
except Exception as e:
|
|
100
|
+
return f"Error: {e}"
|
|
101
|
+
|
|
102
|
+
@register_tool("praisonai.rules.show")
|
|
103
|
+
def rules_show(rule_name: str) -> str:
|
|
104
|
+
"""Show a specific rule."""
|
|
105
|
+
try:
|
|
106
|
+
import os
|
|
107
|
+
rule_path = os.path.expanduser(f"~/.praison/rules/{rule_name}")
|
|
108
|
+
if not os.path.exists(rule_path):
|
|
109
|
+
return f"Rule not found: {rule_name}"
|
|
110
|
+
with open(rule_path, 'r') as f:
|
|
111
|
+
content = f.read()
|
|
112
|
+
return content
|
|
113
|
+
except Exception as e:
|
|
114
|
+
return f"Error: {e}"
|
|
115
|
+
|
|
116
|
+
@register_tool("praisonai.rules.create")
|
|
117
|
+
def rules_create(rule_name: str, content: str) -> str:
|
|
118
|
+
"""Create a new rule."""
|
|
119
|
+
try:
|
|
120
|
+
import os
|
|
121
|
+
rules_dir = os.path.expanduser("~/.praison/rules")
|
|
122
|
+
os.makedirs(rules_dir, exist_ok=True)
|
|
123
|
+
rule_path = os.path.join(rules_dir, rule_name)
|
|
124
|
+
with open(rule_path, 'w') as f:
|
|
125
|
+
f.write(content)
|
|
126
|
+
return f"Rule created: {rule_name}"
|
|
127
|
+
except Exception as e:
|
|
128
|
+
return f"Error: {e}"
|
|
129
|
+
|
|
130
|
+
@register_tool("praisonai.rules.delete")
|
|
131
|
+
def rules_delete(rule_name: str) -> str:
|
|
132
|
+
"""Delete a rule."""
|
|
133
|
+
try:
|
|
134
|
+
import os
|
|
135
|
+
rule_path = os.path.expanduser(f"~/.praison/rules/{rule_name}")
|
|
136
|
+
if not os.path.exists(rule_path):
|
|
137
|
+
return f"Rule not found: {rule_name}"
|
|
138
|
+
os.remove(rule_path)
|
|
139
|
+
return f"Rule deleted: {rule_name}"
|
|
140
|
+
except Exception as e:
|
|
141
|
+
return f"Error: {e}"
|
|
142
|
+
|
|
143
|
+
# Hooks tools
|
|
144
|
+
@register_tool("praisonai.hooks.list")
|
|
145
|
+
def hooks_list() -> str:
|
|
146
|
+
"""List registered hooks."""
|
|
147
|
+
try:
|
|
148
|
+
from praisonaiagents.hooks import get_hook_manager
|
|
149
|
+
manager = get_hook_manager()
|
|
150
|
+
hooks = manager.list_hooks()
|
|
151
|
+
return str(hooks)
|
|
152
|
+
except ImportError:
|
|
153
|
+
return "Error: Hooks not available"
|
|
154
|
+
except Exception as e:
|
|
155
|
+
return f"Error: {e}"
|
|
156
|
+
|
|
157
|
+
@register_tool("praisonai.hooks.stats")
|
|
158
|
+
def hooks_stats() -> str:
|
|
159
|
+
"""Get hook execution statistics."""
|
|
160
|
+
try:
|
|
161
|
+
from praisonaiagents.hooks import get_hook_manager
|
|
162
|
+
manager = get_hook_manager()
|
|
163
|
+
stats = manager.get_stats()
|
|
164
|
+
return str(stats)
|
|
165
|
+
except ImportError:
|
|
166
|
+
return "Error: Hooks not available"
|
|
167
|
+
except Exception as e:
|
|
168
|
+
return f"Error: {e}"
|
|
169
|
+
|
|
170
|
+
# Session tools
|
|
171
|
+
@register_tool("praisonai.session.list")
|
|
172
|
+
def session_list() -> str:
|
|
173
|
+
"""List active sessions."""
|
|
174
|
+
try:
|
|
175
|
+
from praisonaiagents.session import SessionManager
|
|
176
|
+
manager = SessionManager()
|
|
177
|
+
sessions = manager.list_sessions()
|
|
178
|
+
return str(sessions)
|
|
179
|
+
except ImportError:
|
|
180
|
+
return "Error: Session management not available"
|
|
181
|
+
except Exception as e:
|
|
182
|
+
return f"Error: {e}"
|
|
183
|
+
|
|
184
|
+
@register_tool("praisonai.session.info")
|
|
185
|
+
def session_info(session_id: str) -> str:
|
|
186
|
+
"""Get session information."""
|
|
187
|
+
try:
|
|
188
|
+
from praisonaiagents.session import SessionManager
|
|
189
|
+
manager = SessionManager()
|
|
190
|
+
info = manager.get_session(session_id)
|
|
191
|
+
return str(info)
|
|
192
|
+
except ImportError:
|
|
193
|
+
return "Error: Session management not available"
|
|
194
|
+
except Exception as e:
|
|
195
|
+
return f"Error: {e}"
|
|
196
|
+
|
|
197
|
+
@register_tool("praisonai.session.delete")
|
|
198
|
+
def session_delete(session_id: str) -> str:
|
|
199
|
+
"""Delete a session."""
|
|
200
|
+
try:
|
|
201
|
+
from praisonaiagents.session import SessionManager
|
|
202
|
+
manager = SessionManager()
|
|
203
|
+
manager.delete_session(session_id)
|
|
204
|
+
return f"Session deleted: {session_id}"
|
|
205
|
+
except ImportError:
|
|
206
|
+
return "Error: Session management not available"
|
|
207
|
+
except Exception as e:
|
|
208
|
+
return f"Error: {e}"
|
|
209
|
+
|
|
210
|
+
# Todo tools
|
|
211
|
+
@register_tool("praisonai.todo.list")
|
|
212
|
+
def todo_list() -> str:
|
|
213
|
+
"""List todo items."""
|
|
214
|
+
try:
|
|
215
|
+
import os
|
|
216
|
+
import json
|
|
217
|
+
todo_path = os.path.expanduser("~/.praison/todo.json")
|
|
218
|
+
if not os.path.exists(todo_path):
|
|
219
|
+
return "No todos found"
|
|
220
|
+
with open(todo_path, 'r') as f:
|
|
221
|
+
todos = json.load(f)
|
|
222
|
+
return str(todos)
|
|
223
|
+
except Exception as e:
|
|
224
|
+
return f"Error: {e}"
|
|
225
|
+
|
|
226
|
+
@register_tool("praisonai.todo.add")
|
|
227
|
+
def todo_add(content: str, priority: str = "medium") -> str:
|
|
228
|
+
"""Add a todo item."""
|
|
229
|
+
try:
|
|
230
|
+
import os
|
|
231
|
+
import json
|
|
232
|
+
import uuid
|
|
233
|
+
todo_path = os.path.expanduser("~/.praison/todo.json")
|
|
234
|
+
os.makedirs(os.path.dirname(todo_path), exist_ok=True)
|
|
235
|
+
|
|
236
|
+
todos = []
|
|
237
|
+
if os.path.exists(todo_path):
|
|
238
|
+
with open(todo_path, 'r') as f:
|
|
239
|
+
todos = json.load(f)
|
|
240
|
+
|
|
241
|
+
todo = {
|
|
242
|
+
"id": str(uuid.uuid4())[:8],
|
|
243
|
+
"content": content,
|
|
244
|
+
"priority": priority,
|
|
245
|
+
"status": "pending",
|
|
246
|
+
}
|
|
247
|
+
todos.append(todo)
|
|
248
|
+
|
|
249
|
+
with open(todo_path, 'w') as f:
|
|
250
|
+
json.dump(todos, f, indent=2)
|
|
251
|
+
|
|
252
|
+
return f"Todo added: {todo['id']}"
|
|
253
|
+
except Exception as e:
|
|
254
|
+
return f"Error: {e}"
|
|
255
|
+
|
|
256
|
+
@register_tool("praisonai.todo.complete")
|
|
257
|
+
def todo_complete(todo_id: str) -> str:
|
|
258
|
+
"""Mark a todo as complete."""
|
|
259
|
+
try:
|
|
260
|
+
import os
|
|
261
|
+
import json
|
|
262
|
+
todo_path = os.path.expanduser("~/.praison/todo.json")
|
|
263
|
+
if not os.path.exists(todo_path):
|
|
264
|
+
return "No todos found"
|
|
265
|
+
|
|
266
|
+
with open(todo_path, 'r') as f:
|
|
267
|
+
todos = json.load(f)
|
|
268
|
+
|
|
269
|
+
for todo in todos:
|
|
270
|
+
if todo.get("id") == todo_id:
|
|
271
|
+
todo["status"] = "completed"
|
|
272
|
+
break
|
|
273
|
+
else:
|
|
274
|
+
return f"Todo not found: {todo_id}"
|
|
275
|
+
|
|
276
|
+
with open(todo_path, 'w') as f:
|
|
277
|
+
json.dump(todos, f, indent=2)
|
|
278
|
+
|
|
279
|
+
return f"Todo completed: {todo_id}"
|
|
280
|
+
except Exception as e:
|
|
281
|
+
return f"Error: {e}"
|
|
282
|
+
|
|
283
|
+
@register_tool("praisonai.todo.delete")
|
|
284
|
+
def todo_delete(todo_id: str) -> str:
|
|
285
|
+
"""Delete a todo item."""
|
|
286
|
+
try:
|
|
287
|
+
import os
|
|
288
|
+
import json
|
|
289
|
+
todo_path = os.path.expanduser("~/.praison/todo.json")
|
|
290
|
+
if not os.path.exists(todo_path):
|
|
291
|
+
return "No todos found"
|
|
292
|
+
|
|
293
|
+
with open(todo_path, 'r') as f:
|
|
294
|
+
todos = json.load(f)
|
|
295
|
+
|
|
296
|
+
todos = [t for t in todos if t.get("id") != todo_id]
|
|
297
|
+
|
|
298
|
+
with open(todo_path, 'w') as f:
|
|
299
|
+
json.dump(todos, f, indent=2)
|
|
300
|
+
|
|
301
|
+
return f"Todo deleted: {todo_id}"
|
|
302
|
+
except Exception as e:
|
|
303
|
+
return f"Error: {e}"
|
|
304
|
+
|
|
305
|
+
# Tools discovery
|
|
306
|
+
@register_tool("praisonai.tools.list")
|
|
307
|
+
def tools_list() -> str:
|
|
308
|
+
"""List available tools."""
|
|
309
|
+
try:
|
|
310
|
+
from praisonaiagents.tools import get_available_tools
|
|
311
|
+
tools = get_available_tools()
|
|
312
|
+
return str(tools)
|
|
313
|
+
except ImportError:
|
|
314
|
+
return "Error: Tools module not available"
|
|
315
|
+
except Exception as e:
|
|
316
|
+
return f"Error: {e}"
|
|
317
|
+
|
|
318
|
+
@register_tool("praisonai.tools.info")
|
|
319
|
+
def tools_info(tool_name: str) -> str:
|
|
320
|
+
"""Get information about a tool."""
|
|
321
|
+
try:
|
|
322
|
+
from praisonaiagents.tools import get_tool_info
|
|
323
|
+
info = get_tool_info(tool_name)
|
|
324
|
+
return str(info)
|
|
325
|
+
except ImportError:
|
|
326
|
+
return "Error: Tools module not available"
|
|
327
|
+
except Exception as e:
|
|
328
|
+
return f"Error: {e}"
|
|
329
|
+
|
|
330
|
+
@register_tool("praisonai.tools.search")
|
|
331
|
+
def tools_search(query: str) -> str:
|
|
332
|
+
"""Search for tools by name or description."""
|
|
333
|
+
try:
|
|
334
|
+
from praisonaiagents.tools import search_tools
|
|
335
|
+
results = search_tools(query)
|
|
336
|
+
return str(results)
|
|
337
|
+
except ImportError:
|
|
338
|
+
return "Error: Tools module not available"
|
|
339
|
+
except Exception as e:
|
|
340
|
+
return f"Error: {e}"
|
|
341
|
+
|
|
342
|
+
# Schedule tools
|
|
343
|
+
@register_tool("praisonai.schedule.list")
|
|
344
|
+
def schedule_list() -> str:
|
|
345
|
+
"""List scheduled tasks."""
|
|
346
|
+
try:
|
|
347
|
+
from praisonai.agent_scheduler import AgentScheduler
|
|
348
|
+
scheduler = AgentScheduler()
|
|
349
|
+
tasks = scheduler.list_tasks()
|
|
350
|
+
return str(tasks)
|
|
351
|
+
except ImportError:
|
|
352
|
+
return "Error: Scheduler not available"
|
|
353
|
+
except Exception as e:
|
|
354
|
+
return f"Error: {e}"
|
|
355
|
+
|
|
356
|
+
@register_tool("praisonai.schedule.add")
|
|
357
|
+
def schedule_add(
|
|
358
|
+
task_name: str,
|
|
359
|
+
cron: str,
|
|
360
|
+
workflow_path: str,
|
|
361
|
+
) -> str:
|
|
362
|
+
"""Add a scheduled task."""
|
|
363
|
+
try:
|
|
364
|
+
from praisonai.agent_scheduler import AgentScheduler
|
|
365
|
+
scheduler = AgentScheduler()
|
|
366
|
+
scheduler.add_task(task_name, cron, workflow_path)
|
|
367
|
+
return f"Task scheduled: {task_name}"
|
|
368
|
+
except ImportError:
|
|
369
|
+
return "Error: Scheduler not available"
|
|
370
|
+
except Exception as e:
|
|
371
|
+
return f"Error: {e}"
|
|
372
|
+
|
|
373
|
+
@register_tool("praisonai.schedule.remove")
|
|
374
|
+
def schedule_remove(task_name: str) -> str:
|
|
375
|
+
"""Remove a scheduled task."""
|
|
376
|
+
try:
|
|
377
|
+
from praisonai.agent_scheduler import AgentScheduler
|
|
378
|
+
scheduler = AgentScheduler()
|
|
379
|
+
scheduler.remove_task(task_name)
|
|
380
|
+
return f"Task removed: {task_name}"
|
|
381
|
+
except ImportError:
|
|
382
|
+
return "Error: Scheduler not available"
|
|
383
|
+
except Exception as e:
|
|
384
|
+
return f"Error: {e}"
|
|
385
|
+
|
|
386
|
+
# Deploy tools
|
|
387
|
+
@register_tool("praisonai.deploy.validate")
|
|
388
|
+
def deploy_validate(config_path: str = "deploy.yaml") -> str:
|
|
389
|
+
"""Validate deployment configuration."""
|
|
390
|
+
try:
|
|
391
|
+
import yaml
|
|
392
|
+
with open(config_path, 'r') as f:
|
|
393
|
+
config = yaml.safe_load(f)
|
|
394
|
+
|
|
395
|
+
required = ["name", "type"]
|
|
396
|
+
missing = [k for k in required if k not in config]
|
|
397
|
+
if missing:
|
|
398
|
+
return f"Invalid config: missing {missing}"
|
|
399
|
+
|
|
400
|
+
return f"Deployment config valid: {config_path}"
|
|
401
|
+
except FileNotFoundError:
|
|
402
|
+
return f"Config not found: {config_path}"
|
|
403
|
+
except Exception as e:
|
|
404
|
+
return f"Error: {e}"
|
|
405
|
+
|
|
406
|
+
@register_tool("praisonai.deploy.status")
|
|
407
|
+
def deploy_status(deployment_name: Optional[str] = None) -> str:
|
|
408
|
+
"""Get deployment status."""
|
|
409
|
+
try:
|
|
410
|
+
from praisonai.deploy import get_deployment_status
|
|
411
|
+
status = get_deployment_status(deployment_name)
|
|
412
|
+
return str(status)
|
|
413
|
+
except ImportError:
|
|
414
|
+
return "Error: Deploy module not available"
|
|
415
|
+
except Exception as e:
|
|
416
|
+
return f"Error: {e}"
|
|
417
|
+
|
|
418
|
+
# Doctor/diagnostics tools
|
|
419
|
+
@register_tool("praisonai.doctor.env")
|
|
420
|
+
def doctor_env() -> str:
|
|
421
|
+
"""Check environment configuration."""
|
|
422
|
+
try:
|
|
423
|
+
import os
|
|
424
|
+
checks = {
|
|
425
|
+
"OPENAI_API_KEY": bool(os.environ.get("OPENAI_API_KEY")),
|
|
426
|
+
"ANTHROPIC_API_KEY": bool(os.environ.get("ANTHROPIC_API_KEY")),
|
|
427
|
+
"GOOGLE_API_KEY": bool(os.environ.get("GOOGLE_API_KEY")),
|
|
428
|
+
}
|
|
429
|
+
return str(checks)
|
|
430
|
+
except Exception as e:
|
|
431
|
+
return f"Error: {e}"
|
|
432
|
+
|
|
433
|
+
@register_tool("praisonai.doctor.config")
|
|
434
|
+
def doctor_config() -> str:
|
|
435
|
+
"""Check configuration files."""
|
|
436
|
+
try:
|
|
437
|
+
import os
|
|
438
|
+
config_files = [
|
|
439
|
+
"agents.yaml",
|
|
440
|
+
"config.yaml",
|
|
441
|
+
".env",
|
|
442
|
+
"pyproject.toml",
|
|
443
|
+
]
|
|
444
|
+
results = {}
|
|
445
|
+
for f in config_files:
|
|
446
|
+
results[f] = os.path.exists(f)
|
|
447
|
+
return str(results)
|
|
448
|
+
except Exception as e:
|
|
449
|
+
return f"Error: {e}"
|
|
450
|
+
|
|
451
|
+
@register_tool("praisonai.doctor.mcp")
|
|
452
|
+
def doctor_mcp() -> str:
|
|
453
|
+
"""Check MCP server configuration."""
|
|
454
|
+
try:
|
|
455
|
+
from ..registry import get_tool_registry, get_resource_registry, get_prompt_registry
|
|
456
|
+
|
|
457
|
+
tools = get_tool_registry().list_all()
|
|
458
|
+
resources = get_resource_registry().list_all()
|
|
459
|
+
prompts = get_prompt_registry().list_all()
|
|
460
|
+
|
|
461
|
+
return f"MCP Status: {len(tools)} tools, {len(resources)} resources, {len(prompts)} prompts"
|
|
462
|
+
except Exception as e:
|
|
463
|
+
return f"Error: {e}"
|
|
464
|
+
|
|
465
|
+
# Eval tools
|
|
466
|
+
@register_tool("praisonai.eval.accuracy")
|
|
467
|
+
def eval_accuracy(
|
|
468
|
+
agent_config: str,
|
|
469
|
+
input_text: str,
|
|
470
|
+
expected_output: str,
|
|
471
|
+
iterations: int = 3,
|
|
472
|
+
) -> str:
|
|
473
|
+
"""Run accuracy evaluation on an agent."""
|
|
474
|
+
try:
|
|
475
|
+
from praisonaiagents.eval import AccuracyEval
|
|
476
|
+
from praisonaiagents import Agent
|
|
477
|
+
|
|
478
|
+
agent = Agent.from_yaml(agent_config)
|
|
479
|
+
eval_runner = AccuracyEval(
|
|
480
|
+
agent=agent,
|
|
481
|
+
input=input_text,
|
|
482
|
+
expected_output=expected_output,
|
|
483
|
+
num_iterations=iterations,
|
|
484
|
+
)
|
|
485
|
+
result = eval_runner.run()
|
|
486
|
+
return str(result)
|
|
487
|
+
except ImportError:
|
|
488
|
+
return "Error: Eval module not available"
|
|
489
|
+
except Exception as e:
|
|
490
|
+
return f"Error: {e}"
|
|
491
|
+
|
|
492
|
+
@register_tool("praisonai.eval.performance")
|
|
493
|
+
def eval_performance(
|
|
494
|
+
agent_config: str,
|
|
495
|
+
input_text: str,
|
|
496
|
+
iterations: int = 10,
|
|
497
|
+
) -> str:
|
|
498
|
+
"""Run performance evaluation on an agent."""
|
|
499
|
+
try:
|
|
500
|
+
from praisonaiagents.eval import PerformanceEval
|
|
501
|
+
from praisonaiagents import Agent
|
|
502
|
+
|
|
503
|
+
agent = Agent.from_yaml(agent_config)
|
|
504
|
+
eval_runner = PerformanceEval(
|
|
505
|
+
func=lambda: agent.chat(input_text),
|
|
506
|
+
num_iterations=iterations,
|
|
507
|
+
)
|
|
508
|
+
result = eval_runner.run()
|
|
509
|
+
return str(result)
|
|
510
|
+
except ImportError:
|
|
511
|
+
return "Error: Eval module not available"
|
|
512
|
+
except Exception as e:
|
|
513
|
+
return f"Error: {e}"
|
|
514
|
+
|
|
515
|
+
# MCP config management
|
|
516
|
+
@register_tool("praisonai.mcp_config.list")
|
|
517
|
+
def mcp_config_list() -> str:
|
|
518
|
+
"""List MCP server configurations."""
|
|
519
|
+
try:
|
|
520
|
+
from praisonaiagents.memory.mcp_config import MCPConfigManager
|
|
521
|
+
manager = MCPConfigManager()
|
|
522
|
+
configs = manager.list_configs()
|
|
523
|
+
return str(configs)
|
|
524
|
+
except ImportError:
|
|
525
|
+
return "Error: MCP config manager not available"
|
|
526
|
+
except Exception as e:
|
|
527
|
+
return f"Error: {e}"
|
|
528
|
+
|
|
529
|
+
@register_tool("praisonai.mcp_config.show")
|
|
530
|
+
def mcp_config_show(config_name: str) -> str:
|
|
531
|
+
"""Show MCP server configuration."""
|
|
532
|
+
try:
|
|
533
|
+
from praisonaiagents.memory.mcp_config import MCPConfigManager
|
|
534
|
+
manager = MCPConfigManager()
|
|
535
|
+
config = manager.get_config(config_name)
|
|
536
|
+
return str(config)
|
|
537
|
+
except ImportError:
|
|
538
|
+
return "Error: MCP config manager not available"
|
|
539
|
+
except Exception as e:
|
|
540
|
+
return f"Error: {e}"
|
|
541
|
+
|
|
542
|
+
@register_tool("praisonai.mcp_config.enable")
|
|
543
|
+
def mcp_config_enable(config_name: str) -> str:
|
|
544
|
+
"""Enable an MCP server configuration."""
|
|
545
|
+
try:
|
|
546
|
+
from praisonaiagents.memory.mcp_config import MCPConfigManager
|
|
547
|
+
manager = MCPConfigManager()
|
|
548
|
+
manager.enable_config(config_name)
|
|
549
|
+
return f"MCP config enabled: {config_name}"
|
|
550
|
+
except ImportError:
|
|
551
|
+
return "Error: MCP config manager not available"
|
|
552
|
+
except Exception as e:
|
|
553
|
+
return f"Error: {e}"
|
|
554
|
+
|
|
555
|
+
@register_tool("praisonai.mcp_config.disable")
|
|
556
|
+
def mcp_config_disable(config_name: str) -> str:
|
|
557
|
+
"""Disable an MCP server configuration."""
|
|
558
|
+
try:
|
|
559
|
+
from praisonaiagents.memory.mcp_config import MCPConfigManager
|
|
560
|
+
manager = MCPConfigManager()
|
|
561
|
+
manager.disable_config(config_name)
|
|
562
|
+
return f"MCP config disabled: {config_name}"
|
|
563
|
+
except ImportError:
|
|
564
|
+
return "Error: MCP config manager not available"
|
|
565
|
+
except Exception as e:
|
|
566
|
+
return f"Error: {e}"
|
|
567
|
+
|
|
568
|
+
logger.info("Registered CLI MCP tools")
|