solace-agent-mesh 1.6.2__py3-none-any.whl → 1.7.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 solace-agent-mesh might be problematic. Click here for more details.
- solace_agent_mesh/agent/adk/adk_llm.txt +12 -18
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +1 -1
- solace_agent_mesh/agent/adk/callbacks.py +138 -20
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +2 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +38 -5
- solace_agent_mesh/agent/adk/models/models_llm.txt +82 -35
- solace_agent_mesh/agent/adk/runner.py +9 -0
- solace_agent_mesh/agent/adk/services.py +3 -3
- solace_agent_mesh/agent/adk/stream_parser.py +6 -1
- solace_agent_mesh/agent/adk/tool_wrapper.py +3 -0
- solace_agent_mesh/agent/agent_llm.txt +61 -70
- solace_agent_mesh/agent/protocol/event_handlers.py +29 -1
- solace_agent_mesh/agent/protocol/protocol_llm.txt +1 -1
- solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +190 -0
- solace_agent_mesh/agent/proxies/base/base_llm.txt +148 -0
- solace_agent_mesh/agent/proxies/proxies_llm.txt +283 -0
- solace_agent_mesh/agent/sac/app.py +22 -0
- solace_agent_mesh/agent/sac/component.py +76 -40
- solace_agent_mesh/agent/sac/sac_llm.txt +1 -1
- solace_agent_mesh/agent/sac/task_execution_context.py +21 -0
- solace_agent_mesh/agent/testing/testing_llm.txt +2 -1
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +13 -148
- solace_agent_mesh/agent/tools/dynamic_tool.py +2 -0
- solace_agent_mesh/agent/tools/tools_llm.txt +93 -80
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +3 -2
- solace_agent_mesh/agent/utils/artifact_helpers.py +4 -0
- solace_agent_mesh/agent/utils/utils_llm.txt +16 -2
- solace_agent_mesh/assets/docs/404.html +3 -3
- solace_agent_mesh/assets/docs/assets/js/05749d90.c70b2be9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15e40e79.36003774.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.e4870a49.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.b63ee53a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.45b32c2b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/94e8668d.09ed9234.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{ab9708a8.3e6dd091.js → ab9708a8.245ae0ef.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.f902fad8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.b62f7b08.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e04b235d.c9c50c7b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.d11c67a7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{e6f9706b.e74a984d.js → e6f9706b.045d0fa1.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.5099c51e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.e6488e8b.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.d9606d6a.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +18 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +5 -5
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +196 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +5 -5
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +6 -7
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes-deployment/index.html +47 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +160 -169
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +5 -5
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +59 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +10 -6
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +24 -29
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +440 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +27 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +5 -4
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +290 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +9 -9
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +251 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +88 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +3 -3
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +3 -3
- solace_agent_mesh/assets/docs/lunr-index-1762189824009.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1762189824009.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -1
- solace_agent_mesh/assets/docs/sitemap.xml +1 -1
- solace_agent_mesh/cli/__init__.py +1 -1
- solace_agent_mesh/cli/commands/docs_cmd.py +4 -1
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-D4_RMYRh.js → authCallback-tcIFZLis.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/{client-UZ3qU6Bq.js → client-CRYdKo2Q.js} +3 -3
- solace_agent_mesh/client/webui/frontend/static/assets/main-CojeY_1w.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-ILja9MCG.js +353 -0
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-CINwxvwV.js +470 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
- solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
- solace_agent_mesh/common/a2a/a2a_llm.txt +13 -20
- solace_agent_mesh/common/a2a/protocol.py +5 -0
- solace_agent_mesh/common/a2a/types.py +1 -0
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +49 -11
- solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +23 -6
- solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +26 -9
- solace_agent_mesh/common/common_llm.txt +13 -34
- solace_agent_mesh/common/data_parts.py +20 -4
- solace_agent_mesh/common/middleware/middleware_llm.txt +1 -1
- solace_agent_mesh/common/sac/sac_llm.txt +1 -1
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +1 -1
- solace_agent_mesh/common/services/employee_service.py +1 -1
- solace_agent_mesh/common/services/providers/providers_llm.txt +3 -2
- solace_agent_mesh/common/services/services_llm.txt +9 -4
- solace_agent_mesh/common/utils/embeds/constants.py +1 -0
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +1 -1
- solace_agent_mesh/common/utils/embeds/modifiers.py +2 -1
- solace_agent_mesh/common/utils/embeds/resolver.py +58 -6
- solace_agent_mesh/common/utils/embeds/types.py +8 -0
- solace_agent_mesh/common/utils/utils_llm.txt +5 -6
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +1 -1
- solace_agent_mesh/gateway/adapter/__init__.py +1 -0
- solace_agent_mesh/gateway/adapter/base.py +143 -0
- solace_agent_mesh/gateway/adapter/types.py +221 -0
- solace_agent_mesh/gateway/base/app.py +29 -2
- solace_agent_mesh/gateway/base/base_llm.txt +10 -8
- solace_agent_mesh/gateway/base/component.py +573 -142
- solace_agent_mesh/gateway/gateway_llm.txt +55 -59
- solace_agent_mesh/gateway/generic/__init__.py +1 -0
- solace_agent_mesh/gateway/generic/app.py +50 -0
- solace_agent_mesh/gateway/generic/component.py +650 -0
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +99 -49
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_fulltext_search_indexes.py +92 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_project_users_table.py +72 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251023_add_soft_delete_and_search.py +150 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_default_agent_to_projects.py +26 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251024_add_projects_table.py +135 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +26 -20
- solace_agent_mesh/gateway/http_sse/app.py +19 -14
- solace_agent_mesh/gateway/http_sse/component.py +150 -118
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +1 -1
- solace_agent_mesh/gateway/http_sse/dependencies.py +21 -3
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +8 -8
- solace_agent_mesh/gateway/http_sse/main.py +55 -14
- solace_agent_mesh/gateway/http_sse/repository/__init__.py +19 -1
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +56 -98
- solace_agent_mesh/gateway/http_sse/repository/entities/project.py +81 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session.py +23 -1
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +112 -4
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +9 -1
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +51 -60
- solace_agent_mesh/gateway/http_sse/repository/models/project_model.py +51 -0
- solace_agent_mesh/gateway/http_sse/repository/models/project_user_model.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +7 -1
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +125 -157
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +269 -8
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +143 -51
- solace_agent_mesh/gateway/http_sse/routers/config.py +69 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +198 -94
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/project_requests.py +48 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +68 -18
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +13 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +30 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +51 -35
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +2 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +133 -2
- solace_agent_mesh/gateway/http_sse/routers/projects.py +542 -0
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +9 -11
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +154 -3
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +296 -4
- solace_agent_mesh/gateway/http_sse/services/project_service.py +403 -0
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +16 -10
- solace_agent_mesh/gateway/http_sse/services/session_service.py +178 -6
- solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +2 -3
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +48 -14
- solace_agent_mesh/solace_agent_mesh_llm.txt +1 -1
- {solace_agent_mesh-1.6.2.dist-info → solace_agent_mesh-1.7.0.dist-info}/METADATA +3 -5
- {solace_agent_mesh-1.6.2.dist-info → solace_agent_mesh-1.7.0.dist-info}/RECORD +219 -176
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.76654dd9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.eda4bcb2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/631738c7.7c4594c9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.f4b15f3b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/71da7b71.ddbdfbe2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/94e8668d.b5ddb7a1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.d08a9466.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/de915948.27d6b065.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.6b9493d0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.4f395c6b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.720d2ef2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.15b02f97.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.d1643f0b.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.97f920d4.js +0 -1
- solace_agent_mesh/assets/docs/lunr-index-1761663789856.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1761663789856.json +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main--3yJYl7S.css +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-DojKHS49.js +0 -342
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-DSqhjwq_.js +0 -405
- /solace_agent_mesh/assets/docs/assets/js/{main.d1643f0b.js.LICENSE.txt → main.e6488e8b.js.LICENSE.txt} +0 -0
- {solace_agent_mesh-1.6.2.dist-info → solace_agent_mesh-1.7.0.dist-info}/WHEEL +0 -0
- {solace_agent_mesh-1.6.2.dist-info → solace_agent_mesh-1.7.0.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.6.2.dist-info → solace_agent_mesh-1.7.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="generator" content="Docusaurus v3.8.1">
|
|
6
6
|
<title data-rh="true">Page Not Found | Solace Agent Mesh</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://solacelabs.github.io/solace-agent-mesh/img/logo.png"><meta data-rh="true" name="twitter:image" content="https://solacelabs.github.io/solace-agent-mesh/img/logo.png"><meta data-rh="true" property="og:url" content="https://solacelabs.github.io/solace-agent-mesh/404.html"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docusaurus_tag" content="default"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docsearch:docusaurus_tag" content="default"><meta data-rh="true" property="og:title" content="Page Not Found | Solace Agent Mesh"><link data-rh="true" rel="icon" href="/solace-agent-mesh/img/logo.png"><link data-rh="true" rel="canonical" href="https://solacelabs.github.io/solace-agent-mesh/404.html"><link data-rh="true" rel="alternate" href="https://solacelabs.github.io/solace-agent-mesh/404.html" hreflang="en"><link data-rh="true" rel="alternate" href="https://solacelabs.github.io/solace-agent-mesh/404.html" hreflang="x-default"><link rel="stylesheet" href="/solace-agent-mesh/assets/css/styles.906a1503.css">
|
|
7
|
-
<script src="/solace-agent-mesh/assets/js/runtime~main.
|
|
8
|
-
<script src="/solace-agent-mesh/assets/js/main.
|
|
7
|
+
<script src="/solace-agent-mesh/assets/js/runtime~main.d9606d6a.js" defer="defer"></script>
|
|
8
|
+
<script src="/solace-agent-mesh/assets/js/main.e6488e8b.js" defer="defer"></script>
|
|
9
9
|
</head>
|
|
10
10
|
<body class="navigation-with-keyboard">
|
|
11
11
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
|
|
12
12
|
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
|
|
13
13
|
</defs></svg>
|
|
14
|
-
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/solace-agent-mesh/img/logo.png"><link rel="preload" as="image" href="/solace-agent-mesh/img/solace-logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/solace-agent-mesh/docs/documentation/getting-started"><div class="navbar__logo"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Solace Agent Mesh</b></a><a class="navbar__item navbar__link" href="/solace-agent-mesh/docs/documentation/getting-started/">Documentation</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Solace Agent Mesh</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/solace-agent-mesh/docs/documentation/getting-started">Documentation</a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh-core-plugins/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Official Plugins<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Company</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://solace.com/products/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Products<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/contact/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Contact<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/support/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Support<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/legal/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Privacy and Legal<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://www.linkedin.com/company/solacedotcom/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/SolaceSystems" target="_blank" rel="noopener noreferrer" class="footer__link-item">YouTube<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://twitter.com/solacedotcom" target="_blank" rel="noopener noreferrer" class="footer__link-item">X<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width="10%" height="10%"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width="10%" height="10%"></div><div class="footer__copyright">Solace Agent Mesh. Copyright © 2025 Solace. Version: 1.
|
|
14
|
+
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/solace-agent-mesh/img/logo.png"><link rel="preload" as="image" href="/solace-agent-mesh/img/solace-logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/solace-agent-mesh/docs/documentation/getting-started"><div class="navbar__logo"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/solace-agent-mesh/img/logo.png" alt="Solace Agent Mesh Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">Solace Agent Mesh</b></a><a class="navbar__item navbar__link" href="/solace-agent-mesh/docs/documentation/getting-started/">Documentation</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><main class="container margin-vert--xl"><div class="row"><div class="col col--6 col--offset-3"><h1 class="hero__title">Page Not Found</h1><p>We could not find what you were looking for.</p><p>Please contact the owner of the site that linked you to the original URL and let them know their link is broken.</p></div></div></main></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Solace Agent Mesh</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/solace-agent-mesh/docs/documentation/getting-started">Documentation</a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh/" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs/solace-agent-mesh-core-plugins/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Official Plugins<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Company</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://solace.com/products/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Products<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/contact/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Contact<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/support/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Support<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://solace.com/legal/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Privacy and Legal<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://www.linkedin.com/company/solacedotcom/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/SolaceLabs" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://www.youtube.com/SolaceSystems" target="_blank" rel="noopener noreferrer" class="footer__link-item">YouTube<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://twitter.com/solacedotcom" target="_blank" rel="noopener noreferrer" class="footer__link-item">X<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width="10%" height="10%"><img src="/solace-agent-mesh/img/solace-logo.png" alt="Solace Logo" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width="10%" height="10%"></div><div class="footer__copyright">Solace Agent Mesh. Copyright © 2025 Solace. Version: 1.7.0</div></div></div></footer></div>
|
|
15
15
|
</body>
|
|
16
16
|
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[9259],{5992:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"documentation/enterprise/secure-user-delegated-access","title":"Secure User Delegated Access","description":"This guide walks you through configuring Secure User Delegated Access for Agent Mesh Enterprise. You will learn how to enable users to authenticate with remote MCP tools using their own credentials through OAuth2, providing enhanced security and user-specific access control.","source":"@site/docs/documentation/enterprise/secure-user-delegated-access.md","sourceDirName":"documentation/enterprise","slug":"/documentation/enterprise/secure-user-delegated-access","permalink":"/solace-agent-mesh/docs/documentation/enterprise/secure-user-delegated-access","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/enterprise/secure-user-delegated-access.md","tags":[],"version":"current","sidebarPosition":15,"frontMatter":{"title":"Secure User Delegated Access","sidebar_position":15},"sidebar":"docSidebar","previous":{"title":"Enabling SSO","permalink":"/solace-agent-mesh/docs/documentation/enterprise/single-sign-on"}}');var i=s(4848),t=s(8453);const o={title:"Secure User Delegated Access",sidebar_position:15},a=void 0,l={},c=[{value:"Table of Contents",id:"table-of-contents",level:2},{value:"Overview",id:"overview",level:2},{value:"Why Use Secure User Delegated Access",id:"why-use-secure-user-delegated-access",level:3},{value:"Supported MCP Providers",id:"supported-mcp-providers",level:3},{value:"Understanding Secure User Delegated Access",id:"understanding-secure-user-delegated-access",level:2},{value:"How the OAuth2 Flow Works",id:"how-the-oauth2-flow-works",level:3},{value:"Credential Storage",id:"credential-storage",level:3},{value:"Credential Lifecycle",id:"credential-lifecycle",level:3},{value:"Prerequisites",id:"prerequisites",level:2},{value:"MCP Provider Access",id:"mcp-provider-access",level:3},{value:"Callback URI Configuration",id:"callback-uri-configuration",level:3},{value:"Database Setup (For Production)",id:"database-setup-for-production",level:3},{value:"Configuration Steps",id:"configuration-steps",level:2},{value:"Step 1: Configure Credential Storage and Lifecycle",id:"step-1-configure-credential-storage-and-lifecycle",level:3},{value:"Configure Credential Time-to-Live",id:"configure-credential-time-to-live",level:4},{value:"Configure OAuth2 Callback URI",id:"configure-oauth2-callback-uri",level:4},{value:"Configure Session Service Type",id:"configure-session-service-type",level:4},{value:"Step 2: Configure Trust Manager (Recommended)",id:"step-2-configure-trust-manager-recommended",level:3},{value:"Understanding Trust Manager",id:"understanding-trust-manager",level:4},{value:"Enable Trust Manager on SSE Gateway",id:"enable-trust-manager-on-sse-gateway",level:4},{value:"Enable Trust Manager on Agents",id:"enable-trust-manager-on-agents",level:4},{value:"Example Configuration",id:"example-configuration",level:4},{value:"Secure Solace Broker Provisioning for Trust Manager",id:"secure-solace-broker-provisioning-for-trust-manager",level:4},{value:"Step 3: Configure MCP Tools with OAuth2 Authentication",id:"step-3-configure-mcp-tools-with-oauth2-authentication",level:3},{value:"Basic MCP Tool Structure",id:"basic-mcp-tool-structure",level:4},{value:"Understanding the Manifest Requirement",id:"understanding-the-manifest-requirement",level:4},{value:"Obtaining the Manifest",id:"obtaining-the-manifest",level:4},{value:"Manifest Format",id:"manifest-format",level:4},{value:"Step 4: Deploy Configuration",id:"step-4-deploy-configuration",level:3},{value:"Security Considerations",id:"security-considerations",level:2},{value:"Encryption at Rest",id:"encryption-at-rest",level:3},{value:"Trust Manager for Identity Verification",id:"trust-manager-for-identity-verification",level:3},{value:"Credential Aging and Expiration",id:"credential-aging-and-expiration",level:3},{value:"Provider-Side Revocation",id:"provider-side-revocation",level:3},{value:"Network Security",id:"network-security",level:3},{value:"Logging and Monitoring",id:"logging-and-monitoring",level:3},{value:"Best Practices",id:"best-practices",level:2},{value:"Always Enable Trust Manager in Production",id:"always-enable-trust-manager-in-production",level:3},{value:"Use SQL Persistence in Production",id:"use-sql-persistence-in-production",level:3},{value:"Set Appropriate TTL Values",id:"set-appropriate-ttl-values",level:3},{value:"Configure Separate Session Storage Per Agent",id:"configure-separate-session-storage-per-agent",level:3},{value:"Use HTTPS in Production",id:"use-https-in-production",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"OAuth2 Authentication Flow Fails",id:"oauth2-authentication-flow-fails",level:3},{value:"Credentials Not Persisting Across Restarts",id:"credentials-not-persisting-across-restarts",level:3},{value:"Trust Manager Denying Access",id:"trust-manager-denying-access",level:3},{value:"Credentials Expire Too Quickly or Too Slowly",id:"credentials-expire-too-quickly-or-too-slowly",level:3},{value:"Manifest Configuration Errors",id:"manifest-configuration-errors",level:3},{value:"Conclusion",id:"conclusion",level:2}];function d(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"This guide walks you through configuring Secure User Delegated Access for Agent Mesh Enterprise. You will learn how to enable users to authenticate with remote MCP tools using their own credentials through OAuth2, providing enhanced security and user-specific access control."}),"\n",(0,i.jsx)(n.h2,{id:"table-of-contents",children:"Table of Contents"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#overview",children:"Overview"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#understanding-secure-user-delegated-access",children:"Understanding Secure User Delegated Access"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#prerequisites",children:"Prerequisites"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#configuration-steps",children:"Configuration Steps"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#security-considerations",children:"Security Considerations"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#best-practices",children:"Best Practices"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"#troubleshooting",children:"Troubleshooting"})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(n.p,{children:"Secure User Delegated Access allows users to interact with remote MCP (Model Context Protocol) tools using their own credentials rather than shared service credentials. When a user needs to access a remote MCP tool configured in an agent, they complete an OAuth2 authentication flow with the MCP provider's authorization server. This provides user-specific credentials that are securely stored and managed by Agent Mesh Enterprise."}),"\n",(0,i.jsx)(n.h3,{id:"why-use-secure-user-delegated-access",children:"Why Use Secure User Delegated Access"}),"\n",(0,i.jsx)(n.p,{children:"This feature provides several important benefits for enterprise deployments:"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Enhanced Security"}),": Each user authenticates with their own credentials, eliminating shared service accounts and reducing the blast radius of compromised credentials. All API calls to remote services are made in the context of the authenticated user."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Audit and Compliance"}),": User-specific credentials create clear audit trails showing exactly which user performed which actions. This is essential for compliance requirements and security investigations."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Fine-Grained Access Control"}),": MCP providers can enforce their own access policies based on the authenticated user's permissions. Users only access resources they are authorized to use within the remote service."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Credential Lifecycle Management"}),": User credentials can be individually revoked at the MCP provider level without affecting other users. This simplifies offboarding and incident response."]}),"\n",(0,i.jsx)(n.h3,{id:"supported-mcp-providers",children:"Supported MCP Providers"}),"\n",(0,i.jsx)(n.p,{children:"Agent Mesh Enterprise supports remote MCP servers that implement the OAuth2.1 authentication flow. The following providers have been tested and validated:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Atlassian MCP Server"}),": Access Jira, Confluence, and other Atlassian services"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Stripe MCP Server"}),": Interact with Stripe payment and billing APIs"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Cloudflare MCP Server"}),": Manage Cloudflare resources and configurations"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Canva MCP Server"}),": Access Canva design and content APIs"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The feature works with both SSE (Server-Sent Events) and HTTP streaming remote MCP server types."}),"\n",(0,i.jsx)(n.h2,{id:"understanding-secure-user-delegated-access",children:"Understanding Secure User Delegated Access"}),"\n",(0,i.jsx)(n.p,{children:"Before you configure this feature, you need to understand how it works and how credentials flow through the system."}),"\n",(0,i.jsx)(n.h3,{id:"how-the-oauth2-flow-works",children:"How the OAuth2 Flow Works"}),"\n",(0,i.jsx)(n.p,{children:"When a user attempts to use an MCP tool that requires OAuth2 authentication, Agent Mesh Enterprise initiates the following flow:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Authentication Challenge"}),": The user's request triggers an authentication check. If no valid credentials exist for this user and MCP tool combination, the system prompts the user to authenticate."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"OAuth2 Authorization"}),": The user is redirected to the MCP provider's authorization server (for example, Atlassian or Stripe). The user logs in using their credentials for that service and grants permission for Agent Mesh Enterprise to access their resources."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Authorization Code Exchange"}),": After successful authentication, the provider redirects back to Agent Mesh Enterprise with an authorization code. The system exchanges this code for access tokens at the provider's token endpoint."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Credential Storage"}),": Agent Mesh Enterprise stores the access token (and refresh token if provided) in the credential service. Credentials are encrypted at rest (when using a database) and isolated per agent, user, and MCP tool."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Authenticated Requests"}),": Subsequent requests to the MCP tool use the stored credentials automatically. The user does not need to re-authenticate unless credentials expire or are revoked."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Token Refresh"}),": If the MCP provider supports refresh tokens and an access token expires, Agent Mesh Enterprise automatically obtains a new access token without requiring user interaction."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"From an administrator's perspective, this flow is transparent once configured. Users experience a one-time authentication prompt per MCP tool, after which their access works seamlessly."}),"\n",(0,i.jsx)(n.h3,{id:"credential-storage",children:"Credential Storage"}),"\n",(0,i.jsx)(n.p,{children:"Agent Mesh Enterprise manages user credentials through a dedicated credential service with several important characteristics:"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Encryption at Rest"}),": When using database persistence, all stored credentials are automatically encrypted using the agent's unique identifier as the encryption key. This ensures that credentials cannot be used if extracted from database storage. Memory-based storage does not persist credentials to disk."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Multi-Tenant Isolation"}),": Credentials are scoped to the combination of agent ID, user identity, and MCP tool. Credentials for one agent cannot be accessed by another agent, even for the same user and tool. This provides strong isolation in multi-tenant deployments."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Configurable Expiration"}),": You can configure a time-to-live (TTL) for stored credentials. After the TTL expires, Agent Mesh Enterprise removes credentials from storage, requiring users to re-authenticate. This reduces the risk of long-lived credential compromise."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Persistence Options"}),": Credentials can be stored in memory (for development or ephemeral deployments) or in a database (for production deployments where credentials should survive agent restarts)."]}),"\n",(0,i.jsx)(n.h3,{id:"credential-lifecycle",children:"Credential Lifecycle"}),"\n",(0,i.jsx)(n.p,{children:"Understanding the credential lifecycle helps you plan operational procedures:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Acquisition"}),": Credentials are acquired when a user first authenticates with an MCP provider through the OAuth2 flow."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Active Use"}),": Stored credentials are used automatically for all subsequent requests to that MCP tool by that user."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Expiration"}),": Credentials expire either through TTL timeout (configured by you) or token expiration (set by the MCP provider). Agent Mesh Enterprise attempts to refresh expired tokens if refresh tokens are available."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Revocation"}),": Users or administrators can revoke credentials at the MCP provider level. When Agent Mesh Enterprise attempts to use revoked credentials, the request fails and the user must re-authenticate."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Deletion"}),": Credentials are marked as deleted when they expire (TTL timeout), but are retained in the persistence layer for audit purposes. With memory storage, credentials are removed from storage when the agent is restarted."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsx)(n.p,{children:"Before you configure Secure User Delegated Access, ensure you have the following in place:"}),"\n",(0,i.jsx)(n.h3,{id:"mcp-provider-access",children:"MCP Provider Access"}),"\n",(0,i.jsx)(n.p,{children:"Some MCP providers require administrative access to authorize Agent Mesh Enterprise before users can authenticate. The requirements vary by provider:"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Example providers requiring domain authorization"})," (Atlassian, Stripe, Canva):"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Administrative access to the MCP provider's admin console"}),"\n",(0,i.jsx)(n.li,{children:"Ability to add your Agent Mesh Enterprise domain to the provider's authorized domains list"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Example providers without administrative requirements"})," (Cloudflare):"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"No administrative setup required"}),"\n",(0,i.jsx)(n.li,{children:"Users can authenticate directly through the OAuth2 flow"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Check the specific requirements for your chosen MCP provider."}),"\n",(0,i.jsx)(n.h3,{id:"callback-uri-configuration",children:"Callback URI Configuration"}),"\n",(0,i.jsx)(n.p,{children:"Your Agent Mesh Enterprise deployment must be accessible via a stable URL for OAuth2 callbacks. During the OAuth2 flow, users are redirected to the MCP provider for authentication, then redirected back to this callback URI."}),"\n",(0,i.jsxs)(n.p,{children:["You will configure this callback URI as an environment variable (see ",(0,i.jsx)(n.a,{href:"#configure-oauth2-callback-uri",children:"Configure OAuth2 Callback URI"}),"). For providers requiring domain authorization (for example: Atlassian, Stripe, Canva), you will also register this domain in the provider's admin console."]}),"\n",(0,i.jsx)(n.h3,{id:"database-setup-for-production",children:"Database Setup (For Production)"}),"\n",(0,i.jsx)(n.p,{children:"For production deployments, you should use SQL persistence to ensure credentials survive agent restarts. You need:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"A supported SQL database (SQLite, PostgreSQL, MySQL, or other SQL database supported by SQLAlchemy)"}),"\n",(0,i.jsx)(n.li,{children:"Appropriate database credentials and connection information"}),"\n",(0,i.jsx)(n.li,{children:"Sufficient storage for credential data"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"#configure-session-service-type",children:"Configure Session Service Type"})," for details on setting up persistence. For development or testing, you can use memory storage, but credentials will be lost when the agent restarts."]}),"\n",(0,i.jsx)(n.h2,{id:"configuration-steps",children:"Configuration Steps"}),"\n",(0,i.jsx)(n.p,{children:"Configuring Secure User Delegated Access involves several steps: configuring credential storage and lifecycle, optionally configuring the trust manager for enhanced security, and configuring your MCP tools with OAuth2 authentication."}),"\n",(0,i.jsx)(n.h3,{id:"step-1-configure-credential-storage-and-lifecycle",children:"Step 1: Configure Credential Storage and Lifecycle"}),"\n",(0,i.jsx)(n.p,{children:"The credential service is automatically created and manages storage, retrieval, and lifecycle of user credentials. You configure it through environment variables and your session service configuration."}),"\n",(0,i.jsx)(n.h4,{id:"configure-credential-time-to-live",children:"Configure Credential Time-to-Live"}),"\n",(0,i.jsx)(n.p,{children:"Set the credential TTL to control how long credentials remain valid in storage:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"export SECRETS_TTL_SECONDS=86400 # 24 hours\n"})}),"\n",(0,i.jsx)(n.p,{children:"The TTL value is specified in seconds. Common values include:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"3600"})," - 1 hour (high security, frequent re-authentication)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"86400"})," - 24 hours (balance of security and convenience)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"604800"})," - 7 days (low security, infrequent re-authentication)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"2592000"})," - 30 days (default if not specified)"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Choose a TTL based on your security requirements and user experience considerations. Shorter TTLs require users to re-authenticate more frequently but reduce the window of exposure for compromised credentials."}),"\n",(0,i.jsx)(n.h4,{id:"configure-oauth2-callback-uri",children:"Configure OAuth2 Callback URI"}),"\n",(0,i.jsx)(n.p,{children:"Set the callback URI where MCP providers will redirect users after authentication:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"export OAUTH_TOOL_REDIRECT_URI=https://my.domain.com/api/v1/auth/tool/callback\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Replace ",(0,i.jsx)(n.code,{children:"https://my.domain.com"})," with your actual Agent Mesh Enterprise domain."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Important"}),": The path ",(0,i.jsx)(n.code,{children:"/api/v1/auth/tool/callback"})," must not be changed. This is the required callback endpoint path."]}),"\n",(0,i.jsx)(n.p,{children:"This URL must:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Match exactly what you register with your MCP provider (for providers requiring domain authorization)"}),"\n",(0,i.jsx)(n.li,{children:"Use HTTPS in production (HTTP is only acceptable for local development)"}),"\n",(0,i.jsx)(n.li,{children:"Be accessible from users' browsers"}),"\n"]}),"\n",(0,i.jsx)(n.h4,{id:"configure-session-service-type",children:"Configure Session Service Type"}),"\n",(0,i.jsxs)(n.p,{children:["User credentials are stored in the same database configured for session storage. For details on configuring session storage, see the ",(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/installing-and-configuring/session-storage",children:"Session Storage documentation"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Memory storage does not persist credentials across agent restarts. Use this only for development and testing."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Important"}),": Ensure each agent has its own database to maintain proper credential isolation between agents."]}),"\n",(0,i.jsx)(n.h3,{id:"step-2-configure-trust-manager-recommended",children:"Step 2: Configure Trust Manager (Recommended)"}),"\n",(0,i.jsx)(n.p,{children:"The trust manager provides critical security for Secure User Delegated Access by cryptographically verifying user identities throughout the system. It ensures that credentials can only be accessed by the user who created them, preventing unauthorized access even if agent communication is compromised."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Enabling the trust manager is strongly recommended for production deployments."})}),"\n",(0,i.jsx)(n.h4,{id:"understanding-trust-manager",children:"Understanding Trust Manager"}),"\n",(0,i.jsx)(n.p,{children:"The trust manager uses public/private key cryptography to verify user identity:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Gateway Authentication"}),": The WebUI Gateway verifies the user's identity during login (via SSO or other authentication)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Cryptographic Signing"}),": The gateway cryptographically signs each user's identity using its private key"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Agent Verification"}),": When an agent receives a request, it uses the gateway's public key to verify the signed identity"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Credential Access Control"}),": The agent only grants access to credentials if the verified identity matches the credential owner"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"This cryptographic verification ensures that:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"User identities cannot be forged or tampered with in transit"}),"\n",(0,i.jsx)(n.li,{children:"Each user can only access their own credentials"}),"\n",(0,i.jsx)(n.li,{children:"Compromised agents cannot access other users' credentials"}),"\n",(0,i.jsx)(n.li,{children:"All credential operations have verifiable audit trails"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"The trust manager must be enabled on both the WebUI Gateway and all agents"})," to function correctly."]}),"\n",(0,i.jsx)(n.h4,{id:"enable-trust-manager-on-sse-gateway",children:"Enable Trust Manager on SSE Gateway"}),"\n",(0,i.jsx)(n.p,{children:"Add the trust manager configuration to your SSE Gateway configuration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# In your gateway configuration\ntrust_manager:\n enabled: true\n"})}),"\n",(0,i.jsx)(n.h4,{id:"enable-trust-manager-on-agents",children:"Enable Trust Manager on Agents"}),"\n",(0,i.jsx)(n.p,{children:"Add the same trust manager configuration to each agent's configuration:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"# In each agent's configuration YAML\ntrust_manager:\n enabled: true\n"})}),"\n",(0,i.jsx)(n.h4,{id:"example-configuration",children:"Example Configuration"}),"\n",(0,i.jsx)(n.p,{children:"Here is an example showing the trust manager full configuration (default values) on the gateway:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'# webui_gateway.yaml\napps:\n - name: a2a_webui_app\n app_config:\n # ... other configuration ...\n\n trust_manager:\n enabled: true\n card_publish_interval_seconds: 10\n card_expiration_days: 7\n verification_mode: "permissive" # or "strict" for production\n clock_skew_tolerance_seconds: 300\n enable_time_validation: true\n jwt_default_ttl_seconds: 3600\n jwt_max_ttl_seconds: 86400\n'})}),"\n",(0,i.jsx)(n.h4,{id:"secure-solace-broker-provisioning-for-trust-manager",children:"Secure Solace Broker Provisioning for Trust Manager"}),"\n",(0,i.jsx)(n.p,{children:"When using the trust manager, you should configure the Solace broker with proper credentials and ACLs to ensure secure trust card publishing. This prevents components from impersonating each other."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Distinct Credentials Per Component"})}),"\n",(0,i.jsx)(n.p,{children:"Each gateway and agent instance should have its own unique broker credentials:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Each gateway instance requires unique ",(0,i.jsx)(n.code,{children:"client_username"})," and ",(0,i.jsx)(n.code,{children:"client_password"})]}),"\n",(0,i.jsxs)(n.li,{children:["Each agent instance requires unique ",(0,i.jsx)(n.code,{children:"client_username"})," and ",(0,i.jsx)(n.code,{children:"client_password"})]}),"\n",(0,i.jsx)(n.li,{children:"Never share credentials between different component instances"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"ACL Configuration for Trust Card Publishing"})}),"\n",(0,i.jsx)(n.p,{children:"Configure Access Control Lists (ACLs) on your Solace broker to restrict which topics each component can publish to:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"For Gateway instances:"})}),"\n",(0,i.jsx)(n.p,{children:"Only the specific gateway instance is allowed to publish on its trust card topic:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Topic: {namespace}/a2a/v1/trust/gateway/{gateway_broker_client_username}\nPermission: Publish (allow only for this gateway's client username)\n"})}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"For Agent instances:"})}),"\n",(0,i.jsx)(n.p,{children:"Only the specific agent instance is allowed to publish on its trust card topic:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Topic: {namespace}/a2a/v1/trust/agent/{agent_broker_client_username}\nPermission: Publish (allow only for this agent's client username)\n"})}),"\n",(0,i.jsx)(n.p,{children:"Where:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"{namespace}"})," is your configured namespace (e.g., ",(0,i.jsx)(n.code,{children:"a2a/dev"})," or ",(0,i.jsx)(n.code,{children:"a2a/prod"}),")"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"{gateway_broker_client_username}"})," is the unique broker username for the gateway"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"{agent_broker_client_username}"})," is the unique broker username for each agent"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Example ACL Configuration:"})}),"\n",(0,i.jsxs)(n.p,{children:["If your namespace is ",(0,i.jsx)(n.code,{children:"a2a/prod"}),", gateway username is ",(0,i.jsx)(n.code,{children:"webui-gateway-01"}),", and agent username is ",(0,i.jsx)(n.code,{children:"employee-agent-01"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"# Gateway ACL\nTopic: a2a/prod/a2a/v1/trust/gateway/webui-gateway-01\nClient Username: webui-gateway-01\nPermission: Publish\n\n# Agent ACL\nTopic: a2a/prod/a2a/v1/trust/agent/employee-agent-01\nClient Username: employee-agent-01\nPermission: Publish\n"})}),"\n",(0,i.jsx)(n.p,{children:"These ACLs ensure that:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Components cannot publish trust cards pretending to be other components"}),"\n",(0,i.jsx)(n.li,{children:"Trust card verification remains cryptographically secure"}),"\n",(0,i.jsx)(n.li,{children:"Compromised credentials for one component cannot affect other components"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"step-3-configure-mcp-tools-with-oauth2-authentication",children:"Step 3: Configure MCP Tools with OAuth2 Authentication"}),"\n",(0,i.jsx)(n.p,{children:"To use Secure User Delegated Access, you must configure your MCP tools to use OAuth2 authentication and provide a manifest of available tools."}),"\n",(0,i.jsx)(n.h4,{id:"basic-mcp-tool-structure",children:"Basic MCP Tool Structure"}),"\n",(0,i.jsx)(n.p,{children:"An MCP tool configuration with OAuth2 authentication follows this structure:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'tools:\n - tool_type: mcp\n connection_params:\n type: sse # or streamable-http\n url: "https://mcp.example.com/v1/sse"\n auth:\n type: oauth2\n manifest:\n - name: exampleTool\n description: Example tool description\n inputSchema:\n type: object\n properties: {}\n additionalProperties: false\n $schema: http://json-schema.org/draft-07/schema#\n'})}),"\n",(0,i.jsx)(n.p,{children:"The key components are:"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"tool_type: mcp"})}),": Identifies this as an MCP tool configuration."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"connection_params"})}),": Specifies how to connect to the remote MCP server:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"type"}),": Either ",(0,i.jsx)(n.code,{children:"sse"})," (Server-Sent Events) or ",(0,i.jsx)(n.code,{children:"streamable-http"})]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"url"}),": The endpoint URL for the MCP server"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"auth"})}),": Specifies the authentication type:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"type: oauth2"}),": Enables OAuth2 user delegated access for this tool"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.code,{children:"manifest"})}),": Defines the tools available from this MCP server (explained below)."]}),"\n",(0,i.jsx)(n.h4,{id:"understanding-the-manifest-requirement",children:"Understanding the Manifest Requirement"}),"\n",(0,i.jsx)(n.p,{children:"Due to limitations in the MCP protocol, Agent Mesh Enterprise cannot automatically discover available tools from OAuth2-protected MCP servers. The OAuth2 flow requires user interaction, which prevents the automatic tool discovery process from working."}),"\n",(0,i.jsx)(n.p,{children:"To work around this limitation, you must provide a manifest that lists the tools available from the MCP server. This manifest is identical to what the MCP server would return from its tools list command."}),"\n",(0,i.jsx)(n.h4,{id:"obtaining-the-manifest",children:"Obtaining the Manifest"}),"\n",(0,i.jsx)(n.p,{children:"You can obtain the manifest in several ways:"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Method 1: Use MCP Provider Documentation"})}),"\n",(0,i.jsx)(n.p,{children:"Many MCP providers document their available tools. Check the provider's documentation for a list of tools and their schemas."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Method 2: Use MCP Inspector"})}),"\n",(0,i.jsxs)(n.p,{children:["Use a tool like ",(0,i.jsx)(n.a,{href:"https://github.com/modelcontextprotocol/inspector",children:"MCP Inspector"})," to connect to the MCP server and retrieve the output of the tools list command. You can then use this output directly as your manifest configuration."]}),"\n",(0,i.jsx)(n.h4,{id:"manifest-format",children:"Manifest Format"}),"\n",(0,i.jsx)(n.p,{children:"Each tool in the manifest follows this format:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"- name: toolName\n description: Tool description explaining what it does\n inputSchema:\n type: object\n properties:\n parameterName:\n type: string\n description: Parameter description\n required:\n - parameterName\n additionalProperties: false\n $schema: http://json-schema.org/draft-07/schema#\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"inputSchema"})," is a standard JSON Schema (draft-07) that defines what parameters the tool accepts. This schema is used for validation and to help the AI model understand how to call the tool."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Note"}),": Complete sample MCP configurations are available in the ",(0,i.jsx)(n.a,{href:"https://github.com/SolaceLabs/solace-agent-mesh/tree/main/examples/agents/remote-mcp",children:"examples/agents/remote-mcp directory"})," for each of the tested remote MCP providers (Atlassian, Stripe, Cloudflare, Canva) to simplify setup."]}),"\n",(0,i.jsx)(n.h3,{id:"step-4-deploy-configuration",children:"Step 4: Deploy Configuration"}),"\n",(0,i.jsx)(n.p,{children:"After configuring credential storage, trust manager, and MCP tools, deploy these configurations to your Agent Mesh Enterprise installation. Ensure that:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Configuration files with MCP tool definitions are accessible to the agents"}),"\n",(0,i.jsxs)(n.li,{children:["Environment variables (",(0,i.jsx)(n.code,{children:"SECRETS_TTL_SECONDS"}),", ",(0,i.jsx)(n.code,{children:"OAUTH_TOOL_REDIRECT_URI"}),") are set"]}),"\n",(0,i.jsx)(n.li,{children:"Database URLs are configured if using SQL persistence"}),"\n",(0,i.jsx)(n.li,{children:"The installation is restarted to load the new configuration"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"After deployment, test the OAuth2 flow by attempting to use an OAuth2-enabled MCP tool. Users should be prompted to authenticate with the MCP provider."}),"\n",(0,i.jsx)(n.h2,{id:"security-considerations",children:"Security Considerations"}),"\n",(0,i.jsx)(n.p,{children:"Secure User Delegated Access involves storing and managing user credentials, which requires careful attention to security. This section outlines the security features built into the system and additional measures you should implement."}),"\n",(0,i.jsx)(n.h3,{id:"encryption-at-rest",children:"Encryption at Rest"}),"\n",(0,i.jsx)(n.p,{children:"When using SQL persistence, all stored credentials are automatically encrypted before being written to the database. Agent Mesh Enterprise uses the agent's unique identifier as the encryption key, ensuring that credentials cannot be used if extracted from storage."}),"\n",(0,i.jsx)(n.p,{children:"This encryption is automatic and requires no configuration. However, it means that:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Credentials encrypted by one agent cannot be decrypted by another agent"}),"\n",(0,i.jsx)(n.li,{children:"If an agent's unique identifier changes, existing credentials become inaccessible"}),"\n",(0,i.jsx)(n.li,{children:"Database backups contain encrypted credentials that are useless without the agent"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"For additional security, ensure your database is stored on encrypted storage volumes provided by your infrastructure (for example, encrypted EBS volumes in AWS, encrypted persistent disks in GCP)."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Note"}),": Memory-based storage does not persist credentials to disk, so encryption at rest does not apply. Memory storage should only be used for development and testing."]}),"\n",(0,i.jsx)(n.h3,{id:"trust-manager-for-identity-verification",children:"Trust Manager for Identity Verification"}),"\n",(0,i.jsx)(n.p,{children:"The trust manager provides defense-in-depth by verifying user identity on every credential operation. This prevents several attack scenarios:"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Credential Theft via Agent Compromise"}),": If an attacker compromises an agent and attempts to retrieve another user's credentials, the trust manager validates the user's identity token and denies access."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Man-in-the-Middle Attacks"}),": The trust manager validates that identity tokens are signed by a trusted issuer, preventing token forgery."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Replay Attacks"}),": Identity tokens include expiration times, limiting the window for replay attacks."]}),"\n",(0,i.jsx)(n.p,{children:"To maximize trust manager security:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Always enable trust manager (",(0,i.jsx)(n.code,{children:"enabled: true"}),") in production"]}),"\n",(0,i.jsx)(n.li,{children:"Monitor trust manager logs for denied access attempts"}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"credential-aging-and-expiration",children:"Credential Aging and Expiration"}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"SECRETS_TTL_SECONDS"})," configuration provides defense against long-lived credential compromise. By setting an appropriate TTL, you ensure that:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Stolen credentials have a limited lifetime"}),"\n",(0,i.jsx)(n.li,{children:"Terminated users' credentials expire automatically"}),"\n",(0,i.jsx)(n.li,{children:"Users periodically re-authenticate, allowing detection of account compromise"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The default TTL is 30 days (2592000 seconds) if not specified."}),"\n",(0,i.jsx)(n.h3,{id:"provider-side-revocation",children:"Provider-Side Revocation"}),"\n",(0,i.jsx)(n.p,{children:"MCP providers can revoke user credentials at any time through their own admin consoles. This provides an additional security control:"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"User Offboarding"}),": When a user leaves the organization, revoke their access at the MCP provider level (Atlassian, Stripe, etc.) in addition to removing their access to Agent Mesh Enterprise."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Incident Response"}),": If you suspect credential compromise, immediately revoke access at the MCP provider level. This blocks credential use even before they expire in Agent Mesh Enterprise."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Audit Compliance"}),": Provider-side revocation creates audit logs in the provider's system, which may be required for compliance purposes."]}),"\n",(0,i.jsx)(n.p,{children:"Document your incident response procedures to include MCP provider credential revocation as a standard step."}),"\n",(0,i.jsx)(n.h3,{id:"network-security",children:"Network Security"}),"\n",(0,i.jsx)(n.p,{children:"Secure User Delegated Access involves network communication between users, Agent Mesh Enterprise, and MCP providers. Implement these network security measures:"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Use HTTPS Everywhere"}),": All communication must use HTTPS in production:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"User to Agent Mesh Enterprise: HTTPS"}),"\n",(0,i.jsx)(n.li,{children:"Agent Mesh Enterprise to MCP providers: HTTPS"}),"\n",(0,i.jsx)(n.li,{children:"MCP provider redirects back to Agent Mesh Enterprise: HTTPS"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Internal Communication Security"}),": If using the trust manager, ensure communication between agents and the SSE gateway is encrypted and authenticated."]}),"\n",(0,i.jsx)(n.h3,{id:"logging-and-monitoring",children:"Logging and Monitoring"}),"\n",(0,i.jsx)(n.p,{children:"Enable comprehensive logging to detect and respond to security issues."}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Anomalous Patterns"}),": Monitor for unusual patterns such as:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Multiple failed authentication attempts from a single user"}),"\n",(0,i.jsx)(n.li,{children:"Credential access from unusual IP addresses or locations"}),"\n",(0,i.jsx)(n.li,{children:"Rapid credential creation/deletion cycles"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Integrate these logs with your SIEM (Security Information and Event Management) system for centralized monitoring and alerting."}),"\n",(0,i.jsx)(n.h2,{id:"best-practices",children:"Best Practices"}),"\n",(0,i.jsx)(n.p,{children:"Following these best practices helps you deploy Secure User Delegated Access securely and reliably."}),"\n",(0,i.jsx)(n.h3,{id:"always-enable-trust-manager-in-production",children:"Always Enable Trust Manager in Production"}),"\n",(0,i.jsx)(n.p,{children:"The trust manager provides critical defense-in-depth security. Always enable it in production deployments:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"trust_manager:\n enabled: true\n"})}),"\n",(0,i.jsx)(n.p,{children:"Only disable the trust manager in development or testing environments where security is not a concern."}),"\n",(0,i.jsx)(n.h3,{id:"use-sql-persistence-in-production",children:"Use SQL Persistence in Production"}),"\n",(0,i.jsx)(n.p,{children:"Memory persistence is only suitable for development and testing. Production deployments must use SQL persistence:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'session_service:\n type: "sql"\n database_url: ${AGENT_DATABASE_URL}\n default_behavior: "PERSISTENT"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"set-appropriate-ttl-values",children:"Set Appropriate TTL Values"}),"\n",(0,i.jsx)(n.p,{children:"Choose TTL values based on your security requirements and user experience considerations."}),"\n",(0,i.jsx)(n.p,{children:"Never exceed 30 days (2592000 seconds). Document your TTL policy and rationale in your security documentation."}),"\n",(0,i.jsx)(n.h3,{id:"configure-separate-session-storage-per-agent",children:"Configure Separate Session Storage Per Agent"}),"\n",(0,i.jsx)(n.p,{children:"Each agent should have its own session storage database, which will automatically be used for credential storage as well."}),"\n",(0,i.jsxs)(n.p,{children:["This isolation provides defense-in-depth and simplifies multi-tenant deployments. See the ",(0,i.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/installing-and-configuring/session-storage",children:"Session Storage documentation"})," for more details on configuring session storage."]}),"\n",(0,i.jsx)(n.h3,{id:"use-https-in-production",children:"Use HTTPS in Production"}),"\n",(0,i.jsx)(n.p,{children:"Configure HTTPS for all endpoints in production:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Set ",(0,i.jsx)(n.code,{children:"OAUTH_TOOL_REDIRECT_URI"})," to an HTTPS URL"]}),"\n",(0,i.jsx)(n.li,{children:"Configure SSL certificates for Agent Mesh Enterprise"}),"\n",(0,i.jsx)(n.li,{children:"Verify that MCP providers use HTTPS endpoints"}),"\n",(0,i.jsx)(n.li,{children:"Never use HTTP in production (only acceptable for local development)"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,i.jsx)(n.p,{children:"This section addresses common issues you may encounter when configuring or operating Secure User Delegated Access."}),"\n",(0,i.jsx)(n.h3,{id:"oauth2-authentication-flow-fails",children:"OAuth2 Authentication Flow Fails"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Symptoms"}),": Users report that they are redirected to the MCP provider but never redirected back to Agent Mesh Enterprise, or they see an error after attempting to authenticate."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Possible Causes and Solutions"}),":"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Incorrect Callback URI"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Verify"}),": Check that ",(0,i.jsx)(n.code,{children:"OAUTH_TOOL_REDIRECT_URI"})," exactly matches the redirect URI registered with the MCP provider."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Common mistake"}),": Mismatched protocols (HTTP vs HTTPS), missing ports, trailing slashes."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Solution"}),": Update either the environment variable or the MCP provider configuration to match exactly."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Domain Not Authorized"})," (For providers requiring domain authorization):"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Verify"}),": Check that your domain is listed in the MCP provider's authorized domains for MCP access."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Solution"}),": Add your domain to the provider's authorized domain list following their documentation."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"credentials-not-persisting-across-restarts",children:"Credentials Not Persisting Across Restarts"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Symptoms"}),": Users must re-authenticate every time the agent restarts, even though SQL persistence is configured."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Possible Causes and Solutions"}),":"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Memory Storage Configured Instead of SQL"}),":","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Verify"}),": Check the agent configuration to ensure ",(0,i.jsx)(n.code,{children:"session_service.type"})," is set to ",(0,i.jsx)(n.code,{children:'"sql"'}),", not ",(0,i.jsx)(n.code,{children:'"memory"'}),"."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Solution"}),": Update the configuration and restart the agent."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"trust-manager-denying-access",children:"Trust Manager Denying Access"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Symptoms"}),': Users receive "Access Denied" errors when attempting to use MCP tools, or logs show trust manager access denials.']}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Possible Causes and Solutions"}),":"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Trust Manager Not Configured on All Components"}),":","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Verify"}),": Ensure trust manager is enabled on both the SSE Gateway and all agents."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Solution"}),": Add trust manager configuration to all component configurations and restart."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"credentials-expire-too-quickly-or-too-slowly",children:"Credentials Expire Too Quickly or Too Slowly"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Symptoms"}),": Users report that they need to re-authenticate too frequently, or credentials remain valid longer than expected."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Possible Causes and Solutions"}),":"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"TTL Not Set Correctly"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Verify"}),": Check the ",(0,i.jsx)(n.code,{children:"SECRETS_TTL_SECONDS"})," environment variable value."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Solution"}),": Update the environment variable to the desired TTL and restart the agent."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"MCP Provider Token Expiration"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Note"}),": Even if your TTL is long, MCP providers may issue short-lived tokens."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Verify"}),": Check the MCP provider's token expiration policy."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Solution"}),": This is controlled by the MCP provider and cannot be changed. Ensure refresh tokens are working correctly to automatically renew expired tokens."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Refresh Tokens Not Working"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Verify"}),": Check that the MCP provider issues refresh tokens and that Agent Mesh Enterprise is configured to use them."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Diagnostic"}),": Look for token refresh attempts in the logs."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Solution"}),": Ensure the OAuth2 scope includes ",(0,i.jsx)(n.code,{children:"offline_access"})," or equivalent for the provider."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"manifest-configuration-errors",children:"Manifest Configuration Errors"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Symptoms"}),": MCP tools are not available, or the AI model reports that tools are missing or incorrectly defined."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Possible Causes and Solutions"}),":"]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Manifest Missing or Empty"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Verify"}),": Check that the ",(0,i.jsx)(n.code,{children:"manifest"})," section in your MCP tool configuration is populated."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Solution"}),": Add the manifest with tool definitions as described in the Configuration Steps section."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Manifest Format Errors"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Verify"}),": Ensure the manifest follows the correct YAML structure and JSON Schema format."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Common mistakes"}),": Missing required fields (",(0,i.jsx)(n.code,{children:"name"}),", ",(0,i.jsx)(n.code,{children:"description"}),", ",(0,i.jsx)(n.code,{children:"inputSchema"}),"), invalid JSON Schema."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Solution"}),": Validate your manifest structure against the examples in this document."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"JSON Schema Version Issues"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Note"}),": Manifests typically use the ",(0,i.jsx)(n.code,{children:"http://json-schema.org/draft-07/schema#"})," standard. However, some LLM providers may require the newer ",(0,i.jsx)(n.code,{children:"https://json-schema.org/specification-links#2020-12"})," specification, which can lead to errors at inference time."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Solution"}),": Check your LLM provider's requirements and adjust the ",(0,i.jsx)(n.code,{children:"$schema"})," field in your manifest accordingly."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"If you encounter issues, check the latest Agent Mesh Enterprise documentation or enable debug logging to review detailed error information:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"log:\n stdout_log_level: DEBUG\n log_file_level: DEBUG\n"})}),"\n",(0,i.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,i.jsx)(n.p,{children:"Secure User Delegated Access provides enhanced security and user-specific access control for Agent Mesh Enterprise deployments using remote MCP tools. By following the configuration steps, security considerations, and best practices in this guide, you can deploy this feature securely and reliably."}),"\n",(0,i.jsx)(n.p,{children:"Key takeaways:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Always enable the trust manager in production for defense-in-depth security"}),"\n",(0,i.jsx)(n.li,{children:"Use SQL persistence to ensure credentials survive agent restarts"}),"\n",(0,i.jsx)(n.li,{children:"Set appropriate TTL values balancing security and user experience"}),"\n",(0,i.jsx)(n.li,{children:"Configure database-per-agent isolation for multi-tenant security"}),"\n",(0,i.jsx)(n.li,{children:"Follow provider-specific setup instructions carefully"}),"\n",(0,i.jsx)(n.li,{children:"Implement comprehensive monitoring and logging"}),"\n",(0,i.jsx)(n.li,{children:"Maintain regular security reviews of your configuration"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Remember to keep your configuration updated as MCP providers evolve their APIs and authentication requirements, and regularly review your security posture to ensure continued protection of user credentials."})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>a});var r=s(6540);const i={},t=r.createContext(i);function o(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[7791],{8634:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"documentation/getting-started/architecture","title":"Architecture Overview","description":"Agent Mesh is an event-driven framework that creates a distributed ecosystem of collaborative AI agents. The architecture decouples agent logic from communication and orchestration, enabling you to build scalable, resilient, and modular AI systems.","source":"@site/docs/documentation/getting-started/architecture.md","sourceDirName":"documentation/getting-started","slug":"/documentation/getting-started/architecture","permalink":"/solace-agent-mesh/docs/documentation/getting-started/architecture","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/getting-started/architecture.md","tags":[],"version":"current","sidebarPosition":18,"frontMatter":{"title":"Architecture Overview","sidebar_position":18},"sidebar":"docSidebar","previous":{"title":"Try Agent Mesh","permalink":"/solace-agent-mesh/docs/documentation/getting-started/try-agent-mesh"},"next":{"title":"Components","permalink":"/solace-agent-mesh/docs/documentation/components/"}}');var a=n(4848),o=n(8453);const i={title:"Architecture Overview",sidebar_position:18},r=void 0,c={},l=[{value:"Architectural Principles",id:"architectural-principles",level:2},{value:"System Components",id:"system-components",level:2},{value:"Solace Event Broker",id:"solace-event-broker",level:3},{value:"Gateways",id:"gateways",level:3},{value:"Agent Hosts and Agents",id:"agent-hosts-and-agents",level:3},{value:"Key Architectural Flows",id:"key-architectural-flows",level:2},{value:"User Task Processing Flow",id:"user-task-processing-flow",level:3},{value:"Agent-to-Agent Delegation Flow",id:"agent-to-agent-delegation-flow",level:3},{value:"Agent Discovery Flow",id:"agent-discovery-flow",level:3},{value:"A2A Protocol and Topic Structure",id:"a2a-protocol-and-topic-structure",level:2}];function d(e){const t={a:"a",code:"code",h2:"h2",h3:"h3",li:"li",mermaid:"mermaid",ol:"ol",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,o.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.p,{children:"Agent Mesh is an event-driven framework that creates a distributed ecosystem of collaborative AI agents. The architecture decouples agent logic from communication and orchestration, enabling you to build scalable, resilient, and modular AI systems."}),"\n",(0,a.jsx)(t.p,{children:"The framework integrates three primary technologies:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Solace Event Broker"}),": Provides the messaging fabric for all asynchronous communication, utilizing topic-based routing for the Agent-to-Agent (A2A) protocol"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Solace AI Connector (SAC)"}),": Serves as the runtime environment for hosting and managing the lifecycle of all system components"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Google Agent Development Kit (ADK)"}),": Provides the core logic for individual agents, including LLM interaction, tool execution, and state management"]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"architectural-principles",children:"Architectural Principles"}),"\n",(0,a.jsx)(t.p,{children:"The design of Agent Mesh is founded on several key architectural principles:"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Event-Driven Architecture (EDA)"}),": All interactions between major components are asynchronous and mediated by the Solace event broker. This eliminates direct dependencies, allowing components to be developed, deployed, and scaled independently."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Component Decoupling"}),": Gateways, Agent Hosts, and other services communicate through standardized A2A protocol messages over the event mesh. They do not require knowledge of each other's network location, implementation language, or internal logic."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Scalability and Resilience"}),": The architecture supports horizontal scaling of Agent Hosts and Gateways. The Solace event broker provides fault tolerance and guaranteed message delivery, ensuring system resilience even if individual components fail or are restarted."]}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"system-components",children:"System Components"}),"\n",(0,a.jsxs)(t.p,{children:["The architecture comprises several distinct types of components that interact through the Solace Event Broker. External systems connect through gateways, which translate requests into the A2A protocol, while agent hosts run individual agents that can communicate with each other and access backend services like LLMs and databases. For detailed information about each component, see ",(0,a.jsx)(t.a,{href:"/solace-agent-mesh/docs/documentation/components/",children:"Components"}),". The architecture diagram below illustrates how these components work together."]}),"\n",(0,a.jsx)(t.mermaid,{value:'graph TB\n subgraph External Systems\n direction TB\n UserInterfaces("User Interfaces<br/>(Web UI, Slack, CLI)")\n APIs("External Systems & APIs")\n end\n\n subgraph SolaceAgentMesh ["Agent Mesh"]\n direction TB\n subgraph Gateways\n WebUIGateway("Web UI Gateway")\n CustomGateway("Custom Gateway")\n end\n\n Broker("Solace Event Broker<br/>(A2A Protocol Over Topics)")\n\n subgraph AgentHosts ["Agent Hosts (SAC Applications)"]\n AgentHost1("Agent Host<br/>(Runs Agent A)")\n AgentHost2("Agent Host<br/>(Runs Agent B)")\n AgentHostN("...")\n end\n end\n\n subgraph BackendServices [Backend Services & Tools]\n direction TB\n LLM("Large Language Models")\n CustomTools("Custom Tools<br/>(Python, MCP)")\n DataStores("Databases & Vector Stores")\n ArtifactService("Artifact Service<br/>(Filesystem, Cloud Storage)")\n end\n\n %% Connections\n UserInterfaces -- Interacts with --\x3e Gateways\n APIs -- Interacts with --\x3e Gateways\n\n Gateways -- Pub/Sub --\x3e Broker\n AgentHosts -- Pub/Sub --\x3e Broker\n\n AgentHost1 -- Uses --\x3e LLM\n AgentHost1 -- Uses --\x3e CustomTools\n AgentHost1 -- Uses --\x3e DataStores\n AgentHost1 -- Uses --\x3e ArtifactService\n\n AgentHost2 -- Uses --\x3e LLM\n AgentHost2 -- Uses --\x3e CustomTools\n AgentHost2 -- Uses --\x3e DataStores\n AgentHost2 -- Uses --\x3e ArtifactService\n\n\n %% Styling\n classDef externalBoxes fill:#FFF7C2,stroke:#03213B,stroke-width:2px,color:#03213B;\n classDef gatewayContainer fill:#F4F4F4,stroke:#03213B,stroke-width:2px,color:#03213B;\n classDef gatewayBoxes fill:#C2F7FF,stroke:#03213B,stroke-width:2px,color:#03213B;\n classDef mesh fill:#E8FFF0,stroke:#03213B,stroke-width:2px,color:#03213B;\n classDef broker fill:#00C895,stroke:#03213B,stroke-width:2px,color:#03213B;\n classDef agentContainer fill:#F4F4F4,stroke:#03213B,stroke-width:2px,color:#03213B;\n classDef agentBoxes fill:#C2F7FF,stroke:#03213B,stroke-width:2px,color:#03213B;\n classDef serviceBoxes fill:#FFF7C2,stroke:#03213B,stroke-width:2px,color:#03213B\n\n class UserInterfaces,APIs externalBoxes;\n class WebUIGateway,CustomGateway gatewayBoxes;\n class Gateways gatewayContainer;\n class Broker broker;\n class SolaceAgentMesh mesh;\n class AgentHosts agentContainer;\n class AgentHost1,AgentHost2,AgentHostN agentBoxes;\n class LLM,CustomTools,DataStores,ArtifactService serviceBoxes;'}),"\n",(0,a.jsx)(t.h3,{id:"solace-event-broker",children:"Solace Event Broker"}),"\n",(0,a.jsxs)(t.p,{children:["The Solace Event Broker serves as the central messaging fabric that enables all communication within the agent mesh. It routes A2A protocol messages between components using a hierarchical topic structure, supporting patterns like request/reply, streaming updates, and publish/subscribe for agent discovery. See ",(0,a.jsx)(t.a,{href:"https://solace.com/products/event-broker/",children:"Event Broker"})," for more information."]}),"\n",(0,a.jsx)(t.h3,{id:"gateways",children:"Gateways"}),"\n",(0,a.jsx)(t.p,{children:"Gateways are SAC applications that act as bridges between external systems and the agent mesh. They handle protocol translation, converting external protocols (such as HTTP, WebSockets, or Slack RTM) into the standardized A2A protocol and vice versa. Gateways also manage authentication and authorization, authenticate incoming requests, and use a pluggable AuthorizationService to retrieve user permission scopes. Additionally, they manage external user sessions and map them to A2A task lifecycles, while handling asynchronous responses and status updates from agents."}),"\n",(0,a.jsxs)(t.p,{children:["The Gateway Development Kit (GDK) provides BaseGatewayApp and BaseGatewayComponent classes that abstract common gateway logic, including A2A protocol handling, agent discovery, and late-stage embed resolution. For more information about gateways, see ",(0,a.jsx)(t.a,{href:"/solace-agent-mesh/docs/documentation/components/gateways",children:"Gateways"}),"."]}),"\n",(0,a.jsx)(t.h3,{id:"agent-hosts-and-agents",children:"Agent Hosts and Agents"}),"\n",(0,a.jsx)(t.p,{children:"An Agent Host is a SAC application (SamAgentApp) that hosts a single ADK-based agent. It manages the lifecycle of the ADK Runner and LlmAgent, handles A2A protocol translation between incoming requests and ADK Task objects, enforces permission scopes by filtering available tools, and initializes ADK services like the ArtifactService and MemoryService."}),"\n",(0,a.jsxs)(t.p,{children:["An agent is the logical entity within an Agent Host that performs tasks. Each agent is defined by its configuration, which includes instructions that define its persona and capabilities, LLM configuration specifying which large language model to use, and a toolset containing built-in tools, custom Python functions, or MCP Toolsets. For more information about agents, see ",(0,a.jsx)(t.a,{href:"/solace-agent-mesh/docs/documentation/components/agents",children:"Agents"}),"."]}),"\n",(0,a.jsx)(t.h2,{id:"key-architectural-flows",children:"Key Architectural Flows"}),"\n",(0,a.jsx)(t.p,{children:"The following flows illustrate how data moves through the system and demonstrate the relationships between components in the event-driven architecture."}),"\n",(0,a.jsx)(t.h3,{id:"user-task-processing-flow",children:"User Task Processing Flow"}),"\n",(0,a.jsx)(t.p,{children:"When you submit a request through any gateway, the system processes it through several stages:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"An external client sends a request to a gateway"}),"\n",(0,a.jsx)(t.li,{children:"The gateway authenticates the request, retrieves your permission scopes via its AuthorizationService, and translates the request into an A2A task message, including the scopes in the Solace message's user properties"}),"\n",(0,a.jsx)(t.li,{children:"The gateway publishes the message to the target agent's request topic on the Solace Broker"}),"\n",(0,a.jsx)(t.li,{children:"The corresponding Agent Host receives the message, with the SamAgentComponent extracting the scopes and initiating an ADK task"}),"\n",(0,a.jsx)(t.li,{children:"The ADK LlmAgent processes the task, with a before_model_callback filtering the available tools based on your scopes before invoking the LLM"}),"\n",(0,a.jsx)(t.li,{children:"As the agent executes, the SamAgentComponent translates ADK events into A2A status and artifact update messages, publishing them to the originating gateway's status topic"}),"\n",(0,a.jsx)(t.li,{children:"The gateway receives these streaming updates, performs any necessary late-stage processing (such as resolving artifact_content embeds), and forwards them to you"}),"\n",(0,a.jsx)(t.li,{children:"Upon completion, the Agent Host sends a final A2A response message to the gateway, which delivers it to you"}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"agent-to-agent-delegation-flow",children:"Agent-to-Agent Delegation Flow"}),"\n",(0,a.jsx)(t.p,{children:"Agents can delegate subtasks to other agents while maintaining security context:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"Agent A, while processing a task, determines that a subtask should be delegated to Agent B"}),"\n",(0,a.jsx)(t.li,{children:"Agent A uses its PeerAgentTool to construct a new A2A task request for Agent B, propagating the original user's permission scopes to maintain the security context"}),"\n",(0,a.jsx)(t.li,{children:"The request is published to Agent B's request topic"}),"\n",(0,a.jsx)(t.li,{children:"Agent B's Host receives and processes the subtask, enforcing the propagated scopes on its own toolset"}),"\n",(0,a.jsx)(t.li,{children:"Agent B sends status updates and a final response to topics designated by Agent A"}),"\n",(0,a.jsx)(t.li,{children:"Agent A receives the results and incorporates them into its ongoing task"}),"\n"]}),"\n",(0,a.jsx)(t.h3,{id:"agent-discovery-flow",children:"Agent Discovery Flow"}),"\n",(0,a.jsx)(t.p,{children:"The system automatically discovers available agents through a publish-subscribe mechanism:"}),"\n",(0,a.jsxs)(t.ol,{children:["\n",(0,a.jsx)(t.li,{children:"On startup and periodically, each Agent Host publishes an AgentCard (a JSON document describing its agent's capabilities) to a well-known discovery topic"}),"\n",(0,a.jsx)(t.li,{children:"Gateways and other Agent Hosts subscribe to this topic"}),"\n",(0,a.jsx)(t.li,{children:"Upon receiving an AgentCard, components update their local AgentRegistry, making them aware of available agents for user selection (at gateways) or peer delegation (at agents)"}),"\n"]}),"\n",(0,a.jsx)(t.h2,{id:"a2a-protocol-and-topic-structure",children:"A2A Protocol and Topic Structure"}),"\n",(0,a.jsx)(t.p,{children:"The A2A protocol is based on JSON-RPC 2.0 and defines the message formats for all interactions between components. Communication is routed via a hierarchical topic structure on the Solace event broker, which allows for precise, point-to-point routing in a decoupled, asynchronous environment."}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Purpose"}),(0,a.jsx)(t.th,{children:"Topic Pattern"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:"Agent Discovery"})}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"{namespace}/a2a/v1/discovery/agentcards"})})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:"Task Requests"})}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"{namespace}/a2a/v1/agent/request/{target_agent_name}"})})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:"Status Updates"})}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"{namespace}/a2a/v1/gateway/status/{gateway_id}/{task_id}"})})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:"Final Responses"})}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"{namespace}/a2a/v1/gateway/response/{gateway_id}/{task_id}"})})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:"Peer Delegation Status"})}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"{namespace}/a2a/v1/agent/status/{delegating_agent_name}/{sub_task_id}"})})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:(0,a.jsx)(t.strong,{children:"Peer Delegation Response"})}),(0,a.jsx)(t.td,{children:(0,a.jsx)(t.code,{children:"{namespace}/a2a/v1/agent/response/{delegating_agent_name}/{sub_task_id}"})})]})]})]}),"\n",(0,a.jsxs)(t.p,{children:["For more information about the CLI tools that help you work with these components, see ",(0,a.jsx)(t.a,{href:"/solace-agent-mesh/docs/documentation/components/cli",children:"CLI"}),". To learn about extending the system with custom functionality, see ",(0,a.jsx)(t.a,{href:"/solace-agent-mesh/docs/documentation/components/plugins",children:"Plugins"}),"."]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>i,x:()=>r});var s=n(6540);const a={},o=s.createContext(a);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[6179],{5150:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"documentation/components/projects","title":"Projects","description":"Projects are a powerful organizational feature in Agent Mesh that enable users to group related chat sessions, manage artifacts and maintain context across multiple conversations. They provide a workspace-like environment for managing AI interactions around specific topics, tasks, or domains.","source":"@site/docs/documentation/components/projects.md","sourceDirName":"documentation/components","slug":"/documentation/components/projects","permalink":"/solace-agent-mesh/docs/documentation/components/projects","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/components/projects.md","tags":[],"version":"current","sidebarPosition":270,"frontMatter":{"title":"Projects","sidebar_position":270},"sidebar":"docSidebar","previous":{"title":"Plugins","permalink":"/solace-agent-mesh/docs/documentation/components/plugins"},"next":{"title":"Agent Mesh CLI","permalink":"/solace-agent-mesh/docs/documentation/components/cli"}}');var t=s(4848),r=s(8453);const o={title:"Projects",sidebar_position:270},l="Projects",a={},c=[{value:"Key Features",id:"key-features",level:2},{value:"How Projects Work",id:"how-projects-work",level:2},{value:"Project Components",id:"project-components",level:2},{value:"Project Metadata",id:"project-metadata",level:3},{value:"Chat Sessions",id:"chat-sessions",level:3},{value:"Knowledge (Artifacts)",id:"knowledge-artifacts",level:3},{value:"Configuration",id:"configuration",level:2},{value:"Disabling Projects",id:"disabling-projects",level:3},{value:"Feature Flag Control",id:"feature-flag-control",level:3},{value:"Soft Delete Pattern",id:"soft-delete-pattern",level:3},{value:"Best Practices",id:"best-practices",level:2},{value:"Project Organization",id:"project-organization",level:3},{value:"Knowledge Management",id:"knowledge-management",level:3},{value:"Session Management",id:"session-management",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"Projects Not Visible",id:"projects-not-visible",level:3},{value:"API Returns 501 Error",id:"api-returns-501-error",level:3},{value:"Search Not Working",id:"search-not-working",level:3},{value:"Performance Considerations",id:"performance-considerations",level:2},{value:"Database Optimization",id:"database-optimization",level:3},{value:"Artifact Storage",id:"artifact-storage",level:3},{value:"Search Performance",id:"search-performance",level:3},{value:"Security",id:"security",level:2},{value:"Authorization",id:"authorization",level:3},{value:"Data Privacy",id:"data-privacy",level:3},{value:"Related Documentation",id:"related-documentation",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"projects",children:"Projects"})}),"\n",(0,t.jsx)(n.p,{children:"Projects are a powerful organizational feature in Agent Mesh that enable users to group related chat sessions, manage artifacts and maintain context across multiple conversations. They provide a workspace-like environment for managing AI interactions around specific topics, tasks, or domains."}),"\n",(0,t.jsx)(n.admonition,{title:"In one sentence",type:"tip",children:(0,t.jsx)(n.p,{children:"Projects are organizational containers that group related chat sessions and knowledge artifacts together, enabling better context management and collaboration across multiple AI conversations."})}),"\n",(0,t.jsx)(n.h2,{id:"key-features",children:"Key Features"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Session Organization"}),": Group related chat sessions under a single project for better organization and context management."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Knowledge Management"}),": Store and manage files, documents, and other artifacts that can be referenced across all sessions within a project."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Custom Instructions"}),": Define project-specific instructions (system prompt) that apply to all chat sessions within the project, ensuring consistent AI behavior."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Default Agent Configuration"}),": Set a default agent for the project, streamlining the chat creation process."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Soft Delete"}),": Projects and sessions can be safely deleted with the ability to recover them if needed (logical delete)."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Search Capabilities"}),": Search across all sessions within a project or across all projects to quickly find relevant conversations."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Session Mobility"}),": Move chat sessions between projects to reorganize your work as needs evolve."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"how-projects-work",children:"How Projects Work"}),"\n",(0,t.jsx)(n.p,{children:"Projects provide a hierarchical structure for organizing your AI interactions. Each project contains:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Project Metadata"}),": Name, description, system prompt, and default agent configuration"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Chat Sessions"}),": Multiple conversation threads that inherit project settings"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Project Knowledge"}),": Files and documents accessible across all sessions"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"project-components",children:"Project Components"}),"\n",(0,t.jsx)(n.h3,{id:"project-metadata",children:"Project Metadata"}),"\n",(0,t.jsx)(n.p,{children:"Each project contains the following metadata:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Name"}),": A descriptive name for the project (required)"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Description"}),": Optional detailed description of the project's purpose"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"System Prompt"}),": Custom instructions that apply to all chat sessions in the project"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Default Agent"}),": The agent that will be used by default for new sessions in this project"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Created/Updated Timestamps"}),": Automatic tracking of project creation and modification times"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"chat-sessions",children:"Chat Sessions"}),"\n",(0,t.jsx)(n.p,{children:"Projects can contain multiple chat sessions, each representing a separate conversation thread. Sessions within a project:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Inherit the project's instructions (if defined)"}),"\n",(0,t.jsx)(n.li,{children:"Use the project's default agent (if specified)"}),"\n",(0,t.jsx)(n.li,{children:"Can access project-level artifacts"}),"\n",(0,t.jsx)(n.li,{children:"Can be moved between projects"}),"\n",(0,t.jsx)(n.li,{children:"Can be searched and filtered"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"knowledge-artifacts",children:"Knowledge (Artifacts)"}),"\n",(0,t.jsx)(n.p,{children:"Projects support two types of knowledge artifacts:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Project-Level Knowledge"}),': Files attached to the project itself (shown in the "Knowledge" section), accessible by all sessions']}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Session-Level Artifacts"}),": Files attached to specific chat sessions within the project"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Knowledge artifacts can include:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Documents (PDF, DOCX, TXT, MD)"}),"\n",(0,t.jsx)(n.li,{children:"Images (PNG, JPG, GIF)"}),"\n",(0,t.jsx)(n.li,{children:"Code files"}),"\n",(0,t.jsx)(n.li,{children:"Data files (JSON, CSV, YAML)"}),"\n",(0,t.jsx)(n.li,{children:"Any other file type supported by the system"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,t.jsx)(n.h3,{id:"disabling-projects",children:"Disabling Projects"}),"\n",(0,t.jsxs)(n.p,{children:["Projects require SQL database persistence to function. Configure persistence in your ",(0,t.jsx)(n.code,{children:"shared_config.yaml"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'session_service:\n type: sql\n database_url: "sqlite:///./data/sessions.db"\n'})}),"\n",(0,t.jsx)(n.p,{children:"Projects are enabled by default when persistence is configured. To disable the feature:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"# Disable projects explicitly\nprojects:\n enabled: false\n"})}),"\n",(0,t.jsx)(n.h3,{id:"feature-flag-control",children:"Feature Flag Control"}),"\n",(0,t.jsx)(n.p,{children:"You can also control projects via feature flags:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"frontend_feature_enablement:\n projects: false # Disable projects\n taskLogging: true\n"})}),"\n",(0,t.jsxs)(n.admonition,{title:"Configuration Priority",type:"note",children:[(0,t.jsx)(n.p,{children:"The feature flag resolution follows this priority:"}),(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Persistence Check"}),": If persistence is disabled, projects are disabled (non-negotiable)"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Explicit Config"}),": ",(0,t.jsx)(n.code,{children:"projects.enabled"})," setting"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Feature Flag"}),": ",(0,t.jsx)(n.code,{children:"frontend_feature_enablement.projects"})," setting"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Default"}),": Enabled (if persistence is enabled and no explicit disable)"]}),"\n"]})]}),"\n",(0,t.jsx)(n.h3,{id:"soft-delete-pattern",children:"Soft Delete Pattern"}),"\n",(0,t.jsx)(n.p,{children:"Projects and sessions use a soft delete pattern for data preservation:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Deleted items are marked with ",(0,t.jsx)(n.code,{children:"deleted_at"})," timestamp"]}),"\n",(0,t.jsx)(n.li,{children:"Deleted items are automatically filtered from queries"}),"\n",(0,t.jsx)(n.li,{children:"Data remains in database for audit trails"}),"\n",(0,t.jsx)(n.li,{children:"Can be recovered if needed"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"best-practices",children:"Best Practices"}),"\n",(0,t.jsx)(n.h3,{id:"project-organization",children:"Project Organization"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Use Descriptive Names"}),": Give projects clear, descriptive names that reflect their purpose"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Define Instructions"}),": Set project-specific instructions (system prompts) to ensure consistent AI behavior"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Organize by Topic"}),": Group related conversations under the same project"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Regular Cleanup"}),": Periodically review and delete unused projects"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"knowledge-management",children:"Knowledge Management"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Upload Relevant Files"}),": Only upload files that are relevant to the project in the Knowledge section"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Use Metadata"}),": Add descriptions to knowledge artifacts for better organization"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"File Naming"}),": Use clear, descriptive filenames"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Size Considerations"}),": Be mindful of file sizes for performance"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"session-management",children:"Session Management"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Move Sessions"}),": Reorganize sessions between projects as needs evolve"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Use Search"}),": Leverage search to find relevant conversations quickly"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Delete Unused Sessions"}),": Clean up old or irrelevant sessions"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Consistent Naming"}),": Use clear session names for easier searching"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(n.h3,{id:"projects-not-visible",children:"Projects Not Visible"}),"\n",(0,t.jsx)(n.p,{children:"If projects are not showing up in the UI:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Check Persistence Configuration"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"session_service:\n type: sql # Must be 'sql', not 'memory'\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Check if Projects are Explicitly Disabled"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"projects:\n enabled: false # Remove this line or set to true\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Check Feature Flags"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:"frontend_feature_enablement:\n projects: true # Should be true or omitted\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Verify Config Endpoint"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"curl http://localhost:8000/api/v1/config | jq '.frontend_feature_enablement.projects'\n"})}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"api-returns-501-error",children:"API Returns 501 Error"}),"\n",(0,t.jsx)(n.p,{children:"When project endpoints return 501 Not Implemented:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Persistence disabled"}),": Configure ",(0,t.jsx)(n.code,{children:"session_service.type: sql"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Explicitly disabled"}),": Remove ",(0,t.jsx)(n.code,{children:"projects.enabled: false"})," or set to ",(0,t.jsx)(n.code,{children:"true"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Feature flag disabled"}),": Set ",(0,t.jsx)(n.code,{children:"frontend_feature_enablement.projects: true"})]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"search-not-working",children:"Search Not Working"}),"\n",(0,t.jsx)(n.p,{children:"If session search is not returning results:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Check PostgreSQL Extension"}),": Ensure ",(0,t.jsx)(n.code,{children:"pg_trgm"})," extension is enabled"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Verify Indexes"}),": Check that GIN indexes are created on search columns"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Query Format"}),": Use simple search terms without special characters"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Permissions"}),": Ensure user has access to the sessions being searched"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"performance-considerations",children:"Performance Considerations"}),"\n",(0,t.jsx)(n.h3,{id:"database-optimization",children:"Database Optimization"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Indexes"}),": Projects use indexes on ",(0,t.jsx)(n.code,{children:"user_id"}),", ",(0,t.jsx)(n.code,{children:"deleted_at"}),", and search columns"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Eager Loading"}),": Related data is loaded efficiently to prevent N+1 queries"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Pagination"}),": Search results are paginated to handle large datasets"]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"artifact-storage",children:"Artifact Storage"}),"\n",(0,t.jsxs)(n.p,{children:["Project artifacts use the configured artifact store. See ",(0,t.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/installing-and-configuring/configurations#artifact-service",children:"Configurations - Artifact Service"})," for more details."]}),"\n",(0,t.jsx)(n.h3,{id:"search-performance",children:"Search Performance"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Full-Text Search"}),": Uses PostgreSQL ",(0,t.jsx)(n.code,{children:"pg_trgm"})," for efficient fuzzy matching"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"GIN Indexes"}),": Optimized indexes for fast text search"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Query Optimization"}),": Subquery pattern avoids N+1 queries"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"security",children:"Security"}),"\n",(0,t.jsx)(n.h3,{id:"authorization",children:"Authorization"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"All project operations validate user ownership"}),"\n",(0,t.jsx)(n.li,{children:"Sessions can only be moved to projects owned by the user"}),"\n",(0,t.jsx)(n.li,{children:"Knowledge artifacts are scoped to user and project/session context"}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"data-privacy",children:"Data Privacy"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Soft-deleted data remains in database (consider retention policies)"}),"\n",(0,t.jsx)(n.li,{children:"User ID tracked for all operations"}),"\n",(0,t.jsx)(n.li,{children:"Consider implementing hard delete for GDPR compliance"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"related-documentation",children:"Related Documentation"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/components/gateways",children:"Gateways"})," - Learn about gateway configuration"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/components/agents",children:"Agents"})," - Configure agents for your projects"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},8453:(e,n,s)=>{s.d(n,{R:()=>o,x:()=>l});var i=s(6540);const t={},r=i.createContext(t);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[9057],{927:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"documentation/enterprise/wheel-installation","title":"Running from Wheel File","description":"You can run Agent Mesh Enterprise directly from a Python wheel file without using Docker containers. This approach gives you direct control over your Python environment and integrates with existing Python-based deployments.","source":"@site/docs/documentation/enterprise/wheel-installation.md","sourceDirName":"documentation/enterprise","slug":"/documentation/enterprise/wheel-installation","permalink":"/solace-agent-mesh/docs/documentation/enterprise/wheel-installation","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/enterprise/wheel-installation.md","tags":[],"version":"current","sidebarPosition":6,"frontMatter":{"title":"Running from Wheel File","sidebar_position":6},"sidebar":"docSidebar","previous":{"title":"Installing Agent Mesh Enterprise","permalink":"/solace-agent-mesh/docs/documentation/enterprise/installation"},"next":{"title":"Agent Builder","permalink":"/solace-agent-mesh/docs/documentation/enterprise/agent-builder"}}');var s=t(4848),o=t(8453);const r={title:"Running from Wheel File",sidebar_position:6},a="Running Agent Mesh Enterprise from Wheel File",l={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Step 1: Download the Wheel File",id:"step-1-download-the-wheel-file",level:2},{value:"Step 2: Install the Wheel File",id:"step-2-install-the-wheel-file",level:2},{value:"Step 3: Prepare Your Configuration",id:"step-3-prepare-your-configuration",level:2},{value:"Step 4: Run Agent Mesh Enterprise",id:"step-4-run-agent-mesh-enterprise",level:2},{value:"Running Specific Components",id:"running-specific-components",level:3},{value:"Using the Short Alias",id:"using-the-short-alias",level:3},{value:"Limitations",id:"limitations",level:2},{value:"No Dynamic Agent Deployment",id:"no-dynamic-agent-deployment",level:3},{value:"Custom Agent Code",id:"custom-agent-code",level:3},{value:"Accessing the Web UI",id:"accessing-the-web-ui",level:2},{value:"Next Steps",id:"next-steps",level:2}];function h(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"running-agent-mesh-enterprise-from-wheel-file",children:"Running Agent Mesh Enterprise from Wheel File"})}),"\n",(0,s.jsx)(n.p,{children:"You can run Agent Mesh Enterprise directly from a Python wheel file without using Docker containers. This approach gives you direct control over your Python environment and integrates with existing Python-based deployments."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"To run Agent Mesh Enterprise from a wheel file, you need:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Python 3.10.16 or later"}),"\n",(0,s.jsx)(n.li,{children:"pip or uv package manager"}),"\n",(0,s.jsxs)(n.li,{children:["Access to the ",(0,s.jsx)(n.a,{href:"https://products.solace.com/prods/Agent_Mesh/Enterprise/",children:"Solace Product Portal"})]}),"\n",(0,s.jsx)(n.li,{children:"An LLM service API key and endpoint"}),"\n",(0,s.jsx)(n.li,{children:"For production deployments, Solace broker credentials"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"step-1-download-the-wheel-file",children:"Step 1: Download the Wheel File"}),"\n",(0,s.jsxs)(n.p,{children:["Download the Agent Mesh Enterprise wheel file from the ",(0,s.jsx)(n.a,{href:"https://products.solace.com/prods/Agent_Mesh/Enterprise/",children:"Solace Product Portal"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"The wheel file follows the naming pattern:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"solace_agent_mesh_enterprise-<version>-py3-none-any.whl\n"})}),"\n",(0,s.jsx)(n.h2,{id:"step-2-install-the-wheel-file",children:"Step 2: Install the Wheel File"}),"\n",(0,s.jsx)(n.p,{children:"You can install the wheel file with either pip or uv."}),"\n",(0,s.jsx)(n.p,{children:"If you use pip, run:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pip install solace_agent_mesh_enterprise-<version>-py3-none-any.whl\n"})}),"\n",(0,s.jsx)(n.p,{children:"If you use uv, run:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"uv pip install solace_agent_mesh_enterprise-<version>-py3-none-any.whl\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This installation provides the ",(0,s.jsx)(n.code,{children:"solace-agent-mesh"})," CLI tool and the Agent Mesh Enterprise framework."]}),"\n",(0,s.jsx)(n.h2,{id:"step-3-prepare-your-configuration",children:"Step 3: Prepare Your Configuration"}),"\n",(0,s.jsxs)(n.p,{children:["Agent Mesh Enterprise requires configuration files that define your agents, gateways, and system settings. The ",(0,s.jsx)(n.code,{children:"solace-agent-mesh init"})," command creates the project directory structure, environment variables, and configuration files you need."]}),"\n",(0,s.jsxs)(n.p,{children:["Follow the project setup steps in the ",(0,s.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/installing-and-configuring/run-project#create-your-project",children:"Creating and Running an Agent Mesh Project"})," guide to initialize your configuration. You can use the web-based interface or command-line options to configure your project settings."]}),"\n",(0,s.jsxs)(n.p,{children:["After initialization, your project directory contains the necessary ",(0,s.jsx)(n.code,{children:"configs/"})," directory with agent and gateway configurations, plus a ",(0,s.jsx)(n.code,{children:".env"})," file with your credentials."]}),"\n",(0,s.jsx)(n.h2,{id:"step-4-run-agent-mesh-enterprise",children:"Step 4: Run Agent Mesh Enterprise"}),"\n",(0,s.jsxs)(n.p,{children:["Start Agent Mesh Enterprise using the ",(0,s.jsx)(n.code,{children:"solace-agent-mesh run"})," command:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"solace-agent-mesh run\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This command loads environment variables from your ",(0,s.jsx)(n.code,{children:".env"})," file, starts all agents and gateways defined in your ",(0,s.jsx)(n.code,{children:"configs/"})," directory, and launches the web UI if you configured one."]}),"\n",(0,s.jsx)(n.h3,{id:"running-specific-components",children:"Running Specific Components"}),"\n",(0,s.jsx)(n.p,{children:"To run only specific agents or gateways, provide the configuration files as arguments:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"solace-agent-mesh run configs/agents/orchestrator.yaml configs/gateways/webui.yaml\n"})}),"\n",(0,s.jsx)(n.h3,{id:"using-the-short-alias",children:"Using the Short Alias"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"sam"})," alias provides a shorter alternative to the full command name:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sam run\n"})}),"\n",(0,s.jsx)(n.h2,{id:"limitations",children:"Limitations"}),"\n",(0,s.jsx)(n.p,{children:"When running from a wheel file, certain features have limitations compared to the Docker-based deployment."}),"\n",(0,s.jsx)(n.h3,{id:"no-dynamic-agent-deployment",children:"No Dynamic Agent Deployment"}),"\n",(0,s.jsx)(n.p,{children:"Dynamic agent deployment through the UI or API is not supported when running from a wheel file. You cannot deploy new agents at runtime through the web interface, upload agent configurations through the API, or dynamically add or remove agents without restarting. All agents must be defined in configuration files before you start the application."}),"\n",(0,s.jsx)(n.h3,{id:"custom-agent-code",children:"Custom Agent Code"}),"\n",(0,s.jsxs)(n.p,{children:["To create custom agents with Python tools and lifecycle functions, follow the standard agent creation process. For detailed instructions on creating agents with custom code, see ",(0,s.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/developing/create-agents",children:"Creating Agents"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"accessing-the-web-ui",children:"Accessing the Web UI"}),"\n",(0,s.jsxs)(n.p,{children:["After starting Agent Mesh Enterprise, access the web interface at the configured port (default: ",(0,s.jsx)(n.code,{children:"http://localhost:8000"}),")."]}),"\n",(0,s.jsx)(n.p,{children:"If you specified a different port in your gateway configuration, use that port instead."}),"\n",(0,s.jsx)(n.h2,{id:"next-steps",children:"Next Steps"}),"\n",(0,s.jsxs)(n.p,{children:["After running Agent Mesh Enterprise from the wheel file, you can configure authentication and authorization for your deployment. For information about setting up authentication, see ",(0,s.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/enterprise/single-sign-on",children:"Single Sign-On"}),". For information about configuring authorization, see ",(0,s.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/enterprise/rbac-setup-guide",children:"Role-Based Access Control"}),". For production deployment considerations, see ",(0,s.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/deploying/deployment-options",children:"deployment options"}),"."]})]})}function d(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>r,x:()=>a});var i=t(6540);const s={},o=i.createContext(s);function r(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[3556],{2084:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>a,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"documentation/components/builtin-tools/embeds","title":"Dynamic Embeds","description":"Dynamic Embeds","source":"@site/docs/documentation/components/builtin-tools/embeds.md","sourceDirName":"documentation/components/builtin-tools","slug":"/documentation/components/builtin-tools/embeds","permalink":"/solace-agent-mesh/docs/documentation/components/builtin-tools/embeds","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/components/builtin-tools/embeds.md","tags":[],"version":"current","sidebarPosition":40,"frontMatter":{"title":"Dynamic Embeds","sidebar_position":40},"sidebar":"docSidebar","previous":{"title":"Audio Tools","permalink":"/solace-agent-mesh/docs/documentation/components/builtin-tools/audio-tools"},"next":{"title":"Installing and Configuring Agent Mesh","permalink":"/solace-agent-mesh/docs/documentation/installing-and-configuring/"}}');var i=n(4848),r=n(8453);const a={title:"Dynamic Embeds",sidebar_position:40},l=void 0,d={},c=[{value:"Dynamic Embeds",id:"dynamic-embeds",level:2},{value:"Overview",id:"overview",level:3},{value:"Syntax",id:"syntax",level:3},{value:"Simple Syntax",id:"simple-syntax",level:4},{value:"Chain Syntax",id:"chain-syntax",level:4},{value:"Available Embed Types",id:"available-embed-types",level:3},{value:"General Purpose Embeds",id:"general-purpose-embeds",level:4},{value:"Artifact-Related Embeds",id:"artifact-related-embeds",level:4},{value:"<code>artifact_meta</code>",id:"artifact_meta",level:5},{value:"<code>artifact_return</code>",id:"artifact_return",level:5},{value:"<code>artifact_content</code>",id:"artifact_content",level:5},{value:"Technical Details",id:"technical-details",level:3},{value:"Resolution Stages",id:"resolution-stages",level:4},{value:"Configuration",id:"configuration",level:4},{value:"Error Handling",id:"error-handling",level:3},{value:"Templates",id:"templates",level:2},{value:"Using Templates for Formatted Output",id:"using-templates-for-formatted-output",level:3},{value:"The Templating Workflow",id:"the-templating-workflow",level:3},{value:"Step 1: Create a Mustache Template",id:"step-1-create-a-mustache-template",level:4},{value:"Step 2: Store the Template as an Artifact",id:"step-2-store-the-template-as-an-artifact",level:4},{value:"Step 3: Render the Template with an Embed",id:"step-3-render-the-template-with-an-embed",level:4},{value:"Error Handling",id:"error-handling-1",level:3}];function o(e){const t={a:"a",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",h4:"h4",h5:"h5",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h2,{id:"dynamic-embeds",children:"Dynamic Embeds"}),"\n",(0,i.jsxs)(t.p,{children:["Dynamic embeds provide a mechanism for agents to insert context-dependent information into their text responses or tool parameters using a specialized ",(0,i.jsx)(t.code,{children:"\xab...\xbb"})," syntax. This feature allows for the dynamic retrieval and formatting of data without requiring explicit tool calls for simple data retrieval or calculations."]}),"\n",(0,i.jsx)(t.h3,{id:"overview",children:"Overview"}),"\n",(0,i.jsx)(t.p,{children:"Dynamic embeds allow an agent to defer the inclusion of data until it is needed, resolving the value just before the final response is sent to the user."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Standard Approach"}),': "The current time is [call ',(0,i.jsx)(t.code,{children:"get_time"}),' tool]."']}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"With Dynamic Embeds"}),': "The current time is ',(0,i.jsx)(t.code,{children:"\xabdatetime:%H:%M\xbb"}),'."']}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:'The system resolves the embed directive, a dynamic placeholder for data that gets computed at runtime, replacing it with the evaluated result (for example, "The current time is 10:45.").'}),"\n",(0,i.jsx)(t.h3,{id:"syntax",children:"Syntax"}),"\n",(0,i.jsx)(t.p,{children:"There are two primary syntaxes for embed directives."}),"\n",(0,i.jsx)(t.h4,{id:"simple-syntax",children:"Simple Syntax"}),"\n",(0,i.jsx)(t.p,{children:"This syntax is used for most general-purpose embeds."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"\xabtype:expression | format_spec\xbb\n"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"type"})}),": A keyword indicating the type of information to embed (for example, ",(0,i.jsx)(t.code,{children:"state"}),", ",(0,i.jsx)(t.code,{children:"math"}),", ",(0,i.jsx)(t.code,{children:"datetime"}),")."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"expression"})}),": The specific data to retrieve or the expression to evaluate."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"format_spec"})}),": (Optional) A specifier for formatting the output value (for example, a number precision ",(0,i.jsx)(t.code,{children:".2f"})," or a ",(0,i.jsx)(t.code,{children:"strftime"})," string ",(0,i.jsx)(t.code,{children:"%Y-%m-%d"}),")."]}),"\n"]}),"\n",(0,i.jsx)(t.h4,{id:"chain-syntax",children:"Chain Syntax"}),"\n",(0,i.jsxs)(t.p,{children:["This syntax is used exclusively for the ",(0,i.jsx)(t.code,{children:"artifact_content"})," embed type to apply a sequence of transformations."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"\xabartifact_content:spec >>> modifier1 >>> modifier2 >>> format:output_format\xbb\n"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"artifact_spec"})}),": The artifact identifier (",(0,i.jsx)(t.code,{children:"filename[:version]"}),")."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:">>>"})}),": The chain delimiter, separating transformation steps."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"modifier"})}),": A transformation to apply to the data (for example, ",(0,i.jsx)(t.code,{children:"jsonpath"}),", ",(0,i.jsx)(t.code,{children:"grep"}),", ",(0,i.jsx)(t.code,{children:"slice_lines"}),")."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"format"})}),": A ",(0,i.jsx)(t.strong,{children:"required"})," final step that specifies the output format (for example, ",(0,i.jsx)(t.code,{children:"text"}),", ",(0,i.jsx)(t.code,{children:"json"}),", ",(0,i.jsx)(t.code,{children:"datauri"}),")."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"available-embed-types",children:"Available Embed Types"}),"\n",(0,i.jsx)(t.h4,{id:"general-purpose-embeds",children:"General Purpose Embeds"}),"\n",(0,i.jsx)(t.p,{children:"These are typically resolved by the agent host during execution."}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Type"}),(0,i.jsx)(t.th,{children:"Description"}),(0,i.jsx)(t.th,{children:"Example"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"state"})})}),(0,i.jsx)(t.td,{children:"Accesses a session state variable."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"\xabstate:user_name\xbb"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"math"})})}),(0,i.jsx)(t.td,{children:"Evaluates a mathematical expression."}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"\xabmath:100 * 0.05 | .2f\xbb"})," (Result: ",(0,i.jsx)(t.code,{children:"5.00"}),")"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"datetime"})})}),(0,i.jsx)(t.td,{children:"Inserts the current date and/or time."}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"\xabdatetime:%Y-%m-%d\xbb"})," (Result: ",(0,i.jsx)(t.code,{children:"2023-10-27"}),")"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"uuid"})})}),(0,i.jsx)(t.td,{children:"Inserts a random Version 4 UUID."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"\xabuuid:\xbb"})})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"status_update"})})}),(0,i.jsx)(t.td,{children:"Signals a temporary status update to the UI."}),(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"\xabstatus_update:Searching knowledge base...\xbb"})})]})]})]}),"\n",(0,i.jsx)(t.h4,{id:"artifact-related-embeds",children:"Artifact-Related Embeds"}),"\n",(0,i.jsx)(t.h5,{id:"artifact_meta",children:(0,i.jsx)(t.code,{children:"artifact_meta"})}),"\n",(0,i.jsx)(t.p,{children:"Retrieves a JSON string containing the full metadata of a specified artifact."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Syntax"}),": ",(0,i.jsx)(t.code,{children:"\xabartifact_meta:filename[:version]\xbb"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Example"}),": ",(0,i.jsx)(t.code,{children:"\xabartifact_meta:report.csv\xbb"})]}),"\n"]}),"\n",(0,i.jsx)(t.h5,{id:"artifact_return",children:(0,i.jsx)(t.code,{children:"artifact_return"})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"This is the primary way to return an artifact to the user."})," It attaches the specified artifact to the message as a file attachment. The embed itself is removed from the text during gateway processing."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Syntax"}),": ",(0,i.jsx)(t.code,{children:"\xabartifact_return:filename[:version]\xbb"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Resolution"}),": Late-stage (processed by gateway before sending to user)"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Examples"}),":","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"\xabartifact_return:report.pdf\xbb"})," - Returns the latest version of report.pdf"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"\xabartifact_return:data.csv:3\xbb"})," - Returns version 3 of data.csv"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Note"}),": ",(0,i.jsx)(t.code,{children:"artifact_return"})," is not necessary if the artifact was just created in the same response, since newly created artifacts are automatically attached to messages."]}),"\n"]}),"\n",(0,i.jsx)(t.h5,{id:"artifact_content",children:(0,i.jsx)(t.code,{children:"artifact_content"})}),"\n",(0,i.jsx)(t.p,{children:"Embeds the content of an artifact, with support for a chain of transformations. This is the most advanced embed type."}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Note"}),": If this embed resolves to binary content (like an image), it will be automatically converted into an attached file, similar to ",(0,i.jsx)(t.code,{children:"artifact_return"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Modifiers (Data Transformations)"}),"\nModifiers are applied sequentially to transform the data."]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Modifier"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"jsonpath:<expr>"})}),(0,i.jsx)(t.td,{children:"Applies a JSONPath query to JSON data."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"select_cols:<c1,c2>"})}),(0,i.jsx)(t.td,{children:"Selects specific columns from CSV data."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"filter_rows_eq:<col>:<val>"})}),(0,i.jsx)(t.td,{children:"Filters CSV rows where a column's value equals the specified value."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"slice_rows:<start>:<end>"})}),(0,i.jsx)(t.td,{children:"Selects a slice of rows from CSV data."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"slice_lines:<start>:<end>"})}),(0,i.jsx)(t.td,{children:"Selects a slice of lines from text data."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"grep:<pattern>"})}),(0,i.jsx)(t.td,{children:"Filters lines matching a regular expression in text data."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"head:<N>"})," / ",(0,i.jsx)(t.code,{children:"tail:<N>"})]}),(0,i.jsx)(t.td,{children:"Returns the first or last N lines of text data."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"select_fields:<f1,f2>"})}),(0,i.jsx)(t.td,{children:"Selects specific fields from a list of dictionaries."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"apply_to_template:<file>"})}),(0,i.jsxs)(t.td,{children:["Renders data using a Mustache template artifact. See the ",(0,i.jsx)(t.a,{href:"#templates",children:"Templates Guide"}),"."]})]})]})]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Formatters (Final Output)"}),"\nThis is the ",(0,i.jsx)(t.strong,{children:"required"})," final step in an ",(0,i.jsx)(t.code,{children:"artifact_content"})," chain, defining the output format."]}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Formatter"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"text"})}),(0,i.jsx)(t.td,{children:"Plain text, decoded as UTF-8."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.code,{children:"json"})," / ",(0,i.jsx)(t.code,{children:"json_pretty"})]}),(0,i.jsx)(t.td,{children:"A compact or indented JSON string."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"csv"})}),(0,i.jsx)(t.td,{children:"A CSV formatted string."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:(0,i.jsx)(t.code,{children:"datauri"})}),(0,i.jsxs)(t.td,{children:["A Base64-encoded data URI, typically for images (",(0,i.jsx)(t.code,{children:"data:image/png;base64,..."}),")."]})]})]})]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsxs)(t.strong,{children:[(0,i.jsx)(t.code,{children:"artifact_content"})," Examples:"]})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["To embed an image for display in a UI:\n",(0,i.jsx)(t.code,{children:"\xabartifact_content:logo.png >>> format:datauri\xbb"})]}),"\n",(0,i.jsxs)(t.li,{children:["To extract and format specific data from a JSON file:\n",(0,i.jsx)(t.code,{children:"\xabartifact_content:results.json >>> jsonpath:$.data[*].name >>> format:json\xbb"})]}),"\n",(0,i.jsxs)(t.li,{children:["To get the last 10 lines of a log file:\n",(0,i.jsx)(t.code,{children:"\xabartifact_content:debug.log >>> tail:10 >>> format:text\xbb"})]}),"\n",(0,i.jsxs)(t.li,{children:["To filter a CSV file and render it using an HTML template:\n",(0,i.jsx)(t.code,{children:"\xabartifact_content:users.csv >>> filter_rows_eq:Status:Active >>> apply_to_template:active_users.html >>> format:text\xbb"})]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"technical-details",children:"Technical Details"}),"\n",(0,i.jsx)(t.h4,{id:"resolution-stages",children:"Resolution Stages"}),"\n",(0,i.jsx)(t.p,{children:"Embeds are resolved in two distinct stages, depending on where the required data is available:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Early Stage (Agent Host)"}),": Resolved by the agent runtime itself. This stage handles simple, context-local embeds like ",(0,i.jsx)(t.code,{children:"state"}),", ",(0,i.jsx)(t.code,{children:"math"}),", and ",(0,i.jsx)(t.code,{children:"datetime"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Late Stage (Gateway)"}),": Resolved by the Gateway component before the final message is sent to the client. This is necessary for ",(0,i.jsx)(t.code,{children:"artifact_content"})," embeds, which may involve large files or transformations that are too resource-intensive for the agent host."]}),"\n"]}),"\n",(0,i.jsx)(t.h4,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Enabling/Disabling"}),": Embed resolution is enabled by default. It can be disabled in the ",(0,i.jsx)(t.code,{children:"app_config"})," of the agent host or gateway by setting ",(0,i.jsx)(t.code,{children:"enable_embed_resolution: false"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Resource Limits"}),": The gateway enforces configurable limits to prevent abuse, including ",(0,i.jsx)(t.code,{children:"gateway_artifact_content_limit_bytes"})," (default: 32KB) and ",(0,i.jsx)(t.code,{children:"gateway_recursive_embed_depth"})," (default: 3)."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"error-handling",children:"Error Handling"}),"\n",(0,i.jsx)(t.p,{children:"If an embed directive fails during parsing or evaluation, it is replaced with a descriptive error message in the final output."}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Parsing Error"}),": ",(0,i.jsx)(t.code,{children:"[Error: Invalid modifier format: 'badmodifier']"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Evaluation Error"}),": ",(0,i.jsx)(t.code,{children:"[Error: State variable 'user_id' not found]"})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Limit Exceeded"}),": ",(0,i.jsx)(t.code,{children:"[Error: Artifact 'large_file.zip' exceeds size limit]"})]}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"templates",children:"Templates"}),"\n",(0,i.jsx)(t.h3,{id:"using-templates-for-formatted-output",children:"Using Templates for Formatted Output"}),"\n",(0,i.jsxs)(t.p,{children:["The ",(0,i.jsx)(t.code,{children:"apply_to_template"})," modifier, used within an ",(0,i.jsx)(t.code,{children:"\xabartifact_content:...\xbb"})," embed directive, enables an agent to render structured data using a ",(0,i.jsx)(t.strong,{children:"Mustache template"}),". This mechanism allows for the separation of data and presentation, enabling the agent to control the output format (for example, HTML, Markdown) without generating the formatting markup itself."]}),"\n",(0,i.jsx)(t.h3,{id:"the-templating-workflow",children:"The Templating Workflow"}),"\n",(0,i.jsx)(t.p,{children:"The process involves three distinct steps:"}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Template Creation"}),": Author a Mustache template file that defines the desired output structure."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Artifact Storage"}),": Persist the template file as an artifact in the agent's artifact storage using the ",(0,i.jsx)(t.code,{children:"create_artifact"})," tool."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Template Rendering"}),": Utilize an ",(0,i.jsx)(t.code,{children:"\xabartifact_content:...\xbb"})," embed chain to process a data artifact and then apply the stored template to the result."]}),"\n"]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h4,{id:"step-1-create-a-mustache-template",children:"Step 1: Create a Mustache Template"}),"\n",(0,i.jsxs)(t.p,{children:["Mustache is a logic-less template syntax. Templates are created as text files (for example, ",(0,i.jsx)(t.code,{children:"user_table.html.mustache"}),") containing placeholders for data injection."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Key Mustache Syntax"}),":"]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"{{variable}}"})}),": A variable placeholder. It is replaced with the corresponding value from the data context."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"{{#section}}...{{/section}}"})}),": A section tag. The enclosed block is rendered for each item in a list or if the section variable is a non-empty object or truthy value."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"{{^section}}...{{/section}}"})}),": An inverted section tag. The enclosed block is rendered only if the section variable is false, null, or an empty list."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.code,{children:"{{! comment }}"})}),": A comment tag. The content is ignored during rendering."]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsxs)(t.strong,{children:["Example: ",(0,i.jsx)(t.code,{children:"user_table.html.mustache"})]}),"\nThis template generates an HTML table from a list of user objects."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-html",children:"<h2>User List</h2>\n{{#items}}\n<table>\n <thead>\n <tr>\n <th>Name</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n {{#.}}\n <tr>\n <td>{{name}}</td>\n <td>{{status}}</td>\n </tr>\n {{/.}}\n </tbody>\n</table>\n{{/items}}\n{{^items}}\n<p>No users found.</p>\n{{/items}}\n"})}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h4,{id:"step-2-store-the-template-as-an-artifact",children:"Step 2: Store the Template as an Artifact"}),"\n",(0,i.jsxs)(t.p,{children:["The template must be stored as an artifact to be accessible by the Gateway during the late-stage embed resolution process. This is accomplished using the ",(0,i.jsx)(t.code,{children:"create_artifact"})," tool."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Example Agent Interaction"}),":"]}),"\n",(0,i.jsxs)(t.blockquote,{children:["\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"User"}),': "Please create an HTML template to display a list of users."\n',(0,i.jsx)(t.strong,{children:"Agent"}),': "Acknowledged. I will create the template artifact ',(0,i.jsx)(t.code,{children:"user_table.html.mustache"}),'."\n',(0,i.jsxs)(t.em,{children:["(The agent then invokes the ",(0,i.jsx)(t.code,{children:"create_artifact"})," tool with the specified filename and the HTML content from Step 1.)"]})]}),"\n"]}),"\n",(0,i.jsx)(t.hr,{}),"\n",(0,i.jsx)(t.h4,{id:"step-3-render-the-template-with-an-embed",children:"Step 3: Render the Template with an Embed"}),"\n",(0,i.jsxs)(t.p,{children:["With the data and template artifacts stored, the agent can construct an ",(0,i.jsx)(t.code,{children:"artifact_content"})," embed chain to perform the rendering."]}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Syntax"}),": ",(0,i.jsx)(t.code,{children:"... >>> apply_to_template:template_filename[:version] >>> ..."})]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Data Context"}),": The data provided to the template engine is the output of the preceding modifier in the chain.","\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:["If the data is a ",(0,i.jsx)(t.strong,{children:"list"}),", it is automatically wrapped in a dictionary of the form ",(0,i.jsx)(t.code,{children:"{'items': your_list}"}),". The template should use ",(0,i.jsx)(t.code,{children:"{{#items}}"})," to iterate over this list."]}),"\n",(0,i.jsxs)(t.li,{children:["If the data is a ",(0,i.jsx)(t.strong,{children:"dictionary"}),", it is used directly as the rendering context."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Output Format"}),": It is ",(0,i.jsx)(t.strong,{children:"mandatory"})," to terminate the chain with a ",(0,i.jsx)(t.code,{children:"format:"})," step (for example, ",(0,i.jsx)(t.code,{children:"format:text"}),") to specify the MIME type of the final rendered output."]}),"\n"]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Complete Example"}),":\nThe following embed chain processes a JSON file and renders its content using the HTML template created in Step 1."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"\xabartifact_content:user_data.json >>> jsonpath:$.users[*] >>> select_fields:name,status >>> apply_to_template:user_table.html.mustache >>> format:text\xbb\n"})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"Execution Flow"}),":"]}),"\n",(0,i.jsxs)(t.ol,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"artifact_content:user_data.json"}),": Loads the raw data from the ",(0,i.jsx)(t.code,{children:"user_data.json"})," artifact."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"jsonpath:$.users[*]"}),": Applies a JSONPath expression to extract the list of user objects."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"select_fields:name,status"}),": Filters each object in the list to retain only the ",(0,i.jsx)(t.code,{children:"name"})," and ",(0,i.jsx)(t.code,{children:"status"})," fields."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.code,{children:"apply_to_template:user_table.html.mustache"}),": Renders the resulting list of users using the specified Mustache template."]}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"error-handling-1",children:"Error Handling"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Template Not Found"}),": If the specified template artifact does not exist, the embed resolves to ",(0,i.jsx)(t.code,{children:"[Error: Template artifact '...' not found]"}),"."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Rendering Error"}),": If the data structure is incompatible with the template's expectations, the embed resolves to ",(0,i.jsx)(t.code,{children:"[Error: Error rendering template '...']"}),"."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},8453:(e,t,n)=>{n.d(t,{R:()=>a,x:()=>l});var s=n(6540);const i={},r=s.createContext(i);function a(e){const t=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunksolace_agenitc_mesh_docs=self.webpackChunksolace_agenitc_mesh_docs||[]).push([[9740],{4792:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>t,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"documentation/components/cli","title":"Agent Mesh CLI","description":"Agent Mesh comes with a comprehensive CLI tool that you can use to create, and run an instance of Agent Mesh, which is referred to as an Agent Mesh application. Agent Mesh CLI also allows you to add agents and gateways, manage plugins, help you debug, and much more.","source":"@site/docs/documentation/components/cli.md","sourceDirName":"documentation/components","slug":"/documentation/components/cli","permalink":"/solace-agent-mesh/docs/documentation/components/cli","draft":false,"unlisted":false,"editUrl":"https://github.com/SolaceLabs/solace-agent-mesh/edit/main/docs/docs/documentation/components/cli.md","tags":[],"version":"current","sidebarPosition":280,"frontMatter":{"title":"Agent Mesh CLI","sidebar_position":280,"toc_max_heading_level":4},"sidebar":"docSidebar","previous":{"title":"Projects","permalink":"/solace-agent-mesh/docs/documentation/components/projects"},"next":{"title":"Configuring Built-in Tools","permalink":"/solace-agent-mesh/docs/documentation/components/builtin-tools/"}}');var l=i(4848),o=i(8453);const t={title:"Agent Mesh CLI",sidebar_position:280,toc_max_heading_level:4},a="Agent Mesh CLI",c={},d=[{value:"Installation",id:"installation",level:2},{value:"Commands",id:"commands",level:2},{value:"<code>init</code> - Initialize an Agent Mesh Application",id:"init---initialize-an-agent-mesh-application",level:3},{value:"Options:",id:"options",level:5},{value:"<code>add</code> - Create a New Component",id:"add---create-a-new-component",level:3},{value:"Add <code>agent</code>",id:"add-agent",level:4},{value:"Options:",id:"options-1",level:5},{value:"Add <code>gateway</code>",id:"add-gateway",level:4},{value:"Options:",id:"options-2",level:5},{value:"<code>run</code> - Run the Agent Mesh Application",id:"run---run-the-agent-mesh-application",level:3},{value:"Options:",id:"options-3",level:5},{value:"<code>docs</code> - Serve the documentation locally",id:"docs---serve-the-documentation-locally",level:3},{value:"Options:",id:"options-4",level:5},{value:"<code>plugin</code> - Manage Plugins",id:"plugin---manage-plugins",level:3},{value:"<code>create</code> - Create a Plugin",id:"create---create-a-plugin",level:4},{value:"Options:",id:"options-5",level:5},{value:"<code>build</code> - Build the Plugin",id:"build---build-the-plugin",level:4},{value:"Options:",id:"options-6",level:5},{value:"<code>add</code> - Add an Existing Plugin",id:"add---add-an-existing-plugin",level:4},{value:"Options:",id:"options-7",level:5},{value:"<code>installs</code> - Installs a Plugin",id:"installs---installs-a-plugin",level:4},{value:"Options:",id:"options-8",level:5},{value:"<code>catalog</code> - Launch Plugin Catalog",id:"catalog---launch-plugin-catalog",level:4},{value:"Options:",id:"options-9",level:5}];function r(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"agent-mesh-cli",children:"Agent Mesh CLI"})}),"\n",(0,l.jsx)(n.p,{children:"Agent Mesh comes with a comprehensive CLI tool that you can use to create, and run an instance of Agent Mesh, which is referred to as an Agent Mesh application. Agent Mesh CLI also allows you to add agents and gateways, manage plugins, help you debug, and much more."}),"\n",(0,l.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,l.jsxs)(n.p,{children:["The Agent Mesh CLI is installed as part of the Agent Mesh package. For more information, see ",(0,l.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/installing-and-configuring/installation",children:"Installation"}),"."]}),"\n",(0,l.jsx)(n.admonition,{title:"CLI Tips",type:"tip",children:(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:["The Agent Mesh CLI comes with a short alias of ",(0,l.jsx)(n.code,{children:"sam"})," which can be used in place of ",(0,l.jsx)(n.code,{children:"solace-agent-mesh"}),"."]}),"\n",(0,l.jsxs)(n.li,{children:["You can determine the version of the Agent Mesh CLI by running ",(0,l.jsx)(n.code,{children:"solace-agent-mesh --version"}),"."]}),"\n",(0,l.jsxs)(n.li,{children:["You can get help on any command by running ",(0,l.jsx)(n.code,{children:"solace-agent-mesh [COMMAND] --help"}),"."]}),"\n"]})}),"\n",(0,l.jsx)(n.h2,{id:"commands",children:"Commands"}),"\n",(0,l.jsxs)(n.h3,{id:"init---initialize-an-agent-mesh-application",children:[(0,l.jsx)(n.code,{children:"init"})," - Initialize an Agent Mesh Application"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam init [OPTIONS]\n"})}),"\n",(0,l.jsx)(n.p,{children:"When this command is run with no options, it runs in interactive mode. It first prompts you to choose between configuring your project in the terminal or through a browser-based interface."}),"\n",(0,l.jsxs)(n.p,{children:["If you choose to use the browser, the Agent Mesh CLI starts a local web configuration portal, available at ",(0,l.jsx)(n.code,{children:"http://127.0.0.1:5002"})]}),"\n",(0,l.jsx)(n.p,{children:"You can skip some questions by providing the appropriate options for that step during the Agent Mesh CLI-based setup."}),"\n",(0,l.jsxs)(n.p,{children:["Optionally, you can skip all the questions by providing the ",(0,l.jsx)(n.code,{children:"--skip"})," option. This option uses the provided or default values for all the questions."]}),"\n",(0,l.jsx)(n.admonition,{title:"automated workflows",type:"tip",children:(0,l.jsxs)(n.p,{children:["Use the ",(0,l.jsx)(n.code,{children:"--skip"})," option and provide the necessary options to run the command in non-interactive mode, useful for automated workflows."]})}),"\n",(0,l.jsx)(n.h5,{id:"options",children:"Options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--gui"})," \u2013 Launch the browser-based initialization interface directly, skipping the prompt. (Recommended way to configure Agent Mesh applications)"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--skip"})," \u2013 Runs in non-interactive mode, using default values where available."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--llm-service-endpoint TEXT"})," \u2013 LLM Service Endpoint URL."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--llm-service-api-key TEXT"})," \u2013 LLM Service API Key."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--llm-service-planning-model-name TEXT"})," \u2013 LLM Planning Model Name."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--llm-service-general-model-name TEXT"})," \u2013 LLM General Model Name."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--namespace TEXT"})," \u2013 Namespace for the project."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--broker-type TEXT"})," \u2013 Broker type: 1/solace (existing), 2/container (new local), 3/dev (dev mode). Options: 1, 2, 3, solace, container, dev_mode, dev_broker, dev."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--broker-url TEXT"})," \u2013 Solace broker URL endpoint."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--broker-vpn TEXT"})," \u2013 Solace broker VPN name."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--broker-username TEXT"})," \u2013 Solace broker username."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--broker-password TEXT"})," \u2013 Solace broker password."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--container-engine TEXT"})," \u2013 Container engine for local broker. Options: podman, docker."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--dev-mode"})," \u2013 Shortcut to select dev mode for broker (equivalent to --broker-type 3/dev)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-name TEXT"})," \u2013 Agent name for the main orchestrator."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--supports-streaming"})," \u2013 Enable streaming support for the agent."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--session-service-type TEXT"})," \u2013 Session service type. Options: memory, vertex_rag."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--session-service-behavior TEXT"})," \u2013 Session service behavior. Options: PERSISTENT, RUN_BASED."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-service-type TEXT"})," \u2013 Artifact service type. Options: memory, filesystem, gcs."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-service-base-path TEXT"})," \u2013 Artifact service base path (for filesystem type)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-service-scope TEXT"})," \u2013 Artifact service scope. Options: namespace, app, custom."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-handling-mode TEXT"})," \u2013 Artifact handling mode. Options: ignore, embed, reference."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--enable-embed-resolution"})," \u2013 Enable embed resolution."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--enable-artifact-content-instruction"})," \u2013 Enable artifact content instruction."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--enable-builtin-artifact-tools"})," \u2013 Enable built-in artifact tools."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--enable-builtin-data-tools"})," \u2013 Enable built-in data tools."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-card-description TEXT"})," \u2013 Agent card description."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-card-default-input-modes TEXT"})," \u2013 Agent card default input modes (comma-separated)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-card-default-output-modes TEXT"})," \u2013 Agent card default output modes (comma-separated)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-discovery-enabled"})," \u2013 Enable agent discovery."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-card-publishing-interval INTEGER"})," \u2013 Agent card publishing interval (seconds)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--inter-agent-communication-allow-list TEXT"})," \u2013 Inter-agent communication allow list (comma-separated, use * for all)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--inter-agent-communication-deny-list TEXT"})," \u2013 Inter-agent communication deny list (comma-separated)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--inter-agent-communication-timeout INTEGER"})," \u2013 Inter-agent communication timeout (seconds)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--add-webui-gateway"})," \u2013 Add a default Web UI gateway configuration."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--webui-session-secret-key TEXT"})," \u2013 Session secret key for Web UI."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--webui-fastapi-host TEXT"})," \u2013 Host for Web UI FastAPI server."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--webui-fastapi-port INTEGER"})," \u2013 Port for Web UI FastAPI server."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--webui-enable-embed-resolution"})," \u2013 Enable embed resolution for Web UI."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--webui-frontend-welcome-message TEXT"})," \u2013 Frontend welcome message for Web UI."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--webui-frontend-bot-name TEXT"})," \u2013 Frontend bot name for Web UI."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--webui-frontend-collect-feedback"})," \u2013 Enable feedback collection in Web UI."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-h, --help"})," \u2013 Displays the help message and exits."]}),"\n"]}),"\n",(0,l.jsxs)(n.h3,{id:"add---create-a-new-component",children:[(0,l.jsx)(n.code,{children:"add"})," - Create a New Component"]}),"\n",(0,l.jsxs)(n.p,{children:["To add a new component, such as an agent or gateway, use the ",(0,l.jsx)(n.code,{children:"add"})," command with the appropriate options."]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam add [agent|gateway] [OPTIONS] NAME\n"})}),"\n",(0,l.jsxs)(n.h4,{id:"add-agent",children:["Add ",(0,l.jsx)(n.code,{children:"agent"})]}),"\n",(0,l.jsxs)(n.p,{children:["Use ",(0,l.jsx)(n.code,{children:"agent"})," to add an agent component."]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam add agent [OPTIONS] [NAME]\n"})}),"\n",(0,l.jsx)(n.h5,{id:"options-1",children:"Options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--gui"})," \u2013 Launch the browser-based configuration interface for agent setup. (Recommended way to configure agents)"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--skip"})," \u2013 Skip interactive prompts and use defaults (Agent Mesh CLI mode only)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--namespace TEXT"})," \u2013 namespace (for example, myorg/dev)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--supports-streaming BOOLEAN"})," \u2013 Enable streaming support."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--model-type TEXT"})," \u2013 Model type for the agent. Options: planning, general, image_gen, report_gen, multimodal, gemini_pro."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--instruction TEXT"})," \u2013 Custom instruction for the agent."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--session-service-type TEXT"})," \u2013 Session service type. Options: memory, vertex_rag."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--session-service-behavior TEXT"})," \u2013 Session service behavior. Options: PERSISTENT, RUN_BASED."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-service-type TEXT"})," \u2013 Artifact service type. Options: memory, filesystem, gcs."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-service-base-path TEXT"})," \u2013 Base path for filesystem artifact service."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-service-scope TEXT"})," \u2013 Artifact service scope. Options: namespace, app, custom."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-handling-mode TEXT"})," \u2013 Artifact handling mode. Options: ignore, embed, reference."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--enable-embed-resolution BOOLEAN"})," \u2013 Enable embed resolution."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--enable-artifact-content-instruction BOOLEAN"})," \u2013 Enable artifact content instruction."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--enable-builtin-artifact-tools BOOLEAN"})," \u2013 Enable built-in artifact tools."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--enable-builtin-data-tools BOOLEAN"})," \u2013 Enable built-in data tools."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-card-description TEXT"})," \u2013 Description for the agent card."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-card-default-input-modes-str TEXT"})," \u2013 Comma-separated default input modes for agent card."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-card-default-output-modes-str TEXT"})," \u2013 Comma-separated default output modes for agent card."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-card-publishing-interval INTEGER"})," \u2013 Agent card publishing interval in seconds."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--agent-discovery-enabled BOOLEAN"})," \u2013 Enable agent discovery."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--inter-agent-communication-allow-list-str TEXT"})," \u2013 Comma-separated allow list for inter-agent communication."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--inter-agent-communication-deny-list-str TEXT"})," \u2013 Comma-separated deny list for inter-agent communication."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--inter-agent-communication-timeout INTEGER"})," \u2013 Timeout in seconds for inter-agent communication."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-h, --help"})," \u2013 Displays the help message and exits."]}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:["For more information, see ",(0,l.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/components/agents",children:"Agents"}),"."]}),"\n",(0,l.jsxs)(n.h4,{id:"add-gateway",children:["Add ",(0,l.jsx)(n.code,{children:"gateway"})]}),"\n",(0,l.jsxs)(n.p,{children:["Use ",(0,l.jsx)(n.code,{children:"gateway"})," to add a gateway component."]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam add gateway [OPTIONS] [NAME]\n"})}),"\n",(0,l.jsx)(n.h5,{id:"options-2",children:"Options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--gui"})," \u2013 Launch the browser-based configuration interface for gateway setup. (Recommended way to configure gateways)"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--skip"})," \u2013 Skip interactive prompts and use defaults (Agent Mesh CLI mode only)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--namespace TEXT"})," \u2013 namespace for the gateway (for example, myorg/dev)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--gateway-id TEXT"})," \u2013 Custom Gateway ID for the gateway."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-service-type TEXT"})," \u2013 Artifact service type for the gateway. Options: memory, filesystem, gcs."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-service-base-path TEXT"})," \u2013 Base path for filesystem artifact service (if type is 'filesystem')."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--artifact-service-scope TEXT"})," \u2013 Artifact service scope (if not using default shared artifact service). Options: namespace, app, custom."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--system-purpose TEXT"})," \u2013 System purpose for the gateway (can be multi-line)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--response-format TEXT"})," \u2013 Response format for the gateway (can be multi-line)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-h, --help"})," \u2013 Displays the help message and exits."]}),"\n"]}),"\n",(0,l.jsxs)(n.p,{children:["For more information, see ",(0,l.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/components/gateways",children:"Gateways"}),"."]}),"\n",(0,l.jsxs)(n.h3,{id:"run---run-the-agent-mesh-application",children:[(0,l.jsx)(n.code,{children:"run"})," - Run the Agent Mesh Application"]}),"\n",(0,l.jsxs)(n.p,{children:["To run the Agent Mesh application, use the ",(0,l.jsx)(n.code,{children:"run"})," command."]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam run [OPTIONS] [FILES]...\n"})}),"\n",(0,l.jsxs)(n.admonition,{title:"Environment variables",type:"info",children:[(0,l.jsxs)(n.p,{children:["The ",(0,l.jsx)(n.code,{children:"sam run"})," command automatically loads environment variables from your configuration file (typically a ",(0,l.jsx)(n.code,{children:".env"})," file at the project root) by default."]}),(0,l.jsxs)(n.p,{children:["If you want to use your system's environment variables instead, you can add the ",(0,l.jsx)(n.code,{children:"-u"})," or ",(0,l.jsx)(n.code,{children:"--system-env"})," option."]})]}),"\n",(0,l.jsxs)(n.p,{children:["While running the ",(0,l.jsx)(n.code,{children:"run"})," command, you can also skip specific files by providing the ",(0,l.jsx)(n.code,{children:"-s"})," or ",(0,l.jsx)(n.code,{children:"--skip"})," option."]}),"\n",(0,l.jsxs)(n.p,{children:["You can provide paths to specific YAML configuration files or directories. When you provide a directory, ",(0,l.jsx)(n.code,{children:"run"})," will recursively search for and load all ",(0,l.jsx)(n.code,{children:".yaml"})," and ",(0,l.jsx)(n.code,{children:".yml"})," files within that directory. This allows you to organize your configurations and run them together easily."]}),"\n",(0,l.jsx)(n.p,{children:"For example, to run specific files:"}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"solace-agent-mesh run configs/agent1.yaml configs/gateway.yaml\n"})}),"\n",(0,l.jsxs)(n.p,{children:["To run all YAML files within the ",(0,l.jsx)(n.code,{children:"configs"})," directory:"]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"solace-agent-mesh run configs/\n"})}),"\n",(0,l.jsx)(n.h5,{id:"options-3",children:"Options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-u, --system-env"})," \u2013 Use system environment variables only; do not load .env file."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-s, --skip TEXT"})," \u2013 File name(s) to exclude from the run (for example, -s my_agent.yaml)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-h, --help"})," \u2013 Displays the help message and exits."]}),"\n"]}),"\n",(0,l.jsxs)(n.h3,{id:"docs---serve-the-documentation-locally",children:[(0,l.jsx)(n.code,{children:"docs"})," - Serve the documentation locally"]}),"\n",(0,l.jsx)(n.p,{children:"Serves the project documentation on a local web server."}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam docs [OPTIONS]\n"})}),"\n",(0,l.jsxs)(n.p,{children:["This command starts a web server to host the documentation, which is useful for offline viewing or development. By default, it serves the documentation at ",(0,l.jsx)(n.code,{children:"http://localhost:8585/solace-agent-mesh/"})," and automatically opens your web browser to the getting started page."]}),"\n",(0,l.jsx)(n.p,{children:"If a requested page is not found, it will redirect to the main documentation page."}),"\n",(0,l.jsx)(n.h5,{id:"options-4",children:"Options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-p, --port INTEGER"})," \u2013 Port to run the web server on. (default: 8585)"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-h, --help"})," \u2013 Displays the help message and exits."]}),"\n"]}),"\n",(0,l.jsxs)(n.h3,{id:"plugin---manage-plugins",children:[(0,l.jsx)(n.code,{children:"plugin"})," - Manage Plugins"]}),"\n",(0,l.jsxs)(n.p,{children:["The ",(0,l.jsx)(n.code,{children:"plugin"})," command allows you to manage plugins for Agent Mesh application."]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam plugin [COMMAND] [OPTIONS]\n"})}),"\n",(0,l.jsxs)(n.p,{children:["For more information, see ",(0,l.jsx)(n.a,{href:"/solace-agent-mesh/docs/documentation/components/plugins",children:"Plugins"}),"."]}),"\n",(0,l.jsxs)(n.h4,{id:"create---create-a-plugin",children:[(0,l.jsx)(n.code,{children:"create"})," - Create a Plugin"]}),"\n",(0,l.jsx)(n.p,{children:"Initializes and creates a new plugin with customizable options."}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam plugin create [OPTIONS] NAME\n"})}),"\n",(0,l.jsx)(n.p,{children:"When this command is run with no options, it runs in interactive mode and prompts you to provide the necessary information to set up the plugin for Agent Mesh."}),"\n",(0,l.jsx)(n.p,{children:"You can skip some questions by providing the appropriate options for that step."}),"\n",(0,l.jsxs)(n.p,{children:["Optionally, you can skip all the questions by providing the ",(0,l.jsx)(n.code,{children:"--skip"})," option. This option uses the provided or default values for all the questions, which is useful for automated workflows."]}),"\n",(0,l.jsx)(n.h5,{id:"options-5",children:"Options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--type TEXT"})," \u2013 Plugin type. Options: agent, gateway, custom."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--author-name TEXT"})," \u2013 Author's name."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--author-email TEXT"})," \u2013 Author's email."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--description TEXT"})," \u2013 Plugin description."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--version TEXT"})," \u2013 Initial plugin version."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--skip"})," \u2013 Skip interactive prompts and use defaults or provided flags."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-h, --help"})," \u2013 Displays the help message and exits."]}),"\n"]}),"\n",(0,l.jsxs)(n.h4,{id:"build---build-the-plugin",children:[(0,l.jsx)(n.code,{children:"build"})," - Build the Plugin"]}),"\n",(0,l.jsx)(n.p,{children:"Compiles and prepares the plugin for use."}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam plugin build [PLUGIN_PATH]\n"})}),"\n",(0,l.jsx)(n.p,{children:"Builds the Agent Mesh plugin in the specified directory (defaults to current directory)."}),"\n",(0,l.jsx)(n.h5,{id:"options-6",children:"Options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"PLUGIN_PATH"})," \u2013 Path to the plugin directory (defaults to current directory)."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-h, --help"})," \u2013 Displays the help message and exits."]}),"\n"]}),"\n",(0,l.jsxs)(n.h4,{id:"add---add-an-existing-plugin",children:[(0,l.jsx)(n.code,{children:"add"})," - Add an Existing Plugin"]}),"\n",(0,l.jsx)(n.p,{children:"Installs the plugins and creates a new component instance from a specified plugin source."}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam plugin add [OPTIONS] COMPONENT_NAME\n"})}),"\n",(0,l.jsx)(n.h5,{id:"options-7",children:"Options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--plugin TEXT"})," \u2013 Plugin source: installed module name, local path, or Git URL. (Required)"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--install-command TEXT"})," \u2013 Command to use to install a python package. Must follow the format ",(0,l.jsx)(n.code,{children:"command {package} args"}),", by default ",(0,l.jsx)(n.code,{children:"pip3 install {package}"}),". Can also be set through the environment variable SAM_PLUGIN_INSTALL_COMMAND."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-h, --help"})," \u2013 Displays the help message and exits."]}),"\n"]}),"\n",(0,l.jsxs)(n.h4,{id:"installs---installs-a-plugin",children:[(0,l.jsx)(n.code,{children:"installs"})," - Installs a Plugin"]}),"\n",(0,l.jsx)(n.p,{children:"Installs a plugin from a specified plugin source."}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam plugin install [OPTIONS] PLUGIN_SOURCE\n"})}),"\n",(0,l.jsx)(n.p,{children:"PLUGIN_SOURCE can be:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsx)(n.li,{children:"A local path to a directory (e.g., '/path/to/plugin')"}),"\n",(0,l.jsx)(n.li,{children:"A local path to a wheel file (e.g., '/path/to/plugin.whl')"}),"\n",(0,l.jsxs)(n.li,{children:["A Git URL (e.g., '",(0,l.jsx)(n.a,{href:"https://github.com/user/repo.git",children:"https://github.com/user/repo.git"}),"')"]}),"\n",(0,l.jsxs)(n.li,{children:["The name of the plugin from ",(0,l.jsx)(n.a,{href:"https://github.com/SolaceLabs/solace-agent-mesh-core-plugins",children:"https://github.com/SolaceLabs/solace-agent-mesh-core-plugins"})]}),"\n"]}),"\n",(0,l.jsx)(n.h5,{id:"options-8",children:"Options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--install-command TEXT"})," \u2013 Command to use to install a python package. Must follow the format ",(0,l.jsx)(n.code,{children:"command {package} args"}),", by default ",(0,l.jsx)(n.code,{children:"pip3 install {package}"}),". Can also be set through the environment variable SAM_PLUGIN_INSTALL_COMMAND."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-h, --help"})," \u2013 Displays the help message and exits."]}),"\n"]}),"\n",(0,l.jsxs)(n.h4,{id:"catalog---launch-plugin-catalog",children:[(0,l.jsx)(n.code,{children:"catalog"})," - Launch Plugin Catalog"]}),"\n",(0,l.jsx)(n.p,{children:"Launch the Agent Mesh Plugin Catalog web interface."}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-sh",children:"sam plugin catalog [OPTIONS]\n"})}),"\n",(0,l.jsx)(n.h5,{id:"options-9",children:"Options:"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--port INTEGER"})," \u2013 Port to run the plugin catalog web server on. (default: 5003)"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"--install-command TEXT"})," \u2013 Command to use to install a python package. Must follow the format ",(0,l.jsx)(n.code,{children:"command {package} args"}),"."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"-h, --help"})," \u2013 Displays the help message and exits."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(r,{...e})}):r(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>a});var s=i(6540);const l={},o=s.createContext(l);function t(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:t(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]);
|