mindroot 9.11.0__py3-none-any.whl → 9.12.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/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/server.py +10 -1
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/METADATA +1 -1
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/RECORD +415 -8
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/WHEEL +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/entry_points.txt +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/licenses/LICENSE +0 -0
- {mindroot-9.11.0.dist-info → mindroot-9.12.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,620 @@
|
|
|
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.coreplugins.admin.agent_router — 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
|
+
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
|
43
|
+
<ul>
|
|
44
|
+
<li class="toctree-l1"><a class="reference internal" href="../../../../getting_started.html">Getting Started</a></li>
|
|
45
|
+
</ul>
|
|
46
|
+
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</nav>
|
|
50
|
+
|
|
51
|
+
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" style="background: #343131" >
|
|
52
|
+
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
53
|
+
<a href="../../../../index.html">MindRoot</a>
|
|
54
|
+
</nav>
|
|
55
|
+
|
|
56
|
+
<div class="wy-nav-content">
|
|
57
|
+
<div class="rst-content">
|
|
58
|
+
<div role="navigation" aria-label="Page navigation">
|
|
59
|
+
<ul class="wy-breadcrumbs">
|
|
60
|
+
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
|
61
|
+
<li class="breadcrumb-item"><a href="../../../index.html">Module code</a></li>
|
|
62
|
+
<li class="breadcrumb-item active">mindroot.coreplugins.admin.agent_router</li>
|
|
63
|
+
<li class="wy-breadcrumbs-aside">
|
|
64
|
+
</li>
|
|
65
|
+
</ul>
|
|
66
|
+
<hr/>
|
|
67
|
+
</div>
|
|
68
|
+
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
69
|
+
<div itemprop="articleBody">
|
|
70
|
+
|
|
71
|
+
<h1>Source code for mindroot.coreplugins.admin.agent_router</h1><div class="highlight"><pre>
|
|
72
|
+
<span></span><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">APIRouter</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">UploadFile</span><span class="p">,</span> <span class="n">File</span><span class="p">,</span> <span class="n">Form</span>
|
|
73
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">fastapi.responses</span><span class="w"> </span><span class="kn">import</span> <span class="n">StreamingResponse</span>
|
|
74
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">pydantic</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseModel</span>
|
|
75
|
+
<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>
|
|
76
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
|
|
77
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">.agent_importer</span><span class="w"> </span><span class="kn">import</span> <span class="n">scan_and_import_agents</span><span class="p">,</span> <span class="n">import_github_agent</span>
|
|
78
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">lib.providers.commands</span><span class="w"> </span><span class="kn">import</span> <span class="n">command_manager</span>
|
|
79
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">.persona_handler</span><span class="w"> </span><span class="kn">import</span> <span class="n">handle_persona_import</span><span class="p">,</span> <span class="n">import_persona_from_index</span>
|
|
80
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">traceback</span>
|
|
81
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">hashlib</span>
|
|
82
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">zipfile</span>
|
|
83
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">io</span>
|
|
84
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">tempfile</span>
|
|
85
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">time</span>
|
|
86
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">Any</span>
|
|
87
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">datetime</span><span class="w"> </span><span class="kn">import</span> <span class="n">datetime</span>
|
|
88
|
+
|
|
89
|
+
<span class="n">router</span> <span class="o">=</span> <span class="n">APIRouter</span><span class="p">()</span>
|
|
90
|
+
|
|
91
|
+
<span class="n">BASE_DIR</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s1">'data/agents'</span><span class="p">)</span>
|
|
92
|
+
<span class="n">local_dir</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="s2">"local"</span>
|
|
93
|
+
<span class="n">shared_dir</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="s2">"shared"</span>
|
|
94
|
+
<span class="n">local_dir</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
95
|
+
<span class="n">shared_dir</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
96
|
+
|
|
97
|
+
<span class="c1"># Cache for agent ownership info</span>
|
|
98
|
+
<span class="n">_agent_ownership_cache</span> <span class="o">=</span> <span class="kc">None</span>
|
|
99
|
+
<span class="n">_cache_timestamp</span> <span class="o">=</span> <span class="mi">0</span>
|
|
100
|
+
|
|
101
|
+
<div class="viewcode-block" id="GitHubImportRequest">
|
|
102
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.GitHubImportRequest">[docs]</a>
|
|
103
|
+
<span class="k">class</span><span class="w"> </span><span class="nc">GitHubImportRequest</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
|
|
104
|
+
<span class="n">repo_path</span><span class="p">:</span> <span class="nb">str</span> <span class="c1"># Format: "owner/repo"</span>
|
|
105
|
+
<span class="n">scope</span><span class="p">:</span> <span class="nb">str</span>
|
|
106
|
+
<span class="n">tag</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span></div>
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
<div class="viewcode-block" id="scan_agent_ownership">
|
|
110
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.scan_agent_ownership">[docs]</a>
|
|
111
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">scan_agent_ownership</span><span class="p">()</span> <span class="o">-></span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]:</span>
|
|
112
|
+
<span class="w"> </span><span class="sd">"""Scan all agents and build ownership information"""</span>
|
|
113
|
+
<span class="n">ownership_info</span> <span class="o">=</span> <span class="p">{</span>
|
|
114
|
+
<span class="s1">'agents'</span><span class="p">:</span> <span class="p">{},</span>
|
|
115
|
+
<span class="s1">'scanned_at'</span><span class="p">:</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">isoformat</span><span class="p">(),</span>
|
|
116
|
+
<span class="s1">'total_agents'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
|
117
|
+
<span class="s1">'owned_agents'</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
|
118
|
+
<span class="s1">'external_agents'</span><span class="p">:</span> <span class="mi">0</span>
|
|
119
|
+
<span class="p">}</span>
|
|
120
|
+
|
|
121
|
+
<span class="c1"># Scan both local and shared directories</span>
|
|
122
|
+
<span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'shared'</span><span class="p">]:</span>
|
|
123
|
+
<span class="n">scope_dir</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="n">scope</span>
|
|
124
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">scope_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
125
|
+
<span class="k">continue</span>
|
|
126
|
+
|
|
127
|
+
<span class="k">for</span> <span class="n">agent_dir</span> <span class="ow">in</span> <span class="n">scope_dir</span><span class="o">.</span><span class="n">iterdir</span><span class="p">():</span>
|
|
128
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">agent_dir</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
|
|
129
|
+
<span class="k">continue</span>
|
|
130
|
+
|
|
131
|
+
<span class="n">agent_json_path</span> <span class="o">=</span> <span class="n">agent_dir</span> <span class="o">/</span> <span class="s1">'agent.json'</span>
|
|
132
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">agent_json_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
133
|
+
<span class="k">continue</span>
|
|
134
|
+
|
|
135
|
+
<span class="k">try</span><span class="p">:</span>
|
|
136
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">agent_json_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>
|
|
137
|
+
<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>
|
|
138
|
+
|
|
139
|
+
<span class="n">agent_name</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">'name'</span><span class="p">,</span> <span class="n">agent_dir</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
140
|
+
|
|
141
|
+
<span class="c1"># Extract ownership information</span>
|
|
142
|
+
<span class="n">creator</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">'creator'</span><span class="p">)</span>
|
|
143
|
+
<span class="n">owner</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">'owner'</span><span class="p">)</span>
|
|
144
|
+
<span class="n">registry_owner</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">'registry_owner'</span><span class="p">)</span>
|
|
145
|
+
<span class="n">created_by</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">'created_by'</span><span class="p">)</span>
|
|
146
|
+
|
|
147
|
+
<span class="c1"># Determine if this agent has external ownership</span>
|
|
148
|
+
<span class="n">has_external_owner</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">creator</span> <span class="ow">or</span> <span class="n">owner</span> <span class="ow">or</span> <span class="n">registry_owner</span> <span class="ow">or</span> <span class="n">created_by</span><span class="p">)</span>
|
|
149
|
+
|
|
150
|
+
<span class="n">ownership_info</span><span class="p">[</span><span class="s1">'agents'</span><span class="p">][</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">scope</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s2">"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
|
|
151
|
+
<span class="s1">'name'</span><span class="p">:</span> <span class="n">agent_name</span><span class="p">,</span>
|
|
152
|
+
<span class="s1">'scope'</span><span class="p">:</span> <span class="n">scope</span><span class="p">,</span>
|
|
153
|
+
<span class="s1">'creator'</span><span class="p">:</span> <span class="n">creator</span><span class="p">,</span>
|
|
154
|
+
<span class="s1">'owner'</span><span class="p">:</span> <span class="n">owner</span><span class="p">,</span>
|
|
155
|
+
<span class="s1">'registry_owner'</span><span class="p">:</span> <span class="n">registry_owner</span><span class="p">,</span>
|
|
156
|
+
<span class="s1">'created_by'</span><span class="p">:</span> <span class="n">created_by</span><span class="p">,</span>
|
|
157
|
+
<span class="s1">'has_external_owner'</span><span class="p">:</span> <span class="n">has_external_owner</span><span class="p">,</span>
|
|
158
|
+
<span class="s1">'description'</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">'description'</span><span class="p">,</span> <span class="s1">''</span><span class="p">),</span>
|
|
159
|
+
<span class="s1">'version'</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">'version'</span><span class="p">,</span> <span class="s1">'1.0.0'</span><span class="p">)</span>
|
|
160
|
+
<span class="p">}</span>
|
|
161
|
+
|
|
162
|
+
<span class="n">ownership_info</span><span class="p">[</span><span class="s1">'total_agents'</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
163
|
+
<span class="k">if</span> <span class="n">has_external_owner</span><span class="p">:</span>
|
|
164
|
+
<span class="n">ownership_info</span><span class="p">[</span><span class="s1">'external_agents'</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
165
|
+
<span class="k">else</span><span class="p">:</span>
|
|
166
|
+
<span class="n">ownership_info</span><span class="p">[</span><span class="s1">'owned_agents'</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
167
|
+
|
|
168
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
169
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error reading agent </span><span class="si">{</span><span class="n">agent_dir</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
170
|
+
<span class="k">continue</span>
|
|
171
|
+
|
|
172
|
+
<span class="k">return</span> <span class="n">ownership_info</span></div>
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
<div class="viewcode-block" id="load_persona_data">
|
|
176
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.load_persona_data">[docs]</a>
|
|
177
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">load_persona_data</span><span class="p">(</span><span class="n">persona_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">dict</span><span class="p">:</span>
|
|
178
|
+
<span class="w"> </span><span class="sd">"""Load persona data from local or shared directory"""</span>
|
|
179
|
+
<span class="c1"># Handle registry personas: registry/owner/name</span>
|
|
180
|
+
<span class="k">if</span> <span class="n">persona_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s1">'registry/'</span><span class="p">):</span>
|
|
181
|
+
<span class="n">persona_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="sa">f</span><span class="s1">'personas/</span><span class="si">{</span><span class="n">persona_name</span><span class="si">}</span><span class="s1">/persona.json'</span><span class="p">)</span>
|
|
182
|
+
<span class="k">if</span> <span class="n">persona_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
183
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">persona_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>
|
|
184
|
+
<span class="k">return</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>
|
|
185
|
+
|
|
186
|
+
<span class="c1"># Fallback to existing local/shared pattern (UNCHANGED)</span>
|
|
187
|
+
<span class="n">persona_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s1">'personas/local'</span><span class="p">)</span> <span class="o">/</span> <span class="n">persona_name</span> <span class="o">/</span> <span class="s1">'persona.json'</span>
|
|
188
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">persona_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
189
|
+
<span class="n">persona_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s1">'personas/shared'</span><span class="p">)</span> <span class="o">/</span> <span class="n">persona_name</span> <span class="o">/</span> <span class="s1">'persona.json'</span>
|
|
190
|
+
|
|
191
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">persona_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
192
|
+
<span class="k">return</span> <span class="p">{}</span>
|
|
193
|
+
|
|
194
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">persona_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>
|
|
195
|
+
<span class="k">return</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></div>
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
<div class="viewcode-block" id="load_agent_data">
|
|
199
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.load_agent_data">[docs]</a>
|
|
200
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">load_agent_data</span><span class="p">(</span><span class="n">agent_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-></span> <span class="nb">dict</span><span class="p">:</span>
|
|
201
|
+
<span class="w"> </span><span class="sd">"""Load agent data from local or shared directory"""</span>
|
|
202
|
+
<span class="n">agent_path</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="s1">'local'</span> <span class="o">/</span> <span class="n">agent_name</span> <span class="o">/</span> <span class="s1">'agent.json'</span>
|
|
203
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">agent_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
204
|
+
<span class="n">agent_path</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="s1">'shared'</span> <span class="o">/</span> <span class="n">agent_name</span> <span class="o">/</span> <span class="s1">'agent.json'</span>
|
|
205
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">agent_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
206
|
+
<span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Agent </span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s1"> not found'</span><span class="p">)</span>
|
|
207
|
+
|
|
208
|
+
<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>
|
|
209
|
+
<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>
|
|
210
|
+
|
|
211
|
+
<span class="c1"># Get the persona data if specified</span>
|
|
212
|
+
<span class="k">if</span> <span class="s1">'persona'</span> <span class="ow">in</span> <span class="n">agent_data</span><span class="p">:</span>
|
|
213
|
+
<span class="n">persona_data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">load_persona_data</span><span class="p">(</span><span class="n">agent_data</span><span class="p">[</span><span class="s1">'persona'</span><span class="p">])</span>
|
|
214
|
+
<span class="n">agent_data</span><span class="p">[</span><span class="s1">'persona'</span><span class="p">]</span> <span class="o">=</span> <span class="n">persona_data</span>
|
|
215
|
+
|
|
216
|
+
<span class="k">return</span> <span class="n">agent_data</span></div>
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
<div class="viewcode-block" id="get_full_agent_data">
|
|
220
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.get_full_agent_data">[docs]</a>
|
|
221
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'/agents/full/</span><span class="si">{scope}</span><span class="s1">/</span><span class="si">{name}</span><span class="s1">'</span><span class="p">)</span>
|
|
222
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_full_agent_data</span><span class="p">(</span><span class="n">scope</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
|
|
223
|
+
<span class="w"> </span><span class="sd">"""Get complete agent data including persona"""</span>
|
|
224
|
+
<span class="k">if</span> <span class="n">scope</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'shared'</span><span class="p">]:</span>
|
|
225
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Invalid scope'</span><span class="p">)</span>
|
|
226
|
+
|
|
227
|
+
<span class="k">try</span><span class="p">:</span>
|
|
228
|
+
<span class="n">agent_data</span> <span class="o">=</span> <span class="k">await</span> <span class="n">load_agent_data</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
229
|
+
<span class="k">return</span> <span class="n">agent_data</span>
|
|
230
|
+
<span class="k">except</span> <span class="ne">FileNotFoundError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
231
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
232
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
233
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
<div class="viewcode-block" id="get_command_providers">
|
|
237
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.get_command_providers">[docs]</a>
|
|
238
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'/command-providers'</span><span class="p">)</span>
|
|
239
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">get_command_providers</span><span class="p">():</span>
|
|
240
|
+
<span class="w"> </span><span class="sd">"""Get all available providers for each command"""</span>
|
|
241
|
+
<span class="n">result</span> <span class="o">=</span> <span class="p">{}</span>
|
|
242
|
+
<span class="k">for</span> <span class="n">command_name</span><span class="p">,</span> <span class="n">providers</span> <span class="ow">in</span> <span class="n">command_manager</span><span class="o">.</span><span class="n">functions</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
|
243
|
+
<span class="n">result</span><span class="p">[</span><span class="n">command_name</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span>
|
|
244
|
+
<span class="n">p</span><span class="p">[</span><span class="s1">'provider'</span><span class="p">]</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">providers</span>
|
|
245
|
+
<span class="p">]</span>
|
|
246
|
+
<span class="k">return</span> <span class="n">result</span></div>
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
<div class="viewcode-block" id="read_agent">
|
|
250
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.read_agent">[docs]</a>
|
|
251
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'/agents/</span><span class="si">{scope}</span><span class="s1">/</span><span class="si">{name}</span><span class="s1">'</span><span class="p">)</span>
|
|
252
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">read_agent</span><span class="p">(</span><span class="n">scope</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
|
|
253
|
+
<span class="k">if</span> <span class="n">scope</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'shared'</span><span class="p">]:</span>
|
|
254
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Invalid scope'</span><span class="p">)</span>
|
|
255
|
+
<span class="n">agent_path</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="n">scope</span> <span class="o">/</span> <span class="n">name</span> <span class="o">/</span> <span class="s1">'agent.json'</span>
|
|
256
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">agent_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
257
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Agent not found'</span><span class="p">)</span>
|
|
258
|
+
<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>
|
|
259
|
+
<span class="n">agent</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>
|
|
260
|
+
<span class="k">return</span> <span class="n">agent</span></div>
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
<div class="viewcode-block" id="list_agents">
|
|
264
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.list_agents">[docs]</a>
|
|
265
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'/agents/</span><span class="si">{scope}</span><span class="s1">'</span><span class="p">)</span>
|
|
266
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">list_agents</span><span class="p">(</span><span class="n">scope</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
|
|
267
|
+
<span class="k">if</span> <span class="n">scope</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'shared'</span><span class="p">]:</span>
|
|
268
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Invalid scope'</span><span class="p">)</span>
|
|
269
|
+
<span class="n">scope_dir</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="n">scope</span>
|
|
270
|
+
<span class="n">agents</span> <span class="o">=</span> <span class="p">[]</span>
|
|
271
|
+
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">scope_dir</span><span class="o">.</span><span class="n">iterdir</span><span class="p">():</span>
|
|
272
|
+
<span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
|
|
273
|
+
<span class="n">agent_json_path</span> <span class="o">=</span> <span class="n">p</span> <span class="o">/</span> <span class="s1">'agent.json'</span>
|
|
274
|
+
<span class="k">if</span> <span class="n">agent_json_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
275
|
+
<span class="k">try</span><span class="p">:</span>
|
|
276
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">agent_json_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>
|
|
277
|
+
<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>
|
|
278
|
+
<span class="n">agents</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">agent_data</span><span class="p">)</span>
|
|
279
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
280
|
+
<span class="c1"># If we can't read the agent.json, just include the name</span>
|
|
281
|
+
<span class="n">agents</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s1">'name'</span><span class="p">:</span> <span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="p">})</span>
|
|
282
|
+
<span class="k">return</span> <span class="n">agents</span></div>
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
<div class="viewcode-block" id="get_agent_ownership_info">
|
|
286
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.get_agent_ownership_info">[docs]</a>
|
|
287
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'/agents/ownership-info'</span><span class="p">)</span>
|
|
288
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">get_agent_ownership_info</span><span class="p">():</span>
|
|
289
|
+
<span class="w"> </span><span class="sd">"""Get cached ownership information for all agents"""</span>
|
|
290
|
+
<span class="k">global</span> <span class="n">_agent_ownership_cache</span><span class="p">,</span> <span class="n">_cache_timestamp</span>
|
|
291
|
+
|
|
292
|
+
<span class="c1"># Cache for 5 minutes</span>
|
|
293
|
+
<span class="n">cache_duration</span> <span class="o">=</span> <span class="mi">300</span> <span class="c1"># 5 minutes in seconds</span>
|
|
294
|
+
<span class="n">current_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
|
295
|
+
|
|
296
|
+
<span class="k">if</span> <span class="p">(</span><span class="n">_agent_ownership_cache</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span>
|
|
297
|
+
<span class="n">current_time</span> <span class="o">-</span> <span class="n">_cache_timestamp</span> <span class="o">></span> <span class="n">cache_duration</span><span class="p">):</span>
|
|
298
|
+
|
|
299
|
+
<span class="n">_agent_ownership_cache</span> <span class="o">=</span> <span class="n">scan_agent_ownership</span><span class="p">()</span>
|
|
300
|
+
<span class="n">_cache_timestamp</span> <span class="o">=</span> <span class="n">current_time</span>
|
|
301
|
+
|
|
302
|
+
<span class="k">return</span> <span class="n">_agent_ownership_cache</span></div>
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
<div class="viewcode-block" id="refresh_agent_ownership_cache">
|
|
306
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.refresh_agent_ownership_cache">[docs]</a>
|
|
307
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s1">'/agents/refresh-ownership-cache'</span><span class="p">)</span>
|
|
308
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">refresh_agent_ownership_cache</span><span class="p">():</span>
|
|
309
|
+
<span class="w"> </span><span class="sd">"""Force refresh of the agent ownership cache"""</span>
|
|
310
|
+
<span class="k">global</span> <span class="n">_agent_ownership_cache</span><span class="p">,</span> <span class="n">_cache_timestamp</span>
|
|
311
|
+
|
|
312
|
+
<span class="n">_agent_ownership_cache</span> <span class="o">=</span> <span class="n">scan_agent_ownership</span><span class="p">()</span>
|
|
313
|
+
<span class="n">_cache_timestamp</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
|
314
|
+
|
|
315
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
316
|
+
<span class="s1">'success'</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
317
|
+
<span class="s1">'message'</span><span class="p">:</span> <span class="s1">'Agent ownership cache refreshed'</span><span class="p">,</span>
|
|
318
|
+
<span class="s1">'data'</span><span class="p">:</span> <span class="n">_agent_ownership_cache</span>
|
|
319
|
+
<span class="p">}</span></div>
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
<div class="viewcode-block" id="create_agent">
|
|
323
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.create_agent">[docs]</a>
|
|
324
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s1">'/agents/</span><span class="si">{scope}</span><span class="s1">'</span><span class="p">)</span>
|
|
325
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">create_agent</span><span class="p">(</span><span class="n">scope</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agent</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">Form</span><span class="p">(</span><span class="o">...</span><span class="p">)):</span>
|
|
326
|
+
<span class="k">try</span><span class="p">:</span>
|
|
327
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Creating agent in scope: </span><span class="si">{</span><span class="n">scope</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
328
|
+
<span class="n">agent_data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
|
|
329
|
+
<span class="k">if</span> <span class="n">scope</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'shared'</span><span class="p">]:</span>
|
|
330
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Invalid scope'</span><span class="p">)</span>
|
|
331
|
+
|
|
332
|
+
<span class="n">agent_name</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">'name'</span><span class="p">)</span>
|
|
333
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">agent_name</span><span class="p">:</span>
|
|
334
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Agent name is required'</span><span class="p">)</span>
|
|
335
|
+
|
|
336
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Agent name: </span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
337
|
+
<span class="k">if</span> <span class="s2">"indexName"</span> <span class="ow">in</span> <span class="n">agent_data</span> <span class="ow">and</span> <span class="n">agent_data</span><span class="p">[</span><span class="s2">"indexName"</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
338
|
+
<span class="nb">print</span><span class="p">(</span><span class="s2">"Import agent from index: "</span> <span class="o">+</span> <span class="n">agent_data</span><span class="p">[</span><span class="s2">"indexName"</span><span class="p">])</span>
|
|
339
|
+
<span class="n">import_persona_from_index</span><span class="p">(</span><span class="n">agent_data</span><span class="p">[</span><span class="s2">"indexName"</span><span class="p">],</span> <span class="n">agent_data</span><span class="p">[</span><span class="s1">'persona'</span><span class="p">])</span>
|
|
340
|
+
|
|
341
|
+
<span class="k">if</span> <span class="s1">'persona'</span> <span class="ow">in</span> <span class="n">agent_data</span><span class="p">:</span>
|
|
342
|
+
<span class="c1"># This will either return the persona name or handle the import</span>
|
|
343
|
+
<span class="c1"># and return the name</span>
|
|
344
|
+
<span class="c1"># Extract owner information for registry personas</span>
|
|
345
|
+
<span class="n">owner</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">'registry_owner'</span><span class="p">)</span> <span class="ow">or</span> <span class="n">agent_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'owner'</span><span class="p">)</span> <span class="ow">or</span> <span class="n">agent_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'creator'</span><span class="p">)</span>
|
|
346
|
+
<span class="n">persona_scope</span> <span class="o">=</span> <span class="s1">'registry'</span> <span class="k">if</span> <span class="n">owner</span> <span class="k">else</span> <span class="n">scope</span>
|
|
347
|
+
|
|
348
|
+
<span class="n">persona_name</span> <span class="o">=</span> <span class="n">handle_persona_import</span><span class="p">(</span><span class="n">agent_data</span><span class="p">[</span><span class="s1">'persona'</span><span class="p">],</span> <span class="n">persona_scope</span><span class="p">,</span> <span class="n">owner</span><span class="p">)</span>
|
|
349
|
+
|
|
350
|
+
<span class="n">agent_data</span><span class="p">[</span><span class="s1">'persona'</span><span class="p">]</span> <span class="o">=</span> <span class="n">persona_name</span>
|
|
351
|
+
|
|
352
|
+
<span class="c1"># Ensure recommended_plugins is present and is a list (also handle legacy required_plugins)</span>
|
|
353
|
+
<span class="k">if</span> <span class="s1">'required_plugins'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">agent_data</span><span class="p">:</span>
|
|
354
|
+
<span class="n">agent_data</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
355
|
+
<span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agent_data</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span>
|
|
356
|
+
<span class="n">agent_data</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">agent_data</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">])</span>
|
|
357
|
+
|
|
358
|
+
<span class="c1"># Ensure preferred_providers is present and is a list</span>
|
|
359
|
+
<span class="k">if</span> <span class="s1">'preferred_providers'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">agent_data</span><span class="p">:</span>
|
|
360
|
+
<span class="n">agent_data</span><span class="p">[</span><span class="s1">'recommended_plugins'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
361
|
+
<span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agent_data</span><span class="p">[</span><span class="s1">'recommended_plugins'</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span>
|
|
362
|
+
<span class="n">agent_data</span><span class="p">[</span><span class="s1">'recommended_plugins'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">agent_data</span><span class="p">[</span><span class="s1">'recommended_plugins'</span><span class="p">])</span>
|
|
363
|
+
|
|
364
|
+
<span class="c1"># Ensure preferred_providers is present and is a list</span>
|
|
365
|
+
<span class="k">if</span> <span class="s1">'preferred_providers'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">agent_data</span><span class="p">:</span>
|
|
366
|
+
<span class="n">agent_data</span><span class="p">[</span><span class="s1">'preferred_providers'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
367
|
+
<span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agent_data</span><span class="p">[</span><span class="s1">'preferred_providers'</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span>
|
|
368
|
+
<span class="n">agent_data</span><span class="p">[</span><span class="s1">'preferred_providers'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">agent_data</span><span class="p">[</span><span class="s1">'preferred_providers'</span><span class="p">])</span>
|
|
369
|
+
|
|
370
|
+
<span class="n">agent_path</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="n">scope</span> <span class="o">/</span> <span class="n">agent_name</span> <span class="o">/</span> <span class="s1">'agent.json'</span>
|
|
371
|
+
<span class="k">if</span> <span class="n">agent_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
372
|
+
<span class="c1"># Check if overwrite parameter is provided</span>
|
|
373
|
+
<span class="n">overwrite</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">'overwrite'</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
|
374
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">overwrite</span><span class="p">:</span>
|
|
375
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Agent already exists'</span><span class="p">)</span>
|
|
376
|
+
<span class="k">else</span><span class="p">:</span>
|
|
377
|
+
<span class="c1"># If overwrite is True, we'll proceed to overwrite the existing agent</span>
|
|
378
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Overwriting existing agent: </span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
379
|
+
|
|
380
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Creating agent directory: </span><span class="si">{</span><span class="n">agent_path</span><span class="o">.</span><span class="n">parent</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
381
|
+
<span class="n">agent_path</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
382
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Writing agent file: </span><span class="si">{</span><span class="n">agent_path</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
383
|
+
<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">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
384
|
+
<span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent_data</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
|
385
|
+
|
|
386
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Successfully created agent: </span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
387
|
+
<span class="k">return</span> <span class="p">{</span><span class="s1">'status'</span><span class="p">:</span> <span class="s1">'success'</span><span class="p">}</span>
|
|
388
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
389
|
+
<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>
|
|
390
|
+
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Error creating agent: </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="se">\n</span><span class="si">{</span><span class="n">trace</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
|
391
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s1">'Internal server error: </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="se">\n</span><span class="s1">Trace: </span><span class="si">{</span><span class="n">trace</span><span class="si">}</span><span class="s1">'</span><span class="p">)</span></div>
|
|
392
|
+
|
|
393
|
+
<div class="viewcode-block" id="update_agent">
|
|
394
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.update_agent">[docs]</a>
|
|
395
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s1">'/agents/</span><span class="si">{scope}</span><span class="s1">/</span><span class="si">{name}</span><span class="s1">'</span><span class="p">)</span>
|
|
396
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">update_agent</span><span class="p">(</span><span class="n">scope</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">agent</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">Form</span><span class="p">(</span><span class="o">...</span><span class="p">)):</span>
|
|
397
|
+
<span class="k">try</span><span class="p">:</span>
|
|
398
|
+
<span class="n">agent</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">agent</span><span class="p">)</span>
|
|
399
|
+
<span class="k">if</span> <span class="n">scope</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'shared'</span><span class="p">]:</span>
|
|
400
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Invalid scope'</span><span class="p">)</span>
|
|
401
|
+
|
|
402
|
+
<span class="c1"># Ensure recommended_plugins is present and is a list (also handle legacy required_plugins)</span>
|
|
403
|
+
<span class="k">if</span> <span class="s1">'required_plugins'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">agent</span><span class="p">:</span>
|
|
404
|
+
<span class="n">agent</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
405
|
+
<span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agent</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span>
|
|
406
|
+
<span class="n">agent</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">agent</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">])</span>
|
|
407
|
+
|
|
408
|
+
<span class="c1"># Ensure recommended_plugins is present and is a list</span>
|
|
409
|
+
<span class="k">if</span> <span class="s1">'recommended_plugins'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">agent</span><span class="p">:</span>
|
|
410
|
+
<span class="n">agent</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
411
|
+
<span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agent</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span>
|
|
412
|
+
<span class="n">agent</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">agent</span><span class="p">[</span><span class="s1">'required_plugins'</span><span class="p">])</span>
|
|
413
|
+
|
|
414
|
+
<span class="k">if</span> <span class="s1">'preferred_providers'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">agent</span><span class="p">:</span>
|
|
415
|
+
<span class="n">agent</span><span class="p">[</span><span class="s1">'preferred_providers'</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
416
|
+
<span class="k">elif</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">agent</span><span class="p">[</span><span class="s1">'preferred_providers'</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span>
|
|
417
|
+
<span class="n">agent</span><span class="p">[</span><span class="s1">'preferred_providers'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">agent</span><span class="p">[</span><span class="s1">'preferred_providers'</span><span class="p">])</span>
|
|
418
|
+
|
|
419
|
+
<span class="n">agent_path</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="n">scope</span> <span class="o">/</span> <span class="n">name</span> <span class="o">/</span> <span class="s1">'agent.json'</span>
|
|
420
|
+
<span class="n">without_hash</span> <span class="o">=</span> <span class="n">agent</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
|
|
421
|
+
<span class="n">without_hash</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">'hashver'</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="c1"># Remove the hash if it exists</span>
|
|
422
|
+
|
|
423
|
+
<span class="n">consistent_json</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">without_hash</span><span class="p">,</span> <span class="n">sort_keys</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">separators</span><span class="o">=</span><span class="p">(</span><span class="s1">','</span><span class="p">,</span> <span class="s1">':'</span><span class="p">))</span>
|
|
424
|
+
<span class="n">hashver</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">consistent_json</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">))</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()[:</span><span class="mi">4</span><span class="p">]</span>
|
|
425
|
+
|
|
426
|
+
<span class="n">agent</span><span class="p">[</span><span class="s1">'hashver'</span><span class="p">]</span> <span class="o">=</span> <span class="n">hashver</span>
|
|
427
|
+
|
|
428
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">agent_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
429
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Agent not found'</span><span class="p">)</span>
|
|
430
|
+
<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">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
|
|
431
|
+
<span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">agent</span><span class="p">,</span> <span class="n">f</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
|
432
|
+
<span class="k">return</span> <span class="p">{</span><span class="s1">'status'</span><span class="p">:</span> <span class="s1">'success'</span><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="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Internal server error '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span></div>
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
<div class="viewcode-block" id="ScanDirectoryRequest">
|
|
438
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.ScanDirectoryRequest">[docs]</a>
|
|
439
|
+
<span class="k">class</span><span class="w"> </span><span class="nc">ScanDirectoryRequest</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
|
|
440
|
+
<span class="n">directory</span><span class="p">:</span> <span class="nb">str</span>
|
|
441
|
+
<span class="n">scope</span><span class="p">:</span> <span class="nb">str</span></div>
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
<div class="viewcode-block" id="scan_and_import_agents_endpoint">
|
|
445
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.scan_and_import_agents_endpoint">[docs]</a>
|
|
446
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s1">'/scan-and-import-agents'</span><span class="p">)</span>
|
|
447
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">scan_and_import_agents_endpoint</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">ScanDirectoryRequest</span><span class="p">):</span>
|
|
448
|
+
<span class="k">try</span><span class="p">:</span>
|
|
449
|
+
<span class="n">result</span> <span class="o">=</span> <span class="n">scan_and_import_agents</span><span class="p">(</span><span class="n">Path</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">directory</span><span class="p">),</span> <span class="n">request</span><span class="o">.</span><span class="n">scope</span><span class="p">)</span>
|
|
450
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
451
|
+
<span class="s1">'success'</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
452
|
+
<span class="s1">'message'</span><span class="p">:</span> <span class="sa">f</span><span class="s2">"Imported </span><span class="si">{</span><span class="n">result</span><span class="p">[</span><span class="s1">'total_imported'</span><span class="p">]</span><span class="si">}</span><span class="s2"> out of </span><span class="si">{</span><span class="n">result</span><span class="p">[</span><span class="s1">'total_discovered'</span><span class="p">]</span><span class="si">}</span><span class="s2"> discovered agents"</span><span class="p">,</span>
|
|
453
|
+
<span class="s1">'imported_agents'</span><span class="p">:</span> <span class="n">result</span><span class="p">[</span><span class="s1">'imported_agents'</span><span class="p">]</span>
|
|
454
|
+
<span class="p">}</span>
|
|
455
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
456
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
457
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
458
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error during import: </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>
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
<div class="viewcode-block" id="import_github_agent_endpoint">
|
|
462
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.import_github_agent_endpoint">[docs]</a>
|
|
463
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s1">'/import-github-agent'</span><span class="p">)</span>
|
|
464
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">import_github_agent_endpoint</span><span class="p">(</span><span class="n">request</span><span class="p">:</span> <span class="n">GitHubImportRequest</span><span class="p">):</span>
|
|
465
|
+
<span class="k">try</span><span class="p">:</span>
|
|
466
|
+
<span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">scope</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'shared'</span><span class="p">]:</span>
|
|
467
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Invalid scope'</span><span class="p">)</span>
|
|
468
|
+
|
|
469
|
+
<span class="n">result</span> <span class="o">=</span> <span class="n">import_github_agent</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">repo_path</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">scope</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">tag</span><span class="p">)</span>
|
|
470
|
+
|
|
471
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s1">'success'</span><span class="p">]:</span>
|
|
472
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="n">result</span><span class="p">[</span><span class="s1">'message'</span><span class="p">])</span>
|
|
473
|
+
|
|
474
|
+
<span class="k">return</span> <span class="n">result</span>
|
|
475
|
+
|
|
476
|
+
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
477
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
478
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
479
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error during GitHub import: </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>
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
<div class="viewcode-block" id="export_agent_zip">
|
|
483
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.export_agent_zip">[docs]</a>
|
|
484
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'/agents/</span><span class="si">{scope}</span><span class="s1">/</span><span class="si">{name}</span><span class="s1">/export'</span><span class="p">)</span>
|
|
485
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">export_agent_zip</span><span class="p">(</span><span class="n">scope</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
|
|
486
|
+
<span class="w"> </span><span class="sd">"""Export an agent as a zip file"""</span>
|
|
487
|
+
<span class="k">if</span> <span class="n">scope</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'shared'</span><span class="p">]:</span>
|
|
488
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Invalid scope'</span><span class="p">)</span>
|
|
489
|
+
|
|
490
|
+
<span class="n">agent_dir</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="n">scope</span> <span class="o">/</span> <span class="n">name</span>
|
|
491
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">agent_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
492
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">404</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Agent not found'</span><span class="p">)</span>
|
|
493
|
+
|
|
494
|
+
<span class="k">try</span><span class="p">:</span>
|
|
495
|
+
<span class="c1"># Create zip file in memory</span>
|
|
496
|
+
<span class="n">zip_buffer</span> <span class="o">=</span> <span class="n">io</span><span class="o">.</span><span class="n">BytesIO</span><span class="p">()</span>
|
|
497
|
+
|
|
498
|
+
<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_buffer</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">,</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZIP_DEFLATED</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_file</span><span class="p">:</span>
|
|
499
|
+
<span class="c1"># Add all files from the agent directory</span>
|
|
500
|
+
<span class="k">for</span> <span class="n">file_path</span> <span class="ow">in</span> <span class="n">agent_dir</span><span class="o">.</span><span class="n">rglob</span><span class="p">(</span><span class="s1">'*'</span><span class="p">):</span>
|
|
501
|
+
<span class="k">if</span> <span class="n">file_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
|
|
502
|
+
<span class="c1"># Use relative path within the zip</span>
|
|
503
|
+
<span class="n">arcname</span> <span class="o">=</span> <span class="n">file_path</span><span class="o">.</span><span class="n">relative_to</span><span class="p">(</span><span class="n">agent_dir</span><span class="p">)</span>
|
|
504
|
+
<span class="n">zip_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">arcname</span><span class="p">)</span>
|
|
505
|
+
|
|
506
|
+
<span class="n">zip_buffer</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
507
|
+
|
|
508
|
+
<span class="c1"># Return as streaming response</span>
|
|
509
|
+
<span class="k">return</span> <span class="n">StreamingResponse</span><span class="p">(</span>
|
|
510
|
+
<span class="n">io</span><span class="o">.</span><span class="n">BytesIO</span><span class="p">(</span><span class="n">zip_buffer</span><span class="o">.</span><span class="n">read</span><span class="p">()),</span>
|
|
511
|
+
<span class="n">media_type</span><span class="o">=</span><span class="s1">'application/zip'</span><span class="p">,</span>
|
|
512
|
+
<span class="n">headers</span><span class="o">=</span><span class="p">{</span><span class="s1">'Content-Disposition'</span><span class="p">:</span> <span class="sa">f</span><span class="s1">'attachment; filename="</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s1">_agent.zip"'</span><span class="p">}</span>
|
|
513
|
+
<span class="p">)</span>
|
|
514
|
+
|
|
515
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
516
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error creating zip: </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>
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
<div class="viewcode-block" id="import_agent_zip">
|
|
520
|
+
<a class="viewcode-back" href="../../../../source/mindroot.coreplugins.admin.html#mindroot.coreplugins.admin.agent_router.import_agent_zip">[docs]</a>
|
|
521
|
+
<span class="nd">@router</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s1">'/agents/</span><span class="si">{scope}</span><span class="s1">/import-zip'</span><span class="p">)</span>
|
|
522
|
+
<span class="k">async</span> <span class="k">def</span><span class="w"> </span><span class="nf">import_agent_zip</span><span class="p">(</span><span class="n">scope</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">file</span><span class="p">:</span> <span class="n">UploadFile</span> <span class="o">=</span> <span class="n">File</span><span class="p">(</span><span class="o">...</span><span class="p">)):</span>
|
|
523
|
+
<span class="w"> </span><span class="sd">"""Import an agent from a zip file"""</span>
|
|
524
|
+
<span class="k">if</span> <span class="n">scope</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'local'</span><span class="p">,</span> <span class="s1">'shared'</span><span class="p">]:</span>
|
|
525
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Invalid scope'</span><span class="p">)</span>
|
|
526
|
+
|
|
527
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">file</span><span class="o">.</span><span class="n">filename</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">'.zip'</span><span class="p">):</span>
|
|
528
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'File must be a zip file'</span><span class="p">)</span>
|
|
529
|
+
|
|
530
|
+
<span class="k">try</span><span class="p">:</span>
|
|
531
|
+
<span class="c1"># Read the uploaded file</span>
|
|
532
|
+
<span class="n">content</span> <span class="o">=</span> <span class="k">await</span> <span class="n">file</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
|
|
533
|
+
|
|
534
|
+
<span class="c1"># Create a temporary directory for extraction</span>
|
|
535
|
+
<span class="k">with</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">TemporaryDirectory</span><span class="p">()</span> <span class="k">as</span> <span class="n">temp_dir</span><span class="p">:</span>
|
|
536
|
+
<span class="n">temp_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">)</span>
|
|
537
|
+
|
|
538
|
+
<span class="c1"># Extract zip file</span>
|
|
539
|
+
<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">io</span><span class="o">.</span><span class="n">BytesIO</span><span class="p">(</span><span class="n">content</span><span class="p">),</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_file</span><span class="p">:</span>
|
|
540
|
+
<span class="n">zip_file</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">temp_path</span><span class="p">)</span>
|
|
541
|
+
|
|
542
|
+
<span class="c1"># Find agent.json file</span>
|
|
543
|
+
<span class="n">agent_json_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">temp_path</span><span class="o">.</span><span class="n">rglob</span><span class="p">(</span><span class="s1">'agent.json'</span><span class="p">))</span>
|
|
544
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">agent_json_files</span><span class="p">:</span>
|
|
545
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'No agent.json found in zip file'</span><span class="p">)</span>
|
|
546
|
+
|
|
547
|
+
<span class="n">agent_json_path</span> <span class="o">=</span> <span class="n">agent_json_files</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
548
|
+
|
|
549
|
+
<span class="c1"># Load agent data</span>
|
|
550
|
+
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">agent_json_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>
|
|
551
|
+
<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>
|
|
552
|
+
|
|
553
|
+
<span class="n">agent_name</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">'name'</span><span class="p">)</span>
|
|
554
|
+
<span class="k">if</span> <span class="ow">not</span> <span class="n">agent_name</span><span class="p">:</span>
|
|
555
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="s1">'Agent name not found in agent.json'</span><span class="p">)</span>
|
|
556
|
+
|
|
557
|
+
<span class="c1"># Check if agent already exists</span>
|
|
558
|
+
<span class="n">target_dir</span> <span class="o">=</span> <span class="n">BASE_DIR</span> <span class="o">/</span> <span class="n">scope</span> <span class="o">/</span> <span class="n">agent_name</span>
|
|
559
|
+
<span class="k">if</span> <span class="n">target_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
|
|
560
|
+
<span class="c1"># For zip imports, we could add overwrite support in the future</span>
|
|
561
|
+
<span class="c1"># For now, we'll keep the existing behavior but make the error message consistent</span>
|
|
562
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span>
|
|
563
|
+
<span class="n">status_code</span><span class="o">=</span><span class="mi">400</span><span class="p">,</span>
|
|
564
|
+
<span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s1">'Agent </span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s1"> already exists. Use the registry manager for updates.'</span>
|
|
565
|
+
<span class="p">)</span>
|
|
566
|
+
|
|
567
|
+
<span class="c1"># Copy extracted files to target directory</span>
|
|
568
|
+
<span class="n">target_dir</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
569
|
+
|
|
570
|
+
<span class="c1"># Get the directory containing agent.json</span>
|
|
571
|
+
<span class="n">source_dir</span> <span class="o">=</span> <span class="n">agent_json_path</span><span class="o">.</span><span class="n">parent</span>
|
|
572
|
+
|
|
573
|
+
<span class="c1"># Copy all files from source to target</span>
|
|
574
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">shutil</span>
|
|
575
|
+
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">source_dir</span><span class="o">.</span><span class="n">rglob</span><span class="p">(</span><span class="s1">'*'</span><span class="p">):</span>
|
|
576
|
+
<span class="k">if</span> <span class="n">item</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
|
|
577
|
+
<span class="n">relative_path</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">relative_to</span><span class="p">(</span><span class="n">source_dir</span><span class="p">)</span>
|
|
578
|
+
<span class="n">target_file</span> <span class="o">=</span> <span class="n">target_dir</span> <span class="o">/</span> <span class="n">relative_path</span>
|
|
579
|
+
<span class="n">target_file</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
580
|
+
<span class="n">shutil</span><span class="o">.</span><span class="n">copy2</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">target_file</span><span class="p">)</span>
|
|
581
|
+
|
|
582
|
+
<span class="k">return</span> <span class="p">{</span>
|
|
583
|
+
<span class="s1">'success'</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
584
|
+
<span class="s1">'message'</span><span class="p">:</span> <span class="sa">f</span><span class="s1">'Agent </span><span class="si">{</span><span class="n">agent_name</span><span class="si">}</span><span class="s1"> imported successfully'</span><span class="p">,</span>
|
|
585
|
+
<span class="s1">'agent_name'</span><span class="p">:</span> <span class="n">agent_name</span>
|
|
586
|
+
<span class="p">}</span>
|
|
587
|
+
|
|
588
|
+
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
589
|
+
<span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="n">status_code</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span> <span class="n">detail</span><span class="o">=</span><span class="sa">f</span><span class="s2">"Error importing zip: </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>
|
|
590
|
+
|
|
591
|
+
</pre></div>
|
|
592
|
+
|
|
593
|
+
</div>
|
|
594
|
+
</div>
|
|
595
|
+
<footer>
|
|
596
|
+
|
|
597
|
+
<hr/>
|
|
598
|
+
|
|
599
|
+
<div role="contentinfo">
|
|
600
|
+
<p>© Copyright 2025, Jason Livesay.</p>
|
|
601
|
+
</div>
|
|
602
|
+
|
|
603
|
+
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
604
|
+
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
605
|
+
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
</footer>
|
|
609
|
+
</div>
|
|
610
|
+
</div>
|
|
611
|
+
</section>
|
|
612
|
+
</div>
|
|
613
|
+
<script>
|
|
614
|
+
jQuery(function () {
|
|
615
|
+
SphinxRtdTheme.Navigation.enable(true);
|
|
616
|
+
});
|
|
617
|
+
</script>
|
|
618
|
+
|
|
619
|
+
</body>
|
|
620
|
+
</html>
|