solace-agent-mesh 1.6.1__py3-none-any.whl → 1.13.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.
Potentially problematic release.
This version of solace-agent-mesh might be problematic. Click here for more details.
- 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 +26 -0
- solace_agent_mesh/agent/adk/artifacts/filesystem_artifact_service.py +165 -1
- solace_agent_mesh/agent/adk/artifacts/s3_artifact_service.py +163 -0
- solace_agent_mesh/agent/adk/callbacks.py +852 -109
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +234 -36
- solace_agent_mesh/agent/adk/intelligent_mcp_callbacks.py +52 -5
- solace_agent_mesh/agent/adk/mcp_content_processor.py +1 -1
- solace_agent_mesh/agent/adk/models/lite_llm.py +77 -21
- solace_agent_mesh/agent/adk/models/oauth2_token_manager.py +24 -137
- solace_agent_mesh/agent/adk/runner.py +85 -20
- solace_agent_mesh/agent/adk/schema_migration.py +88 -0
- solace_agent_mesh/agent/adk/services.py +94 -18
- solace_agent_mesh/agent/adk/setup.py +281 -65
- solace_agent_mesh/agent/adk/stream_parser.py +231 -37
- solace_agent_mesh/agent/adk/tool_wrapper.py +3 -0
- solace_agent_mesh/agent/protocol/event_handlers.py +472 -137
- solace_agent_mesh/agent/proxies/a2a/app.py +3 -2
- solace_agent_mesh/agent/proxies/a2a/component.py +572 -75
- solace_agent_mesh/agent/proxies/a2a/config.py +80 -4
- solace_agent_mesh/agent/proxies/base/app.py +3 -2
- solace_agent_mesh/agent/proxies/base/component.py +188 -22
- solace_agent_mesh/agent/proxies/base/proxy_task_context.py +3 -1
- solace_agent_mesh/agent/sac/app.py +91 -3
- solace_agent_mesh/agent/sac/component.py +591 -157
- solace_agent_mesh/agent/sac/patch_adk.py +8 -16
- solace_agent_mesh/agent/sac/task_execution_context.py +146 -4
- solace_agent_mesh/agent/tools/__init__.py +3 -0
- solace_agent_mesh/agent/tools/audio_tools.py +3 -3
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +710 -171
- solace_agent_mesh/agent/tools/deep_research_tools.py +2161 -0
- solace_agent_mesh/agent/tools/dynamic_tool.py +2 -0
- solace_agent_mesh/agent/tools/peer_agent_tool.py +82 -15
- solace_agent_mesh/agent/tools/time_tools.py +126 -0
- solace_agent_mesh/agent/tools/tool_config_types.py +57 -2
- solace_agent_mesh/agent/tools/web_search_tools.py +279 -0
- solace_agent_mesh/agent/tools/web_tools.py +125 -17
- solace_agent_mesh/agent/utils/artifact_helpers.py +248 -6
- solace_agent_mesh/agent/utils/context_helpers.py +17 -0
- solace_agent_mesh/assets/docs/404.html +6 -6
- solace_agent_mesh/assets/docs/assets/css/{styles.906a1503.css → styles.8162edfb.css} +1 -1
- solace_agent_mesh/assets/docs/assets/js/05749d90.19ac4f35.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/15e40e79.434bb30f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/17896441.e612dfb4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2279.550aa580.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/{17896441.a5e82f9b.js.LICENSE.txt → 2279.550aa580.js.LICENSE.txt} +6 -0
- solace_agent_mesh/assets/docs/assets/js/240a0364.83e37aa8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2987107d.a80604f9.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.2f0db237.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.7e61915d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.7f7ab1c1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.e53c9b78.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/41adc471.0e95b87c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/49eed117.493d6f99.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{509e993c.4c7a1a6d.js → 509e993c.a1fbf45a.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/55b7b518.29d6e75d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5b8d9c11.d4eb37b8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.1ee87753.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/60702c0e.a8bdd79b.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/631738c7.fa471607.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/64195356.09dbd087.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.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/71da7b71.374b9d54.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/729898df.7249e9fd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7e294c01.7c5f6906.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8024126c.e3467286.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/81a99df0.7ed65d45.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.161823a5.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8b032486.91a91afc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.975e428a.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/94e8668d.16083b3f.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9bb13469.4523ae20.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7d42657.a956689d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a94703ab.3e5fbcb3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e563275.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ad87452a.9d73dad6.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/da0b5bad.b62f7b08.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.c37a755e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.b682e9c2.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/de915948.44a432bc.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e04b235d.06d23db6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.deb2b62e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.1476f570.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.acc800d3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.c147a429.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ee0c2fe7.94d0a351.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.cc97854c.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.74710fc1.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.d634009f.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.27bb82a7.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +68 -68
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +50 -50
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +42 -42
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +55 -55
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +82 -68
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/image-tools/index.html +81 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +67 -50
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/research-tools/index.html +136 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +178 -144
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +43 -42
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +20 -18
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +23 -23
- solace_agent_mesh/assets/docs/docs/documentation/components/platform-service/index.html +33 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +45 -45
- 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 +208 -125
- solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +52 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +28 -49
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +29 -30
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +14 -14
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/index.html +47 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/kubernetes-deployment-guide/index.html +197 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +90 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +17 -16
- 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 +38 -38
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +162 -171
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +67 -49
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +17 -17
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +22 -22
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +27 -27
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +135 -135
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +66 -66
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +50 -38
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +86 -86
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +51 -51
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +24 -24
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +30 -30
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +44 -44
- 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 +23 -19
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +40 -37
- 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 +112 -87
- 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 +87 -64
- 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 +44 -44
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +39 -37
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +30 -30
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +18 -18
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/vibe_coding/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +311 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +39 -42
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +14 -14
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +27 -25
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +69 -69
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +72 -72
- 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 +42 -42
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +20 -20
- solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
- solace_agent_mesh/assets/docs/lunr-index-1768329217460.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1768329217460.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -1
- solace_agent_mesh/assets/docs/sitemap.xml +1 -1
- solace_agent_mesh/cli/__init__.py +1 -1
- solace_agent_mesh/cli/commands/add_cmd/__init__.py +3 -1
- solace_agent_mesh/cli/commands/add_cmd/agent_cmd.py +6 -1
- solace_agent_mesh/cli/commands/add_cmd/proxy_cmd.py +100 -0
- solace_agent_mesh/cli/commands/docs_cmd.py +4 -1
- solace_agent_mesh/cli/commands/eval_cmd.py +1 -1
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +15 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +1 -1
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +30 -3
- solace_agent_mesh/cli/commands/init_cmd/orchestrator_step.py +3 -4
- solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
- solace_agent_mesh/cli/commands/init_cmd/webui_gateway_step.py +16 -3
- solace_agent_mesh/cli/commands/plugin_cmd/add_cmd.py +2 -1
- solace_agent_mesh/cli/commands/plugin_cmd/catalog_cmd.py +1 -0
- solace_agent_mesh/cli/commands/plugin_cmd/create_cmd.py +3 -3
- solace_agent_mesh/cli/commands/run_cmd.py +64 -49
- solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
- solace_agent_mesh/cli/main.py +15 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-BTf6dqwp.js → authCallback-KnKMP_vb.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/client-DpBL2stg.js +25 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-Cd498TV2.js +435 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-rSf8Vu29.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-CGk8Suyh.js +565 -0
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
- solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
- solace_agent_mesh/client/webui/frontend/static/mockServiceWorker.js +336 -0
- solace_agent_mesh/client/webui/frontend/static/ui-version.json +6 -0
- solace_agent_mesh/common/a2a/events.py +2 -1
- solace_agent_mesh/common/a2a/protocol.py +5 -0
- solace_agent_mesh/common/a2a/types.py +2 -1
- solace_agent_mesh/common/a2a_spec/schemas/artifact_creation_progress.json +23 -6
- solace_agent_mesh/common/a2a_spec/schemas/feedback_event.json +51 -0
- solace_agent_mesh/common/agent_registry.py +38 -11
- solace_agent_mesh/common/data_parts.py +144 -4
- solace_agent_mesh/common/error_handlers.py +83 -0
- solace_agent_mesh/common/exceptions.py +24 -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/rag_dto.py +156 -0
- solace_agent_mesh/common/sac/sam_component_base.py +97 -19
- solace_agent_mesh/common/sam_events/event_service.py +2 -2
- solace_agent_mesh/common/services/employee_service.py +1 -1
- solace_agent_mesh/common/utils/embeds/constants.py +1 -0
- solace_agent_mesh/common/utils/embeds/converter.py +1 -8
- solace_agent_mesh/common/utils/embeds/modifiers.py +4 -28
- solace_agent_mesh/common/utils/embeds/resolver.py +152 -31
- solace_agent_mesh/common/utils/embeds/types.py +9 -0
- solace_agent_mesh/common/utils/log_formatters.py +20 -0
- solace_agent_mesh/common/utils/mime_helpers.py +12 -5
- solace_agent_mesh/common/utils/pydantic_utils.py +90 -3
- 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/config_portal/backend/common.py +12 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-CljP4_mv.js +103 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{components-Rk0n-9cK.js → components-CaC6hG8d.js} +22 -22
- solace_agent_mesh/config_portal/frontend/static/client/assets/{entry.client-mvZjNKiz.js → entry.client-H_TM0YBt.js} +3 -3
- solace_agent_mesh/config_portal/frontend/static/client/assets/{index-DzNKzXrc.js → index-CnFykb2v.js} +16 -16
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-f8439d40.js +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-BIMqslJB.css +1 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-mJmTIdIk.js +10 -0
- solace_agent_mesh/config_portal/frontend/static/client/index.html +3 -3
- solace_agent_mesh/core_a2a/service.py +3 -2
- solace_agent_mesh/gateway/adapter/__init__.py +1 -0
- solace_agent_mesh/gateway/adapter/base.py +170 -0
- solace_agent_mesh/gateway/adapter/types.py +230 -0
- solace_agent_mesh/gateway/base/app.py +39 -2
- solace_agent_mesh/gateway/base/auth_interface.py +103 -0
- solace_agent_mesh/gateway/base/component.py +1027 -151
- 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 +894 -0
- solace_agent_mesh/gateway/http_sse/alembic/env.py +0 -7
- 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.ini +0 -36
- solace_agent_mesh/gateway/http_sse/app.py +40 -11
- solace_agent_mesh/gateway/http_sse/component.py +285 -160
- solace_agent_mesh/gateway/http_sse/dependencies.py +149 -114
- solace_agent_mesh/gateway/http_sse/main.py +68 -450
- solace_agent_mesh/gateway/http_sse/repository/__init__.py +19 -1
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
- 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 +26 -3
- solace_agent_mesh/gateway/http_sse/repository/entities/task.py +7 -0
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +47 -0
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +114 -6
- solace_agent_mesh/gateway/http_sse/repository/models/__init__.py +13 -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 +8 -2
- solace_agent_mesh/gateway/http_sse/repository/models/task_model.py +8 -1
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +172 -0
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +186 -0
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +177 -11
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +86 -2
- solace_agent_mesh/gateway/http_sse/routers/agent_cards.py +38 -7
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +256 -58
- solace_agent_mesh/gateway/http_sse/routers/auth.py +168 -134
- solace_agent_mesh/gateway/http_sse/routers/config.py +302 -8
- 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/project_requests.py +48 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +14 -1
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/project_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +5 -2
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/version_responses.py +31 -0
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +133 -2
- solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/projects.py +768 -0
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +1416 -0
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +167 -7
- solace_agent_mesh/gateway/http_sse/routers/speech.py +355 -0
- solace_agent_mesh/gateway/http_sse/routers/sse.py +131 -8
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +670 -18
- solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/version.py +343 -0
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +92 -9
- 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 +1 -1
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +1 -1
- 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/session_service.py +361 -12
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +354 -4
- solace_agent_mesh/gateway/http_sse/session_manager.py +15 -15
- solace_agent_mesh/gateway/http_sse/sse_manager.py +286 -166
- solace_agent_mesh/gateway/http_sse/utils/artifact_copy_utils.py +370 -0
- solace_agent_mesh/gateway/http_sse/utils/stim_utils.py +41 -1
- solace_agent_mesh/services/__init__.py +0 -0
- solace_agent_mesh/services/platform/__init__.py +29 -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 +154 -0
- solace_agent_mesh/services/platform/api/main.py +314 -0
- solace_agent_mesh/services/platform/api/middleware.py +51 -0
- solace_agent_mesh/services/platform/api/routers/__init__.py +33 -0
- solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
- solace_agent_mesh/services/platform/app.py +215 -0
- solace_agent_mesh/services/platform/component.py +777 -0
- solace_agent_mesh/shared/__init__.py +14 -0
- solace_agent_mesh/shared/api/__init__.py +42 -0
- solace_agent_mesh/shared/auth/__init__.py +26 -0
- solace_agent_mesh/shared/auth/dependencies.py +204 -0
- solace_agent_mesh/shared/auth/middleware.py +347 -0
- solace_agent_mesh/shared/database/__init__.py +20 -0
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/base_repository.py +1 -1
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_exceptions.py +1 -1
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_helpers.py +1 -1
- solace_agent_mesh/shared/exceptions/__init__.py +36 -0
- solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exception_handlers.py +19 -5
- solace_agent_mesh/shared/utils/__init__.py +21 -0
- solace_agent_mesh/templates/logging_config_template.yaml +48 -0
- solace_agent_mesh/templates/main_orchestrator.yaml +12 -1
- solace_agent_mesh/templates/platform.yaml +49 -0
- solace_agent_mesh/templates/plugin_readme_template.md +3 -25
- solace_agent_mesh/templates/plugin_tool_config_template.yaml +109 -0
- solace_agent_mesh/templates/proxy_template.yaml +62 -0
- solace_agent_mesh/templates/webui.yaml +148 -6
- solace_agent_mesh/tools/web_search/__init__.py +18 -0
- solace_agent_mesh/tools/web_search/base.py +84 -0
- solace_agent_mesh/tools/web_search/google_search.py +247 -0
- solace_agent_mesh/tools/web_search/models.py +99 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/METADATA +31 -12
- solace_agent_mesh-1.13.2.dist-info/RECORD +591 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/WHEEL +1 -1
- solace_agent_mesh/agent/adk/adk_llm.txt +0 -232
- solace_agent_mesh/agent/adk/adk_llm_detail.txt +0 -566
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +0 -171
- solace_agent_mesh/agent/adk/models/models_llm.txt +0 -142
- solace_agent_mesh/agent/agent_llm.txt +0 -378
- solace_agent_mesh/agent/agent_llm_detail.txt +0 -1702
- solace_agent_mesh/agent/protocol/protocol_llm.txt +0 -81
- solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +0 -92
- solace_agent_mesh/agent/sac/sac_llm.txt +0 -189
- solace_agent_mesh/agent/sac/sac_llm_detail.txt +0 -200
- solace_agent_mesh/agent/testing/testing_llm.txt +0 -57
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
- solace_agent_mesh/agent/tools/tools_llm.txt +0 -263
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -274
- solace_agent_mesh/agent/utils/utils_llm.txt +0 -138
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.932dd2db.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/17896441.a5e82f9b.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/240a0364.7eac6021.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ac1795d.76654dd9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2be20244.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2cbb060a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/55b7b518.f2b1d1ba.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.eda4bcb2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/631738c7.a8b1ef8b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6a520c9d.ba015d81.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6ad8f0bd.f4b15f3b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/6d84eae0.4a5fbf39.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/71da7b71.38583438.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/8024126c.56e59919.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/81a99df0.07034dd9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/82fbfb93.139a1a1f.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/924ffdeb.8095e148.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/94e8668d.b5ddb7a1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/9bb13469.dd1c9b54.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/a94703ab.0438dbc2.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e6dd091.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/c93cbaa0.eaff365e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/da0b5bad.d08a9466.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/dd817ffc.0aa9630a.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/dd81e2b8.d590bc9e.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/de915948.27d6b065.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e3d9abda.6b9493d0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.e74a984d.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.cf6d6522.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.42f59cdd.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ff4d71f2.15b02f97.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.b12eac43.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.e268214e.js +0 -1
- solace_agent_mesh/assets/docs/lunr-index-1761248203150.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1761248203150.json +0 -1
- solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +0 -250
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +0 -365
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +0 -305
- solace_agent_mesh/client/webui/frontend/static/assets/client-CaY59VuC.js +0 -25
- solace_agent_mesh/client/webui/frontend/static/assets/main-B32noGmR.js +0 -342
- solace_agent_mesh/client/webui/frontend/static/assets/main-DHJKSW1S.css +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/vendor-BEmvJSYz.js +0 -405
- solace_agent_mesh/common/a2a/a2a_llm.txt +0 -182
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -407
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -313
- solace_agent_mesh/common/common_llm.txt +0 -251
- solace_agent_mesh/common/common_llm_detail.txt +0 -2562
- solace_agent_mesh/common/middleware/middleware_llm.txt +0 -174
- solace_agent_mesh/common/middleware/middleware_llm_detail.txt +0 -185
- solace_agent_mesh/common/sac/sac_llm.txt +0 -71
- solace_agent_mesh/common/sac/sac_llm_detail.txt +0 -82
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +0 -104
- solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +0 -115
- solace_agent_mesh/common/services/providers/providers_llm.txt +0 -80
- solace_agent_mesh/common/services/services_llm.txt +0 -363
- solace_agent_mesh/common/services/services_llm_detail.txt +0 -459
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +0 -220
- solace_agent_mesh/common/utils/utils_llm.txt +0 -336
- solace_agent_mesh/common/utils/utils_llm_detail.txt +0 -572
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ByU1X1HD.js +0 -98
- solace_agent_mesh/config_portal/frontend/static/client/assets/manifest-61038fc6.js +0 -1
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-BWvk5-gF.js +0 -10
- solace_agent_mesh/config_portal/frontend/static/client/assets/root-DxRwaWiE.css +0 -1
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +0 -90
- solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +0 -101
- solace_agent_mesh/gateway/base/base_llm.txt +0 -224
- solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
- solace_agent_mesh/gateway/gateway_llm.txt +0 -373
- solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -295
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -155
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +0 -105
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +0 -299
- solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +0 -3278
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +0 -263
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -266
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -340
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -346
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -83
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -107
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -314
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -297
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -285
- solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +0 -47
- solace_agent_mesh/llm.txt +0 -228
- solace_agent_mesh/llm_detail.txt +0 -2835
- solace_agent_mesh/solace_agent_mesh_llm.txt +0 -362
- solace_agent_mesh/solace_agent_mesh_llm_detail.txt +0 -8599
- solace_agent_mesh/templates/logging_config_template.ini +0 -45
- solace_agent_mesh/templates/templates_llm.txt +0 -147
- solace_agent_mesh-1.6.1.dist-info/RECORD +0 -525
- /solace_agent_mesh/assets/docs/assets/js/{main.b12eac43.js.LICENSE.txt → main.d634009f.js.LICENSE.txt} +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/auth_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/pagination.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/response_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/error_dto.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exceptions.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/enums.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/timestamp_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/types.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/utils.py +0 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.6.1.dist-info → solace_agent_mesh-1.13.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Utility functions for copying project artifacts to sessions.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
from datetime import datetime, timezone
|
|
7
|
+
from typing import TYPE_CHECKING
|
|
8
|
+
|
|
9
|
+
from sqlalchemy.orm import Session as DbSession
|
|
10
|
+
|
|
11
|
+
from ....agent.utils.artifact_helpers import (
|
|
12
|
+
get_artifact_info_list,
|
|
13
|
+
load_artifact_content_or_metadata,
|
|
14
|
+
save_artifact_with_metadata,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from ....gateway.http_sse.component import WebUIBackendComponent
|
|
19
|
+
from ....gateway.http_sse.services.project_service import ProjectService
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
from google.adk.artifacts import BaseArtifactService
|
|
23
|
+
except ImportError:
|
|
24
|
+
class BaseArtifactService:
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
log = logging.getLogger(__name__)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
async def has_pending_project_context(
|
|
32
|
+
user_id: str,
|
|
33
|
+
session_id: str,
|
|
34
|
+
artifact_service: BaseArtifactService,
|
|
35
|
+
app_name: str,
|
|
36
|
+
db: DbSession,
|
|
37
|
+
) -> bool:
|
|
38
|
+
"""
|
|
39
|
+
Check if session has any artifacts with pending project context.
|
|
40
|
+
|
|
41
|
+
This is used to determine if we should inject full project context
|
|
42
|
+
on the next user message after a session has been moved to a project.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
user_id: User ID
|
|
46
|
+
session_id: Session ID
|
|
47
|
+
artifact_service: Artifact service instance
|
|
48
|
+
app_name: Application name for artifact storage
|
|
49
|
+
db: Database session
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
True if any artifacts have project_context_pending=True metadata
|
|
53
|
+
"""
|
|
54
|
+
try:
|
|
55
|
+
session_artifacts = await get_artifact_info_list(
|
|
56
|
+
artifact_service=artifact_service,
|
|
57
|
+
app_name=app_name,
|
|
58
|
+
user_id=user_id,
|
|
59
|
+
session_id=session_id,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# Check each artifact's metadata to see if it has pending project context
|
|
63
|
+
for artifact_info in session_artifacts:
|
|
64
|
+
loaded_metadata = await load_artifact_content_or_metadata(
|
|
65
|
+
artifact_service=artifact_service,
|
|
66
|
+
app_name=app_name,
|
|
67
|
+
user_id=user_id,
|
|
68
|
+
session_id=session_id,
|
|
69
|
+
filename=artifact_info.filename,
|
|
70
|
+
load_metadata_only=True,
|
|
71
|
+
version="latest",
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
if loaded_metadata.get("status") == "success":
|
|
75
|
+
metadata = loaded_metadata.get("metadata", {})
|
|
76
|
+
if metadata.get("project_context_pending"):
|
|
77
|
+
return True
|
|
78
|
+
|
|
79
|
+
return False
|
|
80
|
+
except Exception as e:
|
|
81
|
+
log.warning("Failed to check for pending project context: %s", e)
|
|
82
|
+
return False
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
async def clear_pending_project_context(
|
|
86
|
+
user_id: str,
|
|
87
|
+
session_id: str,
|
|
88
|
+
artifact_service: BaseArtifactService,
|
|
89
|
+
app_name: str,
|
|
90
|
+
db: DbSession,
|
|
91
|
+
log_prefix: str = "",
|
|
92
|
+
) -> None:
|
|
93
|
+
"""
|
|
94
|
+
Clear the project_context_pending flag from all artifacts in a session.
|
|
95
|
+
|
|
96
|
+
This should be called after project context has been injected to the agent.
|
|
97
|
+
|
|
98
|
+
Args:
|
|
99
|
+
user_id: User ID
|
|
100
|
+
session_id: Session ID
|
|
101
|
+
artifact_service: Artifact service instance
|
|
102
|
+
app_name: Application name for artifact storage
|
|
103
|
+
db: Database session
|
|
104
|
+
log_prefix: Optional prefix for log messages
|
|
105
|
+
"""
|
|
106
|
+
try:
|
|
107
|
+
session_artifacts = await get_artifact_info_list(
|
|
108
|
+
artifact_service=artifact_service,
|
|
109
|
+
app_name=app_name,
|
|
110
|
+
user_id=user_id,
|
|
111
|
+
session_id=session_id,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
for artifact_info in session_artifacts:
|
|
115
|
+
loaded_metadata = await load_artifact_content_or_metadata(
|
|
116
|
+
artifact_service=artifact_service,
|
|
117
|
+
app_name=app_name,
|
|
118
|
+
user_id=user_id,
|
|
119
|
+
session_id=session_id,
|
|
120
|
+
filename=artifact_info.filename,
|
|
121
|
+
load_metadata_only=True,
|
|
122
|
+
version="latest",
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
if loaded_metadata.get("status") == "success":
|
|
126
|
+
metadata = loaded_metadata.get("metadata", {})
|
|
127
|
+
|
|
128
|
+
# Only update if the artifact has the pending flag
|
|
129
|
+
if metadata.get("project_context_pending"):
|
|
130
|
+
log.debug(
|
|
131
|
+
"%sClearing project_context_pending flag for artifact %s",
|
|
132
|
+
log_prefix,
|
|
133
|
+
artifact_info.filename,
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
# Remove the pending flag
|
|
137
|
+
metadata.pop("project_context_pending", None)
|
|
138
|
+
|
|
139
|
+
loaded_artifact = await load_artifact_content_or_metadata(
|
|
140
|
+
artifact_service=artifact_service,
|
|
141
|
+
app_name=app_name,
|
|
142
|
+
user_id=user_id,
|
|
143
|
+
session_id=session_id,
|
|
144
|
+
filename=artifact_info.filename,
|
|
145
|
+
return_raw_bytes=True,
|
|
146
|
+
version="latest",
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
if loaded_artifact.get("status") == "success":
|
|
150
|
+
await save_artifact_with_metadata(
|
|
151
|
+
artifact_service=artifact_service,
|
|
152
|
+
app_name=app_name,
|
|
153
|
+
user_id=user_id,
|
|
154
|
+
session_id=session_id,
|
|
155
|
+
filename=artifact_info.filename,
|
|
156
|
+
content_bytes=loaded_artifact.get("raw_bytes"),
|
|
157
|
+
mime_type=loaded_artifact.get("mime_type"),
|
|
158
|
+
metadata_dict=metadata,
|
|
159
|
+
timestamp=datetime.now(timezone.utc),
|
|
160
|
+
)
|
|
161
|
+
except Exception as e:
|
|
162
|
+
log.warning("%sFailed to clear pending project context flags: %s", log_prefix, e)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
async def copy_project_artifacts_to_session(
|
|
166
|
+
project_id: str,
|
|
167
|
+
user_id: str,
|
|
168
|
+
session_id: str,
|
|
169
|
+
project_service: "ProjectService",
|
|
170
|
+
component: "WebUIBackendComponent",
|
|
171
|
+
db: "DbSession",
|
|
172
|
+
log_prefix: str = "",
|
|
173
|
+
) -> tuple[int, list[str]]:
|
|
174
|
+
"""
|
|
175
|
+
Copy all artifacts from a project to a session.
|
|
176
|
+
|
|
177
|
+
This function handles:
|
|
178
|
+
- Loading artifacts from the project storage
|
|
179
|
+
- Checking which artifacts already exist in the session
|
|
180
|
+
- Copying new artifacts to the session
|
|
181
|
+
- Setting the 'source' metadata field to 'project'
|
|
182
|
+
|
|
183
|
+
Args:
|
|
184
|
+
project_id: ID of the project containing artifacts
|
|
185
|
+
user_id: ID of the user (for session artifact storage)
|
|
186
|
+
session_id: ID of the session to copy artifacts to
|
|
187
|
+
project_service: ProjectService instance for accessing projects
|
|
188
|
+
component: WebUIBackendComponent for accessing artifact service
|
|
189
|
+
db: Database session to use for queries
|
|
190
|
+
log_prefix: Optional prefix for log messages
|
|
191
|
+
|
|
192
|
+
Returns:
|
|
193
|
+
Tuple of (artifacts_copied_count, list_of_new_artifact_names)
|
|
194
|
+
|
|
195
|
+
Raises:
|
|
196
|
+
Exception: If project or artifact service is not available
|
|
197
|
+
"""
|
|
198
|
+
if not project_id:
|
|
199
|
+
log.debug("%sNo project_id provided, skipping artifact copy", log_prefix)
|
|
200
|
+
return 0, []
|
|
201
|
+
|
|
202
|
+
if db is None:
|
|
203
|
+
log.warning("%sArtifact copy skipped: database session not provided", log_prefix)
|
|
204
|
+
return 0, []
|
|
205
|
+
|
|
206
|
+
try:
|
|
207
|
+
project = project_service.get_project(db, project_id, user_id)
|
|
208
|
+
if not project:
|
|
209
|
+
log.warning("%sProject %s not found for user %s", log_prefix, project_id, user_id)
|
|
210
|
+
return 0, []
|
|
211
|
+
|
|
212
|
+
artifact_service = component.get_shared_artifact_service()
|
|
213
|
+
if not artifact_service:
|
|
214
|
+
log.warning("%sArtifact service not available", log_prefix)
|
|
215
|
+
return 0, []
|
|
216
|
+
|
|
217
|
+
source_user_id = project.user_id
|
|
218
|
+
project_artifacts_session_id = f"project-{project.id}"
|
|
219
|
+
|
|
220
|
+
log.info(
|
|
221
|
+
"%sChecking for artifacts in project %s (storage session: %s)",
|
|
222
|
+
log_prefix,
|
|
223
|
+
project.id,
|
|
224
|
+
project_artifacts_session_id,
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
# Get list of artifacts in the project
|
|
228
|
+
project_artifacts = await get_artifact_info_list(
|
|
229
|
+
artifact_service=artifact_service,
|
|
230
|
+
app_name=project_service.app_name,
|
|
231
|
+
user_id=source_user_id,
|
|
232
|
+
session_id=project_artifacts_session_id,
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
if not project_artifacts:
|
|
236
|
+
log.info("%sNo artifacts found in project %s", log_prefix, project.id)
|
|
237
|
+
return 0, []
|
|
238
|
+
|
|
239
|
+
log.info(
|
|
240
|
+
"%sFound %d artifacts in project %s to process",
|
|
241
|
+
log_prefix,
|
|
242
|
+
len(project_artifacts),
|
|
243
|
+
project.id,
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
try:
|
|
247
|
+
session_artifacts = await get_artifact_info_list(
|
|
248
|
+
artifact_service=artifact_service,
|
|
249
|
+
app_name=project_service.app_name,
|
|
250
|
+
user_id=user_id,
|
|
251
|
+
session_id=session_id,
|
|
252
|
+
)
|
|
253
|
+
session_artifact_names = {art.filename for art in session_artifacts}
|
|
254
|
+
log.debug(
|
|
255
|
+
"%sSession %s currently has %d artifacts",
|
|
256
|
+
log_prefix,
|
|
257
|
+
session_id,
|
|
258
|
+
len(session_artifact_names),
|
|
259
|
+
)
|
|
260
|
+
except Exception as e:
|
|
261
|
+
log.warning(
|
|
262
|
+
"%sFailed to get session artifacts, will copy all project artifacts: %s",
|
|
263
|
+
log_prefix,
|
|
264
|
+
e,
|
|
265
|
+
)
|
|
266
|
+
session_artifact_names = set()
|
|
267
|
+
|
|
268
|
+
artifacts_copied = 0
|
|
269
|
+
new_artifact_names = []
|
|
270
|
+
|
|
271
|
+
for artifact_info in project_artifacts:
|
|
272
|
+
# Skip if artifact already exists in session
|
|
273
|
+
if artifact_info.filename in session_artifact_names:
|
|
274
|
+
log.debug(
|
|
275
|
+
"%sSkipping artifact %s - already exists in session",
|
|
276
|
+
log_prefix,
|
|
277
|
+
artifact_info.filename,
|
|
278
|
+
)
|
|
279
|
+
continue
|
|
280
|
+
|
|
281
|
+
new_artifact_names.append(artifact_info.filename)
|
|
282
|
+
|
|
283
|
+
log.info(
|
|
284
|
+
"%sCopying artifact %s to session %s",
|
|
285
|
+
log_prefix,
|
|
286
|
+
artifact_info.filename,
|
|
287
|
+
session_id,
|
|
288
|
+
)
|
|
289
|
+
|
|
290
|
+
try:
|
|
291
|
+
# Load artifact content from project storage
|
|
292
|
+
loaded_artifact = await load_artifact_content_or_metadata(
|
|
293
|
+
artifact_service=artifact_service,
|
|
294
|
+
app_name=project_service.app_name,
|
|
295
|
+
user_id=source_user_id,
|
|
296
|
+
session_id=project_artifacts_session_id,
|
|
297
|
+
filename=artifact_info.filename,
|
|
298
|
+
return_raw_bytes=True,
|
|
299
|
+
version="latest",
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
# Load the full metadata separately
|
|
303
|
+
loaded_metadata = await load_artifact_content_or_metadata(
|
|
304
|
+
artifact_service=artifact_service,
|
|
305
|
+
app_name=project_service.app_name,
|
|
306
|
+
user_id=source_user_id,
|
|
307
|
+
session_id=project_artifacts_session_id,
|
|
308
|
+
filename=artifact_info.filename,
|
|
309
|
+
load_metadata_only=True,
|
|
310
|
+
version="latest",
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
# Save a copy to the current chat session
|
|
314
|
+
if loaded_artifact.get("status") == "success":
|
|
315
|
+
full_metadata = (
|
|
316
|
+
loaded_metadata.get("metadata", {})
|
|
317
|
+
if loaded_metadata.get("status") == "success"
|
|
318
|
+
else {}
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
# This flag will be checked on the next user message to inject full context
|
|
322
|
+
full_metadata["project_context_pending"] = True
|
|
323
|
+
|
|
324
|
+
await save_artifact_with_metadata(
|
|
325
|
+
artifact_service=artifact_service,
|
|
326
|
+
app_name=project_service.app_name,
|
|
327
|
+
user_id=user_id,
|
|
328
|
+
session_id=session_id,
|
|
329
|
+
filename=artifact_info.filename,
|
|
330
|
+
content_bytes=loaded_artifact.get("raw_bytes"),
|
|
331
|
+
mime_type=loaded_artifact.get("mime_type"),
|
|
332
|
+
metadata_dict=full_metadata,
|
|
333
|
+
timestamp=datetime.now(timezone.utc),
|
|
334
|
+
)
|
|
335
|
+
artifacts_copied += 1
|
|
336
|
+
log.info(
|
|
337
|
+
"%sSuccessfully copied artifact %s to session",
|
|
338
|
+
log_prefix,
|
|
339
|
+
artifact_info.filename,
|
|
340
|
+
)
|
|
341
|
+
else:
|
|
342
|
+
log.warning(
|
|
343
|
+
"%sFailed to load artifact %s: %s",
|
|
344
|
+
log_prefix,
|
|
345
|
+
artifact_info.filename,
|
|
346
|
+
loaded_artifact.get("status"),
|
|
347
|
+
)
|
|
348
|
+
except Exception as e:
|
|
349
|
+
log.error(
|
|
350
|
+
"%sError copying artifact %s to session: %s",
|
|
351
|
+
log_prefix,
|
|
352
|
+
artifact_info.filename,
|
|
353
|
+
e,
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
if artifacts_copied > 0:
|
|
357
|
+
log.info(
|
|
358
|
+
"%sCopied %d new artifacts to session %s",
|
|
359
|
+
log_prefix,
|
|
360
|
+
artifacts_copied,
|
|
361
|
+
session_id,
|
|
362
|
+
)
|
|
363
|
+
else:
|
|
364
|
+
log.debug("%sNo new artifacts to copy to session %s", log_prefix, session_id)
|
|
365
|
+
|
|
366
|
+
return artifacts_copied, new_artifact_names
|
|
367
|
+
|
|
368
|
+
except Exception as e:
|
|
369
|
+
log.warning("%sFailed to copy project artifacts to session: %s", log_prefix, e)
|
|
370
|
+
return 0, []
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Utility functions for creating .stim file structures.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import List
|
|
5
|
+
from typing import Dict, List
|
|
6
6
|
|
|
7
7
|
from ..repository.entities import Task, TaskEvent
|
|
8
8
|
|
|
@@ -30,3 +30,43 @@ def create_stim_from_task_data(task: Task, events: List[TaskEvent]) -> dict:
|
|
|
30
30
|
},
|
|
31
31
|
"invocation_flow": [event.model_dump() for event in events],
|
|
32
32
|
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def create_stim_from_task_hierarchy(
|
|
36
|
+
tasks: Dict[str, Task], all_events: Dict[str, List[TaskEvent]], root_task_id: str
|
|
37
|
+
) -> dict:
|
|
38
|
+
"""
|
|
39
|
+
Formats a task hierarchy (parent + children) and all their events into the .stim file structure.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
tasks: Dictionary of task_id -> Task entity for all tasks in hierarchy.
|
|
43
|
+
all_events: Dictionary of task_id -> List[TaskEvent] for all tasks.
|
|
44
|
+
root_task_id: The root task ID (used for invocation_details).
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
A dictionary representing the .stim file content with all task events.
|
|
48
|
+
"""
|
|
49
|
+
root_task = tasks[root_task_id]
|
|
50
|
+
|
|
51
|
+
# Collect all events from all tasks and sort by created_time
|
|
52
|
+
combined_events = []
|
|
53
|
+
for task_id, events in all_events.items():
|
|
54
|
+
combined_events.extend(events)
|
|
55
|
+
|
|
56
|
+
# Sort all events chronologically
|
|
57
|
+
combined_events.sort(key=lambda e: e.created_time)
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
"invocation_details": {
|
|
61
|
+
"log_file_version": "2.0", # New version for gateway-generated logs
|
|
62
|
+
"task_id": root_task.id,
|
|
63
|
+
"user_id": root_task.user_id,
|
|
64
|
+
"start_time": root_task.start_time,
|
|
65
|
+
"end_time": root_task.end_time,
|
|
66
|
+
"status": root_task.status,
|
|
67
|
+
"initial_request_text": root_task.initial_request_text,
|
|
68
|
+
"includes_child_tasks": len(tasks) > 1,
|
|
69
|
+
"total_tasks": len(tasks),
|
|
70
|
+
},
|
|
71
|
+
"invocation_flow": [event.model_dump() for event in combined_events],
|
|
72
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Platform Service for Solace Agent Mesh.
|
|
3
|
+
|
|
4
|
+
ARCHITECTURE: Service vs Gateway
|
|
5
|
+
--------------------------------
|
|
6
|
+
SERVICES provide internal platform functionality (this component).
|
|
7
|
+
GATEWAYS handle external communication channels (http_sse, slack, webhook, etc.).
|
|
8
|
+
|
|
9
|
+
Platform Service Responsibilities:
|
|
10
|
+
- REST API for platform configuration management
|
|
11
|
+
- Agent Builder (CRUD operations on agents)
|
|
12
|
+
- Connector management (CRUD operations on connectors)
|
|
13
|
+
- Toolset discovery and management
|
|
14
|
+
- Deployment orchestration (deploy/update/undeploy agents)
|
|
15
|
+
- AI Assistant (AI-powered configuration help)
|
|
16
|
+
- Deployer heartbeat monitoring (track deployer availability)
|
|
17
|
+
- Background deployment status checking (verify agent deployments succeed)
|
|
18
|
+
|
|
19
|
+
Message Communication (Direct Messaging - Not A2A Protocol):
|
|
20
|
+
- PUBLISHES: Deployment commands (direct publishing) to deployer ({namespace}/deployer/agent/...)
|
|
21
|
+
- RECEIVES: Deployer heartbeats ({namespace}/deployer/heartbeat)
|
|
22
|
+
- RECEIVES: Agent cards for deployment monitoring ({namespace}/a2a/agent-cards)
|
|
23
|
+
|
|
24
|
+
What Platform Service is NOT:
|
|
25
|
+
- NOT a chat interface (no user sessions)
|
|
26
|
+
- NOT for task submission to agents (no orchestration of user tasks)
|
|
27
|
+
- NOT for artifact management (no chat artifacts or embeds)
|
|
28
|
+
- NOT for end-user communication (admin/platform operations only)
|
|
29
|
+
"""
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
from alembic import context
|
|
2
|
+
from sqlalchemy import engine_from_config, pool
|
|
3
|
+
from sqlalchemy.ext.declarative import declarative_base
|
|
4
|
+
|
|
5
|
+
# this is the Alembic Config object, which provides
|
|
6
|
+
# access to the values within the .ini file in use.
|
|
7
|
+
config = context.config
|
|
8
|
+
|
|
9
|
+
# Create a placeholder Base for future community platform models
|
|
10
|
+
# When community models are added, import them here to ensure they are registered
|
|
11
|
+
Base = declarative_base()
|
|
12
|
+
|
|
13
|
+
# Import all models here to ensure they are registered with the Base
|
|
14
|
+
# Example:
|
|
15
|
+
# from solace_agent_mesh.services.platform.models.example_model import ExampleModel
|
|
16
|
+
|
|
17
|
+
target_metadata = Base.metadata
|
|
18
|
+
|
|
19
|
+
# other values from the config, defined by the needs of env.py,
|
|
20
|
+
# can be acquired:
|
|
21
|
+
# my_important_option = config.get_main_option("my_important_option")
|
|
22
|
+
# ... etc.
|
|
23
|
+
|
|
24
|
+
SQLALCHEMY_URL_KEY = "sqlalchemy.url"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def run_migrations_offline() -> None:
|
|
28
|
+
"""Run migrations in 'offline' mode.
|
|
29
|
+
|
|
30
|
+
This configures the context with just a URL
|
|
31
|
+
and not an Engine, though an Engine is acceptable
|
|
32
|
+
here as well. By skipping the Engine creation
|
|
33
|
+
we don't even need a DBAPI to be available.
|
|
34
|
+
|
|
35
|
+
Calls to context.execute() here emit the given string to the
|
|
36
|
+
script output.
|
|
37
|
+
|
|
38
|
+
"""
|
|
39
|
+
url = config.get_main_option(SQLALCHEMY_URL_KEY)
|
|
40
|
+
context.configure(
|
|
41
|
+
url=url,
|
|
42
|
+
target_metadata=target_metadata,
|
|
43
|
+
literal_binds=True,
|
|
44
|
+
dialect_opts={"paramstyle": "named"},
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
with context.begin_transaction():
|
|
48
|
+
context.run_migrations()
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def run_migrations_online() -> None:
|
|
52
|
+
"""Run migrations in 'online' mode.
|
|
53
|
+
|
|
54
|
+
In this scenario we need to create an Engine
|
|
55
|
+
and associate a connection with the context.
|
|
56
|
+
|
|
57
|
+
"""
|
|
58
|
+
# Get the database URL from the Alembic config
|
|
59
|
+
url = config.get_main_option(SQLALCHEMY_URL_KEY)
|
|
60
|
+
if not url:
|
|
61
|
+
raise ValueError(
|
|
62
|
+
f"Database URL is not set. Please set {SQLALCHEMY_URL_KEY} in alembic.ini or via command line."
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
# Create a configuration dictionary for the engine
|
|
66
|
+
# This ensures that the URL is correctly picked up by engine_from_config
|
|
67
|
+
engine_config = {SQLALCHEMY_URL_KEY: url}
|
|
68
|
+
|
|
69
|
+
connectable = engine_from_config(
|
|
70
|
+
engine_config,
|
|
71
|
+
prefix="sqlalchemy.",
|
|
72
|
+
poolclass=pool.NullPool,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
with connectable.connect() as connection:
|
|
76
|
+
context.configure(connection=connection, target_metadata=target_metadata)
|
|
77
|
+
|
|
78
|
+
with context.begin_transaction():
|
|
79
|
+
context.run_migrations()
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
if context.is_offline_mode():
|
|
83
|
+
run_migrations_offline()
|
|
84
|
+
else:
|
|
85
|
+
run_migrations_online()
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""${message}
|
|
2
|
+
|
|
3
|
+
Revision ID: ${up_revision}
|
|
4
|
+
Revises: ${down_revision | comma,n}
|
|
5
|
+
Create Date: ${create_date}
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from typing import Sequence, Union
|
|
9
|
+
|
|
10
|
+
from alembic import op
|
|
11
|
+
import sqlalchemy as sa
|
|
12
|
+
${imports if imports else ""}
|
|
13
|
+
|
|
14
|
+
# revision identifiers, used by Alembic.
|
|
15
|
+
revision: str = ${repr(up_revision)}
|
|
16
|
+
down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)}
|
|
17
|
+
branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)}
|
|
18
|
+
depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def upgrade() -> None:
|
|
22
|
+
"""Upgrade schema."""
|
|
23
|
+
${upgrades if upgrades else "pass"}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def downgrade() -> None:
|
|
27
|
+
"""Downgrade schema."""
|
|
28
|
+
${downgrades if downgrades else "pass"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# A generic, single database configuration.
|
|
2
|
+
|
|
3
|
+
[alembic]
|
|
4
|
+
# path to migration scripts.
|
|
5
|
+
# this is typically a path given in POSIX (e.g. forward slashes)
|
|
6
|
+
# format, relative to the token %(here)s which refers to the location of this
|
|
7
|
+
# ini file
|
|
8
|
+
script_location = %(here)s/alembic
|
|
9
|
+
|
|
10
|
+
# Template used to generate migration file names
|
|
11
|
+
# Format: YYYYMMDD_revision_description
|
|
12
|
+
file_template = %%(year)d%%(month).2d%%(day).2d_%%(rev)s_%%(slug)s
|
|
13
|
+
|
|
14
|
+
# sys.path path, will be prepended to sys.path if present.
|
|
15
|
+
# defaults to the current working directory. for multiple paths, the path separator
|
|
16
|
+
# is defined by "path_separator" below.
|
|
17
|
+
prepend_sys_path = .
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# timezone to use when rendering the date within the migration file
|
|
21
|
+
# as well as the filename.
|
|
22
|
+
# If specified, requires the python>=3.9 or backports.zoneinfo library and tzdata library.
|
|
23
|
+
# Any required deps can installed by adding `alembic[tz]` to the pip requirements
|
|
24
|
+
# string value is passed to ZoneInfo()
|
|
25
|
+
# leave blank for localtime
|
|
26
|
+
# timezone =
|
|
27
|
+
|
|
28
|
+
# max length of characters to apply to the "slug" field
|
|
29
|
+
# truncate_slug_length = 40
|
|
30
|
+
|
|
31
|
+
# set to 'true' to run the environment during
|
|
32
|
+
# the 'revision' command, regardless of autogenerate
|
|
33
|
+
# revision_environment = false
|
|
34
|
+
|
|
35
|
+
# set to 'true' to allow .pyc and .pyo files without
|
|
36
|
+
# a source .py file to be detected as revisions in the
|
|
37
|
+
# versions/ directory
|
|
38
|
+
# sourceless = false
|
|
39
|
+
|
|
40
|
+
# version location specification; This defaults
|
|
41
|
+
# to <script_location>/versions. When using multiple version
|
|
42
|
+
# directories, initial revisions must be specified with --version-path.
|
|
43
|
+
# The path separator used here should be the separator specified by "path_separator"
|
|
44
|
+
# below.
|
|
45
|
+
# version_locations = %(here)s/bar:%(here)s/bat:%(here)s/alembic/versions
|
|
46
|
+
|
|
47
|
+
# path_separator; This indicates what character is used to split lists of file
|
|
48
|
+
# paths, including version_locations and prepend_sys_path within configparser
|
|
49
|
+
# files such as alembic.ini.
|
|
50
|
+
# The default rendered in new alembic.ini files is "os", which uses os.pathsep
|
|
51
|
+
# to provide os-dependent path splitting.
|
|
52
|
+
#
|
|
53
|
+
# Note that in order to support legacy alembic.ini files, this default does NOT
|
|
54
|
+
# take place if path_separator is not present in alembic.ini. If this
|
|
55
|
+
# option is omitted entirely, fallback logic is as follows:
|
|
56
|
+
#
|
|
57
|
+
# 1. Parsing of the version_locations option falls back to using the legacy
|
|
58
|
+
# "version_path_separator" key, which if absent then falls back to the legacy
|
|
59
|
+
# behavior of splitting on spaces and/or commas.
|
|
60
|
+
# 2. Parsing of the prepend_sys_path option falls back to the legacy
|
|
61
|
+
# behavior of splitting on spaces, commas, or colons.
|
|
62
|
+
#
|
|
63
|
+
# Valid values for path_separator are:
|
|
64
|
+
#
|
|
65
|
+
# path_separator = :
|
|
66
|
+
# path_separator = ;
|
|
67
|
+
# path_separator = space
|
|
68
|
+
# path_separator = newline
|
|
69
|
+
#
|
|
70
|
+
# Use os.pathsep. Default configuration used for new projects.
|
|
71
|
+
path_separator = os
|
|
72
|
+
|
|
73
|
+
# set to 'true' to search source files recursively
|
|
74
|
+
# in each "version_locations" directory
|
|
75
|
+
# new in Alembic version 1.10
|
|
76
|
+
# recursive_version_locations = false
|
|
77
|
+
|
|
78
|
+
# the output encoding used when revision files
|
|
79
|
+
# are written from script.py.mako
|
|
80
|
+
# output_encoding = utf-8
|
|
81
|
+
|
|
82
|
+
# database URL. This is consumed by the user-maintained env.py script only.
|
|
83
|
+
# other means of configuring database URLs may be customized within the env.py
|
|
84
|
+
# file.
|
|
85
|
+
# sqlalchemy.url = sqlite:////Users/mradwan/solace_agent_mesh.db
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
[post_write_hooks]
|
|
89
|
+
# post_write_hooks defines scripts or Python functions that are run
|
|
90
|
+
# on newly generated revision scripts. See the documentation for further
|
|
91
|
+
# detail and examples
|
|
92
|
+
|
|
93
|
+
# format using "black" - use the console_scripts runner, against the "black" entrypoint
|
|
94
|
+
# hooks = black
|
|
95
|
+
# black.type = console_scripts
|
|
96
|
+
# black.entrypoint = black
|
|
97
|
+
# black.options = -l 79 REVISION_SCRIPT_FILENAME
|
|
98
|
+
|
|
99
|
+
# lint with attempts to fix using "ruff" - use the module runner, against the "ruff" module
|
|
100
|
+
# hooks = ruff
|
|
101
|
+
# ruff.type = module
|
|
102
|
+
# ruff.module = ruff
|
|
103
|
+
# ruff.options = check --fix REVISION_SCRIPT_FILENAME
|
|
104
|
+
|
|
105
|
+
# Alternatively, use the exec runner to execute a binary found on your PATH
|
|
106
|
+
# hooks = ruff
|
|
107
|
+
# ruff.type = exec
|
|
108
|
+
# ruff.executable = ruff
|
|
109
|
+
# ruff.options = check --fix REVISION_SCRIPT_FILENAME
|