Conversation
There was a problem hiding this comment.
💡 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".
There was a problem hiding this comment.
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 newRouterimplementation backed directly by aRoutingTablethat doesn't require request context, used by per-session workflow engines. - Adds
WithToolsfunctional option toNewWorkflowEngineand acomposerFactoryon the server, so composite tool executors are created per-session with the session's own routing table and tool list. - Simplifies
validateAndCreateExecutorstovalidateWorkflows(validation only), moving executor creation into the per-sessioncollectCompositeToolspath.
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 Report❌ Patch coverage is 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. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
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
sessionRouterinpkg/vmcp/router/that routes from aRoutingTabledirectly without reading request context. - Refactored
Serverto store acomposerFactoryand pre-created telemetry instruments (workflowExecutorInstruments) instead of pre-builtworkflowExecutors, creating per-session executors at session registration time. - Added
WithToolsengine option toworkflowEnginesogetToolInputSchemacan 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.
There was a problem hiding this comment.
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
MultiSessiondecorators for composite tools (workflow execution) and optimizer mode (exposes onlyfind_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.DecorateSessionto 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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.DecorateSessionto stack decorators after base session creation. - Adds a session-backed
SessionRouter(andRouter.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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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
SessionRouterandRouter.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.
There was a problem hiding this comment.
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
DecorateSessionto 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.
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
Test plan
task test)task test-e2e)task lint-fix)Changes
Affected components: pkg/vmcp/router, pkg/vmcp/composer, pkg/vmcp/server, pkg/vmcp/discovery
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.