Skip to content

Bring composite tools into session abstraction#4165

Open
yrobla wants to merge 2 commits intomainfrom
issue-3872-v2
Open

Bring composite tools into session abstraction#4165
yrobla wants to merge 2 commits intomainfrom
issue-3872-v2

Conversation

@yrobla
Copy link
Contributor

@yrobla yrobla commented Mar 16, 2026

Summary

Composite tool workflow engines were previously relying on the discovery middleware to inject DiscoveredCapabilities into the request context so that the shared stateless router could route backend tool calls within workflows. This created an implicit coupling between the middleware and composite tool execution that made unit-testing harder and was a source of integration bugs.

Fixes #3872

Type of change

  • Bug fix
  • New feature
  • Refactoring (no behavior change)
  • Dependency update
  • Documentation
  • Other (describe):

Test plan

  • Unit tests (task test)
  • E2E tests (task test-e2e)
  • Linting (task lint-fix)
  • Manual testing (describe below)

Changes

Affected components: pkg/vmcp/router, pkg/vmcp/composer, pkg/vmcp/server, pkg/vmcp/discovery

File Change

Does this introduce a user-facing change?

Special notes for reviewers

Large PR Justification

This is covering an isolated functionality with complete testing. Cannot be split.

@github-actions github-actions bot added the size/S Small PR: 100-299 lines changed label Mar 16, 2026
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4ee4d1dd38

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@github-actions github-actions bot added size/S Small PR: 100-299 lines changed and removed size/S Small PR: 100-299 lines changed labels Mar 16, 2026
@yrobla yrobla requested a review from Copilot March 16, 2026 08:50
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR decouples composite tool workflow engines from the discovery middleware by binding them to the session's routing table and tool list at session registration time, rather than relying on DiscoveredCapabilities being injected into the request context. This is part of Phase 3 cleanup (issue #3872) for session-scoped client lifecycle management.

Changes:

  • Introduces sessionRouter, a new Router implementation backed directly by a RoutingTable that doesn't require request context, used by per-session workflow engines.
  • Adds WithTools functional option to NewWorkflowEngine and a composerFactory on the server, so composite tool executors are created per-session with the session's own routing table and tool list.
  • Simplifies validateAndCreateExecutors to validateWorkflows (validation only), moving executor creation into the per-session collectCompositeTools path.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.

File Description
pkg/vmcp/router/session_router.go New sessionRouter type implementing Router by looking up directly in a RoutingTable without context.
pkg/vmcp/composer/workflow_engine.go Adds tools field, EngineOption/WithTools functional option, and updated getToolInputSchema to prefer session-bound tools.
pkg/vmcp/server/server.go Replaces workflowExecutors with composerFactory; moves executor creation and telemetry wrapping into per-session collectCompositeTools.
pkg/vmcp/discovery/middleware.go Updates comments to clarify that composite tools no longer depend on context-injected capabilities.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@codecov
Copy link

codecov bot commented Mar 16, 2026

Codecov Report

❌ Patch coverage is 81.33333% with 56 lines in your changes missing coverage. Please review.
✅ Project coverage is 69.30%. Comparing base (ca7f127) to head (2ce0d3f).
⚠️ Report is 9 commits behind head on main.

Files with missing lines Patch % Lines
pkg/vmcp/server/server.go 57.97% 20 Missing and 9 partials ⚠️
pkg/vmcp/session/compositetools/decorator.go 73.17% 7 Missing and 4 partials ⚠️
pkg/vmcp/session/optimizerdec/decorator.go 90.12% 4 Missing and 4 partials ⚠️
pkg/vmcp/server/sessionmanager/session_manager.go 57.14% 3 Missing and 3 partials ⚠️
pkg/vmcp/router/default_router.go 0.00% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #4165      +/-   ##
==========================================
- Coverage   69.30%   69.30%   -0.01%     
==========================================
  Files         466      470       +4     
  Lines       46774    47140     +366     
==========================================
+ Hits        32416    32669     +253     
- Misses      11871    11954      +83     
- Partials     2487     2517      +30     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@github-actions github-actions bot added size/S Small PR: 100-299 lines changed and removed size/S Small PR: 100-299 lines changed labels Mar 16, 2026
@yrobla yrobla requested a review from Copilot March 16, 2026 09:10
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR decouples composite tool workflow execution from the discovery middleware by creating per-session workflow engines that route directly via the session's routing table. Previously, composite tools depended on DiscoveredCapabilities being injected into the request context by the discovery middleware, creating implicit coupling. Now, a composerFactory builds a session-scoped Composer with a SessionRouter and bound tool list at session registration time.

Changes:

  • Introduced sessionRouter in pkg/vmcp/router/ that routes from a RoutingTable directly without reading request context.
  • Refactored Server to store a composerFactory and pre-created telemetry instruments (workflowExecutorInstruments) instead of pre-built workflowExecutors, creating per-session executors at session registration time.
  • Added WithTools engine option to workflowEngine so getToolInputSchema can resolve tools from the session's tool list instead of from context.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
pkg/vmcp/router/session_router.go New sessionRouter implementation that routes from a RoutingTable without context dependency.
pkg/vmcp/server/server.go Replaced workflowExecutors with composerFactory and workflowInstruments; builds per-session executors in collectCompositeTools; renamed validateAndCreateExecutors to validateWorkflows.
pkg/vmcp/server/telemetry.go Extracted workflowExecutorInstruments struct and wrapExecutor method from the former monitorWorkflowExecutors function.
pkg/vmcp/composer/workflow_engine.go Added tools field, EngineOption type, WithTools option, and updated getToolInputSchema to prefer session-bound tools.
pkg/vmcp/discovery/middleware.go Updated comments to clarify that composite tools no longer depend on context-injected capabilities.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@github-actions github-actions bot added size/M Medium PR: 300-599 lines changed and removed size/S Small PR: 100-299 lines changed labels Mar 16, 2026
@github-actions github-actions bot added size/M Medium PR: 300-599 lines changed and removed size/M Medium PR: 300-599 lines changed labels Mar 16, 2026
@yrobla yrobla requested a review from Copilot March 16, 2026 09:35
@github-actions github-actions bot added size/L Large PR: 600-999 lines changed and removed size/M Medium PR: 300-599 lines changed labels Mar 16, 2026
@github-actions github-actions bot added the size/XL Extra large PR: 1000+ lines changed label Mar 18, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors composite tool and optimizer support so they’re applied as session decorators during session registration, removing the prior implicit coupling where composite workflow execution depended on discovery middleware injecting capabilities into request context.

Changes:

  • Add MultiSession decorators for composite tools (workflow execution) and optimizer mode (exposes only find_tool / call_tool).
  • Shift composite workflow execution to per-session workflow engines using a new SessionRouter (routing-table-backed, no request-context dependency).
  • Add SessionManager.DecorateSession to support stacking decorators, and update server registration flow + telemetry wiring accordingly.

Reviewed changes

Copilot reviewed 20 out of 20 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
pkg/vmcp/session/optimizerdec/decorator.go New session decorator implementing optimizer-mode tool surface and routing.
pkg/vmcp/session/optimizerdec/decorator_test.go Unit tests for optimizer decorator behavior.
pkg/vmcp/session/compositetools/decorator.go New session decorator that appends composite tools and dispatches to workflow executors.
pkg/vmcp/session/compositetools/decorator_test.go Unit tests for composite tools decorator tool listing + call routing.
pkg/vmcp/router/session_router.go New routing-table-backed router for per-session workflow engines.
pkg/vmcp/router/session_router_test.go Tests for session router routing and concurrent read access.
pkg/vmcp/server/server.go Session registration now applies composite-tools + optimizer decorators; builds per-session composers/executors; removes old composite tool injection path.
pkg/vmcp/server/telemetry.go Refactors workflow telemetry to reuse pre-created instruments across sessions.
pkg/vmcp/server/sessionmanager/session_manager.go Adds DecorateSession to replace stored session with decorated version.
pkg/vmcp/server/sessionmanager/session_manager_test.go Adds tests for DecorateSession.
pkg/vmcp/server/session_manager_interface.go Exposes DecorateSession on the SessionManager interface.
pkg/vmcp/server/composite_tool_converter.go Adds per-session workflow filtering based on routing-table accessibility.
pkg/vmcp/server/composite_tool_converter_test.go Tests for per-session workflow filtering logic (including dotted tool notation).
pkg/vmcp/server/session_management_integration_test.go Adds integration coverage for per-session composite tool visibility filtering.
pkg/vmcp/server/adapter/handler_factory.go Aliases workflow executor/result types to share the session decorator interfaces.
pkg/vmcp/server/adapter/optimizer_adapter.go Removes optimizer tool implementation, leaving only constants for compatibility.
pkg/vmcp/server/adapter/optimizer_adapter_test.go Updates tests accordingly (constants only).
pkg/vmcp/discovery/middleware.go Updates comments to reflect that workflows no longer depend on context injection.
pkg/vmcp/composer/workflow_engine.go Adds NewSessionWorkflowEngine and uses a session-bound tool list for schema-based coercion.
pkg/vmcp/composer/workflow_engine_test.go Adds tests for schema coercion behavior in session engine mode.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@yrobla yrobla requested a review from ChrisJBurns as a code owner March 18, 2026 09:25
@yrobla yrobla requested a review from Copilot March 18, 2026 09:25
@github-actions github-actions bot added size/XL Extra large PR: 1000+ lines changed and removed size/XL Extra large PR: 1000+ lines changed labels Mar 18, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors composite tool (workflow) execution and optimizer mode to be session-scoped, removing the previous implicit dependency on discovery middleware context injection for correct backend routing during workflow steps (Fixes #3872).

Changes:

  • Introduces session decorators for composite tools and optimizer mode, applied during session registration.
  • Adds a session-backed router (SessionRouter) and per-session workflow engine creation so workflow routing no longer depends on request context.
  • Improves workflow telemetry by creating OTEL instruments once at server startup and reusing them for per-session executor wrappers.

Reviewed changes

Copilot reviewed 21 out of 21 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
test/e2e/thv-operator/virtualmcp/virtualmcp_optimizer_composite_test.go Updates e2e workflow steps to use the {workloadID}.{originalCapabilityName} dot convention.
pkg/vmcp/session/optimizerdec/decorator.go New session decorator that exposes only find_tool / call_tool and routes through optimizer + underlying session.
pkg/vmcp/session/optimizerdec/decorator_test.go Unit tests for optimizer decorator behavior and error surfacing.
pkg/vmcp/session/compositetools/decorator.go New session decorator that appends composite tools and routes composite tool calls to workflow executors.
pkg/vmcp/session/compositetools/decorator_test.go Unit tests for composite tools decorator tool-list and routing behavior.
pkg/vmcp/server/telemetry.go Refactors workflow telemetry to create instruments once and wrap executors per session.
pkg/vmcp/server/sessionmanager/session_manager.go Adds DecorateSession to persist decorated MultiSessions in storage.
pkg/vmcp/server/sessionmanager/session_manager_test.go Tests that session decoration replaces the stored session and handles unknown sessions.
pkg/vmcp/server/session_manager_interface.go Extends SessionManager interface to include DecorateSession.
pkg/vmcp/server/session_management_integration_test.go Adds integration test ensuring composite tools are filtered per-session based on routable backend tools.
pkg/vmcp/server/server.go Applies composite-tools + optimizer decorators at registration time; builds per-session workflow composers/executors; adjusts workflow validation and telemetry initialization.
pkg/vmcp/server/composite_tool_converter.go Adds per-session filtering of workflow defs based on routing table accessibility (including dotted step tool resolution).
pkg/vmcp/server/composite_tool_converter_test.go Unit tests for workflow-def filtering logic, including dotted tool-name cases and nil routing tables.
pkg/vmcp/server/adapter/optimizer_adapter.go Removes old optimizer tool implementations; keeps constants for compatibility.
pkg/vmcp/server/adapter/optimizer_adapter_test.go Updates tests to only validate optimizer tool-name constants.
pkg/vmcp/server/adapter/handler_factory.go Aliases workflow executor/result types to the session decorator types to share one interface.
pkg/vmcp/router/session_router.go New routing-table-backed router that supports both resolved names and dotted {workloadID}.{toolName} convention.
pkg/vmcp/router/session_router_test.go Tests for session router tool/resource/prompt routing + dotted fallback + concurrent access.
pkg/vmcp/discovery/middleware.go Updates comments to reflect that composite workflows no longer depend on context-injected capabilities (but backend tool handlers still do).
pkg/vmcp/composer/workflow_engine.go Adds NewSessionWorkflowEngine and changes schema lookup for coercion to use a session-provided tools list (removes discovery-context lookup).
pkg/vmcp/composer/workflow_engine_test.go Adds tests for session-engine schema-based argument coercion behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@yrobla yrobla requested a review from Copilot March 18, 2026 09:42
@github-actions github-actions bot added size/XL Extra large PR: 1000+ lines changed and removed size/XL Extra large PR: 1000+ lines changed labels Mar 18, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors composite-tool and optimizer workflows so routing and capability exposure are driven by per-session decorators (and a session-backed router) rather than relying on discovery middleware to inject capabilities into request context, reducing implicit coupling and improving testability.

Changes:

  • Introduces session decorators for composite tools and optimizer mode, plus SessionManager.DecorateSession to stack decorators after base session creation.
  • Adds a session-backed SessionRouter (and Router.ResolveToolName) to support {workloadID}.{originalCapabilityName} tool-name resolution for workflow steps.
  • Filters composite tools per session based on routing-table accessibility and reworks workflow telemetry instrumentation to be created once and reused.

Reviewed changes

Copilot reviewed 25 out of 25 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
test/e2e/thv-operator/virtualmcp/virtualmcp_optimizer_composite_test.go Updates E2E workflow steps to use {workloadID}.{toolName} convention and clarifies test intent.
pkg/vmcp/session/optimizerdec/decorator.go Adds optimizer MultiSession decorator exposing only find_tool / call_tool.
pkg/vmcp/session/optimizerdec/decorator_test.go Unit tests for optimizer decorator tool surface and call routing.
pkg/vmcp/session/compositetools/decorator.go Adds composite-tools MultiSession decorator to append workflow tools and execute via per-tool executors.
pkg/vmcp/session/compositetools/decorator_test.go Unit tests for composite tools decorator behavior.
pkg/vmcp/server/telemetry.go Refactors workflow telemetry to reuse pre-created OTEL instruments across sessions.
pkg/vmcp/server/sessionmanager/session_manager.go Adds DecorateSession to atomically replace stored session with a decorated session (with Terminate race checks).
pkg/vmcp/server/sessionmanager/session_manager_test.go Adds tests for DecorateSession behavior and Terminate race handling.
pkg/vmcp/server/session_manager_interface.go Extends SessionManager interface with DecorateSession.
pkg/vmcp/server/session_management_integration_test.go Adds integration test ensuring composite tools are filtered per-session by routable backend tools.
pkg/vmcp/server/server.go Applies composite-tools and optimizer decorators during session registration; builds per-session workflow executors; removes old composite-tool injection path.
pkg/vmcp/server/composite_tool_converter.go Adds per-session workflow filtering based on routing table + dot convention resolution.
pkg/vmcp/server/composite_tool_converter_test.go Tests filterWorkflowDefsForSession, including dot-convention cases.
pkg/vmcp/server/adapter/optimizer_adapter.go Removes optimizer tool implementation from adapter; keeps only tool-name constants.
pkg/vmcp/server/adapter/optimizer_adapter_test.go Updates tests to assert optimizer tool-name constants only.
pkg/vmcp/server/adapter/handler_factory.go Aliases workflow executor/result types to the new session compositetools definitions.
pkg/vmcp/router/router.go Extends Router interface with ResolveToolName.
pkg/vmcp/router/default_router.go Implements ResolveToolName as passthrough for context-backed routing.
pkg/vmcp/router/session_router.go New routing-table-backed router with dot-convention fallback for tool resolution.
pkg/vmcp/router/session_router_test.go New tests covering session router routing + dot-convention resolution + concurrency.
pkg/vmcp/router/mocks/mock_router.go Updates gomock Router mock for new ResolveToolName method.
pkg/vmcp/discovery/middleware.go Updates comments to reflect composite workflow routing no longer depends on context-injected capabilities.
pkg/vmcp/composer/workflow_engine.go Adds session-bound workflow engine constructor and switches schema lookup to session tool list + ResolveToolName.
pkg/vmcp/composer/workflow_engine_test.go Adds tests for session-engine schema-based coercion; updates router mock expectations.
pkg/vmcp/composer/testhelpers_test.go Updates shared test helper to expect ResolveToolName calls.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@yrobla yrobla requested a review from Copilot March 18, 2026 11:12
@github-actions github-actions bot added size/XL Extra large PR: 1000+ lines changed and removed size/XL Extra large PR: 1000+ lines changed labels Mar 18, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors composite tool execution and optimizer mode to be session-scoped, removing the previous implicit dependency on discovery middleware context injection for workflow routing and improving testability.

Changes:

  • Introduces session decorators for composite tools and optimizer mode, applied during session registration.
  • Adds a session-backed router (SessionRouter) and routing-table-based workflow filtering to ensure composite tools are only exposed when their underlying backend tools are accessible in the session.
  • Refactors workflow telemetry to create OTEL instruments once at server startup and reuse them for per-session executor wrapping.

Reviewed changes

Copilot reviewed 26 out of 26 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
test/e2e/thv-operator/virtualmcp/virtualmcp_optimizer_test.go Updates workflow step tool references to the {workloadID}.{originalCapabilityName} convention.
test/e2e/thv-operator/virtualmcp/virtualmcp_optimizer_composite_test.go Updates composite optimizer E2E flow and clarifies test intent around dot-convention routing.
pkg/vmcp/session/optimizerdec/decorator.go Adds optimizer session decorator exposing only find_tool / call_tool.
pkg/vmcp/session/optimizerdec/decorator_test.go Unit tests for optimizer session decorator behavior.
pkg/vmcp/session/compositetools/decorator.go Adds composite-tools session decorator that appends workflow tools and routes their execution.
pkg/vmcp/session/compositetools/decorator_test.go Unit tests for composite-tools session decorator behavior.
pkg/vmcp/server/telemetry.go Refactors workflow telemetry to pre-create instruments once and wrap executors per-session.
pkg/vmcp/server/sessionmanager/session_manager.go Adds DecorateSession to support stacking session decorators safely.
pkg/vmcp/server/sessionmanager/session_manager_test.go Tests covering DecorateSession behavior and race prevention.
pkg/vmcp/server/session_manager_interface.go Extends SessionManager interface to include DecorateSession.
pkg/vmcp/server/session_management_integration_test.go Adds integration coverage ensuring composite tools are filtered by session tool accessibility.
pkg/vmcp/server/server.go Applies composite-tools and optimizer decorators during session registration; shifts workflows to per-session composers/executors.
pkg/vmcp/server/composite_tool_converter.go Adds workflow-definition filtering based on session routing table (including dot-convention resolution).
pkg/vmcp/server/composite_tool_converter_test.go Unit tests for per-session workflow filtering (including dot-convention cases).
pkg/vmcp/server/adapter/optimizer_adapter.go Keeps optimizer tool name constants only; implementation moves to session decorator.
pkg/vmcp/server/adapter/optimizer_adapter_test.go Updates tests to validate constants only.
pkg/vmcp/server/adapter/handler_factory.go Aliases workflow executor/result types to the session composite-tools package.
pkg/vmcp/router/router.go Extends router interface with ResolveToolName.
pkg/vmcp/router/default_router.go Implements pass-through ResolveToolName for the context-based router.
pkg/vmcp/router/session_router.go Adds routing-table-backed router with dot-convention support for workflows.
pkg/vmcp/router/session_router_test.go Unit tests for session router routing and resolution behavior.
pkg/vmcp/router/mocks/mock_router.go Updates mock router to include ResolveToolName.
pkg/vmcp/discovery/middleware.go Updates comments clarifying context injection is for handler routing, not composite workflow routing anymore.
pkg/vmcp/composer/workflow_engine.go Switches tool schema lookup to use session-bound tool list + router name resolution (removing dependency on discovered-capabilities context).
pkg/vmcp/composer/workflow_engine_test.go Adds/updates tests for schema-based argument coercion and router name resolution calls.
pkg/vmcp/composer/testhelpers_test.go Updates mocks to expect ResolveToolName calls.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@yrobla yrobla requested a review from Copilot March 18, 2026 11:25
@github-actions github-actions bot added size/XL Extra large PR: 1000+ lines changed and removed size/XL Extra large PR: 1000+ lines changed labels Mar 18, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors composite tool discovery/execution and optimizer mode to be applied as session-level decorators, removing the prior implicit dependency on the discovery middleware’s context injection for workflow routing. It introduces a session-backed router and adds a session manager API to stack decorators during session registration.

Changes:

  • Add SessionRouter and Router.ResolveToolName() to resolve {workloadID}.{originalCapabilityName} workflow step tool names against a session routing table.
  • Introduce session decorators for composite tools and optimizer mode, and add SessionManager.DecorateSession() to stack decorators at registration time.
  • Filter composite tools per-session based on routing-table accessibility and adjust relevant unit/integration/E2E tests.

Reviewed changes

Copilot reviewed 26 out of 26 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
test/e2e/thv-operator/virtualmcp/virtualmcp_optimizer_test.go Update workflow step tool references to {workloadID}.{originalCapabilityName}.
test/e2e/thv-operator/virtualmcp/virtualmcp_optimizer_composite_test.go Same dot-convention update; expands test documentation.
pkg/vmcp/session/optimizerdec/decorator.go New optimizer session decorator exposing only find_tool / call_tool.
pkg/vmcp/session/optimizerdec/decorator_test.go Unit tests for optimizer decorator tool surface and CallTool behavior.
pkg/vmcp/session/compositetools/decorator.go New composite-tools session decorator that appends tools and routes calls to workflow executors.
pkg/vmcp/session/compositetools/decorator_test.go Unit tests for composite-tools decorator tool list + dispatch.
pkg/vmcp/server/telemetry.go Refactor workflow telemetry to reuse pre-created OTEL instruments and wrap executors per-session.
pkg/vmcp/server/sessionmanager/session_manager.go Add DecorateSession() API for stacking session decorators safely.
pkg/vmcp/server/sessionmanager/session_manager_test.go Tests for DecorateSession() behavior and termination race handling.
pkg/vmcp/server/session_manager_interface.go Extend SessionManager interface with DecorateSession(...).
pkg/vmcp/server/session_management_integration_test.go Add per-session filtering test for composite tool visibility based on routable tools.
pkg/vmcp/server/server.go Apply composite/optimizer decorators during session registration; build per-session workflow engines/executors.
pkg/vmcp/server/composite_tool_converter.go Add per-session workflow filtering based on routing-table accessibility and dot-convention resolution.
pkg/vmcp/server/composite_tool_converter_test.go Unit tests for session workflow filtering logic, including dot-convention cases.
pkg/vmcp/server/adapter/optimizer_adapter.go Reduce to optimizer tool name constants (implementation moved to session decorator).
pkg/vmcp/server/adapter/optimizer_adapter_test.go Update tests to validate only the constants.
pkg/vmcp/server/adapter/handler_factory.go Alias workflow executor/result types to the session decorator’s definitions.
pkg/vmcp/router/router.go Add ResolveToolName() to the Router interface.
pkg/vmcp/router/default_router.go Implement pass-through ResolveToolName() for context-based router.
pkg/vmcp/router/session_router.go New router implementation backed by a session routing table with dot-convention fallback.
pkg/vmcp/router/session_router_test.go Unit tests for session router routing and resolution semantics.
pkg/vmcp/router/mocks/mock_router.go Regenerate mock to include ResolveToolName().
pkg/vmcp/discovery/middleware.go Update comments: context injection still needed for backend handlers, not for composite workflows.
pkg/vmcp/composer/workflow_engine.go Switch schema lookup to session tool list + ResolveToolName(); remove discovery-context dependency.
pkg/vmcp/composer/workflow_engine_test.go Add tests for session engine schema coercion and nil-schema behavior.
pkg/vmcp/composer/testhelpers_test.go Update test helper mocks to expect ResolveToolName() calls.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors vMCP composite tool + optimizer workflows to be session-scoped (via session decorators and a session-backed router) instead of relying on discovery middleware injecting capabilities into request context, improving isolation and testability (Fixes #3872).

Changes:

  • Introduces session decorators for composite tools and optimizer mode, stacking them during session registration.
  • Adds a session-backed router (and dotted {workloadID}.{originalCapabilityName} resolution) so workflow step routing is independent of discovery middleware/context.
  • Adds DecorateSession to the session manager to safely wrap sessions post-creation; refactors workflow telemetry to reuse pre-created OTEL instruments.

Reviewed changes

Copilot reviewed 28 out of 28 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
test/e2e/thv-operator/virtualmcp/virtualmcp_optimizer_test.go Updates workflow step tool naming to use dotted {workloadID}.{capability} convention.
test/e2e/thv-operator/virtualmcp/virtualmcp_optimizer_composite_test.go Ensures composite tool discovery/execution works through optimizer find_tool/call_tool with dotted step tool names.
pkg/vmcp/session/optimizerdec/decorator.go Adds optimizer session decorator that exposes only find_tool/call_tool.
pkg/vmcp/session/optimizerdec/decorator_test.go Unit tests for optimizer session decorator behavior and error surfacing.
pkg/vmcp/session/compositetools/decorator.go Adds composite-tools session decorator that appends composite tools and routes calls to workflow executors.
pkg/vmcp/session/compositetools/decorator_test.go Unit tests for composite tools decorator routing/delegation behavior.
pkg/vmcp/server/telemetry.go Refactors workflow telemetry to pre-create OTEL instruments once and wrap executors per session.
pkg/vmcp/server/sessionmanager/session_manager.go Adds DecorateSession API to apply decorators to an existing MultiSession safely.
pkg/vmcp/server/sessionmanager/session_manager_test.go Adds tests for DecorateSession behavior and termination race handling.
pkg/vmcp/server/session_manager_interface.go Exposes DecorateSession on the server-facing session manager interface.
pkg/vmcp/server/session_management_integration_test.go Adds integration coverage for per-session composite-tool filtering (authorization via routing table).
pkg/vmcp/server/server.go Builds per-session composers/executors and applies composite+optimizer decorators during registration.
pkg/vmcp/server/composite_tool_converter.go Filters workflow defs per session routing table; resolves dotted step tools via workload + original name.
pkg/vmcp/server/composite_tool_converter_test.go Adds tests for per-session workflow filtering, including dotted tool resolution.
pkg/vmcp/server/adapter/optimizer_adapter.go Retains optimizer tool name constants (implementation moved to session decorator).
pkg/vmcp/server/adapter/optimizer_adapter_test.go Updates tests to validate constants only.
pkg/vmcp/server/adapter/handler_factory.go Aliases workflow executor/result types to compositetools package for shared interface.
pkg/vmcp/router/router.go Extends Router interface with ResolveToolName.
pkg/vmcp/router/default_router.go Implements ResolveToolName as pass-through for context-based routing.
pkg/vmcp/router/mocks/mock_router.go Updates gomock router mock for the new ResolveToolName method.
pkg/vmcp/router/session_router.go Adds session-backed router resolving tools via routing table (including dotted convention).
pkg/vmcp/router/session_router_test.go Adds tests for session router routing + dotted convention + concurrency.
pkg/vmcp/discovery/middleware.go Updates comments: discovery context injection remains for backend handlers; workflows now session-route.
pkg/vmcp/composer/workflow_engine.go Adds session-bound tool list + ResolveToolName usage for schema-based arg coercion.
pkg/vmcp/composer/workflow_engine_test.go Updates tests for new engine signature and adds coercion tests when tool list is provided.
pkg/vmcp/composer/workflow_audit_integration_test.go Updates engine construction signature.
pkg/vmcp/composer/testhelpers_test.go Updates engine construction + router mock expectations for ResolveToolName.
pkg/vmcp/composer/elicitation_integration_test.go Updates engine construction signature.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

…tors

Both composite tools and the optimizer now implement the MultiSession
decorator pattern (same as hijackPreventionDecorator) rather than having
bespoke SDK wiring in handleSessionRegistrationImpl.

New session decorators:
- session/compositetools: appends composite tools to Tools(), routes
  their CallTool invocations to per-session workflow executors
- session/optimizerdec: replaces Tools() with [find_tool, call_tool];
  find_tool routes through the optimizer, call_tool delegates to the
  underlying session for normal backend routing

sessionmanager.Manager gains DecorateSession() to swap in a wrapped
session after creation. handleSessionRegistrationImpl becomes a flat
decoration sequence (apply compositetools → apply optimizer → register
tools) with no branching on optimizer vs non-optimizer paths.

adapter.WorkflowExecutor/WorkflowResult become type aliases for the
compositetools package types so the two layers share a single definition.
adapter.CreateOptimizerTools is deleted; its logic lives in optimizerdec.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/XL Extra large PR: 1000+ lines changed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[vMCP] Remove old code path after Phase 2 validation (Phase 3)

4 participants