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,252 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Base repository classes with proper transaction management.
|
|
3
|
+
|
|
4
|
+
This module provides base classes for repositories that follow FastAPI best practices
|
|
5
|
+
for database session management and transaction handling.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from abc import ABC, abstractmethod
|
|
9
|
+
from typing import Any, Generic, TypeVar
|
|
10
|
+
|
|
11
|
+
from sqlalchemy.orm import Session
|
|
12
|
+
|
|
13
|
+
from .exceptions import EntityNotFoundError
|
|
14
|
+
|
|
15
|
+
T = TypeVar("T")
|
|
16
|
+
ModelType = TypeVar("ModelType")
|
|
17
|
+
EntityType = TypeVar("EntityType")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class BaseRepository(ABC, Generic[ModelType, EntityType]):
|
|
21
|
+
"""
|
|
22
|
+
Abstract base class for repositories with common database operations.
|
|
23
|
+
|
|
24
|
+
This base class provides common patterns for database operations
|
|
25
|
+
without manual transaction management, following the principle that
|
|
26
|
+
transactions should be handled at the service/API layer.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
def __init__(self, model_class: type[ModelType], entity_class: type[EntityType]):
|
|
30
|
+
"""
|
|
31
|
+
Initialize repository with model and entity classes.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
model_class: SQLAlchemy model class
|
|
35
|
+
entity_class: Pydantic entity class
|
|
36
|
+
"""
|
|
37
|
+
self.model_class = model_class
|
|
38
|
+
self.entity_class = entity_class
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
@abstractmethod
|
|
42
|
+
def entity_name(self) -> str:
|
|
43
|
+
"""Return the entity name for error messages."""
|
|
44
|
+
pass
|
|
45
|
+
|
|
46
|
+
def create(self, session: Session, create_data: dict[str, Any]) -> EntityType:
|
|
47
|
+
"""
|
|
48
|
+
Create a new entity.
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
session: Database session (managed externally)
|
|
52
|
+
create_data: Data for creating the entity
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
Created entity
|
|
56
|
+
|
|
57
|
+
Note:
|
|
58
|
+
This method does NOT commit the transaction.
|
|
59
|
+
Commit/rollback is handled by the service layer.
|
|
60
|
+
"""
|
|
61
|
+
model_instance = self.model_class(**create_data)
|
|
62
|
+
|
|
63
|
+
session.add(model_instance)
|
|
64
|
+
session.flush() # Flush to get generated IDs
|
|
65
|
+
session.refresh(model_instance)
|
|
66
|
+
|
|
67
|
+
entity = self.entity_class.model_validate(model_instance)
|
|
68
|
+
|
|
69
|
+
return entity
|
|
70
|
+
|
|
71
|
+
def get_by_id(self, session: Session, entity_id: Any) -> EntityType:
|
|
72
|
+
"""
|
|
73
|
+
Get entity by ID.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
session: Database session
|
|
77
|
+
entity_id: Entity identifier
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
Entity instance
|
|
81
|
+
|
|
82
|
+
Raises:
|
|
83
|
+
EntityNotFoundError: If entity not found
|
|
84
|
+
"""
|
|
85
|
+
model_instance = (
|
|
86
|
+
session.query(self.model_class)
|
|
87
|
+
.filter(self.model_class.id == str(entity_id))
|
|
88
|
+
.first()
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
if not model_instance:
|
|
92
|
+
raise EntityNotFoundError(self.entity_name, entity_id)
|
|
93
|
+
|
|
94
|
+
return self.entity_class.model_validate(model_instance)
|
|
95
|
+
|
|
96
|
+
def get_all(
|
|
97
|
+
self, session: Session, limit: int | None = None, offset: int | None = None
|
|
98
|
+
) -> list[EntityType]:
|
|
99
|
+
"""
|
|
100
|
+
Get all entities with optional pagination.
|
|
101
|
+
|
|
102
|
+
Args:
|
|
103
|
+
session: Database session
|
|
104
|
+
limit: Maximum number of results
|
|
105
|
+
offset: Number of results to skip
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
List of entities
|
|
109
|
+
"""
|
|
110
|
+
query = session.query(self.model_class)
|
|
111
|
+
|
|
112
|
+
if offset:
|
|
113
|
+
query = query.offset(offset)
|
|
114
|
+
if limit:
|
|
115
|
+
query = query.limit(limit)
|
|
116
|
+
|
|
117
|
+
model_instances = query.all()
|
|
118
|
+
return [
|
|
119
|
+
self.entity_class.model_validate(instance) for instance in model_instances
|
|
120
|
+
]
|
|
121
|
+
|
|
122
|
+
def update(
|
|
123
|
+
self, session: Session, entity_id: Any, update_data: dict[str, Any]
|
|
124
|
+
) -> EntityType:
|
|
125
|
+
"""
|
|
126
|
+
Update an entity.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
session: Database session
|
|
130
|
+
entity_id: Entity identifier
|
|
131
|
+
update_data: Data to update
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
Updated entity
|
|
135
|
+
|
|
136
|
+
Raises:
|
|
137
|
+
EntityNotFoundError: If entity not found
|
|
138
|
+
"""
|
|
139
|
+
model_instance = (
|
|
140
|
+
session.query(self.model_class)
|
|
141
|
+
.filter(self.model_class.id == str(entity_id))
|
|
142
|
+
.first()
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
if not model_instance:
|
|
146
|
+
raise EntityNotFoundError(self.entity_name, entity_id)
|
|
147
|
+
|
|
148
|
+
for key, value in update_data.items():
|
|
149
|
+
if value is not None and hasattr(model_instance, key):
|
|
150
|
+
setattr(model_instance, key, value)
|
|
151
|
+
|
|
152
|
+
session.flush() # Flush to validate constraints
|
|
153
|
+
session.refresh(model_instance)
|
|
154
|
+
|
|
155
|
+
entity = self.entity_class.model_validate(model_instance)
|
|
156
|
+
|
|
157
|
+
return entity
|
|
158
|
+
|
|
159
|
+
def delete(self, session: Session, entity_id: Any) -> None:
|
|
160
|
+
"""
|
|
161
|
+
Delete an entity.
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
session: Database session
|
|
165
|
+
entity_id: Entity identifier
|
|
166
|
+
|
|
167
|
+
Raises:
|
|
168
|
+
EntityNotFoundError: If entity not found
|
|
169
|
+
"""
|
|
170
|
+
model_instance = (
|
|
171
|
+
session.query(self.model_class)
|
|
172
|
+
.filter(self.model_class.id == str(entity_id))
|
|
173
|
+
.first()
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
if not model_instance:
|
|
177
|
+
raise EntityNotFoundError(self.entity_name, entity_id)
|
|
178
|
+
|
|
179
|
+
session.delete(model_instance)
|
|
180
|
+
session.flush() # Flush to validate constraints
|
|
181
|
+
|
|
182
|
+
def exists(self, session: Session, entity_id: Any) -> bool:
|
|
183
|
+
"""
|
|
184
|
+
Check if an entity exists.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
session: Database session
|
|
188
|
+
entity_id: Entity identifier
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
True if entity exists, False otherwise
|
|
192
|
+
"""
|
|
193
|
+
count = (
|
|
194
|
+
session.query(self.model_class)
|
|
195
|
+
.filter(self.model_class.id == str(entity_id))
|
|
196
|
+
.count()
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
return count > 0
|
|
200
|
+
|
|
201
|
+
def count(self, session: Session) -> int:
|
|
202
|
+
"""
|
|
203
|
+
Get total count of entities.
|
|
204
|
+
|
|
205
|
+
Args:
|
|
206
|
+
session: Database session
|
|
207
|
+
|
|
208
|
+
Returns:
|
|
209
|
+
Total number of entities
|
|
210
|
+
"""
|
|
211
|
+
return session.query(self.model_class).count()
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
class PaginatedRepository(BaseRepository[ModelType, EntityType]):
|
|
215
|
+
"""
|
|
216
|
+
Base repository with pagination support.
|
|
217
|
+
|
|
218
|
+
Concrete repositories should implement their own pagination methods
|
|
219
|
+
that apply specific filters and ordering before pagination.
|
|
220
|
+
"""
|
|
221
|
+
|
|
222
|
+
pass
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
class ValidationMixin:
|
|
226
|
+
"""
|
|
227
|
+
Mixin for repositories that need validation logic.
|
|
228
|
+
"""
|
|
229
|
+
|
|
230
|
+
def validate_create_data(self, create_data: dict[str, Any]) -> None:
|
|
231
|
+
"""
|
|
232
|
+
Validate data before creation.
|
|
233
|
+
|
|
234
|
+
Args:
|
|
235
|
+
create_data: Data to validate
|
|
236
|
+
|
|
237
|
+
Raises:
|
|
238
|
+
ValidationError: If validation fails
|
|
239
|
+
"""
|
|
240
|
+
pass
|
|
241
|
+
|
|
242
|
+
def validate_update_data(self, update_data: dict[str, Any]) -> None:
|
|
243
|
+
"""
|
|
244
|
+
Validate data before update.
|
|
245
|
+
|
|
246
|
+
Args:
|
|
247
|
+
update_data: Data to validate
|
|
248
|
+
|
|
249
|
+
Raises:
|
|
250
|
+
ValidationError: If validation fails
|
|
251
|
+
"""
|
|
252
|
+
pass
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Database Exception Handling
|
|
3
|
+
|
|
4
|
+
Provides centralized handling for converting SQLAlchemy exceptions to domain exceptions.
|
|
5
|
+
This handler translates low-level database errors into meaningful business exceptions
|
|
6
|
+
that can be properly handled by the API layer.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from typing import Optional, Dict, List
|
|
10
|
+
from sqlalchemy.exc import IntegrityError, SQLAlchemyError, OperationalError, DatabaseError
|
|
11
|
+
from .exceptions import ValidationError, DataIntegrityError, EntityAlreadyExistsError
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class DatabaseExceptionHandler:
|
|
15
|
+
"""
|
|
16
|
+
Centralized handler for converting SQLAlchemy exceptions to domain exceptions.
|
|
17
|
+
|
|
18
|
+
This handler translates low-level database errors into meaningful business exceptions
|
|
19
|
+
that can be properly handled by the API layer.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
@staticmethod
|
|
23
|
+
def handle_integrity_error(e: IntegrityError, entity_type: str = "Resource") -> ValidationError:
|
|
24
|
+
"""
|
|
25
|
+
Convert SQLAlchemy integrity constraint violations to domain exceptions.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
e: The SQLAlchemy IntegrityError
|
|
29
|
+
entity_type: The type of entity being operated on
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
ValidationError with appropriate message and validation details
|
|
33
|
+
"""
|
|
34
|
+
# Try to get the most descriptive error message for constraint matching
|
|
35
|
+
full_message = str(e)
|
|
36
|
+
orig_message = str(e.orig) if hasattr(e, 'orig') and e.orig else ""
|
|
37
|
+
|
|
38
|
+
# Use the message that contains constraint information
|
|
39
|
+
if any(keyword in full_message for keyword in ['constraint', 'UNIQUE', 'NULL', 'CHECK', 'FOREIGN']):
|
|
40
|
+
# Extract the most specific constraint line from the full message
|
|
41
|
+
lines = full_message.split('\n')
|
|
42
|
+
|
|
43
|
+
# Prioritize SQL lines that contain actual constraint details
|
|
44
|
+
for line in lines:
|
|
45
|
+
if '[SQL:' in line and any(keyword in line for keyword in ['UNIQUE', 'NULL', 'CHECK', 'FOREIGN']):
|
|
46
|
+
# Extract just the SQL part without the [SQL: ] wrapper
|
|
47
|
+
if '[SQL:' in line and ']' in line:
|
|
48
|
+
error_message = line.split('[SQL:')[1].split(']')[0].strip()
|
|
49
|
+
break
|
|
50
|
+
error_message = line.strip()
|
|
51
|
+
break
|
|
52
|
+
else:
|
|
53
|
+
# Fallback to any line with constraint keywords
|
|
54
|
+
for line in lines:
|
|
55
|
+
if any(keyword in line for keyword in ['constraint', 'UNIQUE', 'NULL', 'CHECK', 'FOREIGN']):
|
|
56
|
+
error_message = line.strip()
|
|
57
|
+
break
|
|
58
|
+
else:
|
|
59
|
+
error_message = full_message
|
|
60
|
+
else:
|
|
61
|
+
# Fallback to orig if no constraint info in main message
|
|
62
|
+
error_message = orig_message or full_message
|
|
63
|
+
|
|
64
|
+
# Handle UNIQUE constraint violations and concurrent modifications
|
|
65
|
+
if ("UNIQUE constraint failed" in error_message or
|
|
66
|
+
"duplicate key value" in error_message.lower() or
|
|
67
|
+
"concurrent modification" in error_message.lower() or
|
|
68
|
+
"row was updated or deleted by another transaction" in error_message.lower()):
|
|
69
|
+
field_name = DatabaseExceptionHandler._extract_field_from_unique_error(error_message)
|
|
70
|
+
return EntityAlreadyExistsError(
|
|
71
|
+
entity_type=entity_type,
|
|
72
|
+
identifier=field_name,
|
|
73
|
+
value="provided value"
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
# Handle NOT NULL constraint violations
|
|
77
|
+
if "NOT NULL constraint failed" in error_message or "null value in column" in error_message.lower():
|
|
78
|
+
field_name = DatabaseExceptionHandler._extract_field_from_null_error(error_message)
|
|
79
|
+
return ValidationError(
|
|
80
|
+
message="Required field is missing",
|
|
81
|
+
validation_details={field_name: ["This field is required"]},
|
|
82
|
+
entity_type=entity_type
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
# Handle CHECK constraint violations
|
|
86
|
+
if "CHECK constraint failed" in error_message or "check constraint" in error_message.lower():
|
|
87
|
+
constraint_name = DatabaseExceptionHandler._extract_constraint_name(error_message)
|
|
88
|
+
field_name = DatabaseExceptionHandler._map_constraint_to_field(constraint_name)
|
|
89
|
+
return ValidationError(
|
|
90
|
+
message="Field validation failed",
|
|
91
|
+
validation_details={field_name: ["Value violates validation rules"]},
|
|
92
|
+
entity_type=entity_type
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
# Handle FOREIGN KEY constraint violations
|
|
96
|
+
if "FOREIGN KEY constraint failed" in error_message or "foreign key constraint" in error_message.lower():
|
|
97
|
+
return ValidationError(
|
|
98
|
+
message="Referenced resource does not exist",
|
|
99
|
+
validation_details={"reference": ["Invalid reference to related resource"]},
|
|
100
|
+
entity_type=entity_type
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
# Generic integrity error fallback
|
|
104
|
+
return DataIntegrityError(
|
|
105
|
+
constraint="integrity_violation",
|
|
106
|
+
message=f"Database constraint violation: {error_message}"
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
@staticmethod
|
|
110
|
+
def handle_operational_error(e: OperationalError, entity_type: str = "Resource") -> DataIntegrityError:
|
|
111
|
+
"""
|
|
112
|
+
Handle SQLAlchemy operational errors (connection issues, timeouts, etc.).
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
e: The SQLAlchemy OperationalError
|
|
116
|
+
entity_type: The type of entity being operated on
|
|
117
|
+
|
|
118
|
+
Returns:
|
|
119
|
+
DataIntegrityError with appropriate message
|
|
120
|
+
"""
|
|
121
|
+
error_message = str(e.orig) if hasattr(e, 'orig') else str(e)
|
|
122
|
+
|
|
123
|
+
if "timeout" in error_message.lower():
|
|
124
|
+
return DataIntegrityError(
|
|
125
|
+
constraint="timeout",
|
|
126
|
+
message="Database operation timed out. Please try again."
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
if "connection" in error_message.lower():
|
|
130
|
+
return DataIntegrityError(
|
|
131
|
+
constraint="connection_error",
|
|
132
|
+
message="Database connection failed. Please try again later."
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
return DataIntegrityError(
|
|
136
|
+
constraint="operational_error",
|
|
137
|
+
message="Database operation failed. Please contact support if this persists."
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
@staticmethod
|
|
141
|
+
def handle_database_error(e: DatabaseError, entity_type: str = "Resource") -> DataIntegrityError:
|
|
142
|
+
"""
|
|
143
|
+
Handle general SQLAlchemy database errors.
|
|
144
|
+
|
|
145
|
+
Args:
|
|
146
|
+
e: The SQLAlchemy DatabaseError
|
|
147
|
+
entity_type: The type of entity being operated on
|
|
148
|
+
|
|
149
|
+
Returns:
|
|
150
|
+
DataIntegrityError with appropriate message
|
|
151
|
+
"""
|
|
152
|
+
error_message = str(e.orig) if hasattr(e, 'orig') else str(e)
|
|
153
|
+
|
|
154
|
+
return DataIntegrityError(
|
|
155
|
+
constraint="database_error",
|
|
156
|
+
message="A database error occurred. Please contact support."
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
@staticmethod
|
|
160
|
+
def handle_sqlalchemy_error(e: SQLAlchemyError, entity_type: str = "Resource") -> DataIntegrityError:
|
|
161
|
+
"""
|
|
162
|
+
Handle any other SQLAlchemy errors not caught by specific handlers.
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
e: The SQLAlchemy error
|
|
166
|
+
entity_type: The type of entity being operated on
|
|
167
|
+
|
|
168
|
+
Returns:
|
|
169
|
+
DataIntegrityError with generic message
|
|
170
|
+
"""
|
|
171
|
+
error_message = str(e)
|
|
172
|
+
|
|
173
|
+
return DataIntegrityError(
|
|
174
|
+
constraint="sqlalchemy_error",
|
|
175
|
+
message="An unexpected database error occurred. Please contact support."
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
@staticmethod
|
|
179
|
+
def _extract_field_from_unique_error(error_message: str) -> str:
|
|
180
|
+
"""Extract field name from UNIQUE constraint error message."""
|
|
181
|
+
# Try to extract field name from common formats
|
|
182
|
+
if "agents.name" in error_message:
|
|
183
|
+
return "name"
|
|
184
|
+
elif "agents.id" in error_message:
|
|
185
|
+
return "id"
|
|
186
|
+
elif "." in error_message:
|
|
187
|
+
# Extract field after table.field pattern
|
|
188
|
+
parts = error_message.split(".")
|
|
189
|
+
if len(parts) > 1:
|
|
190
|
+
field_part = parts[1].split()[0] # Get first word after dot
|
|
191
|
+
return field_part.strip('()"\'')
|
|
192
|
+
|
|
193
|
+
return "field" # Generic fallback
|
|
194
|
+
|
|
195
|
+
@staticmethod
|
|
196
|
+
def _extract_field_from_null_error(error_message: str) -> str:
|
|
197
|
+
"""Extract field name from NOT NULL constraint error message."""
|
|
198
|
+
# Common patterns: "NOT NULL constraint failed: agents.name"
|
|
199
|
+
if ":" in error_message:
|
|
200
|
+
field_part = error_message.split(":")[-1].strip()
|
|
201
|
+
if "." in field_part:
|
|
202
|
+
return field_part.split(".")[-1]
|
|
203
|
+
return field_part
|
|
204
|
+
|
|
205
|
+
return "field" # Generic fallback
|
|
206
|
+
|
|
207
|
+
@staticmethod
|
|
208
|
+
def _extract_constraint_name(error_message: str) -> str:
|
|
209
|
+
"""Extract constraint name from CHECK constraint error message."""
|
|
210
|
+
# Common patterns: "CHECK constraint failed: check_name_length"
|
|
211
|
+
if ":" in error_message:
|
|
212
|
+
constraint_part = error_message.split(":")[-1].strip()
|
|
213
|
+
return constraint_part
|
|
214
|
+
|
|
215
|
+
return "unknown_constraint"
|
|
216
|
+
|
|
217
|
+
@staticmethod
|
|
218
|
+
def _map_constraint_to_field(constraint_name: str) -> str:
|
|
219
|
+
"""Map database constraint names to user-friendly field names."""
|
|
220
|
+
constraint_field_map = {
|
|
221
|
+
"check_name_length": "name",
|
|
222
|
+
"check_description_length": "description",
|
|
223
|
+
"check_system_prompt_length": "systemPrompt",
|
|
224
|
+
"check_created_by_length": "createdBy",
|
|
225
|
+
"check_updated_by_length": "updatedBy",
|
|
226
|
+
"check_id_length": "id"
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return constraint_field_map.get(constraint_name, "field")
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
class DatabaseErrorDecorator:
|
|
233
|
+
"""
|
|
234
|
+
Decorator class for wrapping repository methods with database exception handling.
|
|
235
|
+
"""
|
|
236
|
+
|
|
237
|
+
def __init__(self, entity_type: str = "Resource"):
|
|
238
|
+
self.entity_type = entity_type
|
|
239
|
+
|
|
240
|
+
def __call__(self, func):
|
|
241
|
+
"""
|
|
242
|
+
Decorator that wraps repository methods with database exception handling.
|
|
243
|
+
|
|
244
|
+
Args:
|
|
245
|
+
func: The repository method to wrap
|
|
246
|
+
|
|
247
|
+
Returns:
|
|
248
|
+
Wrapped function with exception handling
|
|
249
|
+
"""
|
|
250
|
+
def wrapper(*args, **kwargs):
|
|
251
|
+
try:
|
|
252
|
+
return func(*args, **kwargs)
|
|
253
|
+
except IntegrityError as e:
|
|
254
|
+
raise DatabaseExceptionHandler.handle_integrity_error(e, self.entity_type)
|
|
255
|
+
except OperationalError as e:
|
|
256
|
+
raise DatabaseExceptionHandler.handle_operational_error(e, self.entity_type)
|
|
257
|
+
except DatabaseError as e:
|
|
258
|
+
raise DatabaseExceptionHandler.handle_database_error(e, self.entity_type)
|
|
259
|
+
except SQLAlchemyError as e:
|
|
260
|
+
raise DatabaseExceptionHandler.handle_sqlalchemy_error(e, self.entity_type)
|
|
261
|
+
|
|
262
|
+
return wrapper
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def handle_database_errors(entity_type: str = "Resource"):
|
|
266
|
+
"""
|
|
267
|
+
Convenience decorator for database exception handling.
|
|
268
|
+
|
|
269
|
+
Usage:
|
|
270
|
+
@handle_database_errors("Agent")
|
|
271
|
+
def create_agent(self, ...):
|
|
272
|
+
# Repository method implementation
|
|
273
|
+
"""
|
|
274
|
+
return DatabaseErrorDecorator(entity_type)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Database Helper Functions
|
|
3
|
+
|
|
4
|
+
Provides database utility functions and custom types.
|
|
5
|
+
Separated from dependencies.py to avoid circular imports.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
from sqlalchemy import Text, TypeDecorator
|
|
10
|
+
from .exceptions import DataIntegrityError
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class SimpleJSON(TypeDecorator):
|
|
14
|
+
"""Simple JSON type using Text storage for all databases."""
|
|
15
|
+
|
|
16
|
+
impl = Text
|
|
17
|
+
cache_ok = True
|
|
18
|
+
|
|
19
|
+
def process_bind_param(self, value, dialect):
|
|
20
|
+
"""Convert Python object to JSON string for storage."""
|
|
21
|
+
if value is not None:
|
|
22
|
+
return json.dumps(value, default=self._json_serializer, ensure_ascii=False)
|
|
23
|
+
return value
|
|
24
|
+
|
|
25
|
+
def process_result_value(self, value, dialect):
|
|
26
|
+
"""Convert JSON string back to Python object."""
|
|
27
|
+
if value is not None and isinstance(value, str):
|
|
28
|
+
try:
|
|
29
|
+
return json.loads(value)
|
|
30
|
+
except (ValueError, TypeError, json.JSONDecodeError) as e:
|
|
31
|
+
raise DataIntegrityError("json_parsing", f"Invalid JSON data in database: {value}") from e
|
|
32
|
+
return value
|
|
33
|
+
|
|
34
|
+
@staticmethod
|
|
35
|
+
def _json_serializer(obj):
|
|
36
|
+
"""Custom JSON serializer for complex objects."""
|
|
37
|
+
if model_dump := getattr(obj, 'model_dump', None):
|
|
38
|
+
return model_dump()
|
|
39
|
+
elif dict_method := getattr(obj, 'dict', None):
|
|
40
|
+
return dict_method()
|
|
41
|
+
elif obj_dict := getattr(obj, '__dict__', None):
|
|
42
|
+
return obj_dict
|
|
43
|
+
raise TypeError(f"Object of type {type(obj).__name__} is not JSON serializable")
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Enumerations used throughout the application.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
from enum import Enum
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SenderType(str, Enum):
|
|
9
|
+
"""Types of message senders."""
|
|
10
|
+
USER = "user"
|
|
11
|
+
AGENT = "agent"
|
|
12
|
+
SYSTEM = "system"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TaskStatus(str, Enum):
|
|
16
|
+
"""Task execution status."""
|
|
17
|
+
PENDING = "pending"
|
|
18
|
+
RUNNING = "running"
|
|
19
|
+
COMPLETED = "completed"
|
|
20
|
+
FAILED = "failed"
|
|
21
|
+
CANCELLED = "cancelled"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class MessageType(str, Enum):
|
|
27
|
+
"""Types of messages."""
|
|
28
|
+
TEXT = "text"
|
|
29
|
+
FILE = "file"
|
|
30
|
+
IMAGE = "image"
|
|
31
|
+
DOCUMENT = "document"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ValidationErrorType(str, Enum):
|
|
35
|
+
"""Types of validation errors."""
|
|
36
|
+
REQUIRED_FIELD = "required_field"
|
|
37
|
+
INVALID_FORMAT = "invalid_format"
|
|
38
|
+
OUT_OF_RANGE = "out_of_range"
|
|
39
|
+
DUPLICATE_VALUE = "duplicate_value"
|
|
40
|
+
BUSINESS_RULE = "business_rule"
|