mindroot 9.11.0__py3-none-any.whl → 9.13.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.
Potentially problematic release.
This version of mindroot might be problematic. Click here for more details.
- mindroot/coreplugins/admin/static/js/model-preferences-v2.js +1 -1
- mindroot/coreplugins/home/templates/home.jinja2 +1 -0
- mindroot/docs/Makefile +20 -0
- mindroot/docs/_build/doctrees/chat_with_assistant.doctree +0 -0
- mindroot/docs/_build/doctrees/developer_documentation.doctree +0 -0
- mindroot/docs/_build/doctrees/environment.pickle +0 -0
- mindroot/docs/_build/doctrees/getting_started.doctree +0 -0
- mindroot/docs/_build/doctrees/index.doctree +0 -0
- mindroot/docs/_build/doctrees/install_plugins_with_tools.doctree +0 -0
- mindroot/docs/_build/doctrees/installation.doctree +0 -0
- mindroot/docs/_build/doctrees/llm_api_key.doctree +0 -0
- mindroot/docs/_build/doctrees/llm_plugin_installation.doctree +0 -0
- mindroot/docs/_build/doctrees/programming_task.doctree +0 -0
- mindroot/docs/_build/doctrees/source/ahp.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.admin.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.api_keys.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.chat_avatar.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.check_list.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.credits.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.email.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.env_manager.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.events.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.index.handlers.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.jwt_auth.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.l8n.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.mcp_.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.persona.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.startup.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.subscriptions.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.usage.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.coreplugins.user_service.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.auth.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.json_str_block.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.plugins.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.providers.backup.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.lib.providers.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mindroot.registry.doctree +0 -0
- mindroot/docs/_build/doctrees/source/modules.doctree +0 -0
- mindroot/docs/_build/doctrees/source/mr_agent_expert_instr.doctree +0 -0
- mindroot/docs/_build/doctrees/starting_mindroot.doctree +0 -0
- mindroot/docs/_build/doctrees/user_documentation.doctree +0 -0
- mindroot/docs/_build/html/.buildinfo +4 -0
- mindroot/docs/_build/html/.buildinfo.bak +4 -0
- mindroot/docs/_build/html/_images/envvar.png +0 -0
- mindroot/docs/_build/html/_images/files.png +0 -0
- mindroot/docs/_build/html/_images/installopenrouter.png +0 -0
- mindroot/docs/_build/html/_images/mood.png +0 -0
- mindroot/docs/_build/html/_images/moon.png +0 -0
- mindroot/docs/_build/html/_images/openrouter.png +0 -0
- mindroot/docs/_build/html/_images/restart.png +0 -0
- mindroot/docs/_build/html/_modules/index.html +425 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_importer.html +292 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/agent_router.html +620 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/asset_manager.html +289 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/command_router.html +518 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_catalog_routes.html +275 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_publish_routes.html +581 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_registry_routes.html +623 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mcp_routes.html +347 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/mod.html +163 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/oauth_callback_router.html +188 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_handler.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/persona_router.html +428 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_manager.html +610 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_router.html +146 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/plugin_routes.html +230 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/registry_settings_routes.html +253 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/router.html +267 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/server_router.html +271 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/service_models.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/admin/settings_router.html +403 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/api_key_manager.html +215 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/mod.html +127 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/api_keys/router.html +170 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/commands.html +565 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/mod.html +118 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/models.html +130 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/router.html +571 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/services.html +645 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_manager.html +258 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/chat/widget_routes.html +409 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/check_list/mod.html +460 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/conversion.html +232 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/ledger.html +283 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/mod.html +355 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/models.html +269 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/router.html +306 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/credits/storage.html +257 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/email_provider.html +159 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/imap_handler.html +343 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/mod.html +210 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/services.html +172 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/smtp_handler.html +188 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/email/test_email_service.html +179 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/mod.html +409 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/env_manager/router.html +147 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/events/router.html +201 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/agent_ops.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/index_ops.html +214 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/plugin_ops.html +263 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/handlers/publish.html +225 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/mod.html +120 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/models.html +148 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/router.html +184 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/index/utils.html +166 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/middleware.html +400 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/mod.html +153 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/jwt_auth/router.html +134 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/language_detection.html +296 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/middleware.html +258 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/mod.html +393 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_enhanced.html +408 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_l8n_standalone.html +379 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/test_middleware.html +394 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/l8n/utils.html +348 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_commands.html +456 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/catalog_manager.html +409 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/dynamic_commands.html +267 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mcp_manager.html +1186 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/mod.html +510 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/oauth_storage.html +260 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/server_installer.html +195 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/mcp_/testmcpclient.html +217 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/init_persona.html +117 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/persona/mod.html +276 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/startup/mod.html +122 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/credit_integration.html +163 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/mod.html +1089 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/models.html +261 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/router.html +502 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/storage.html +413 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/stripe_integration.html +178 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/subscription_manager.html +289 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/subscriptions/webhook_handler.html +327 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/handlers.html +157 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/mod.html +253 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/models.html +141 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/reporting.html +226 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/router.html +228 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/usage/storage.html +264 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/admin_init.html +234 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/email_service.html +204 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/mod.html +260 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/models.html +148 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/password_reset_service.html +336 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/role_service.html +183 -0
- mindroot/docs/_build/html/_modules/mindroot/coreplugins/user_service/router.html +202 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/auth/api_key.html +129 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/auth/auth.html +203 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog.html +259 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/buchatlog2.html +500 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/butemplates.html +415 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/chatcontext.html +401 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/chatlog.html +619 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/chatlog_optimized.html +655 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/json_escape.html +138 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/json_str_block/json_str_block.html +213 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/parent_templates.html +181 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/installation.html +481 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/l8n_static_handler.html +347 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader.html +403 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/loader_with_l8n.html +391 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/manifest.html +450 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/mapping.html +127 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins/paths.html +215 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/plugins_install.html +171 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/commands.html +125 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/hooks.html +117 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/missing.html +169 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/model_preferences_v2.html +291 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers/services.html +122 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/providers.html +465 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/route_decorators.html +175 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/session_files.html +142 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/streamcmd.html +246 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/templates.html +677 -0
- mindroot/docs/_build/html/_modules/mindroot/lib/token_counter.html +326 -0
- mindroot/docs/_build/html/_modules/mindroot/migrate.html +153 -0
- mindroot/docs/_build/html/_modules/mindroot/registry/component_manager.html +140 -0
- mindroot/docs/_build/html/_modules/mindroot/registry/data_access.html +302 -0
- mindroot/docs/_build/html/_modules/mindroot/server.html +317 -0
- mindroot/docs/_build/html/_modules/mindroot/server_missing_normal_args.html +322 -0
- mindroot/docs/_build/html/_modules/mindroot/server_prev.html +298 -0
- mindroot/docs/_build/html/_sources/chat_with_assistant.rst.txt +14 -0
- mindroot/docs/_build/html/_sources/developer_documentation.rst.txt +26 -0
- mindroot/docs/_build/html/_sources/getting_started.rst.txt +139 -0
- mindroot/docs/_build/html/_sources/index.rst.txt +38 -0
- mindroot/docs/_build/html/_sources/install_plugins_with_tools.rst.txt +25 -0
- mindroot/docs/_build/html/_sources/installation.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/llm_api_key.rst.txt +22 -0
- mindroot/docs/_build/html/_sources/llm_plugin_installation.rst.txt +27 -0
- mindroot/docs/_build/html/_sources/programming_task.rst.txt +10 -0
- mindroot/docs/_build/html/_sources/source/ahp.rst.txt +7 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.admin.rst.txt +189 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.api_keys.rst.txt +45 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat.rst.txt +93 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.chat_avatar.rst.txt +10 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.check_list.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.credits.rst.txt +61 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.email.rst.txt +77 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.env_manager.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.events.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.handlers.rst.txt +45 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.index.rst.txt +53 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.jwt_auth.rst.txt +45 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.l8n.rst.txt +109 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.mcp_.rst.txt +93 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.persona.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.rst.txt +35 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.startup.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.subscriptions.rst.txt +85 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.usage.rst.txt +61 -0
- mindroot/docs/_build/html/_sources/source/mindroot.coreplugins.user_service.rst.txt +69 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.auth.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.json_str_block.rst.txt +21 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.plugins.rst.txt +69 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.backup.rst.txt +10 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.providers.rst.txt +61 -0
- mindroot/docs/_build/html/_sources/source/mindroot.lib.rst.txt +152 -0
- mindroot/docs/_build/html/_sources/source/mindroot.registry.rst.txt +29 -0
- mindroot/docs/_build/html/_sources/source/mindroot.rst.txt +54 -0
- mindroot/docs/_build/html/_sources/source/modules.rst.txt +7 -0
- mindroot/docs/_build/html/_sources/source/mr_agent_expert_instr.rst.txt +7 -0
- mindroot/docs/_build/html/_sources/starting_mindroot.rst.txt +12 -0
- mindroot/docs/_build/html/_sources/user_documentation.rst.txt +16 -0
- mindroot/docs/_build/html/_static/_sphinx_javascript_frameworks_compat.js +123 -0
- mindroot/docs/_build/html/_static/basic.css +906 -0
- mindroot/docs/_build/html/_static/css/badge_only.css +1 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.svg +2671 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff +0 -0
- mindroot/docs/_build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- mindroot/docs/_build/html/_static/css/theme.css +4 -0
- mindroot/docs/_build/html/_static/custom.css +19 -0
- mindroot/docs/_build/html/_static/debug.css +69 -0
- mindroot/docs/_build/html/_static/doctools.js +149 -0
- mindroot/docs/_build/html/_static/documentation_options.js +13 -0
- mindroot/docs/_build/html/_static/file.png +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-bolditalic.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-italic.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/Lato/lato-regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff +0 -0
- mindroot/docs/_build/html/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 +0 -0
- mindroot/docs/_build/html/_static/jquery.js +2 -0
- mindroot/docs/_build/html/_static/js/badge_only.js +1 -0
- mindroot/docs/_build/html/_static/js/theme.js +1 -0
- mindroot/docs/_build/html/_static/js/versions.js +228 -0
- mindroot/docs/_build/html/_static/language_data.js +192 -0
- mindroot/docs/_build/html/_static/minus.png +0 -0
- mindroot/docs/_build/html/_static/plus.png +0 -0
- mindroot/docs/_build/html/_static/pygments.css +232 -0
- mindroot/docs/_build/html/_static/scripts/furo-extensions.js +0 -0
- mindroot/docs/_build/html/_static/scripts/furo.js +3 -0
- mindroot/docs/_build/html/_static/scripts/furo.js.LICENSE.txt +7 -0
- mindroot/docs/_build/html/_static/scripts/furo.js.map +1 -0
- mindroot/docs/_build/html/_static/searchtools.js +635 -0
- mindroot/docs/_build/html/_static/skeleton.css +296 -0
- mindroot/docs/_build/html/_static/sphinx_highlight.js +154 -0
- mindroot/docs/_build/html/_static/styles/furo-extensions.css +2 -0
- mindroot/docs/_build/html/_static/styles/furo-extensions.css.map +1 -0
- mindroot/docs/_build/html/_static/styles/furo.css +2 -0
- mindroot/docs/_build/html/_static/styles/furo.css.map +1 -0
- mindroot/docs/_build/html/chat_with_assistant.html +329 -0
- mindroot/docs/_build/html/developer_documentation.html +338 -0
- mindroot/docs/_build/html/genindex.html +4690 -0
- mindroot/docs/_build/html/getting_started.html +423 -0
- mindroot/docs/_build/html/index.html +357 -0
- mindroot/docs/_build/html/install_plugins_with_tools.html +336 -0
- mindroot/docs/_build/html/installation.html +330 -0
- mindroot/docs/_build/html/llm_api_key.html +337 -0
- mindroot/docs/_build/html/llm_plugin_installation.html +338 -0
- mindroot/docs/_build/html/objects.inv +0 -0
- mindroot/docs/_build/html/programming_task.html +326 -0
- mindroot/docs/_build/html/py-modindex.html +1307 -0
- mindroot/docs/_build/html/search.html +307 -0
- mindroot/docs/_build/html/searchindex.js +1 -0
- mindroot/docs/_build/html/source/ahp.html +302 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.admin.html +2212 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.api_keys.html +532 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.chat.html +1185 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.chat_avatar.html +311 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.check_list.html +441 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.credits.html +879 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.email.html +554 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.env_manager.html +447 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.events.html +338 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.html +1785 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.index.handlers.html +481 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.index.html +696 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.jwt_auth.html +432 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.l8n.html +933 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.mcp_.html +1271 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.persona.html +386 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.startup.html +327 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.subscriptions.html +1631 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.usage.html +677 -0
- mindroot/docs/_build/html/source/mindroot.coreplugins.user_service.html +681 -0
- mindroot/docs/_build/html/source/mindroot.html +811 -0
- mindroot/docs/_build/html/source/mindroot.lib.auth.html +407 -0
- mindroot/docs/_build/html/source/mindroot.lib.html +2027 -0
- mindroot/docs/_build/html/source/mindroot.lib.json_str_block.html +344 -0
- mindroot/docs/_build/html/source/mindroot.lib.plugins.html +1050 -0
- mindroot/docs/_build/html/source/mindroot.lib.providers.backup.html +324 -0
- mindroot/docs/_build/html/source/mindroot.lib.providers.html +572 -0
- mindroot/docs/_build/html/source/mindroot.registry.html +501 -0
- mindroot/docs/_build/html/source/modules.html +377 -0
- mindroot/docs/_build/html/source/mr_agent_expert_instr.html +302 -0
- mindroot/docs/_build/html/starting_mindroot.html +325 -0
- mindroot/docs/_build/html/user_documentation.html +333 -0
- mindroot/docs/_static/custom.css +19 -0
- mindroot/docs/chat_with_assistant.rst +14 -0
- mindroot/docs/conf.py +54 -0
- mindroot/docs/data/agents/local/Assistant/agent.json +27 -0
- mindroot/docs/data/agents/local/SysAdmin/agent.json +33 -0
- mindroot/docs/data/equivalent_flags.json +1 -0
- mindroot/docs/data/mcp/servers.json +9 -0
- mindroot/docs/data/models.json +57 -0
- mindroot/docs/data/plugin_manifest.json +95 -0
- mindroot/docs/data/preferred_models.json +12 -0
- mindroot/docs/data/providers.json +62 -0
- mindroot/docs/developer_documentation.rst +26 -0
- mindroot/docs/envvar.png +0 -0
- mindroot/docs/files.png +0 -0
- mindroot/docs/getting_started.rst +139 -0
- mindroot/docs/index.rst +38 -0
- mindroot/docs/install_plugins_with_tools.rst +25 -0
- mindroot/docs/installation.rst +21 -0
- mindroot/docs/installopenrouter.png +0 -0
- mindroot/docs/llm_api_key.rst +22 -0
- mindroot/docs/llm_plugin_installation.rst +27 -0
- mindroot/docs/make.bat +35 -0
- mindroot/docs/mood.png +0 -0
- mindroot/docs/moon.png +0 -0
- mindroot/docs/openrouter.png +0 -0
- mindroot/docs/personas/local/Assistant/avatar.png +0 -0
- mindroot/docs/personas/local/Assistant/faceref.png +0 -0
- mindroot/docs/personas/local/Assistant/persona.json +7 -0
- mindroot/docs/programming_task.rst +10 -0
- mindroot/docs/restart.png +0 -0
- mindroot/docs/source/ahp.rst +7 -0
- mindroot/docs/source/mindroot.coreplugins.admin.rst +189 -0
- mindroot/docs/source/mindroot.coreplugins.api_keys.rst +45 -0
- mindroot/docs/source/mindroot.coreplugins.chat.rst +93 -0
- mindroot/docs/source/mindroot.coreplugins.chat_avatar.rst +10 -0
- mindroot/docs/source/mindroot.coreplugins.check_list.rst +21 -0
- mindroot/docs/source/mindroot.coreplugins.credits.rst +61 -0
- mindroot/docs/source/mindroot.coreplugins.email.rst +77 -0
- mindroot/docs/source/mindroot.coreplugins.env_manager.rst +29 -0
- mindroot/docs/source/mindroot.coreplugins.events.rst +29 -0
- mindroot/docs/source/mindroot.coreplugins.index.handlers.rst +45 -0
- mindroot/docs/source/mindroot.coreplugins.index.rst +53 -0
- mindroot/docs/source/mindroot.coreplugins.jwt_auth.rst +45 -0
- mindroot/docs/source/mindroot.coreplugins.l8n.rst +109 -0
- mindroot/docs/source/mindroot.coreplugins.mcp_.rst +93 -0
- mindroot/docs/source/mindroot.coreplugins.persona.rst +29 -0
- mindroot/docs/source/mindroot.coreplugins.rst +35 -0
- mindroot/docs/source/mindroot.coreplugins.startup.rst +21 -0
- mindroot/docs/source/mindroot.coreplugins.subscriptions.rst +85 -0
- mindroot/docs/source/mindroot.coreplugins.usage.rst +61 -0
- mindroot/docs/source/mindroot.coreplugins.user_service.rst +69 -0
- mindroot/docs/source/mindroot.lib.auth.rst +29 -0
- mindroot/docs/source/mindroot.lib.json_str_block.rst +21 -0
- mindroot/docs/source/mindroot.lib.plugins.rst +69 -0
- mindroot/docs/source/mindroot.lib.providers.backup.rst +10 -0
- mindroot/docs/source/mindroot.lib.providers.rst +61 -0
- mindroot/docs/source/mindroot.lib.rst +152 -0
- mindroot/docs/source/mindroot.registry.rst +29 -0
- mindroot/docs/source/mindroot.rst +54 -0
- mindroot/docs/source/modules.rst +7 -0
- mindroot/docs/source/mr_agent_expert_instr.rst +7 -0
- mindroot/docs/starting_mindroot.rst +12 -0
- mindroot/docs/user_documentation.rst +16 -0
- mindroot/lib/providers/model_preferences_v2.py +5 -3
- mindroot/server.py +10 -1
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/METADATA +1 -1
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/RECORD +417 -10
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/WHEEL +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/entry_points.txt +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/licenses/LICENSE +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.13.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
<!DOCTYPE html>
|
|
4
|
+
<html class="writer-html5" lang="en" data-content_root="../../../../">
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="utf-8" />
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
|
+
<title>mindroot.lib.plugins.installation — MindRoot 9.10.0 documentation</title>
|
|
9
|
+
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
|
|
10
|
+
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
|
|
14
|
+
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
|
15
|
+
<script src="../../../../_static/documentation_options.js?v=3c16008f"></script>
|
|
16
|
+
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
|
|
17
|
+
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
18
|
+
<script src="../../../../_static/js/theme.js"></script>
|
|
19
|
+
<link rel="index" title="Index" href="../../../../genindex.html" />
|
|
20
|
+
<link rel="search" title="Search" href="../../../../search.html" />
|
|
21
|
+
</head>
|
|
22
|
+
|
|
23
|
+
<body class="wy-body-for-nav">
|
|
24
|
+
<div class="wy-grid-for-nav">
|
|
25
|
+
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
26
|
+
<div class="wy-side-scroll">
|
|
27
|
+
<div class="wy-side-nav-search" style="background: #343131" >
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
<a href="../../../../index.html" class="icon icon-home">
|
|
32
|
+
MindRoot
|
|
33
|
+
</a>
|
|
34
|
+
<div role="search">
|
|
35
|
+
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
|
|
36
|
+
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
|
37
|
+
<input type="hidden" name="check_keywords" value="yes" />
|
|
38
|
+
<input type="hidden" name="area" value="default" />
|
|
39
|
+
</form>
|
|
40
|
+
</div>
|
|
41
|
+
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
42
|
+
<!-- Local TOC -->
|
|
43
|
+
<div class="local-toc"></div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</nav>
|
|
47
|
+
|
|
48
|
+
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #343131" >
|
|
49
|
+
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
50
|
+
<a href="../../../../index.html">MindRoot</a>
|
|
51
|
+
</nav>
|
|
52
|
+
|
|
53
|
+
<div class="wy-nav-content">
|
|
54
|
+
<div class="rst-content">
|
|
55
|
+
<div role="navigation" aria-label="Page navigation">
|
|
56
|
+
<ul class="wy-breadcrumbs">
|
|
57
|
+
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
|
58
|
+
<li class="breadcrumb-item"><a href="../../../index.html">Module code</a></li>
|
|
59
|
+
<li class="breadcrumb-item active">mindroot.lib.plugins.installation</li>
|
|
60
|
+
<li class="wy-breadcrumbs-aside">
|
|
61
|
+
</li>
|
|
62
|
+
</ul>
|
|
63
|
+
<hr/>
|
|
64
|
+
</div>
|
|
65
|
+
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
66
|
+
<div itemprop="articleBody">
|
|
67
|
+
|
|
68
|
+
<h1>Source code for mindroot.lib.plugins.installation</h1><div class="highlight"><pre>
|
|
69
|
+
<span></span><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
|
|
70
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
|
|
71
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
|
|
72
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">shutil</span>
|
|
73
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">tempfile</span>
|
|
74
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">requests</span>
|
|
75
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">zipfile</span>
|
|
76
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">subprocess</span>
|
|
77
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">pkg_resources</span><span class="w"> </span><span class="kn">import</span> <span class="n">require</span> <span class="k">as</span> <span class="n">pkg_require</span>
|
|
78
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">.manifest</span><span class="w"> </span><span class="kn">import</span> <span class="n">update_plugin_manifest</span>
|
|
79
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
|
|
80
|
+
|
|
81
|
+
<div class="viewcode-block" id="download_github_files">
|
|
82
|
+
<a class="viewcode-back" href="../../../../source/mindroot.lib.plugins.html#mindroot.lib.plugins.download_github_files">[docs]</a>
|
|
83
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">download_github_files</span><span class="p">(</span><span class="n">repo_path</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
84
|
+
<span class="w"> </span><span class="sd">"""Download GitHub repo files to temp directory.</span>
|
|
85
|
+
<span class="sd"> </span>
|
|
86
|
+
<span class="sd"> Args:</span>
|
|
87
|
+
<span class="sd"> repo_path (str): GitHub repository path (user/repo)</span>
|
|
88
|
+
<span class="sd"> tag (str, optional): Specific tag to download</span>
|
|
89
|
+
<span class="sd"> </span>
|
|
90
|
+
<span class="sd"> Returns:</span>
|
|
91
|
+
<span class="sd"> tuple: (plugin_dir, plugin_root, plugin_info)</span>
|
|
92
|
+
<span class="sd"> """</span>
|
|
93
|
+
<span class="n">download_url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"https://github.com/</span><span class="si">{</span><span class="n">repo_path</span><span class="si">}</span><span class="s2">/archive/refs/tags/</span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">.zip"</span> <span class="k">if</span> <span class="n">tag</span> <span class="k">else</span> \
|
|
94
|
+
<span class="sa">f</span><span class="s2">"https://github.com/</span><span class="si">{</span><span class="n">repo_path</span><span class="si">}</span><span class="s2">/archive/refs/heads/main.zip"</span>
|
|
95
|
+
|
|
96
|
+
<span class="n">repo</span> <span class="o">=</span> <span class="n">repo_path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
|
|
97
|
+
<span class="n">temp_dir</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">mkdtemp</span><span class="p">()</span>
|
|
98
|
+
<span class="n">zip_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">,</span> <span class="s1">'repo.zip'</span><span class="p">)</span>
|
|
99
|
+
|
|
100
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Github install: Downloading </span><span class="si">{</span><span class="n">download_url</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">zip_path</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
101
|
+
<span class="k">try</span><span class="p">:</span>
|
|
102
|
+
<span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">download_url</span><span class="p">)</span>
|
|
103
|
+
<span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
|
|
104
|
+
|
|
105
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">zip_path</span><span class="p">,</span> <span class="s1">'wb'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
106
|
+
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
|
|
107
|
+
|
|
108
|
+
<span class="k">with</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">zip_path</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_ref</span><span class="p">:</span>
|
|
109
|
+
<span class="n">zip_ref</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">)</span>
|
|
110
|
+
|
|
111
|
+
<span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">zip_path</span><span class="p">)</span>
|
|
112
|
+
|
|
113
|
+
<span class="c1"># Find plugin_info.json</span>
|
|
114
|
+
<span class="k">for</span> <span class="n">root</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">files</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">):</span>
|
|
115
|
+
<span class="k">if</span> <span class="s1">'plugin_info.json'</span> <span class="ow">in</span> <span class="n">files</span><span class="p">:</span>
|
|
116
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s1">'plugin_info.json'</span><span class="p">),</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
117
|
+
<span class="n">plugin_info</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
|
|
118
|
+
|
|
119
|
+
<span class="c1"># Setup local plugin directory</span>
|
|
120
|
+
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="sa">f</span><span class="s2">"./local/plugins/</span><span class="si">{</span><span class="n">repo</span><span class="si">}</span><span class="s2">"</span><span class="p">):</span>
|
|
121
|
+
<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="sa">f</span><span class="s2">"./local/plugins/</span><span class="si">{</span><span class="n">repo</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
122
|
+
|
|
123
|
+
<span class="n">shutil</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"./local/plugins/</span><span class="si">{</span><span class="n">repo</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
124
|
+
|
|
125
|
+
<span class="c1"># Handle subdirectory structure</span>
|
|
126
|
+
<span class="n">files</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="sa">f</span><span class="s2">"./local/plugins/</span><span class="si">{</span><span class="n">repo</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
127
|
+
<span class="n">subdir</span> <span class="o">=</span> <span class="p">[</span><span class="n">f</span> <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">files</span> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">"./local/plugins/</span><span class="si">{</span><span class="n">repo</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span> <span class="n">f</span><span class="p">))][</span><span class="mi">0</span><span class="p">]</span>
|
|
128
|
+
<span class="k">if</span> <span class="n">subdir</span> <span class="o">!=</span> <span class="n">repo</span><span class="p">:</span>
|
|
129
|
+
<span class="n">shutil</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="sa">f</span><span class="s2">"./local/plugins/</span><span class="si">{</span><span class="n">repo</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">subdir</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span> <span class="sa">f</span><span class="s2">"./local/plugins/</span><span class="si">{</span><span class="n">repo</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">repo</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
130
|
+
|
|
131
|
+
<span class="k">return</span> <span class="sa">f</span><span class="s2">"./local/plugins/</span><span class="si">{</span><span class="n">repo</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">repo</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">plugin_info</span>
|
|
132
|
+
|
|
133
|
+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"No plugin_info.json found in repository"</span><span class="p">)</span>
|
|
134
|
+
|
|
135
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
136
|
+
<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">)</span>
|
|
137
|
+
<span class="k">raise</span> <span class="n">e</span></div>
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
<div class="viewcode-block" id="check_plugin_dependencies">
|
|
141
|
+
<a class="viewcode-back" href="../../../../source/mindroot.lib.plugins.html#mindroot.lib.plugins.check_plugin_dependencies">[docs]</a>
|
|
142
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">check_plugin_dependencies</span><span class="p">(</span><span class="n">plugin_path</span><span class="p">):</span>
|
|
143
|
+
<span class="w"> </span><span class="sd">"""Check if all plugin dependencies are met.</span>
|
|
144
|
+
<span class="sd"> </span>
|
|
145
|
+
<span class="sd"> Args:</span>
|
|
146
|
+
<span class="sd"> plugin_path (str): Path to plugin directory</span>
|
|
147
|
+
<span class="sd"> </span>
|
|
148
|
+
<span class="sd"> Returns:</span>
|
|
149
|
+
<span class="sd"> bool: True if all dependencies are met</span>
|
|
150
|
+
<span class="sd"> """</span>
|
|
151
|
+
<span class="n">requirements_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">plugin_path</span><span class="p">,</span> <span class="s1">'requirements.txt'</span><span class="p">)</span>
|
|
152
|
+
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">requirements_file</span><span class="p">):</span>
|
|
153
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">requirements_file</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
154
|
+
<span class="n">requirements</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span>
|
|
155
|
+
<span class="k">for</span> <span class="n">requirement</span> <span class="ow">in</span> <span class="n">requirements</span><span class="p">:</span>
|
|
156
|
+
<span class="k">try</span><span class="p">:</span>
|
|
157
|
+
<span class="n">pkg_require</span><span class="p">(</span><span class="n">requirement</span><span class="p">)</span>
|
|
158
|
+
<span class="k">except</span><span class="p">:</span>
|
|
159
|
+
<span class="k">return</span> <span class="kc">False</span>
|
|
160
|
+
<span class="k">return</span> <span class="kc">True</span></div>
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
<div class="viewcode-block" id="install_plugin_dependencies">
|
|
164
|
+
<a class="viewcode-back" href="../../../../source/mindroot.lib.plugins.html#mindroot.lib.plugins.install_plugin_dependencies">[docs]</a>
|
|
165
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">install_plugin_dependencies</span><span class="p">(</span><span class="n">plugin_path</span><span class="p">):</span>
|
|
166
|
+
<span class="w"> </span><span class="sd">"""Install plugin dependencies from requirements.txt.</span>
|
|
167
|
+
<span class="sd"> </span>
|
|
168
|
+
<span class="sd"> Args:</span>
|
|
169
|
+
<span class="sd"> plugin_path (str): Path to plugin directory</span>
|
|
170
|
+
<span class="sd"> </span>
|
|
171
|
+
<span class="sd"> Returns:</span>
|
|
172
|
+
<span class="sd"> bool: True if installation successful</span>
|
|
173
|
+
<span class="sd"> """</span>
|
|
174
|
+
<span class="n">requirements_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">plugin_path</span><span class="p">,</span> <span class="s1">'requirements.txt'</span><span class="p">)</span>
|
|
175
|
+
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">requirements_file</span><span class="p">):</span>
|
|
176
|
+
<span class="k">try</span><span class="p">:</span>
|
|
177
|
+
<span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</span> <span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'pip'</span><span class="p">,</span> <span class="s1">'install'</span><span class="p">,</span> <span class="s1">'-r'</span><span class="p">,</span> <span class="n">requirements_file</span><span class="p">])</span>
|
|
178
|
+
<span class="k">return</span> <span class="kc">True</span>
|
|
179
|
+
<span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">:</span>
|
|
180
|
+
<span class="k">return</span> <span class="kc">False</span>
|
|
181
|
+
<span class="k">return</span> <span class="kc">True</span></div>
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
<div class="viewcode-block" id="plugin_install">
|
|
185
|
+
<a class="viewcode-back" href="../../../../source/mindroot.lib.plugins.html#mindroot.lib.plugins.plugin_install">[docs]</a>
|
|
186
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">plugin_install</span><span class="p">(</span><span class="n">plugin_name</span><span class="p">,</span> <span class="n">source</span><span class="o">=</span><span class="s1">'pypi'</span><span class="p">,</span> <span class="n">source_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">remote_source</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
187
|
+
<span class="w"> </span><span class="sd">"""Install a plugin from various sources.</span>
|
|
188
|
+
<span class="sd"> </span>
|
|
189
|
+
<span class="sd"> Args:</span>
|
|
190
|
+
<span class="sd"> plugin_name (str): Name of the plugin</span>
|
|
191
|
+
<span class="sd"> source (str): Installation source ('pypi', 'local', 'github')</span>
|
|
192
|
+
<span class="sd"> source_path (str, optional): Path or GitHub repo reference</span>
|
|
193
|
+
<span class="sd"> remote_source (str, optional): Remote source for the plugin (e.g., GitHub repo path)</span>
|
|
194
|
+
<span class="sd"> </span>
|
|
195
|
+
<span class="sd"> Returns:</span>
|
|
196
|
+
<span class="sd"> bool: True if installation successful</span>
|
|
197
|
+
<span class="sd"> """</span>
|
|
198
|
+
<span class="k">try</span><span class="p">:</span>
|
|
199
|
+
<span class="k">if</span> <span class="n">source</span> <span class="o">==</span> <span class="s1">'local'</span><span class="p">:</span>
|
|
200
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">source_path</span><span class="p">:</span>
|
|
201
|
+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"source_path is required for local installation"</span><span class="p">)</span>
|
|
202
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">source_path</span><span class="p">,</span> <span class="s1">'setup.py'</span><span class="p">))</span> <span class="ow">and</span> \
|
|
203
|
+
<span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">source_path</span><span class="p">,</span> <span class="s1">'pyproject.toml'</span><span class="p">)):</span>
|
|
204
|
+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Invalid Python project: no setup.py or pyproject.toml found"</span><span class="p">)</span>
|
|
205
|
+
|
|
206
|
+
<span class="c1"># Try to read plugin_info.json</span>
|
|
207
|
+
<span class="n">plugin_info</span> <span class="o">=</span> <span class="kc">None</span>
|
|
208
|
+
<span class="n">plugin_info_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">source_path</span><span class="p">,</span> <span class="s1">'plugin_info.json'</span><span class="p">)</span>
|
|
209
|
+
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">plugin_info_path</span><span class="p">):</span>
|
|
210
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">plugin_info_path</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
211
|
+
<span class="n">plugin_info</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
|
|
212
|
+
|
|
213
|
+
<span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</span> <span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'pip'</span><span class="p">,</span> <span class="s1">'install'</span><span class="p">,</span> <span class="s1">'-e'</span><span class="p">,</span> <span class="n">source_path</span><span class="p">])</span>
|
|
214
|
+
<span class="n">update_plugin_manifest</span><span class="p">(</span><span class="n">plugin_name</span><span class="p">,</span> <span class="s1">'local'</span><span class="p">,</span> <span class="n">source_path</span><span class="p">,</span> <span class="n">metadata</span><span class="o">=</span><span class="n">plugin_info</span><span class="p">)</span>
|
|
215
|
+
|
|
216
|
+
<span class="k">elif</span> <span class="n">source</span> <span class="o">==</span> <span class="s1">'pypi'</span><span class="p">:</span>
|
|
217
|
+
<span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</span> <span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'pip'</span><span class="p">,</span> <span class="s1">'install'</span><span class="p">,</span> <span class="n">plugin_name</span><span class="p">])</span>
|
|
218
|
+
<span class="n">update_plugin_manifest</span><span class="p">(</span><span class="n">plugin_name</span><span class="p">,</span> <span class="s1">'pypi'</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
219
|
+
|
|
220
|
+
<span class="k">elif</span> <span class="n">source</span> <span class="o">==</span> <span class="s1">'github'</span><span class="p">:</span>
|
|
221
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">source_path</span><span class="p">:</span>
|
|
222
|
+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"source_path (repo/name[:tag]) required for GitHub installation"</span><span class="p">)</span>
|
|
223
|
+
|
|
224
|
+
<span class="n">parts</span> <span class="o">=</span> <span class="n">source_path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">':'</span><span class="p">)</span>
|
|
225
|
+
<span class="n">repo_path</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
226
|
+
<span class="n">tag</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span>
|
|
227
|
+
|
|
228
|
+
<span class="n">plugin_dir</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">plugin_info</span> <span class="o">=</span> <span class="n">download_github_files</span><span class="p">(</span><span class="n">repo_path</span><span class="p">,</span> <span class="n">tag</span><span class="p">)</span>
|
|
229
|
+
<span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</span> <span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'pip'</span><span class="p">,</span> <span class="s1">'install'</span><span class="p">,</span> <span class="s1">'-e'</span><span class="p">,</span> <span class="n">plugin_dir</span><span class="p">])</span>
|
|
230
|
+
|
|
231
|
+
<span class="n">update_plugin_manifest</span><span class="p">(</span>
|
|
232
|
+
<span class="n">plugin_info</span><span class="p">[</span><span class="s1">'name'</span><span class="p">],</span>
|
|
233
|
+
<span class="s1">'github'</span><span class="p">,</span>
|
|
234
|
+
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">plugin_dir</span><span class="p">),</span>
|
|
235
|
+
<span class="n">remote_source</span><span class="o">=</span><span class="n">repo_path</span><span class="p">,</span>
|
|
236
|
+
<span class="n">version</span><span class="o">=</span><span class="n">plugin_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'version'</span><span class="p">,</span> <span class="s1">'0.0.1'</span><span class="p">),</span>
|
|
237
|
+
<span class="n">metadata</span><span class="o">=</span><span class="n">plugin_info</span>
|
|
238
|
+
<span class="p">)</span>
|
|
239
|
+
|
|
240
|
+
<span class="k">else</span><span class="p">:</span>
|
|
241
|
+
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Unsupported installation source: </span><span class="si">{</span><span class="n">source</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
242
|
+
|
|
243
|
+
<span class="k">return</span> <span class="kc">True</span>
|
|
244
|
+
|
|
245
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
246
|
+
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Plugin installation failed: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span></div>
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
<div class="viewcode-block" id="plugin_update">
|
|
250
|
+
<a class="viewcode-back" href="../../../../source/mindroot.lib.plugins.html#mindroot.lib.plugins.plugin_update">[docs]</a>
|
|
251
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">plugin_update</span><span class="p">(</span><span class="n">plugin_name</span><span class="p">):</span>
|
|
252
|
+
<span class="w"> </span><span class="sd">"""Update an installed plugin.</span>
|
|
253
|
+
<span class="sd"> </span>
|
|
254
|
+
<span class="sd"> Args:</span>
|
|
255
|
+
<span class="sd"> plugin_name (str): Name of the plugin to update</span>
|
|
256
|
+
<span class="sd"> </span>
|
|
257
|
+
<span class="sd"> Returns:</span>
|
|
258
|
+
<span class="sd"> bool: True if update successful</span>
|
|
259
|
+
<span class="sd"> """</span>
|
|
260
|
+
<span class="c1"># This is a synchronous function that can't use the async plugin_install directly</span>
|
|
261
|
+
<span class="k">try</span><span class="p">:</span>
|
|
262
|
+
<span class="c1"># Just use pip directly for now</span>
|
|
263
|
+
<span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">([</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">,</span> <span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'pip'</span><span class="p">,</span> <span class="s1">'install'</span><span class="p">,</span> <span class="s1">'--upgrade'</span><span class="p">,</span> <span class="n">plugin_name</span><span class="p">])</span>
|
|
264
|
+
<span class="k">return</span> <span class="kc">True</span>
|
|
265
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
266
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error updating plugin </span><span class="si">{</span><span class="n">plugin_name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
267
|
+
<span class="k">return</span> <span class="kc">False</span></div>
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
<span class="c1"># Import pkg_resources here to avoid circular imports</span>
|
|
271
|
+
<div class="viewcode-block" id="install_recommended_plugins">
|
|
272
|
+
<a class="viewcode-back" href="../../../../source/mindroot.lib.plugins.html#mindroot.lib.plugins.install_recommended_plugins">[docs]</a>
|
|
273
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">install_recommended_plugins</span><span class="p">(</span><span class="n">agent_name</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
274
|
+
<span class="w"> </span><span class="sd">"""</span>
|
|
275
|
+
<span class="sd"> Install plugins recommended for an agent based on its required_plugins list.</span>
|
|
276
|
+
<span class="sd"> </span>
|
|
277
|
+
<span class="sd"> Args:</span>
|
|
278
|
+
<span class="sd"> agent_name (str): Name of the agent</span>
|
|
279
|
+
<span class="sd"> </span>
|
|
280
|
+
<span class="sd"> Returns:</span>
|
|
281
|
+
<span class="sd"> dict: Results of plugin installation</span>
|
|
282
|
+
<span class="sd"> """</span>
|
|
283
|
+
<span class="k">try</span><span class="p">:</span>
|
|
284
|
+
<span class="c1"># Load agent data</span>
|
|
285
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
|
|
286
|
+
<span class="n">agent_path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"data/agents/local/</span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s2">/agent.json"</span>
|
|
287
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">agent_path</span><span class="p">):</span>
|
|
288
|
+
<span class="n">agent_path</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">"data/agents/shared/</span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s2">/agent.json"</span>
|
|
289
|
+
|
|
290
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">agent_path</span><span class="p">):</span>
|
|
291
|
+
<span class="k">return</span> <span class="p">{</span><span class="s2">"error"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Agent </span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s2"> not found"</span><span class="p">}</span>
|
|
292
|
+
|
|
293
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">agent_path</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
294
|
+
<span class="n">agent_data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
|
|
295
|
+
|
|
296
|
+
<span class="c1"># Get recommended plugins (check both fields for backward compatibility)</span>
|
|
297
|
+
<span class="n">recommended_plugins</span> <span class="o">=</span> <span class="n">agent_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'recommended_plugins'</span><span class="p">,</span> <span class="n">agent_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'required_plugins'</span><span class="p">,</span> <span class="p">[]))</span>
|
|
298
|
+
|
|
299
|
+
<span class="c1"># Get plugin sources from check_recommended_plugins endpoint</span>
|
|
300
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">fastapi</span><span class="w"> </span><span class="kn">import</span> <span class="n">HTTPException</span>
|
|
301
|
+
<span class="k">try</span><span class="p">:</span>
|
|
302
|
+
<span class="c1"># Implement the same logic as check_recommended_plugins directly here</span>
|
|
303
|
+
<span class="c1"># to avoid circular imports</span>
|
|
304
|
+
<span class="n">plugin_info</span> <span class="o">=</span> <span class="p">{}</span>
|
|
305
|
+
<span class="n">plugin_sources</span> <span class="o">=</span> <span class="p">{}</span>
|
|
306
|
+
|
|
307
|
+
<span class="c1"># Define indices directory path</span>
|
|
308
|
+
<span class="c1"># Try multiple possible locations for indices</span>
|
|
309
|
+
<span class="n">possible_locations</span> <span class="o">=</span> <span class="p">[</span>
|
|
310
|
+
<span class="n">Path</span><span class="p">(</span><span class="s2">"indices"</span><span class="p">),</span>
|
|
311
|
+
<span class="n">Path</span><span class="p">(</span><span class="s2">"data/indices"</span><span class="p">),</span>
|
|
312
|
+
<span class="n">Path</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">())</span> <span class="o">/</span> <span class="s2">"indices"</span><span class="p">,</span>
|
|
313
|
+
<span class="n">Path</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">())</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="s2">"indices"</span><span class="p">,</span>
|
|
314
|
+
<span class="n">Path</span><span class="p">(</span><span class="s2">"/files/mindroot/indices"</span><span class="p">)</span>
|
|
315
|
+
<span class="p">]</span>
|
|
316
|
+
|
|
317
|
+
<span class="n">indices_dir</span> <span class="o">=</span> <span class="kc">None</span>
|
|
318
|
+
|
|
319
|
+
<span class="c1"># Determine which indices directory exists</span>
|
|
320
|
+
<span class="k">for</span> <span class="n">location</span> <span class="ow">in</span> <span class="n">possible_locations</span><span class="p">:</span>
|
|
321
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Checking for indices in: </span><span class="si">{</span><span class="n">location</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
322
|
+
<span class="k">if</span> <span class="n">location</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
323
|
+
<span class="c1"># Check if it has any .json files</span>
|
|
324
|
+
<span class="n">indices_dir</span> <span class="o">=</span> <span class="n">location</span> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">location</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">"*.json"</span><span class="p">))</span> <span class="k">else</span> <span class="kc">None</span>
|
|
325
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Found indices directory at: </span><span class="si">{</span><span class="n">indices_dir</span><span class="si">}</span><span class="s2"> with </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">location</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s1">'*.json'</span><span class="p">)))</span><span class="si">}</span><span class="s2"> JSON files"</span><span class="p">)</span>
|
|
326
|
+
<span class="k">break</span>
|
|
327
|
+
|
|
328
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">indices_dir</span><span class="p">:</span>
|
|
329
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"WARNING: Could not find indices directory in any of the expected locations"</span><span class="p">)</span>
|
|
330
|
+
<span class="n">indices_dir</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">"indices"</span><span class="p">)</span> <span class="c1"># Fallback to default </span>
|
|
331
|
+
<span class="c1"># Get all available indices</span>
|
|
332
|
+
<span class="n">available_indices</span> <span class="o">=</span> <span class="p">[]</span>
|
|
333
|
+
<span class="k">for</span> <span class="n">index_file</span> <span class="ow">in</span> <span class="n">indices_dir</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">"*.json"</span><span class="p">):</span>
|
|
334
|
+
<span class="c1"># Also try looking for indices in subdirectories</span>
|
|
335
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Found index file: </span><span class="si">{</span><span class="n">index_file</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
336
|
+
|
|
337
|
+
<span class="k">try</span><span class="p">:</span>
|
|
338
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Reading index file for plugin sources: </span><span class="si">{</span><span class="n">index_file</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
339
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">index_file</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
340
|
+
<span class="n">index_data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
|
|
341
|
+
<span class="n">available_indices</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">index_data</span><span class="p">)</span>
|
|
342
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
343
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error reading index file </span><span class="si">{</span><span class="n">index_file</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
344
|
+
|
|
345
|
+
<span class="c1"># Also check for indices in subdirectories</span>
|
|
346
|
+
<span class="k">for</span> <span class="n">subdir</span> <span class="ow">in</span> <span class="n">indices_dir</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">"*/"</span><span class="p">):</span>
|
|
347
|
+
<span class="c1"># Also try looking for indices in subdirectories</span>
|
|
348
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Checking for index files in subdirectory: </span><span class="si">{</span><span class="n">subdir</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
349
|
+
|
|
350
|
+
<span class="c1"># Look for index.json in the subdirectory</span>
|
|
351
|
+
<span class="n">index_file_path</span> <span class="o">=</span> <span class="n">subdir</span> <span class="o">/</span> <span class="s2">"index.json"</span>
|
|
352
|
+
<span class="k">if</span> <span class="n">index_file_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
353
|
+
<span class="k">try</span><span class="p">:</span>
|
|
354
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Reading index file: </span><span class="si">{</span><span class="n">index_file_path</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
355
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">index_file_path</span><span class="p">,</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
356
|
+
<span class="n">index_data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
|
|
357
|
+
<span class="n">available_indices</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">index_data</span><span class="p">)</span>
|
|
358
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
359
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error reading index file </span><span class="si">{</span><span class="n">index_file_path</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
360
|
+
<span class="k">else</span><span class="p">:</span>
|
|
361
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No index.json found in </span><span class="si">{</span><span class="n">subdir</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
362
|
+
|
|
363
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Found </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">available_indices</span><span class="p">)</span><span class="si">}</span><span class="s2"> indices with </span><span class="si">{</span><span class="nb">sum</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">index</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'plugins'</span><span class="p">,</span><span class="w"> </span><span class="p">[]))</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">available_indices</span><span class="p">)</span><span class="si">}</span><span class="s2"> total plugins"</span><span class="p">)</span>
|
|
364
|
+
|
|
365
|
+
<span class="c1"># Look for each recommended plugin in the indices</span>
|
|
366
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Looking for recommended plugins: </span><span class="si">{</span><span class="n">recommended_plugins</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
367
|
+
<span class="k">for</span> <span class="n">plugin_source</span> <span class="ow">in</span> <span class="n">recommended_plugins</span><span class="p">:</span>
|
|
368
|
+
<span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">available_indices</span><span class="p">:</span>
|
|
369
|
+
<span class="k">for</span> <span class="n">plugin</span> <span class="ow">in</span> <span class="n">index</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'plugins'</span><span class="p">,</span> <span class="p">[]):</span>
|
|
370
|
+
<span class="n">remote_source</span> <span class="o">=</span> <span class="n">plugin</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'remote_source'</span><span class="p">)</span> <span class="ow">or</span> <span class="n">plugin</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'github_url'</span><span class="p">)</span> <span class="ow">or</span> <span class="n">plugin</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'source'</span><span class="p">)</span>
|
|
371
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Checking index plugin </span><span class="si">{</span><span class="n">remote_source</span><span class="si">}</span><span class="s2"> against recommended </span><span class="si">{</span><span class="n">plugin_source</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
372
|
+
<span class="k">if</span> <span class="n">remote_source</span> <span class="o">==</span> <span class="n">plugin_source</span><span class="p">:</span>
|
|
373
|
+
<span class="k">if</span> <span class="n">remote_source</span> <span class="ow">and</span> <span class="s1">'github.com/'</span> <span class="ow">in</span> <span class="n">remote_source</span><span class="p">:</span>
|
|
374
|
+
<span class="n">github_path</span> <span class="o">=</span> <span class="n">remote_source</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'github.com/'</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
|
|
375
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Extracted GitHub path for </span><span class="si">{</span><span class="n">plugin_source</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">github_path</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
376
|
+
<span class="n">plugin_sources</span><span class="p">[</span><span class="n">plugin_source</span><span class="p">]</span> <span class="o">=</span> <span class="n">github_path</span>
|
|
377
|
+
<span class="k">elif</span> <span class="n">remote_source</span><span class="p">:</span>
|
|
378
|
+
<span class="n">plugin_sources</span><span class="p">[</span><span class="n">plugin_source</span><span class="p">]</span> <span class="o">=</span> <span class="n">remote_source</span>
|
|
379
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Found plugin sources: </span><span class="si">{</span><span class="n">plugin_sources</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
380
|
+
|
|
381
|
+
<span class="n">plugin_info</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"plugin_sources"</span><span class="p">:</span> <span class="n">plugin_sources</span><span class="p">}</span>
|
|
382
|
+
<span class="n">plugin_sources</span> <span class="o">=</span> <span class="n">plugin_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"plugin_sources"</span><span class="p">,</span> <span class="p">{})</span> <span class="k">if</span> <span class="n">plugin_info</span> <span class="k">else</span> <span class="p">{}</span>
|
|
383
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
384
|
+
<span class="n">trace</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
|
|
385
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error getting plugin sources: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">trace</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
386
|
+
<span class="n">plugin_sources</span> <span class="o">=</span> <span class="p">{}</span>
|
|
387
|
+
|
|
388
|
+
<span class="c1"># Install each recommended plugin</span>
|
|
389
|
+
<span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
|
|
390
|
+
<span class="k">for</span> <span class="n">plugin_source</span> <span class="ow">in</span> <span class="n">recommended_plugins</span><span class="p">:</span>
|
|
391
|
+
<span class="c1"># Check if plugin is already installed</span>
|
|
392
|
+
<span class="k">try</span><span class="p">:</span>
|
|
393
|
+
<span class="c1"># Try to import the plugin to check if it's installed</span>
|
|
394
|
+
<span class="n">plugin_name</span> <span class="o">=</span> <span class="n">plugin_source</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'/'</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
395
|
+
|
|
396
|
+
<span class="k">try</span><span class="p">:</span>
|
|
397
|
+
<span class="c1"># Use pkg_resources to check if package is installed</span>
|
|
398
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">pkg_resources</span>
|
|
399
|
+
<span class="n">pkg_resources</span><span class="o">.</span><span class="n">get_distribution</span><span class="p">(</span><span class="n">plugin_name</span><span class="p">)</span>
|
|
400
|
+
<span class="c1"># Plugin is already installed</span>
|
|
401
|
+
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"plugin"</span><span class="p">:</span> <span class="n">plugin_name</span><span class="p">,</span> <span class="s2">"status"</span><span class="p">:</span> <span class="s2">"already_installed"</span><span class="p">})</span>
|
|
402
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"Plugin already installed:"</span><span class="p">,</span> <span class="n">plugin_name</span><span class="p">)</span>
|
|
403
|
+
<span class="k">except</span> <span class="n">pkg_resources</span><span class="o">.</span><span class="n">DistributionNotFound</span><span class="p">:</span>
|
|
404
|
+
<span class="c1"># Plugin is not installed, get source info and install it</span>
|
|
405
|
+
<span class="k">try</span><span class="p">:</span>
|
|
406
|
+
<span class="c1"># Get the source information for this plugin</span>
|
|
407
|
+
<span class="n">source_info</span> <span class="o">=</span> <span class="n">plugin_source</span>
|
|
408
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Installing plugin </span><span class="si">{</span><span class="n">plugin_name</span><span class="si">}</span><span class="s2"> from source: </span><span class="si">{</span><span class="n">source_info</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
409
|
+
<span class="c1"># Determine installation source and path</span>
|
|
410
|
+
<span class="k">if</span> <span class="s1">'/'</span> <span class="ow">in</span> <span class="n">source_info</span><span class="p">:</span> <span class="c1"># GitHub repo format (user/repo)</span>
|
|
411
|
+
<span class="n">source</span> <span class="o">=</span> <span class="s1">'github'</span>
|
|
412
|
+
<span class="n">source_path</span> <span class="o">=</span> <span class="n">source_info</span>
|
|
413
|
+
<span class="n">remote_source</span> <span class="o">=</span> <span class="n">source_info</span>
|
|
414
|
+
<span class="k">else</span><span class="p">:</span> <span class="c1"># PyPI package</span>
|
|
415
|
+
<span class="n">source</span> <span class="o">=</span> <span class="s1">'pypi'</span>
|
|
416
|
+
<span class="n">source_path</span> <span class="o">=</span> <span class="kc">None</span>
|
|
417
|
+
<span class="n">remote_source</span> <span class="o">=</span> <span class="kc">None</span>
|
|
418
|
+
|
|
419
|
+
<span class="c1"># Install the plugin</span>
|
|
420
|
+
<span class="k">await</span> <span class="n">plugin_install</span><span class="p">(</span>
|
|
421
|
+
<span class="n">plugin_name</span><span class="p">,</span>
|
|
422
|
+
<span class="n">source</span><span class="p">,</span>
|
|
423
|
+
<span class="n">source_path</span><span class="p">,</span>
|
|
424
|
+
<span class="n">remote_source</span>
|
|
425
|
+
<span class="p">)</span>
|
|
426
|
+
|
|
427
|
+
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
428
|
+
<span class="s2">"plugin"</span><span class="p">:</span> <span class="n">plugin_name</span><span class="p">,</span>
|
|
429
|
+
<span class="s2">"status"</span><span class="p">:</span> <span class="s2">"success"</span><span class="p">,</span>
|
|
430
|
+
<span class="s2">"source"</span><span class="p">:</span> <span class="n">source</span><span class="p">,</span>
|
|
431
|
+
<span class="s2">"source_path"</span><span class="p">:</span> <span class="n">source_path</span>
|
|
432
|
+
<span class="p">})</span>
|
|
433
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
434
|
+
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
435
|
+
<span class="s2">"plugin"</span><span class="p">:</span> <span class="n">plugin_name</span><span class="p">,</span>
|
|
436
|
+
<span class="s2">"status"</span><span class="p">:</span> <span class="s2">"error"</span><span class="p">,</span>
|
|
437
|
+
<span class="s2">"message"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
|
|
438
|
+
<span class="s2">"source_info"</span><span class="p">:</span> <span class="n">source_info</span>
|
|
439
|
+
<span class="p">})</span>
|
|
440
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
441
|
+
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">({</span>
|
|
442
|
+
<span class="s2">"plugin"</span><span class="p">:</span> <span class="n">plugin_name</span><span class="p">,</span>
|
|
443
|
+
<span class="s2">"status"</span><span class="p">:</span> <span class="s2">"error"</span><span class="p">,</span>
|
|
444
|
+
<span class="s2">"message"</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Error checking installation: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">"</span>
|
|
445
|
+
<span class="p">})</span>
|
|
446
|
+
|
|
447
|
+
<span class="k">return</span> <span class="p">{</span><span class="s2">"results"</span><span class="p">:</span> <span class="n">results</span><span class="p">}</span>
|
|
448
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
449
|
+
<span class="k">return</span> <span class="p">{</span><span class="s2">"error"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)}</span></div>
|
|
450
|
+
|
|
451
|
+
|
|
452
|
+
</pre></div>
|
|
453
|
+
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
<footer>
|
|
457
|
+
|
|
458
|
+
<hr/>
|
|
459
|
+
|
|
460
|
+
<div role="contentinfo">
|
|
461
|
+
<p>© Copyright 2025, Jason Livesay.</p>
|
|
462
|
+
</div>
|
|
463
|
+
|
|
464
|
+
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
465
|
+
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
466
|
+
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
467
|
+
|
|
468
|
+
|
|
469
|
+
</footer>
|
|
470
|
+
</div>
|
|
471
|
+
</div>
|
|
472
|
+
</section>
|
|
473
|
+
</div>
|
|
474
|
+
<script>
|
|
475
|
+
jQuery(function () {
|
|
476
|
+
SphinxRtdTheme.Navigation.enable(true);
|
|
477
|
+
});
|
|
478
|
+
</script>
|
|
479
|
+
|
|
480
|
+
</body>
|
|
481
|
+
</html>
|