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
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from logging.config import fileConfig
|
|
2
|
-
|
|
3
1
|
from alembic import context
|
|
4
2
|
from sqlalchemy import engine_from_config, pool
|
|
5
3
|
|
|
@@ -7,11 +5,6 @@ from sqlalchemy import engine_from_config, pool
|
|
|
7
5
|
# access to the values within the .ini file in use.
|
|
8
6
|
config = context.config
|
|
9
7
|
|
|
10
|
-
# Interpret the config file for Python logging.
|
|
11
|
-
# This line sets up loggers basically.
|
|
12
|
-
if config.config_file_name is not None:
|
|
13
|
-
fileConfig(config.config_file_name)
|
|
14
|
-
|
|
15
8
|
# add your model's MetaData object here
|
|
16
9
|
# for 'autogenerate' support
|
|
17
10
|
from solace_agent_mesh.gateway.http_sse.repository.models.base import Base
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"""Add project_users table for multi-user project access
|
|
2
|
+
|
|
3
|
+
Revision ID: 20251023_add_project_users
|
|
4
|
+
Revises: 20251023_remove_created_by_user_id
|
|
5
|
+
Create Date: 2025-10-23
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from typing import Sequence, Union
|
|
9
|
+
from alembic import op
|
|
10
|
+
import sqlalchemy as sa
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision: str = 'add_project_users_001'
|
|
15
|
+
down_revision: Union[str, None] = 'add_projects_table_001'
|
|
16
|
+
branch_labels: Union[str, Sequence[str], None] = None
|
|
17
|
+
depends_on: Union[str, Sequence[str], None] = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade() -> None:
|
|
21
|
+
"""
|
|
22
|
+
Create project_users table to enable multi-user access to projects.
|
|
23
|
+
|
|
24
|
+
This table tracks which users have access to which projects and their roles.
|
|
25
|
+
It supports future features for collaborative project management.
|
|
26
|
+
"""
|
|
27
|
+
# Create project_users table
|
|
28
|
+
op.create_table(
|
|
29
|
+
'project_users',
|
|
30
|
+
sa.Column('id', sa.String(), nullable=False),
|
|
31
|
+
sa.Column('project_id', sa.String(), nullable=False),
|
|
32
|
+
sa.Column('user_id', sa.String(), nullable=False),
|
|
33
|
+
sa.Column('role', sa.String(), nullable=False),
|
|
34
|
+
sa.Column('added_at', sa.BigInteger(), nullable=False),
|
|
35
|
+
sa.Column('added_by_user_id', sa.String(), nullable=False),
|
|
36
|
+
sa.PrimaryKeyConstraint('id'),
|
|
37
|
+
sa.ForeignKeyConstraint(['project_id'], ['projects.id'], ondelete='CASCADE'),
|
|
38
|
+
sa.UniqueConstraint('project_id', 'user_id', name='uq_project_user')
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# Create indexes for efficient queries
|
|
42
|
+
op.create_index(
|
|
43
|
+
'ix_project_users_project_id',
|
|
44
|
+
'project_users',
|
|
45
|
+
['project_id']
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
op.create_index(
|
|
49
|
+
'ix_project_users_user_id',
|
|
50
|
+
'project_users',
|
|
51
|
+
['user_id']
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# Create composite index for common query pattern (user accessing specific project)
|
|
55
|
+
op.create_index(
|
|
56
|
+
'ix_project_users_user_project',
|
|
57
|
+
'project_users',
|
|
58
|
+
['user_id', 'project_id']
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def downgrade() -> None:
|
|
63
|
+
"""
|
|
64
|
+
Remove project_users table and related indexes.
|
|
65
|
+
"""
|
|
66
|
+
# Drop indexes first
|
|
67
|
+
op.drop_index('ix_project_users_user_project', table_name='project_users')
|
|
68
|
+
op.drop_index('ix_project_users_user_id', table_name='project_users')
|
|
69
|
+
op.drop_index('ix_project_users_project_id', table_name='project_users')
|
|
70
|
+
|
|
71
|
+
# Drop the table
|
|
72
|
+
op.drop_table('project_users')
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"""Add soft delete and search support for sessions and projects
|
|
2
|
+
|
|
3
|
+
Revision ID: add_soft_delete_search_001
|
|
4
|
+
Revises: remove_is_global_001
|
|
5
|
+
Create Date: 2025-10-23 16:20:00.000000
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from typing import Sequence, Union
|
|
9
|
+
from alembic import op
|
|
10
|
+
import sqlalchemy as sa
|
|
11
|
+
from sqlalchemy import inspect
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision: str = 'soft_del_search_001'
|
|
15
|
+
down_revision: Union[str, Sequence[str], None] = 'add_project_users_001'
|
|
16
|
+
branch_labels: Union[str, Sequence[str], None] = None
|
|
17
|
+
depends_on: Union[str, Sequence[str], None] = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade() -> None:
|
|
21
|
+
"""Add soft delete columns and search indexes."""
|
|
22
|
+
bind = op.get_bind()
|
|
23
|
+
inspector = inspect(bind)
|
|
24
|
+
|
|
25
|
+
# Add soft delete columns to sessions table
|
|
26
|
+
if 'sessions' in inspector.get_table_names():
|
|
27
|
+
sessions_columns = [col['name'] for col in inspector.get_columns('sessions')]
|
|
28
|
+
|
|
29
|
+
if 'deleted_at' not in sessions_columns:
|
|
30
|
+
op.add_column('sessions', sa.Column('deleted_at', sa.BigInteger(), nullable=True))
|
|
31
|
+
|
|
32
|
+
if 'deleted_by' not in sessions_columns:
|
|
33
|
+
op.add_column('sessions', sa.Column('deleted_by', sa.String(), nullable=True))
|
|
34
|
+
|
|
35
|
+
# Create index on deleted_at for efficient filtering
|
|
36
|
+
try:
|
|
37
|
+
op.create_index('ix_sessions_deleted_at', 'sessions', ['deleted_at'])
|
|
38
|
+
except Exception:
|
|
39
|
+
pass # Index might already exist
|
|
40
|
+
|
|
41
|
+
# Create composite index for user queries with soft delete
|
|
42
|
+
try:
|
|
43
|
+
op.create_index('ix_sessions_user_deleted', 'sessions', ['user_id', 'deleted_at'])
|
|
44
|
+
except Exception:
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
# Add soft delete columns to projects table
|
|
48
|
+
if 'projects' in inspector.get_table_names():
|
|
49
|
+
projects_columns = [col['name'] for col in inspector.get_columns('projects')]
|
|
50
|
+
|
|
51
|
+
if 'deleted_at' not in projects_columns:
|
|
52
|
+
op.add_column('projects', sa.Column('deleted_at', sa.BigInteger(), nullable=True))
|
|
53
|
+
|
|
54
|
+
if 'deleted_by' not in projects_columns:
|
|
55
|
+
op.add_column('projects', sa.Column('deleted_by', sa.String(), nullable=True))
|
|
56
|
+
|
|
57
|
+
# Create index on deleted_at for efficient filtering
|
|
58
|
+
try:
|
|
59
|
+
op.create_index('ix_projects_deleted_at', 'projects', ['deleted_at'])
|
|
60
|
+
except Exception:
|
|
61
|
+
pass
|
|
62
|
+
|
|
63
|
+
# Create composite index for user queries with soft delete
|
|
64
|
+
try:
|
|
65
|
+
op.create_index('ix_projects_user_deleted', 'projects', ['user_id', 'deleted_at'])
|
|
66
|
+
except Exception:
|
|
67
|
+
pass
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def downgrade() -> None:
|
|
71
|
+
"""Remove soft delete columns and search indexes."""
|
|
72
|
+
bind = op.get_bind()
|
|
73
|
+
inspector = inspect(bind)
|
|
74
|
+
|
|
75
|
+
# Drop soft delete indexes from sessions
|
|
76
|
+
if 'sessions' in inspector.get_table_names():
|
|
77
|
+
try:
|
|
78
|
+
op.drop_index('ix_sessions_user_deleted', table_name='sessions')
|
|
79
|
+
except Exception:
|
|
80
|
+
pass
|
|
81
|
+
|
|
82
|
+
try:
|
|
83
|
+
op.drop_index('ix_sessions_deleted_at', table_name='sessions')
|
|
84
|
+
except Exception:
|
|
85
|
+
pass
|
|
86
|
+
|
|
87
|
+
sessions_columns = [col['name'] for col in inspector.get_columns('sessions')]
|
|
88
|
+
if 'deleted_by' in sessions_columns:
|
|
89
|
+
op.drop_column('sessions', 'deleted_by')
|
|
90
|
+
if 'deleted_at' in sessions_columns:
|
|
91
|
+
op.drop_column('sessions', 'deleted_at')
|
|
92
|
+
|
|
93
|
+
# Drop indexes and columns from projects
|
|
94
|
+
if 'projects' in inspector.get_table_names():
|
|
95
|
+
try:
|
|
96
|
+
op.drop_index('ix_projects_user_deleted', table_name='projects')
|
|
97
|
+
except Exception:
|
|
98
|
+
pass
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
op.drop_index('ix_projects_deleted_at', table_name='projects')
|
|
102
|
+
except Exception:
|
|
103
|
+
pass
|
|
104
|
+
|
|
105
|
+
projects_columns = [col['name'] for col in inspector.get_columns('projects')]
|
|
106
|
+
if 'deleted_by' in projects_columns:
|
|
107
|
+
op.drop_column('projects', 'deleted_by')
|
|
108
|
+
if 'deleted_at' in projects_columns:
|
|
109
|
+
op.drop_column('projects', 'deleted_at')
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""add default agent to projects
|
|
2
|
+
|
|
3
|
+
Revision ID: default_agent_001
|
|
4
|
+
Revises: soft_del_search_001
|
|
5
|
+
Create Date: 2025-01-24 01:13:00.000000
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from alembic import op
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = 'default_agent_001'
|
|
14
|
+
down_revision = 'soft_del_search_001'
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade():
|
|
20
|
+
"""Add default_agent_id column to projects table."""
|
|
21
|
+
op.add_column('projects', sa.Column('default_agent_id', sa.String(), nullable=True))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def downgrade():
|
|
25
|
+
"""Remove default_agent_id column from projects table."""
|
|
26
|
+
op.drop_column('projects', 'default_agent_id')
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"""Add projects table and project_id to sessions
|
|
2
|
+
|
|
3
|
+
Revision ID: add_projects_table_001
|
|
4
|
+
Revises: 20251015_session_idx
|
|
5
|
+
Create Date: 2025-10-24 10:00:00.000000
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from typing import Sequence, Union
|
|
9
|
+
from alembic import op
|
|
10
|
+
import sqlalchemy as sa
|
|
11
|
+
from sqlalchemy import inspect
|
|
12
|
+
|
|
13
|
+
# revision identifiers, used by Alembic.
|
|
14
|
+
revision: str = 'add_projects_table_001'
|
|
15
|
+
down_revision: Union[str, Sequence[str], None] = '20251015_session_idx'
|
|
16
|
+
branch_labels: Union[str, Sequence[str], None] = None
|
|
17
|
+
depends_on: Union[str, Sequence[str], None] = None
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def upgrade() -> None:
|
|
21
|
+
"""Create projects table and add project_id to sessions."""
|
|
22
|
+
bind = op.get_bind()
|
|
23
|
+
inspector = inspect(bind)
|
|
24
|
+
existing_tables = inspector.get_table_names()
|
|
25
|
+
dialect_name = bind.dialect.name
|
|
26
|
+
|
|
27
|
+
# Create projects table if it doesn't exist
|
|
28
|
+
# Note: This table is created without is_global and created_by_user_id columns
|
|
29
|
+
# as those were removed in the squashed migration
|
|
30
|
+
if 'projects' not in existing_tables:
|
|
31
|
+
op.create_table('projects',
|
|
32
|
+
sa.Column('id', sa.String(), nullable=False),
|
|
33
|
+
sa.Column('name', sa.String(), nullable=False),
|
|
34
|
+
sa.Column('user_id', sa.String(), nullable=False),
|
|
35
|
+
sa.Column('description', sa.Text(), nullable=True),
|
|
36
|
+
sa.Column('system_prompt', sa.Text(), nullable=True),
|
|
37
|
+
sa.Column('created_at', sa.BigInteger(), nullable=False),
|
|
38
|
+
sa.Column('updated_at', sa.BigInteger(), nullable=True),
|
|
39
|
+
sa.PrimaryKeyConstraint('id')
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
# Add project_id column to sessions if it doesn't exist
|
|
43
|
+
sessions_columns = [col['name'] for col in inspector.get_columns('sessions')]
|
|
44
|
+
if 'project_id' not in sessions_columns:
|
|
45
|
+
if dialect_name == 'sqlite':
|
|
46
|
+
# SQLite doesn't support ALTER TABLE ADD CONSTRAINT, recreate table
|
|
47
|
+
op.create_table(
|
|
48
|
+
'sessions_new',
|
|
49
|
+
sa.Column('id', sa.String(), nullable=False),
|
|
50
|
+
sa.Column('name', sa.String(), nullable=True),
|
|
51
|
+
sa.Column('user_id', sa.String(), nullable=False),
|
|
52
|
+
sa.Column('agent_id', sa.String(), nullable=True),
|
|
53
|
+
sa.Column('created_time', sa.BigInteger(), nullable=False),
|
|
54
|
+
sa.Column('updated_time', sa.BigInteger(), nullable=False),
|
|
55
|
+
sa.Column('project_id', sa.String(), nullable=True),
|
|
56
|
+
sa.ForeignKeyConstraint(['project_id'], ['projects.id']),
|
|
57
|
+
sa.PrimaryKeyConstraint('id')
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# Copy data from old table
|
|
61
|
+
op.execute("""
|
|
62
|
+
INSERT INTO sessions_new (id, name, user_id, agent_id, created_time, updated_time)
|
|
63
|
+
SELECT id, name, user_id, agent_id, created_time, updated_time
|
|
64
|
+
FROM sessions
|
|
65
|
+
""")
|
|
66
|
+
|
|
67
|
+
# Drop old table
|
|
68
|
+
op.drop_table('sessions')
|
|
69
|
+
|
|
70
|
+
# Rename new table
|
|
71
|
+
op.rename_table('sessions_new', 'sessions')
|
|
72
|
+
|
|
73
|
+
# Recreate indexes
|
|
74
|
+
op.create_index('ix_sessions_user_id', 'sessions', ['user_id'])
|
|
75
|
+
op.create_index('ix_sessions_project_id', 'sessions', ['project_id'])
|
|
76
|
+
else:
|
|
77
|
+
# PostgreSQL, MySQL - standard ALTER TABLE
|
|
78
|
+
op.add_column('sessions', sa.Column('project_id', sa.String(), nullable=True))
|
|
79
|
+
op.create_index('ix_sessions_project_id', 'sessions', ['project_id'])
|
|
80
|
+
op.create_foreign_key(
|
|
81
|
+
'fk_sessions_project_id',
|
|
82
|
+
'sessions',
|
|
83
|
+
'projects',
|
|
84
|
+
['project_id'],
|
|
85
|
+
['id']
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def downgrade() -> None:
|
|
90
|
+
"""Downgrade schema - removes project-related changes."""
|
|
91
|
+
bind = op.get_bind()
|
|
92
|
+
inspector = inspect(bind)
|
|
93
|
+
dialect_name = bind.dialect.name
|
|
94
|
+
|
|
95
|
+
# Drop project_id column from sessions if it exists
|
|
96
|
+
sessions_columns = [col['name'] for col in inspector.get_columns('sessions')]
|
|
97
|
+
if 'project_id' in sessions_columns:
|
|
98
|
+
if dialect_name == 'sqlite':
|
|
99
|
+
# SQLite doesn't support ALTER TABLE DROP CONSTRAINT, recreate table
|
|
100
|
+
op.create_table(
|
|
101
|
+
'sessions_old',
|
|
102
|
+
sa.Column('id', sa.String(), nullable=False),
|
|
103
|
+
sa.Column('name', sa.String(), nullable=True),
|
|
104
|
+
sa.Column('user_id', sa.String(), nullable=False),
|
|
105
|
+
sa.Column('agent_id', sa.String(), nullable=True),
|
|
106
|
+
sa.Column('created_time', sa.BigInteger(), nullable=False),
|
|
107
|
+
sa.Column('updated_time', sa.BigInteger(), nullable=False),
|
|
108
|
+
sa.PrimaryKeyConstraint('id')
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
# Copy data from current table (excluding project_id)
|
|
112
|
+
op.execute("""
|
|
113
|
+
INSERT INTO sessions_old (id, name, user_id, agent_id, created_time, updated_time)
|
|
114
|
+
SELECT id, name, user_id, agent_id, created_time, updated_time
|
|
115
|
+
FROM sessions
|
|
116
|
+
""")
|
|
117
|
+
|
|
118
|
+
# Drop current table
|
|
119
|
+
op.drop_table('sessions')
|
|
120
|
+
|
|
121
|
+
# Rename old table back
|
|
122
|
+
op.rename_table('sessions_old', 'sessions')
|
|
123
|
+
|
|
124
|
+
# Recreate index on user_id
|
|
125
|
+
op.create_index('ix_sessions_user_id', 'sessions', ['user_id'])
|
|
126
|
+
else:
|
|
127
|
+
# PostgreSQL, MySQL - standard ALTER TABLE
|
|
128
|
+
op.drop_constraint('fk_sessions_project_id', 'sessions', type_='foreignkey')
|
|
129
|
+
op.drop_index('ix_sessions_project_id', 'sessions')
|
|
130
|
+
op.drop_column('sessions', 'project_id')
|
|
131
|
+
|
|
132
|
+
# Drop projects table if it exists
|
|
133
|
+
existing_tables = inspector.get_table_names()
|
|
134
|
+
if 'projects' in existing_tables:
|
|
135
|
+
op.drop_table('projects')
|
solace_agent_mesh/gateway/http_sse/alembic/versions/20251108_create_prompt_tables_with_sharing.py
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"""Create prompt tables with role-based sharing support
|
|
2
|
+
|
|
3
|
+
Revision ID: 20251108_prompt_tables_complete
|
|
4
|
+
Revises: 20251103_merge_heads
|
|
5
|
+
Create Date: 2025-11-08
|
|
6
|
+
|
|
7
|
+
This is a squashed migration that combines:
|
|
8
|
+
- Initial prompt tables creation
|
|
9
|
+
- Prompt pinning feature
|
|
10
|
+
- Role-based sharing via prompt_group_users table
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from collections.abc import Sequence
|
|
14
|
+
import sqlalchemy as sa
|
|
15
|
+
from alembic import op
|
|
16
|
+
|
|
17
|
+
revision: str = "20251108_prompt_tables_complete"
|
|
18
|
+
down_revision: str | Sequence[str] | None = "default_agent_001"
|
|
19
|
+
branch_labels: str | Sequence[str] | None = None
|
|
20
|
+
depends_on: str | Sequence[str] | None = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def upgrade() -> None:
|
|
24
|
+
"""Create complete prompt schema with sharing support."""
|
|
25
|
+
|
|
26
|
+
# 1. Create prompts table (individual prompt versions)
|
|
27
|
+
op.create_table(
|
|
28
|
+
'prompts',
|
|
29
|
+
sa.Column('id', sa.String(), nullable=False),
|
|
30
|
+
sa.Column('prompt_text', sa.Text(), nullable=False),
|
|
31
|
+
sa.Column('group_id', sa.String(), nullable=False),
|
|
32
|
+
sa.Column('user_id', sa.String(), nullable=False),
|
|
33
|
+
sa.Column('version', sa.Integer(), nullable=False, server_default='1'),
|
|
34
|
+
sa.Column('created_at', sa.BigInteger(), nullable=False),
|
|
35
|
+
sa.Column('updated_at', sa.BigInteger(), nullable=False),
|
|
36
|
+
sa.PrimaryKeyConstraint('id')
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
# Indexes for prompts
|
|
40
|
+
op.create_index('ix_prompts_group_id', 'prompts', ['group_id'], unique=False)
|
|
41
|
+
op.create_index('ix_prompts_user_id', 'prompts', ['user_id'], unique=False)
|
|
42
|
+
|
|
43
|
+
# 2. Create prompt_groups table (prompt collections)
|
|
44
|
+
op.create_table(
|
|
45
|
+
'prompt_groups',
|
|
46
|
+
sa.Column('id', sa.String(), nullable=False),
|
|
47
|
+
sa.Column('name', sa.String(length=255), nullable=False),
|
|
48
|
+
sa.Column('description', sa.Text(), nullable=True),
|
|
49
|
+
sa.Column('category', sa.String(length=100), nullable=True),
|
|
50
|
+
sa.Column('command', sa.String(length=50), nullable=True),
|
|
51
|
+
sa.Column('user_id', sa.String(), nullable=False),
|
|
52
|
+
sa.Column('author_name', sa.String(length=255), nullable=True),
|
|
53
|
+
sa.Column('production_prompt_id', sa.String(), nullable=True),
|
|
54
|
+
sa.Column('is_shared', sa.Boolean(), nullable=False, server_default='false'),
|
|
55
|
+
sa.Column('is_pinned', sa.Boolean(), nullable=False, server_default='false'),
|
|
56
|
+
sa.Column('created_at', sa.BigInteger(), nullable=False),
|
|
57
|
+
sa.Column('updated_at', sa.BigInteger(), nullable=False),
|
|
58
|
+
sa.ForeignKeyConstraint(
|
|
59
|
+
['production_prompt_id'],
|
|
60
|
+
['prompts.id'],
|
|
61
|
+
ondelete='SET NULL'
|
|
62
|
+
),
|
|
63
|
+
sa.PrimaryKeyConstraint('id')
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# Indexes for prompt_groups
|
|
67
|
+
op.create_index('ix_prompt_groups_name', 'prompt_groups', ['name'], unique=False)
|
|
68
|
+
op.create_index('ix_prompt_groups_category', 'prompt_groups', ['category'], unique=False)
|
|
69
|
+
op.create_index('ix_prompt_groups_command', 'prompt_groups', ['command'], unique=True)
|
|
70
|
+
op.create_index('ix_prompt_groups_user_id', 'prompt_groups', ['user_id'], unique=False)
|
|
71
|
+
op.create_index('ix_prompt_groups_is_pinned', 'prompt_groups', ['is_pinned'], unique=False)
|
|
72
|
+
|
|
73
|
+
# 3. Add foreign key from prompts to prompt_groups
|
|
74
|
+
with op.batch_alter_table('prompts', schema=None) as batch_op:
|
|
75
|
+
batch_op.create_foreign_key(
|
|
76
|
+
'fk_prompts_group_id',
|
|
77
|
+
'prompt_groups',
|
|
78
|
+
['group_id'],
|
|
79
|
+
['id'],
|
|
80
|
+
ondelete='CASCADE'
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
# 4. Create prompt_group_users table (role-based sharing)
|
|
84
|
+
op.create_table(
|
|
85
|
+
'prompt_group_users',
|
|
86
|
+
sa.Column('id', sa.String(), nullable=False),
|
|
87
|
+
sa.Column('prompt_group_id', sa.String(), nullable=False),
|
|
88
|
+
sa.Column('user_id', sa.String(), nullable=False),
|
|
89
|
+
sa.Column('role', sa.String(), nullable=False, server_default='viewer'),
|
|
90
|
+
sa.Column('added_at', sa.BigInteger(), nullable=False),
|
|
91
|
+
sa.Column('added_by_user_id', sa.String(), nullable=False),
|
|
92
|
+
sa.PrimaryKeyConstraint('id'),
|
|
93
|
+
sa.ForeignKeyConstraint(
|
|
94
|
+
['prompt_group_id'],
|
|
95
|
+
['prompt_groups.id'],
|
|
96
|
+
ondelete='CASCADE'
|
|
97
|
+
),
|
|
98
|
+
sa.UniqueConstraint('prompt_group_id', 'user_id', name='uq_prompt_group_user')
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
# Indexes for prompt_group_users (optimized for sharing queries)
|
|
102
|
+
op.create_index(
|
|
103
|
+
'ix_prompt_group_users_prompt_group_id',
|
|
104
|
+
'prompt_group_users',
|
|
105
|
+
['prompt_group_id'],
|
|
106
|
+
unique=False
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
op.create_index(
|
|
110
|
+
'ix_prompt_group_users_user_id',
|
|
111
|
+
'prompt_group_users',
|
|
112
|
+
['user_id'],
|
|
113
|
+
unique=False
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
# Composite index for fast access checks
|
|
117
|
+
op.create_index(
|
|
118
|
+
'ix_prompt_group_users_user_prompt',
|
|
119
|
+
'prompt_group_users',
|
|
120
|
+
['user_id', 'prompt_group_id'],
|
|
121
|
+
unique=False
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
# Optional: Index for role-based queries
|
|
125
|
+
op.create_index(
|
|
126
|
+
'ix_prompt_group_users_user_role',
|
|
127
|
+
'prompt_group_users',
|
|
128
|
+
['user_id', 'role'],
|
|
129
|
+
unique=False
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def downgrade() -> None:
|
|
134
|
+
"""Remove all prompt-related tables."""
|
|
135
|
+
|
|
136
|
+
# Drop prompt_group_users table and indexes
|
|
137
|
+
op.drop_index('ix_prompt_group_users_user_role', table_name='prompt_group_users')
|
|
138
|
+
op.drop_index('ix_prompt_group_users_user_prompt', table_name='prompt_group_users')
|
|
139
|
+
op.drop_index('ix_prompt_group_users_user_id', table_name='prompt_group_users')
|
|
140
|
+
op.drop_index('ix_prompt_group_users_prompt_group_id', table_name='prompt_group_users')
|
|
141
|
+
op.drop_table('prompt_group_users')
|
|
142
|
+
|
|
143
|
+
# Drop prompt_groups indexes and table
|
|
144
|
+
op.drop_index('ix_prompt_groups_is_pinned', table_name='prompt_groups')
|
|
145
|
+
op.drop_index('ix_prompt_groups_user_id', table_name='prompt_groups')
|
|
146
|
+
op.drop_index('ix_prompt_groups_command', table_name='prompt_groups')
|
|
147
|
+
op.drop_index('ix_prompt_groups_category', table_name='prompt_groups')
|
|
148
|
+
op.drop_index('ix_prompt_groups_name', table_name='prompt_groups')
|
|
149
|
+
op.drop_table('prompt_groups')
|
|
150
|
+
|
|
151
|
+
# Drop prompts indexes and table
|
|
152
|
+
op.drop_index('ix_prompts_user_id', table_name='prompts')
|
|
153
|
+
op.drop_index('ix_prompts_group_id', table_name='prompts')
|
|
154
|
+
op.drop_table('prompts')
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""Add parent_task_id to tasks table
|
|
2
|
+
|
|
3
|
+
Revision ID: 20251115_add_parent_task_id
|
|
4
|
+
Revises: 20251108_prompt_tables_complete
|
|
5
|
+
Create Date: 2025-11-15
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from collections.abc import Sequence
|
|
10
|
+
import sqlalchemy as sa
|
|
11
|
+
from alembic import op
|
|
12
|
+
|
|
13
|
+
revision: str = "20251115_add_parent_task_id"
|
|
14
|
+
down_revision: str | Sequence[str] | None = "20251108_prompt_tables_complete"
|
|
15
|
+
branch_labels: str | Sequence[str] | None = None
|
|
16
|
+
depends_on: str | Sequence[str] | None = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade() -> None:
|
|
20
|
+
"""Add parent_task_id column to tasks table for efficient task hierarchy queries."""
|
|
21
|
+
op.add_column(
|
|
22
|
+
"tasks", sa.Column("parent_task_id", sa.String(), nullable=True)
|
|
23
|
+
)
|
|
24
|
+
op.create_index(
|
|
25
|
+
"ix_tasks_parent_task_id", "tasks", ["parent_task_id"], unique=False
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def downgrade() -> None:
|
|
30
|
+
"""Remove parent_task_id column from tasks table."""
|
|
31
|
+
op.drop_index("ix_tasks_parent_task_id", table_name="tasks")
|
|
32
|
+
op.drop_column("tasks", "parent_task_id")
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Add background task execution fields
|
|
2
|
+
|
|
3
|
+
Revision ID: 20251126_background_tasks
|
|
4
|
+
Revises: 20251202_versioned_prompt_fields
|
|
5
|
+
Create Date: 2025-11-26 17:30:00.000000
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from alembic import op
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = '20251126_background_tasks'
|
|
14
|
+
down_revision = '20251202_versioned_prompt_fields'
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade():
|
|
20
|
+
"""Add fields to support background task execution."""
|
|
21
|
+
# Add execution_mode column (foreground | background)
|
|
22
|
+
op.add_column('tasks', sa.Column('execution_mode', sa.String(20), nullable=True, server_default='foreground'))
|
|
23
|
+
|
|
24
|
+
# Add last_activity_time for timeout detection
|
|
25
|
+
op.add_column('tasks', sa.Column('last_activity_time', sa.BigInteger, nullable=True))
|
|
26
|
+
|
|
27
|
+
# Add background_execution_enabled flag
|
|
28
|
+
op.add_column('tasks', sa.Column('background_execution_enabled', sa.Boolean, nullable=True, server_default='false'))
|
|
29
|
+
|
|
30
|
+
# Add max_execution_time_ms for timeout configuration
|
|
31
|
+
op.add_column('tasks', sa.Column('max_execution_time_ms', sa.BigInteger, nullable=True))
|
|
32
|
+
|
|
33
|
+
# Create index on execution_mode for efficient queries
|
|
34
|
+
op.create_index('idx_tasks_execution_mode', 'tasks', ['execution_mode'])
|
|
35
|
+
|
|
36
|
+
# Create index on last_activity_time for timeout monitoring
|
|
37
|
+
op.create_index('idx_tasks_last_activity', 'tasks', ['last_activity_time'])
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def downgrade():
|
|
41
|
+
"""Remove background task execution fields."""
|
|
42
|
+
op.drop_index('idx_tasks_last_activity', table_name='tasks')
|
|
43
|
+
op.drop_index('idx_tasks_execution_mode', table_name='tasks')
|
|
44
|
+
op.drop_column('tasks', 'max_execution_time_ms')
|
|
45
|
+
op.drop_column('tasks', 'background_execution_enabled')
|
|
46
|
+
op.drop_column('tasks', 'last_activity_time')
|
|
47
|
+
op.drop_column('tasks', 'execution_mode')
|
solace_agent_mesh/gateway/http_sse/alembic/versions/20251202_add_versioned_fields_to_prompts.py
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"""Add versioned metadata fields to prompts table
|
|
2
|
+
|
|
3
|
+
Revision ID: 20251202_versioned_prompt_fields
|
|
4
|
+
Revises: 20251115_add_parent_task_id
|
|
5
|
+
Create Date: 2025-12-02
|
|
6
|
+
|
|
7
|
+
This migration adds name, description, category, and command fields to the prompts table
|
|
8
|
+
to enable full versioning of all prompt metadata, not just the prompt_text content.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from collections.abc import Sequence
|
|
12
|
+
import sqlalchemy as sa
|
|
13
|
+
from alembic import op
|
|
14
|
+
|
|
15
|
+
revision: str = "20251202_versioned_prompt_fields"
|
|
16
|
+
down_revision: str | Sequence[str] | None = "20251115_add_parent_task_id"
|
|
17
|
+
branch_labels: str | Sequence[str] | None = None
|
|
18
|
+
depends_on: str | Sequence[str] | None = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def upgrade() -> None:
|
|
22
|
+
"""Add versioned metadata fields to prompts table."""
|
|
23
|
+
|
|
24
|
+
# Add new columns to prompts table
|
|
25
|
+
with op.batch_alter_table('prompts', schema=None) as batch_op:
|
|
26
|
+
batch_op.add_column(sa.Column('name', sa.String(length=255), nullable=True))
|
|
27
|
+
batch_op.add_column(sa.Column('description', sa.Text(), nullable=True))
|
|
28
|
+
batch_op.add_column(sa.Column('category', sa.String(length=100), nullable=True))
|
|
29
|
+
batch_op.add_column(sa.Column('command', sa.String(length=50), nullable=True))
|
|
30
|
+
|
|
31
|
+
# Migrate existing data: copy metadata from prompt_groups to prompts
|
|
32
|
+
# This ensures existing prompt versions have the metadata from their group
|
|
33
|
+
connection = op.get_bind()
|
|
34
|
+
connection.execute(sa.text("""
|
|
35
|
+
UPDATE prompts
|
|
36
|
+
SET name = pg.name,
|
|
37
|
+
description = pg.description,
|
|
38
|
+
category = pg.category,
|
|
39
|
+
command = pg.command
|
|
40
|
+
FROM prompt_groups pg
|
|
41
|
+
WHERE prompts.group_id = pg.id
|
|
42
|
+
"""))
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def downgrade() -> None:
|
|
46
|
+
"""Remove versioned metadata fields from prompts table."""
|
|
47
|
+
|
|
48
|
+
with op.batch_alter_table('prompts', schema=None) as batch_op:
|
|
49
|
+
batch_op.drop_column('command')
|
|
50
|
+
batch_op.drop_column('category')
|
|
51
|
+
batch_op.drop_column('description')
|
|
52
|
+
batch_op.drop_column('name')
|