solace-agent-mesh 1.11.2__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.
- solace_agent_mesh/__init__.py +0 -0
- solace_agent_mesh/agent/__init__.py +0 -0
- solace_agent_mesh/agent/adk/__init__.py +0 -0
- solace_agent_mesh/agent/adk/adk_llm.txt +226 -0
- solace_agent_mesh/agent/adk/adk_llm_detail.txt +566 -0
- solace_agent_mesh/agent/adk/alembic/README +74 -0
- solace_agent_mesh/agent/adk/alembic/env.py +77 -0
- solace_agent_mesh/agent/adk/alembic/script.py.mako +28 -0
- solace_agent_mesh/agent/adk/alembic/versions/e2902798564d_adk_session_db_upgrade.py +52 -0
- solace_agent_mesh/agent/adk/alembic.ini +112 -0
- solace_agent_mesh/agent/adk/app_llm_agent.py +52 -0
- solace_agent_mesh/agent/adk/artifacts/__init__.py +1 -0
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +171 -0
- solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +545 -0
- solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +609 -0
- solace_agent_mesh/agent/adk/callbacks.py +2318 -0
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +406 -0
- solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +415 -0
- solace_agent_mesh/agent/adk/mcp_content_processor.py +666 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +1026 -0
- solace_agent_mesh/agent/adk/models/models_llm.txt +189 -0
- solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +132 -0
- solace_agent_mesh/agent/adk/runner.py +390 -0
- solace_agent_mesh/agent/adk/schema_migration.py +88 -0
- solace_agent_mesh/agent/adk/services.py +468 -0
- solace_agent_mesh/agent/adk/setup.py +1325 -0
- solace_agent_mesh/agent/adk/stream_parser.py +415 -0
- solace_agent_mesh/agent/adk/tool_wrapper.py +165 -0
- solace_agent_mesh/agent/agent_llm.txt +369 -0
- solace_agent_mesh/agent/agent_llm_detail.txt +1702 -0
- solace_agent_mesh/agent/protocol/__init__.py +0 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +2041 -0
- solace_agent_mesh/agent/protocol/protocol_llm.txt +81 -0
- solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +92 -0
- solace_agent_mesh/agent/proxies/__init__.py +0 -0
- solace_agent_mesh/agent/proxies/a2a/__init__.py +3 -0
- solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +190 -0
- solace_agent_mesh/agent/proxies/a2a/app.py +56 -0
- solace_agent_mesh/agent/proxies/a2a/component.py +1585 -0
- solace_agent_mesh/agent/proxies/a2a/config.py +216 -0
- solace_agent_mesh/agent/proxies/a2a/oauth_token_cache.py +104 -0
- solace_agent_mesh/agent/proxies/base/__init__.py +3 -0
- solace_agent_mesh/agent/proxies/base/app.py +100 -0
- solace_agent_mesh/agent/proxies/base/base_llm.txt +148 -0
- solace_agent_mesh/agent/proxies/base/component.py +816 -0
- solace_agent_mesh/agent/proxies/base/config.py +85 -0
- solace_agent_mesh/agent/proxies/base/proxy_task_context.py +19 -0
- solace_agent_mesh/agent/proxies/proxies_llm.txt +283 -0
- solace_agent_mesh/agent/sac/__init__.py +0 -0
- solace_agent_mesh/agent/sac/app.py +595 -0
- solace_agent_mesh/agent/sac/component.py +3668 -0
- solace_agent_mesh/agent/sac/patch_adk.py +103 -0
- solace_agent_mesh/agent/sac/sac_llm.txt +189 -0
- solace_agent_mesh/agent/sac/sac_llm_detail.txt +200 -0
- solace_agent_mesh/agent/sac/task_execution_context.py +415 -0
- solace_agent_mesh/agent/testing/__init__.py +3 -0
- solace_agent_mesh/agent/testing/debug_utils.py +135 -0
- solace_agent_mesh/agent/testing/testing_llm.txt +58 -0
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +68 -0
- solace_agent_mesh/agent/tools/__init__.py +16 -0
- solace_agent_mesh/agent/tools/audio_tools.py +1740 -0
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +2500 -0
- solace_agent_mesh/agent/tools/builtin_data_analysis_tools.py +244 -0
- solace_agent_mesh/agent/tools/dynamic_tool.py +396 -0
- solace_agent_mesh/agent/tools/general_agent_tools.py +572 -0
- solace_agent_mesh/agent/tools/image_tools.py +1185 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +363 -0
- solace_agent_mesh/agent/tools/registry.py +38 -0
- solace_agent_mesh/agent/tools/test_tools.py +136 -0
- solace_agent_mesh/agent/tools/time_tools.py +126 -0
- solace_agent_mesh/agent/tools/tool_config_types.py +93 -0
- solace_agent_mesh/agent/tools/tool_definition.py +53 -0
- solace_agent_mesh/agent/tools/tools_llm.txt +276 -0
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +275 -0
- solace_agent_mesh/agent/tools/web_tools.py +392 -0
- solace_agent_mesh/agent/utils/__init__.py +0 -0
- solace_agent_mesh/agent/utils/artifact_helpers.py +1353 -0
- solace_agent_mesh/agent/utils/config_parser.py +49 -0
- solace_agent_mesh/agent/utils/context_helpers.py +77 -0
- solace_agent_mesh/agent/utils/utils_llm.txt +152 -0
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +149 -0
- solace_agent_mesh/assets/docs/404.html +16 -0
- solace_agent_mesh/assets/docs/assets/css/styles.8162edfb.css +1 -0
- solace_agent_mesh/assets/docs/assets/images/Solace_AI_Framework_With_Broker-85f0a306a9bcdd20b390b7a949f6d862.png +0 -0
- solace_agent_mesh/assets/docs/assets/images/sam-enterprise-credentials-b269f095349473118b2b33bdfcc40122.png +0 -0
- solace_agent_mesh/assets/docs/assets/js/032c2d61.f3d37824.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/0bcf40b7.c019ad46.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1001.0182a8bd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/1039.0bd46aa1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/149.b797a808.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/165.6a39807d.js.LICENSE.txt +9 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2130.ab9fd314.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2131ec11.5c7a1f6e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2237.5e477fc6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js.LICENSE.txt +13 -0
- solace_agent_mesh/assets/docs/assets/js/2334.1cf50a20.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/240a0364.9ad94d1b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3219.adc1d663.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/341393d4.0fac2613.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3624.0eaa1fd0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/375.708d48db.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3834.b6cd790e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.28b7c67b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2ddc75c0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/41adc471.48b12a4e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4250.95455b28.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4356.d169ab5b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4458.518e66fa.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4488.c7cc3442.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4494.6ee23046.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4855.fc4444b6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4866.22daefc0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4950.ca4caeda.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/509e993c.a1fbf45a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5388.7a136447.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5607.081356f8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5864.b0d0e9de.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.90a87880.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5e95c892.558d5167.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6063ff4c.ef84f702.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6143.0a1464c9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6395.e9c73649.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.b77431fc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6796.51d2c9b7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6976.379be23b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6978.ee0b945c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.b6e3f2ce.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6aaedf65.7253541d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.a5b36a60.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.fd23ba4a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/6fdfefc7.99de744e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7040.cb436723.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7195.412f418a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/71da7b71.374b9d54.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/722f809d.965da774.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7280.3fb73bdb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/742f027b.46c07808.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/77cf947d.48cb18a2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7845.e33e7c4c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7900.69516146.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/81a99df0.2484b8d9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8356.8a379c04.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8567.4732c6b7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8573.cb04eda5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8577.1d54e766.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8591.5d015485.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/8591.5d015485.js.LICENSE.txt +61 -0
- solace_agent_mesh/assets/docs/assets/js/8709.7ecd4047.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8731.6c1dbf0c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8908.f9d1b506.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9157.b4093d07.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9278.a4fd875d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/945fb41e.6f4cdffd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9616.b75c2f6d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9793.c6d16376.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9bb13469.b2333011.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9e9d0a82.570c057b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7bd4aaa.2204d2f7.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/aba21aa0.c42a534c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad71b5ed.af3ecfd1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c198a0dc.8f31f867.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.0e0d8baf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cab03b5b.6a073091.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/cbe2e9ea.07e170dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ceb2a7a6.5d92d7d0.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/db924877.e98d12a1.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/de5f4c65.e8241890.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e04b235d.52cb25ed.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.b1068f9b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.4488e34c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.250993bf.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js.LICENSE.txt +81 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.9e0813a2.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +154 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +99 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +107 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +166 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +101 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +219 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +92 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +29 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +110 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +182 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +147 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +345 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +83 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +84 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +25 -0
- 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 +85 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +60 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +49 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +144 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +191 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +128 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +135 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +34 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +55 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +267 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +142 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +116 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +164 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +140 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +57 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +72 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +102 -0
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +115 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +67 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +37 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +86 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +324 -0
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +247 -0
- 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 +184 -0
- 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 +75 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +54 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +85 -0
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +41 -0
- 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 +78 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +25 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +78 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +160 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +142 -0
- 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 +100 -0
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +52 -0
- solace_agent_mesh/assets/docs/img/Solace_AI_Framework_With_Broker.png +0 -0
- solace_agent_mesh/assets/docs/img/logo.png +0 -0
- solace_agent_mesh/assets/docs/img/sac-flows.png +0 -0
- solace_agent_mesh/assets/docs/img/sac_parts_of_a_component.png +0 -0
- solace_agent_mesh/assets/docs/img/sam-enterprise-credentials.png +0 -0
- solace_agent_mesh/assets/docs/img/solace-logo-text.svg +18 -0
- solace_agent_mesh/assets/docs/img/solace-logo.png +0 -0
- solace_agent_mesh/assets/docs/lunr-index-1765810064709.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -0
- solace_agent_mesh/assets/docs/search-doc-1765810064709.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -0
- solace_agent_mesh/assets/docs/sitemap.xml +1 -0
- solace_agent_mesh/cli/__init__.py +1 -0
- solace_agent_mesh/cli/commands/__init__.py +0 -0
- solace_agent_mesh/cli/commands/add_cmd/__init__.py +15 -0
- solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +250 -0
- solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +729 -0
- solace_agent_mesh/cli/commands/add_cmd/gateway_cmd.py +322 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_agent_step.py +102 -0
- solace_agent_mesh/cli/commands/add_cmd/web_add_gateway_step.py +114 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +60 -0
- solace_agent_mesh/cli/commands/eval_cmd.py +46 -0
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +439 -0
- solace_agent_mesh/cli/commands/init_cmd/broker_step.py +201 -0
- solace_agent_mesh/cli/commands/init_cmd/database_step.py +91 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +28 -0
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +238 -0
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +365 -0
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +464 -0
- solace_agent_mesh/cli/commands/init_cmd/project_files_step.py +38 -0
- solace_agent_mesh/cli/commands/init_cmd/web_init_step.py +119 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +215 -0
- solace_agent_mesh/cli/commands/plugin_cmd/__init__.py +20 -0
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +137 -0
- solace_agent_mesh/cli/commands/plugin_cmd/build_cmd.py +86 -0
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +144 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +306 -0
- solace_agent_mesh/cli/commands/plugin_cmd/install_cmd.py +283 -0
- solace_agent_mesh/cli/commands/plugin_cmd/official_registry.py +175 -0
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +305 -0
- solace_agent_mesh/cli/commands/run_cmd.py +215 -0
- solace_agent_mesh/cli/main.py +52 -0
- solace_agent_mesh/cli/utils.py +262 -0
- solace_agent_mesh/client/webui/frontend/static/assets/authCallback-Dj3JtK42.js +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/client-ZKk9kEJ5.js +25 -0
- solace_agent_mesh/client/webui/frontend/static/assets/favicon-BLgzUch9.ico +0 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-BcUaNZ-Q.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-vjch4RYc.js +435 -0
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-BNV4kZN0.js +535 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +15 -0
- solace_agent_mesh/client/webui/frontend/static/index.html +16 -0
- solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
- solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
- solace_agent_mesh/common/__init__.py +1 -0
- solace_agent_mesh/common/a2a/__init__.py +241 -0
- solace_agent_mesh/common/a2a/a2a_llm.txt +175 -0
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +193 -0
- solace_agent_mesh/common/a2a/artifact.py +368 -0
- solace_agent_mesh/common/a2a/events.py +213 -0
- solace_agent_mesh/common/a2a/message.py +375 -0
- solace_agent_mesh/common/a2a/protocol.py +689 -0
- solace_agent_mesh/common/a2a/task.py +127 -0
- solace_agent_mesh/common/a2a/translation.py +655 -0
- solace_agent_mesh/common/a2a/types.py +55 -0
- solace_agent_mesh/common/a2a_spec/a2a.json +2576 -0
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +445 -0
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +736 -0
- solace_agent_mesh/common/a2a_spec/schemas/agent_progress_update.json +18 -0
- solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +48 -0
- solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
- solace_agent_mesh/common/a2a_spec/schemas/llm_invocation.json +41 -0
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +330 -0
- solace_agent_mesh/common/a2a_spec/schemas/tool_invocation_start.json +26 -0
- solace_agent_mesh/common/a2a_spec/schemas/tool_result.json +48 -0
- solace_agent_mesh/common/agent_registry.py +122 -0
- solace_agent_mesh/common/common_llm.txt +230 -0
- solace_agent_mesh/common/common_llm_detail.txt +2562 -0
- solace_agent_mesh/common/constants.py +6 -0
- solace_agent_mesh/common/data_parts.py +150 -0
- solace_agent_mesh/common/exceptions.py +49 -0
- solace_agent_mesh/common/middleware/__init__.py +12 -0
- solace_agent_mesh/common/middleware/config_resolver.py +132 -0
- solace_agent_mesh/common/middleware/middleware_llm.txt +174 -0
- solace_agent_mesh/common/middleware/middleware_llm_detail.txt +185 -0
- solace_agent_mesh/common/middleware/registry.py +127 -0
- solace_agent_mesh/common/oauth/__init__.py +17 -0
- solace_agent_mesh/common/oauth/oauth_client.py +408 -0
- solace_agent_mesh/common/oauth/utils.py +50 -0
- solace_agent_mesh/common/sac/__init__.py +0 -0
- solace_agent_mesh/common/sac/sac_llm.txt +71 -0
- solace_agent_mesh/common/sac/sac_llm_detail.txt +82 -0
- solace_agent_mesh/common/sac/sam_component_base.py +730 -0
- solace_agent_mesh/common/sam_events/__init__.py +9 -0
- solace_agent_mesh/common/sam_events/event_service.py +208 -0
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +104 -0
- solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +115 -0
- solace_agent_mesh/common/services/__init__.py +4 -0
- solace_agent_mesh/common/services/employee_service.py +164 -0
- solace_agent_mesh/common/services/identity_service.py +134 -0
- solace_agent_mesh/common/services/providers/__init__.py +4 -0
- solace_agent_mesh/common/services/providers/local_file_identity_service.py +151 -0
- solace_agent_mesh/common/services/providers/providers_llm.txt +81 -0
- solace_agent_mesh/common/services/services_llm.txt +368 -0
- solace_agent_mesh/common/services/services_llm_detail.txt +459 -0
- solace_agent_mesh/common/utils/__init__.py +7 -0
- solace_agent_mesh/common/utils/artifact_utils.py +31 -0
- solace_agent_mesh/common/utils/asyncio_macos_fix.py +88 -0
- solace_agent_mesh/common/utils/embeds/__init__.py +33 -0
- solace_agent_mesh/common/utils/embeds/constants.py +56 -0
- solace_agent_mesh/common/utils/embeds/converter.py +447 -0
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +220 -0
- solace_agent_mesh/common/utils/embeds/evaluators.py +395 -0
- solace_agent_mesh/common/utils/embeds/modifiers.py +793 -0
- solace_agent_mesh/common/utils/embeds/resolver.py +967 -0
- solace_agent_mesh/common/utils/embeds/types.py +23 -0
- solace_agent_mesh/common/utils/in_memory_cache.py +108 -0
- solace_agent_mesh/common/utils/initializer.py +52 -0
- solace_agent_mesh/common/utils/log_formatters.py +64 -0
- solace_agent_mesh/common/utils/message_utils.py +80 -0
- solace_agent_mesh/common/utils/mime_helpers.py +172 -0
- solace_agent_mesh/common/utils/push_notification_auth.py +135 -0
- solace_agent_mesh/common/utils/pydantic_utils.py +159 -0
- solace_agent_mesh/common/utils/rbac_utils.py +69 -0
- solace_agent_mesh/common/utils/templates/__init__.py +8 -0
- solace_agent_mesh/common/utils/templates/liquid_renderer.py +210 -0
- solace_agent_mesh/common/utils/templates/template_resolver.py +161 -0
- solace_agent_mesh/common/utils/type_utils.py +28 -0
- solace_agent_mesh/common/utils/utils_llm.txt +335 -0
- solace_agent_mesh/common/utils/utils_llm_detail.txt +572 -0
- solace_agent_mesh/config_portal/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/common.py +77 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/__init__.py +0 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/constants.py +24 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/models.py +49 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/registry_manager.py +166 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog/scraper.py +521 -0
- solace_agent_mesh/config_portal/backend/plugin_catalog_server.py +217 -0
- solace_agent_mesh/config_portal/backend/server.py +644 -0
- solace_agent_mesh/config_portal/frontend/static/client/Solace_community_logo.png +0 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DiOiAjzL.js +103 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/components-Rk0n-9cK.js +140 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/entry.client-mvZjNKiz.js +19 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/index-DzNKzXrc.js +68 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-ba77705e.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-B17tZKK7.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-V2BeTIUc.js +10 -0
- solace_agent_mesh/config_portal/frontend/static/client/favicon.ico +0 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +7 -0
- solace_agent_mesh/core_a2a/__init__.py +1 -0
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +90 -0
- solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +101 -0
- solace_agent_mesh/core_a2a/service.py +307 -0
- solace_agent_mesh/evaluation/__init__.py +0 -0
- solace_agent_mesh/evaluation/evaluator.py +691 -0
- solace_agent_mesh/evaluation/message_organizer.py +553 -0
- solace_agent_mesh/evaluation/report/benchmark_info.html +35 -0
- solace_agent_mesh/evaluation/report/chart_section.html +141 -0
- solace_agent_mesh/evaluation/report/detailed_breakdown.html +28 -0
- solace_agent_mesh/evaluation/report/modal.html +59 -0
- solace_agent_mesh/evaluation/report/modal_chart_functions.js +411 -0
- solace_agent_mesh/evaluation/report/modal_script.js +296 -0
- solace_agent_mesh/evaluation/report/modal_styles.css +340 -0
- solace_agent_mesh/evaluation/report/performance_metrics_styles.css +93 -0
- solace_agent_mesh/evaluation/report/templates/footer.html +2 -0
- solace_agent_mesh/evaluation/report/templates/header.html +340 -0
- solace_agent_mesh/evaluation/report_data_processor.py +970 -0
- solace_agent_mesh/evaluation/report_generator.py +607 -0
- solace_agent_mesh/evaluation/run.py +954 -0
- solace_agent_mesh/evaluation/shared/__init__.py +92 -0
- solace_agent_mesh/evaluation/shared/constants.py +47 -0
- solace_agent_mesh/evaluation/shared/exceptions.py +50 -0
- solace_agent_mesh/evaluation/shared/helpers.py +35 -0
- solace_agent_mesh/evaluation/shared/test_case_loader.py +167 -0
- solace_agent_mesh/evaluation/shared/test_suite_loader.py +280 -0
- solace_agent_mesh/evaluation/subscriber.py +776 -0
- solace_agent_mesh/evaluation/summary_builder.py +880 -0
- solace_agent_mesh/gateway/__init__.py +0 -0
- 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/__init__.py +1 -0
- solace_agent_mesh/gateway/base/app.py +345 -0
- solace_agent_mesh/gateway/base/base_llm.txt +226 -0
- solace_agent_mesh/gateway/base/base_llm_detail.txt +235 -0
- solace_agent_mesh/gateway/base/component.py +2030 -0
- solace_agent_mesh/gateway/base/task_context.py +75 -0
- solace_agent_mesh/gateway/gateway_llm.txt +369 -0
- solace_agent_mesh/gateway/gateway_llm_detail.txt +3885 -0
- 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 +727 -0
- solace_agent_mesh/gateway/http_sse/__init__.py +0 -0
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +345 -0
- solace_agent_mesh/gateway/http_sse/alembic/env.py +87 -0
- solace_agent_mesh/gateway/http_sse/alembic/script.py.mako +28 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250910_d5b3f8f2e9a0_create_initial_database.py +58 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250911_b1c2d3e4f5g6_add_database_indexes.py +83 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20250916_f6e7d8c9b0a1_convert_timestamps_to_epoch_and_align_columns.py +412 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251006_98882922fa59_add_tasks_events_feedback_chat_tasks.py +190 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251015_add_session_performance_indexes.py +70 -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 +109 -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/20251108_create_prompt_tables_with_sharing.py +154 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251115_add_parent_task_id.py +32 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251126_add_background_task_fields.py +47 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py +52 -0
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +161 -0
- solace_agent_mesh/gateway/http_sse/alembic.ini +109 -0
- solace_agent_mesh/gateway/http_sse/app.py +351 -0
- solace_agent_mesh/gateway/http_sse/component.py +2360 -0
- solace_agent_mesh/gateway/http_sse/components/__init__.py +7 -0
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +105 -0
- solace_agent_mesh/gateway/http_sse/components/task_logger_forwarder.py +109 -0
- solace_agent_mesh/gateway/http_sse/components/visualization_forwarder_component.py +110 -0
- solace_agent_mesh/gateway/http_sse/dependencies.py +653 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +299 -0
- solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +3278 -0
- solace_agent_mesh/gateway/http_sse/main.py +789 -0
- solace_agent_mesh/gateway/http_sse/repository/__init__.py +46 -0
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +102 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/__init__.py +11 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/chat_task.py +75 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +221 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/feedback.py +20 -0
- 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 +66 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/session_history.py +0 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +32 -0
- solace_agent_mesh/gateway/http_sse/repository/entities/task_event.py +21 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +125 -0
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +239 -0
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +34 -0
- solace_agent_mesh/gateway/http_sse/repository/models/base.py +7 -0
- solace_agent_mesh/gateway/http_sse/repository/models/chat_task_model.py +31 -0
- solace_agent_mesh/gateway/http_sse/repository/models/feedback_model.py +21 -0
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +257 -0
- 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/prompt_model.py +159 -0
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +53 -0
- solace_agent_mesh/gateway/http_sse/repository/models/task_event_model.py +25 -0
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +39 -0
- 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 +308 -0
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +268 -0
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +248 -0
- solace_agent_mesh/gateway/http_sse/routers/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +74 -0
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +1137 -0
- solace_agent_mesh/gateway/http_sse/routers/auth.py +311 -0
- solace_agent_mesh/gateway/http_sse/routers/config.py +371 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/__init__.py +10 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +450 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/project_dto.py +69 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/prompt_dto.py +255 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/__init__.py +15 -0
- 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 +133 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +33 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/task_requests.py +58 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/__init__.py +18 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +42 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +123 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +33 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/task_responses.py +30 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +168 -0
- solace_agent_mesh/gateway/http_sse/routers/people.py +38 -0
- solace_agent_mesh/gateway/http_sse/routers/projects.py +767 -0
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +1415 -0
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +312 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +634 -0
- solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +230 -0
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +1089 -0
- solace_agent_mesh/gateway/http_sse/routers/users.py +83 -0
- solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +1220 -0
- solace_agent_mesh/gateway/http_sse/services/__init__.py +4 -0
- solace_agent_mesh/gateway/http_sse/services/agent_card_service.py +71 -0
- solace_agent_mesh/gateway/http_sse/services/audio_service.py +1227 -0
- solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +186 -0
- solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +273 -0
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +250 -0
- solace_agent_mesh/gateway/http_sse/services/people_service.py +78 -0
- solace_agent_mesh/gateway/http_sse/services/project_service.py +930 -0
- solace_agent_mesh/gateway/http_sse/services/prompt_builder_assistant.py +303 -0
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +303 -0
- solace_agent_mesh/gateway/http_sse/services/session_service.py +702 -0
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +593 -0
- solace_agent_mesh/gateway/http_sse/services/task_service.py +119 -0
- solace_agent_mesh/gateway/http_sse/session_manager.py +219 -0
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +146 -0
- solace_agent_mesh/gateway/http_sse/shared/auth_utils.py +29 -0
- solace_agent_mesh/gateway/http_sse/shared/base_repository.py +252 -0
- solace_agent_mesh/gateway/http_sse/shared/database_exceptions.py +274 -0
- solace_agent_mesh/gateway/http_sse/shared/database_helpers.py +43 -0
- solace_agent_mesh/gateway/http_sse/shared/enums.py +40 -0
- solace_agent_mesh/gateway/http_sse/shared/error_dto.py +107 -0
- solace_agent_mesh/gateway/http_sse/shared/exception_handlers.py +217 -0
- solace_agent_mesh/gateway/http_sse/shared/exceptions.py +192 -0
- solace_agent_mesh/gateway/http_sse/shared/pagination.py +138 -0
- solace_agent_mesh/gateway/http_sse/shared/response_utils.py +134 -0
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +319 -0
- solace_agent_mesh/gateway/http_sse/shared/timestamp_utils.py +97 -0
- solace_agent_mesh/gateway/http_sse/shared/types.py +50 -0
- solace_agent_mesh/gateway/http_sse/shared/utils.py +22 -0
- solace_agent_mesh/gateway/http_sse/sse_event_buffer.py +88 -0
- solace_agent_mesh/gateway/http_sse/sse_manager.py +491 -0
- solace_agent_mesh/gateway/http_sse/utils/__init__.py +1 -0
- solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
- solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +72 -0
- solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +47 -0
- solace_agent_mesh/llm.txt +228 -0
- solace_agent_mesh/llm_detail.txt +2835 -0
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/platform/__init__.py +18 -0
- solace_agent_mesh/services/platform/alembic/env.py +85 -0
- solace_agent_mesh/services/platform/alembic/script.py.mako +28 -0
- solace_agent_mesh/services/platform/alembic.ini +109 -0
- solace_agent_mesh/services/platform/api/__init__.py +3 -0
- solace_agent_mesh/services/platform/api/dependencies.py +147 -0
- solace_agent_mesh/services/platform/api/main.py +280 -0
- solace_agent_mesh/services/platform/api/middleware.py +51 -0
- solace_agent_mesh/services/platform/api/routers/__init__.py +24 -0
- solace_agent_mesh/services/platform/app.py +114 -0
- solace_agent_mesh/services/platform/component.py +235 -0
- solace_agent_mesh/solace_agent_mesh_llm.txt +362 -0
- solace_agent_mesh/solace_agent_mesh_llm_detail.txt +8599 -0
- solace_agent_mesh/templates/agent_template.yaml +53 -0
- solace_agent_mesh/templates/eval_backend_template.yaml +54 -0
- solace_agent_mesh/templates/gateway_app_template.py +75 -0
- solace_agent_mesh/templates/gateway_component_template.py +484 -0
- solace_agent_mesh/templates/gateway_config_template.yaml +38 -0
- solace_agent_mesh/templates/logging_config_template.yaml +48 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +66 -0
- solace_agent_mesh/templates/plugin_agent_config_template.yaml +122 -0
- solace_agent_mesh/templates/plugin_custom_config_template.yaml +27 -0
- solace_agent_mesh/templates/plugin_custom_template.py +10 -0
- solace_agent_mesh/templates/plugin_gateway_config_template.yaml +60 -0
- solace_agent_mesh/templates/plugin_pyproject_template.toml +32 -0
- solace_agent_mesh/templates/plugin_readme_template.md +12 -0
- solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
- solace_agent_mesh/templates/plugin_tools_template.py +224 -0
- solace_agent_mesh/templates/shared_config.yaml +112 -0
- solace_agent_mesh/templates/templates_llm.txt +147 -0
- solace_agent_mesh/templates/webui.yaml +177 -0
- solace_agent_mesh-1.11.2.dist-info/METADATA +504 -0
- solace_agent_mesh-1.11.2.dist-info/RECORD +624 -0
- solace_agent_mesh-1.11.2.dist-info/WHEEL +4 -0
- solace_agent_mesh-1.11.2.dist-info/entry_points.txt +3 -0
- solace_agent_mesh-1.11.2.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import httpx
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
from functools import lru_cache
|
|
4
|
+
from typing import Dict, Optional
|
|
5
|
+
import click
|
|
6
|
+
from config_portal.backend.plugin_catalog.constants import (
|
|
7
|
+
DEFAULT_OFFICIAL_REGISTRY_URL,
|
|
8
|
+
OFFICIAL_REGISTRY_GIT_BRANCH,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
IGNORE_SUB_DIRS = [".git", "__pycache__", ".venv", "node_modules", ".vscode", ".github"]
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@lru_cache(maxsize=1)
|
|
15
|
+
def get_official_plugins() -> Dict[str, str]:
|
|
16
|
+
"""
|
|
17
|
+
Fetches the list of official plugins from the default registry.
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
Dict[str, str]: A mapping of plugin names to their full URLs/paths
|
|
21
|
+
"""
|
|
22
|
+
registry_url = DEFAULT_OFFICIAL_REGISTRY_URL
|
|
23
|
+
|
|
24
|
+
if _is_github_url(registry_url):
|
|
25
|
+
return _fetch_github_plugins(registry_url, branch=OFFICIAL_REGISTRY_GIT_BRANCH)
|
|
26
|
+
else:
|
|
27
|
+
return _fetch_local_plugins(registry_url)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _is_github_url(url: str) -> bool:
|
|
31
|
+
"""Check if the URL is a GitHub repository URL."""
|
|
32
|
+
return url.startswith("https://github.com/") or url.startswith("http://github.com/")
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _fetch_github_plugins(github_url: str, branch: str = None) -> Dict[str, str]:
|
|
36
|
+
"""
|
|
37
|
+
Fetch plugin list from GitHub repository using the GitHub API.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
github_url: GitHub repository URL
|
|
41
|
+
branch: Optional branch name to fetch plugins from
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
Dict[str, str]: Mapping of plugin names to their full GitHub URLs
|
|
45
|
+
"""
|
|
46
|
+
try:
|
|
47
|
+
if github_url.endswith(".git"):
|
|
48
|
+
github_url = github_url[:-4]
|
|
49
|
+
|
|
50
|
+
parts = (
|
|
51
|
+
github_url.replace("https://github.com/", "")
|
|
52
|
+
.replace("http://github.com/", "")
|
|
53
|
+
.split("/")
|
|
54
|
+
)
|
|
55
|
+
if len(parts) < 2:
|
|
56
|
+
click.echo(
|
|
57
|
+
click.style(f"Error: Invalid GitHub URL format: {github_url}", fg="red")
|
|
58
|
+
)
|
|
59
|
+
return {}
|
|
60
|
+
|
|
61
|
+
owner, repo = parts[0], parts[1]
|
|
62
|
+
api_url = f"https://api.github.com/repos/{owner}/{repo}/contents"
|
|
63
|
+
if branch:
|
|
64
|
+
api_url += f"?ref={branch}"
|
|
65
|
+
|
|
66
|
+
with httpx.Client() as client:
|
|
67
|
+
response = client.get(api_url, timeout=10.0)
|
|
68
|
+
response.raise_for_status()
|
|
69
|
+
|
|
70
|
+
contents = response.json()
|
|
71
|
+
|
|
72
|
+
plugins = {}
|
|
73
|
+
for item in contents:
|
|
74
|
+
if item.get("type") == "dir" and item["name"] not in IGNORE_SUB_DIRS:
|
|
75
|
+
plugin_name = item["name"]
|
|
76
|
+
plugin_url = f"git+{github_url}"
|
|
77
|
+
if branch:
|
|
78
|
+
plugin_url += f"@{branch}"
|
|
79
|
+
plugin_url += f"#subdirectory={plugin_name}"
|
|
80
|
+
plugins[plugin_name] = plugin_url
|
|
81
|
+
|
|
82
|
+
return plugins
|
|
83
|
+
|
|
84
|
+
except httpx.RequestError as e:
|
|
85
|
+
click.echo(click.style(f"Error fetching plugins from GitHub: {e}", fg="red"))
|
|
86
|
+
return {}
|
|
87
|
+
except httpx.HTTPStatusError as e:
|
|
88
|
+
click.echo(
|
|
89
|
+
click.style(f"HTTP error fetching plugins from GitHub: {e}", fg="red")
|
|
90
|
+
)
|
|
91
|
+
return {}
|
|
92
|
+
except Exception as e:
|
|
93
|
+
click.echo(
|
|
94
|
+
click.style(f"Unexpected error fetching plugins from GitHub: {e}", fg="red")
|
|
95
|
+
)
|
|
96
|
+
return {}
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _fetch_local_plugins(local_path: str) -> Dict[str, str]:
|
|
100
|
+
"""
|
|
101
|
+
Fetch plugin list from local filesystem.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
local_path: Local directory path
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
Dict[str, str]: Mapping of plugin names to their full local paths
|
|
108
|
+
"""
|
|
109
|
+
try:
|
|
110
|
+
path = Path(local_path).expanduser().resolve()
|
|
111
|
+
|
|
112
|
+
if not path.exists():
|
|
113
|
+
click.echo(
|
|
114
|
+
click.style(
|
|
115
|
+
f"Error: Local plugin registry path does not exist: {path}",
|
|
116
|
+
fg="red",
|
|
117
|
+
)
|
|
118
|
+
)
|
|
119
|
+
return {}
|
|
120
|
+
|
|
121
|
+
if not path.is_dir():
|
|
122
|
+
click.echo(
|
|
123
|
+
click.style(
|
|
124
|
+
f"Error: Local plugin registry path is not a directory: {path}",
|
|
125
|
+
fg="red",
|
|
126
|
+
)
|
|
127
|
+
)
|
|
128
|
+
return {}
|
|
129
|
+
|
|
130
|
+
plugins = {}
|
|
131
|
+
for item in path.iterdir():
|
|
132
|
+
if item.is_dir() and item.name not in IGNORE_SUB_DIRS:
|
|
133
|
+
plugin_name = item.name
|
|
134
|
+
plugins[plugin_name] = str(item)
|
|
135
|
+
|
|
136
|
+
return plugins
|
|
137
|
+
|
|
138
|
+
except Exception as e:
|
|
139
|
+
click.echo(
|
|
140
|
+
click.style(f"Error fetching plugins from local path: {e}", fg="red")
|
|
141
|
+
)
|
|
142
|
+
return {}
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def is_official_plugin(plugin_name: str) -> bool:
|
|
146
|
+
"""
|
|
147
|
+
Check if a plugin name is an official plugin.
|
|
148
|
+
|
|
149
|
+
Args:
|
|
150
|
+
plugin_name: Name of the plugin to check
|
|
151
|
+
|
|
152
|
+
Returns:
|
|
153
|
+
bool: True if the plugin is official, False otherwise
|
|
154
|
+
"""
|
|
155
|
+
official_plugins = get_official_plugins()
|
|
156
|
+
return plugin_name in official_plugins
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def get_official_plugin_url(plugin_name: str) -> Optional[str]:
|
|
160
|
+
"""
|
|
161
|
+
Get the full URL/path for an official plugin.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
plugin_name: Name of the official plugin
|
|
165
|
+
|
|
166
|
+
Returns:
|
|
167
|
+
Optional[str]: Full URL/path if plugin is official, None otherwise
|
|
168
|
+
"""
|
|
169
|
+
# if the plugin_name is a git path, url, or a local path, it can't be an official plugin
|
|
170
|
+
if plugin_name.startswith(
|
|
171
|
+
("git+", "http://", "https://", "file://", "/", "./", "../", "~/")
|
|
172
|
+
):
|
|
173
|
+
return False
|
|
174
|
+
official_plugins = get_official_plugins()
|
|
175
|
+
return official_plugins.get(plugin_name)
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
# Plugin Command Module Analysis
|
|
2
|
+
|
|
3
|
+
## 1. Primary Purpose and Functionality
|
|
4
|
+
|
|
5
|
+
The `plugin_cmd` module provides a comprehensive CLI interface for managing SAM (Serverless Application Model) plugins. It enables users to:
|
|
6
|
+
|
|
7
|
+
- **Create** new plugin projects with standardized structure and templates
|
|
8
|
+
- **Add** plugin components from various sources (installed modules, local paths, Git repositories)
|
|
9
|
+
- **Build** plugins into distributable packages
|
|
10
|
+
- **Launch** a web-based plugin store interface
|
|
11
|
+
|
|
12
|
+
The module follows a command-group pattern where all plugin-related operations are organized under the `sam plugin` command namespace.
|
|
13
|
+
|
|
14
|
+
## 2. External Interfaces (APIs, Exports, Public Methods)
|
|
15
|
+
|
|
16
|
+
### Main Command Group
|
|
17
|
+
```python
|
|
18
|
+
@click.group("plugin")
|
|
19
|
+
def plugin() -> None
|
|
20
|
+
```
|
|
21
|
+
- **Purpose**: Root command group for all plugin operations
|
|
22
|
+
- **Usage**: `sam plugin <subcommand>`
|
|
23
|
+
|
|
24
|
+
### Subcommands
|
|
25
|
+
- `sam plugin create <plugin_name>` - Create new plugin
|
|
26
|
+
- `sam plugin add <component_name> --plugin <source>` - Add component from plugin
|
|
27
|
+
- `sam plugin build [path]` - Build plugin package
|
|
28
|
+
- `sam plugin store` - Launch plugin store web interface
|
|
29
|
+
|
|
30
|
+
## 3. Key Dependencies and Imports
|
|
31
|
+
|
|
32
|
+
### External Dependencies
|
|
33
|
+
- `click` - CLI framework for command definitions and options
|
|
34
|
+
- `pathlib` - Modern path handling
|
|
35
|
+
- `subprocess` - External process execution (git, pip, python build)
|
|
36
|
+
- `tempfile` - Temporary directory management
|
|
37
|
+
- `shutil` - File operations and command existence checks
|
|
38
|
+
- `toml` - TOML file parsing for pyproject.toml
|
|
39
|
+
- `multiprocessing` - Process management for web server
|
|
40
|
+
- `webbrowser` - Browser launching for plugin store
|
|
41
|
+
|
|
42
|
+
### Internal Dependencies
|
|
43
|
+
- `cli.utils` - Utility functions for name formatting, user interaction, templates
|
|
44
|
+
- `cli.__version__` - CLI version information
|
|
45
|
+
- `config_portal.backend.plugin_store_server` - Backend server for plugin store
|
|
46
|
+
|
|
47
|
+
## 4. Data Structures and Models
|
|
48
|
+
|
|
49
|
+
### Command Functions
|
|
50
|
+
|
|
51
|
+
#### `create_plugin_cmd`
|
|
52
|
+
```python
|
|
53
|
+
@click.command("create")
|
|
54
|
+
@click.argument("plugin_name_arg": str)
|
|
55
|
+
@click.option("--author-name", "author_name_opt": str, help="Author's name.")
|
|
56
|
+
@click.option("--author-email", "author_email_opt": str, help="Author's email.")
|
|
57
|
+
@click.option("--description", "description_opt": str, help="Plugin description.")
|
|
58
|
+
@click.option("--version", "version_opt": str, help="Initial plugin version.")
|
|
59
|
+
@click.option("--skip", is_flag=True, help="Skip interactive prompts and use defaults or provided flags.")
|
|
60
|
+
def create_plugin_cmd(plugin_name_arg: str, author_name_opt: str, author_email_opt: str, description_opt: str, version_opt: str, skip: bool) -> None
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Purpose**: Creates a new SAM plugin directory structure with interactive prompts for metadata.
|
|
64
|
+
|
|
65
|
+
**Usage Example**:
|
|
66
|
+
```bash
|
|
67
|
+
# Interactive mode
|
|
68
|
+
sam plugin create my-awesome-plugin
|
|
69
|
+
|
|
70
|
+
# Non-interactive with options
|
|
71
|
+
sam plugin create my-plugin --author-name "John Doe" --author-email "john@example.com" --skip
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Generated Structure**:
|
|
75
|
+
- `my-awesome-plugin/`
|
|
76
|
+
- `config.yaml` - Plugin configuration template
|
|
77
|
+
- `pyproject.toml` - Python package configuration
|
|
78
|
+
- `README.md` - Documentation template
|
|
79
|
+
- `src/`
|
|
80
|
+
- `__init__.py` - Package initialization
|
|
81
|
+
- `tools.py` - Plugin tools implementation
|
|
82
|
+
|
|
83
|
+
**Template Placeholders**:
|
|
84
|
+
- `__PLUGIN_KEBAB_CASE_NAME__` - Plugin name in kebab-case
|
|
85
|
+
- `__PLUGIN_SNAKE_CASE_NAME__` - Plugin name in snake_case
|
|
86
|
+
- `__PLUGIN_SPACED_NAME__` - Plugin name with spaces
|
|
87
|
+
- `__PLUGIN_CAMEL_CASE_NAME__` - Plugin name in camelCase
|
|
88
|
+
- `__PLUGIN_AUTHOR_NAME__` - Author's name
|
|
89
|
+
- `__PLUGIN_AUTHOR_EMAIL__` - Author's email
|
|
90
|
+
- `__PLUGIN_DESCRIPTION__` - Plugin description
|
|
91
|
+
- `__PLUGIN_VERSION__` - Plugin version
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
#### `add_plugin_component_cmd`
|
|
95
|
+
```python
|
|
96
|
+
@click.command("add")
|
|
97
|
+
@click.argument("component_name": str)
|
|
98
|
+
@click.option("--plugin", "plugin_source": str, required=True, help="Plugin source: installed module name, local path, or Git URL.")
|
|
99
|
+
def add_plugin_component_cmd(component_name: str, plugin_source: str, confirm_pip: bool) -> None
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Purpose**: Creates a new component instance from a specified plugin source.
|
|
103
|
+
|
|
104
|
+
**Usage Examples**:
|
|
105
|
+
```bash
|
|
106
|
+
# From installed module
|
|
107
|
+
sam plugin add my-component --plugin installed-plugin-name
|
|
108
|
+
|
|
109
|
+
# From local path
|
|
110
|
+
sam plugin add my-component --plugin ./path/to/plugin
|
|
111
|
+
|
|
112
|
+
# From Git repository
|
|
113
|
+
sam plugin add my-component --plugin https://github.com/user/plugin.git
|
|
114
|
+
|
|
115
|
+
# Skip pip confirmation
|
|
116
|
+
sam plugin add my-component --plugin ./local/plugin
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Plugin Source Types**:
|
|
120
|
+
1. **Module**: Installed Python module (no slashes in name)
|
|
121
|
+
2. **Local**: Local directory path (existing directory)
|
|
122
|
+
3. **Git**: Git repository URL (starts with git+, http://, https:// and ends with .git)
|
|
123
|
+
|
|
124
|
+
**Component Placeholders**:
|
|
125
|
+
- `__COMPONENT_UPPER_SNAKE_CASE_NAME__` - Component name in UPPER_SNAKE_CASE
|
|
126
|
+
- `__COMPONENT_KEBAB_CASE_NAME__` - Component name in kebab-case
|
|
127
|
+
- `__COMPONENT_CAMEL_CASE_NAME__` - Component name in camelCase
|
|
128
|
+
|
|
129
|
+
**Output**: Creates `configs/plugins/{component-name}.yaml` with processed plugin configuration.
|
|
130
|
+
|
|
131
|
+
#### `build_plugin_cmd`
|
|
132
|
+
```python
|
|
133
|
+
@click.command("build")
|
|
134
|
+
@click.argument("plugin_path_arg": str, type=click.Path(exists=True, file_okay=False, dir_okay=True, resolve_path=True), default=".", metavar="PLUGIN_PATH")
|
|
135
|
+
def build_plugin_cmd(plugin_path_arg: str) -> None
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Purpose**: Builds the SAM plugin in the specified directory using Python's build module.
|
|
139
|
+
|
|
140
|
+
**Usage Examples**:
|
|
141
|
+
```bash
|
|
142
|
+
# Build current directory
|
|
143
|
+
sam plugin build
|
|
144
|
+
|
|
145
|
+
# Build specific directory
|
|
146
|
+
sam plugin build ./my-plugin-directory
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Requirements**:
|
|
150
|
+
- `pyproject.toml` must exist in target directory
|
|
151
|
+
- `build` package must be installed (`pip install build`)
|
|
152
|
+
|
|
153
|
+
**Output**: Creates `dist/` directory with built artifacts (wheel and source distribution).
|
|
154
|
+
|
|
155
|
+
#### `store`
|
|
156
|
+
```python
|
|
157
|
+
@click.command("store")
|
|
158
|
+
@click.option('--port', default=5003, type=int, show_default=True, help="Port to run the plugin store web server on.")
|
|
159
|
+
def store(port: int) -> None
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Purpose**: Launches the SAM Plugin Store web interface.
|
|
163
|
+
|
|
164
|
+
**Usage Examples**:
|
|
165
|
+
```bash
|
|
166
|
+
# Default port (5003)
|
|
167
|
+
sam plugin store
|
|
168
|
+
|
|
169
|
+
# Custom port
|
|
170
|
+
sam plugin store --port 8080
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Behavior**:
|
|
174
|
+
- Starts Flask backend server in separate process
|
|
175
|
+
- Opens web browser to plugin store interface
|
|
176
|
+
- Handles graceful shutdown on Ctrl+C
|
|
177
|
+
- Uses multiprocessing for process management
|
|
178
|
+
|
|
179
|
+
### Helper Functions
|
|
180
|
+
|
|
181
|
+
#### `ensure_directory_exists`
|
|
182
|
+
```python
|
|
183
|
+
def ensure_directory_exists(path: pathlib.Path) -> None
|
|
184
|
+
```
|
|
185
|
+
**Purpose**: Creates a directory if it doesn't exist.
|
|
186
|
+
**Parameters**: `path` - Path object for directory to create
|
|
187
|
+
**Usage**: Used internally for creating plugin directory structures.
|
|
188
|
+
|
|
189
|
+
#### `replace_placeholders`
|
|
190
|
+
```python
|
|
191
|
+
def replace_placeholders(content: str, replacements: dict) -> str
|
|
192
|
+
```
|
|
193
|
+
**Purpose**: Replaces placeholders in template content.
|
|
194
|
+
**Parameters**:
|
|
195
|
+
- `content` - Template string with placeholders
|
|
196
|
+
- `replacements` - Dictionary mapping placeholders to values
|
|
197
|
+
**Returns**: Processed content with placeholders replaced
|
|
198
|
+
|
|
199
|
+
#### `_check_command_exists`
|
|
200
|
+
```python
|
|
201
|
+
def _check_command_exists(command: str) -> bool
|
|
202
|
+
```
|
|
203
|
+
**Purpose**: Checks if a command exists on the system.
|
|
204
|
+
**Parameters**: `command` - Command name to check
|
|
205
|
+
**Returns**: True if command is available, False otherwise
|
|
206
|
+
|
|
207
|
+
#### `_get_plugin_name_from_source_pyproject`
|
|
208
|
+
```python
|
|
209
|
+
def _get_plugin_name_from_source_pyproject(source_path: pathlib.Path) -> str | None
|
|
210
|
+
```
|
|
211
|
+
**Purpose**: Reads pyproject.toml from source path and returns the project name.
|
|
212
|
+
**Parameters**: `source_path` - Path to directory containing pyproject.toml
|
|
213
|
+
**Returns**: Normalized project name (snake_case) or None if not found
|
|
214
|
+
|
|
215
|
+
#### `_run_pip_install`
|
|
216
|
+
```python
|
|
217
|
+
def _run_pip_install(install_target: str | pathlib.Path, operation_desc: str) -> str | None
|
|
218
|
+
```
|
|
219
|
+
**Purpose**: Runs pip install for the given target.
|
|
220
|
+
**Parameters**:
|
|
221
|
+
- `install_target` - Path or URL to install
|
|
222
|
+
- `operation_desc` - Description for user feedback
|
|
223
|
+
**Returns**: None on success, error message string on failure
|
|
224
|
+
|
|
225
|
+
#### `run_flask_plugin_store`
|
|
226
|
+
```python
|
|
227
|
+
def run_flask_plugin_store(host: str, port: int, shared_data: dict) -> None
|
|
228
|
+
```
|
|
229
|
+
**Purpose**: Starts the Flask backend server for plugin store.
|
|
230
|
+
**Parameters**:
|
|
231
|
+
- `host` - Server host address
|
|
232
|
+
- `port` - Server port number
|
|
233
|
+
- `shared_data` - Multiprocessing shared dictionary for status communication
|
|
234
|
+
|
|
235
|
+
### Configuration Objects
|
|
236
|
+
|
|
237
|
+
#### Default Values
|
|
238
|
+
```python
|
|
239
|
+
DEFAULT_AUTHOR_NAME = "Your Name"
|
|
240
|
+
DEFAULT_AUTHOR_EMAIL = "your.email@example.com"
|
|
241
|
+
DEFAULT_PLUGIN_VERSION = "0.1.0"
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
#### Template Requirements
|
|
245
|
+
The module expects these template files to exist:
|
|
246
|
+
- `plugin_config_template.yaml` - Plugin configuration template
|
|
247
|
+
- `plugin_pyproject_template.toml` - Python package configuration template
|
|
248
|
+
- `plugin_tools_template.py` - Plugin tools implementation template
|
|
249
|
+
- `plugin_readme_template.md` - Documentation template
|
|
250
|
+
|
|
251
|
+
## 5. Architecture Patterns Used
|
|
252
|
+
|
|
253
|
+
### Command Pattern
|
|
254
|
+
- Each subcommand is implemented as a separate module with a single command function
|
|
255
|
+
- Commands are registered with the main plugin group in `__init__.py`
|
|
256
|
+
|
|
257
|
+
### Template Pattern
|
|
258
|
+
- Uses template files with placeholder replacement for generating plugin scaffolding
|
|
259
|
+
- Consistent placeholder naming convention across all templates
|
|
260
|
+
|
|
261
|
+
### Strategy Pattern
|
|
262
|
+
- Different installation strategies for plugin sources (module, local, git)
|
|
263
|
+
- Conditional logic based on source type detection
|
|
264
|
+
|
|
265
|
+
### Process Management Pattern
|
|
266
|
+
- Uses multiprocessing for running web server in separate process
|
|
267
|
+
- Shared data structures for inter-process communication
|
|
268
|
+
|
|
269
|
+
### Error Handling Pattern
|
|
270
|
+
- Consistent error handling with `error_exit()` utility function
|
|
271
|
+
- Graceful degradation with user-friendly error messages
|
|
272
|
+
|
|
273
|
+
## 6. Integration Points with Other Systems
|
|
274
|
+
|
|
275
|
+
### CLI Framework Integration
|
|
276
|
+
- Integrates with Click framework for command-line interface
|
|
277
|
+
- Uses `cli.utils` for common functionality (name formatting, user interaction, template loading)
|
|
278
|
+
|
|
279
|
+
### Package Management Integration
|
|
280
|
+
- Integrates with pip for plugin installation
|
|
281
|
+
- Supports Git repositories for plugin sources
|
|
282
|
+
- Uses Python's build system for plugin packaging
|
|
283
|
+
|
|
284
|
+
### Web Interface Integration
|
|
285
|
+
- Launches Flask-based web server for plugin store
|
|
286
|
+
- Integrates with browser for user interface
|
|
287
|
+
- Uses multiprocessing for server management
|
|
288
|
+
|
|
289
|
+
### File System Integration
|
|
290
|
+
- Creates and manages plugin directory structures
|
|
291
|
+
- Reads and writes configuration files (YAML, TOML)
|
|
292
|
+
- Handles temporary directories for Git operations
|
|
293
|
+
|
|
294
|
+
### Template System Integration
|
|
295
|
+
- Loads templates from template directory
|
|
296
|
+
- Processes placeholders for dynamic content generation
|
|
297
|
+
- Supports multiple template formats (YAML, TOML, Python, Markdown)
|
|
298
|
+
|
|
299
|
+
### External Tool Integration
|
|
300
|
+
- Git for repository cloning
|
|
301
|
+
- Python build tools for package creation
|
|
302
|
+
- Pip for package installation
|
|
303
|
+
- System commands through subprocess
|
|
304
|
+
|
|
305
|
+
The module provides a comprehensive plugin management system that integrates seamlessly with the broader SAM CLI ecosystem while maintaining clear separation of concerns and robust error handling.
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import os
|
|
3
|
+
import sys
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
import click
|
|
7
|
+
from dotenv import find_dotenv, load_dotenv
|
|
8
|
+
|
|
9
|
+
from cli.utils import error_exit
|
|
10
|
+
from solace_agent_mesh.common.utils.initializer import initialize
|
|
11
|
+
from solace_ai_connector.common.logging_config import configure_from_file
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def _execute_with_solace_ai_connector(config_file_paths: list[str]):
|
|
15
|
+
try:
|
|
16
|
+
from solace_ai_connector.main import main as solace_ai_connector_main
|
|
17
|
+
except ImportError:
|
|
18
|
+
error_exit(
|
|
19
|
+
"Error: Failed to import 'solace_ai_connector.main'.\n"
|
|
20
|
+
"Please ensure 'solace-agent-mesh' (which includes the connector) is installed correctly."
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
program_name = sys.argv[0]
|
|
24
|
+
if os.path.basename(program_name) == "sam":
|
|
25
|
+
connector_program_name = program_name.replace("sam", "solace-ai-connector")
|
|
26
|
+
elif os.path.basename(program_name) == "solace-agent-mesh":
|
|
27
|
+
connector_program_name = program_name.replace(
|
|
28
|
+
"solace-agent-mesh", "solace-ai-connector"
|
|
29
|
+
)
|
|
30
|
+
else:
|
|
31
|
+
connector_program_name = "solace-ai-connector"
|
|
32
|
+
|
|
33
|
+
sys.argv = [connector_program_name] + config_file_paths
|
|
34
|
+
|
|
35
|
+
sys.argv = [
|
|
36
|
+
sys.argv[0].replace("solace-agent-mesh", "solace-ai-connector"),
|
|
37
|
+
*config_file_paths,
|
|
38
|
+
]
|
|
39
|
+
return sys.exit(solace_ai_connector_main())
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@click.command(name="run")
|
|
43
|
+
@click.argument(
|
|
44
|
+
"files", nargs=-1, type=click.Path(exists=True, dir_okay=True, resolve_path=True)
|
|
45
|
+
)
|
|
46
|
+
@click.option(
|
|
47
|
+
"-s",
|
|
48
|
+
"--skip",
|
|
49
|
+
"skip_files",
|
|
50
|
+
multiple=True,
|
|
51
|
+
help="File name(s) to exclude from the run (e.g., -s my_agent.yaml).",
|
|
52
|
+
)
|
|
53
|
+
@click.option(
|
|
54
|
+
"-u",
|
|
55
|
+
"--system-env",
|
|
56
|
+
is_flag=True,
|
|
57
|
+
default=False,
|
|
58
|
+
help="Use system environment variables only; do not load .env file.",
|
|
59
|
+
)
|
|
60
|
+
def run(files: tuple[str, ...], skip_files: tuple[str, ...], system_env: bool):
|
|
61
|
+
"""
|
|
62
|
+
Run the Solace application with specified or discovered YAML configuration files.
|
|
63
|
+
|
|
64
|
+
This command accepts paths to individual YAML files (`.yaml`, `.yml`) or directories.
|
|
65
|
+
When a directory is provided, it is recursively searched for YAML files.
|
|
66
|
+
"""
|
|
67
|
+
# Set up initial logging to root logger (will be overwritten by LOGGING_CONFIG_PATH if provided)
|
|
68
|
+
log = None
|
|
69
|
+
reset_logging = True
|
|
70
|
+
|
|
71
|
+
def _setup_backup_logger():
|
|
72
|
+
nonlocal log
|
|
73
|
+
if not log:
|
|
74
|
+
log = logging.getLogger()
|
|
75
|
+
handler = logging.StreamHandler(sys.stdout)
|
|
76
|
+
formatter = logging.Formatter(
|
|
77
|
+
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
78
|
+
)
|
|
79
|
+
handler.setFormatter(formatter)
|
|
80
|
+
log.addHandler(handler)
|
|
81
|
+
log.setLevel(logging.INFO)
|
|
82
|
+
return log
|
|
83
|
+
|
|
84
|
+
env_path = ""
|
|
85
|
+
|
|
86
|
+
if not system_env:
|
|
87
|
+
env_path = find_dotenv(usecwd=True)
|
|
88
|
+
if env_path:
|
|
89
|
+
load_dotenv(dotenv_path=env_path, override=True)
|
|
90
|
+
|
|
91
|
+
# Resolve LOGGING_CONFIG_PATH to absolute path if it's relative
|
|
92
|
+
logging_config_path = os.getenv("LOGGING_CONFIG_PATH")
|
|
93
|
+
if logging_config_path and not os.path.isabs(logging_config_path):
|
|
94
|
+
absolute_logging_path = os.path.abspath(logging_config_path)
|
|
95
|
+
os.environ["LOGGING_CONFIG_PATH"] = absolute_logging_path
|
|
96
|
+
|
|
97
|
+
try:
|
|
98
|
+
if configure_from_file():
|
|
99
|
+
log = logging.getLogger(__name__)
|
|
100
|
+
log.info("Logging reconfigured from LOGGING_CONFIG_PATH")
|
|
101
|
+
reset_logging = False
|
|
102
|
+
else:
|
|
103
|
+
log = _setup_backup_logger()
|
|
104
|
+
except ImportError:
|
|
105
|
+
log = _setup_backup_logger() # solace_ai_connector might not be available yet
|
|
106
|
+
log.warning("Using backup logger; solace_ai_connector not available.")
|
|
107
|
+
|
|
108
|
+
if system_env:
|
|
109
|
+
log.warning("Skipping .env file loading due to --system-env flag.")
|
|
110
|
+
else:
|
|
111
|
+
if not env_path:
|
|
112
|
+
log.warning("Warning: .env file not found in the current directory or parent directories. Proceeding without loading .env.")
|
|
113
|
+
else:
|
|
114
|
+
log.info("Loaded environment variables from: %s", env_path)
|
|
115
|
+
|
|
116
|
+
# Run enterprise initialization if present
|
|
117
|
+
initialize()
|
|
118
|
+
|
|
119
|
+
config_files_to_run = []
|
|
120
|
+
project_root = Path.cwd()
|
|
121
|
+
configs_dir = project_root / "configs"
|
|
122
|
+
|
|
123
|
+
if not files:
|
|
124
|
+
log.info(
|
|
125
|
+
"No specific files provided. Discovering YAML files in %s...", configs_dir
|
|
126
|
+
)
|
|
127
|
+
if not configs_dir.is_dir():
|
|
128
|
+
log.error(
|
|
129
|
+
"Error: Configuration directory '%s' not found. Please run 'init' first or provide specific config files.",
|
|
130
|
+
configs_dir
|
|
131
|
+
)
|
|
132
|
+
sys.exit(1)
|
|
133
|
+
|
|
134
|
+
for filepath in configs_dir.rglob("*.yaml"):
|
|
135
|
+
if filepath.name.startswith("_") or filepath.name.startswith(
|
|
136
|
+
"shared_config"
|
|
137
|
+
):
|
|
138
|
+
log.info(
|
|
139
|
+
" Skipping discovery: %s (underscore prefix or shared_config)", filepath
|
|
140
|
+
)
|
|
141
|
+
continue
|
|
142
|
+
config_files_to_run.append(str(filepath.resolve()))
|
|
143
|
+
|
|
144
|
+
for filepath in configs_dir.rglob("*.yml"):
|
|
145
|
+
if filepath.name.startswith("_") or filepath.name.startswith(
|
|
146
|
+
"shared_config"
|
|
147
|
+
):
|
|
148
|
+
log.info(
|
|
149
|
+
" Skipping discovery: %s (underscore prefix or shared_config)", filepath
|
|
150
|
+
)
|
|
151
|
+
continue
|
|
152
|
+
if str(filepath.resolve()) not in config_files_to_run:
|
|
153
|
+
config_files_to_run.append(str(filepath.resolve()))
|
|
154
|
+
|
|
155
|
+
else:
|
|
156
|
+
log.info("Processing provided configuration files and directories:")
|
|
157
|
+
processed_files = set()
|
|
158
|
+
for path_str in files:
|
|
159
|
+
path = Path(path_str)
|
|
160
|
+
if path.is_dir():
|
|
161
|
+
log.info(" Discovering YAML files in directory: %s", path)
|
|
162
|
+
for yaml_ext in ("*.yaml", "*.yml"):
|
|
163
|
+
for filepath in path.rglob(yaml_ext):
|
|
164
|
+
if filepath.name.startswith("_") or filepath.name.startswith(
|
|
165
|
+
"shared_config"
|
|
166
|
+
):
|
|
167
|
+
log.info(
|
|
168
|
+
" Skipping discovery: %s (underscore prefix or shared_config)", filepath
|
|
169
|
+
)
|
|
170
|
+
continue
|
|
171
|
+
processed_files.add(str(filepath.resolve()))
|
|
172
|
+
elif path.is_file():
|
|
173
|
+
if path.suffix in [".yaml", ".yml"]:
|
|
174
|
+
processed_files.add(str(path.resolve()))
|
|
175
|
+
else:
|
|
176
|
+
log.warning(
|
|
177
|
+
" Ignoring non-YAML file: %s", path
|
|
178
|
+
)
|
|
179
|
+
config_files_to_run = sorted(list(processed_files))
|
|
180
|
+
|
|
181
|
+
if skip_files:
|
|
182
|
+
log.info("Applying --skip for: %s", skip_files)
|
|
183
|
+
final_list = []
|
|
184
|
+
skipped_basenames = [os.path.basename(s) for s in skip_files]
|
|
185
|
+
for cf in config_files_to_run:
|
|
186
|
+
if os.path.basename(cf) in skipped_basenames:
|
|
187
|
+
log.info(
|
|
188
|
+
" Skipping execution: %s (due to --skip)", cf
|
|
189
|
+
)
|
|
190
|
+
continue
|
|
191
|
+
final_list.append(cf)
|
|
192
|
+
config_files_to_run = final_list
|
|
193
|
+
|
|
194
|
+
if not config_files_to_run:
|
|
195
|
+
log.warning(
|
|
196
|
+
"No configuration files to run after filtering. Exiting."
|
|
197
|
+
)
|
|
198
|
+
return 0
|
|
199
|
+
|
|
200
|
+
file_list = "\n".join(f" - {cf}" for cf in config_files_to_run)
|
|
201
|
+
log.info("Final list of configuration files to run:\n%s", file_list)
|
|
202
|
+
|
|
203
|
+
if reset_logging:
|
|
204
|
+
for handler in log.handlers[:]:
|
|
205
|
+
log.removeHandler(handler)
|
|
206
|
+
return_code = _execute_with_solace_ai_connector(config_files_to_run)
|
|
207
|
+
|
|
208
|
+
if return_code == 0:
|
|
209
|
+
log.info("Application run completed successfully.")
|
|
210
|
+
else:
|
|
211
|
+
log.error(
|
|
212
|
+
"Application run failed or exited with code %s.", return_code
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
sys.exit(return_code)
|