fix(opencode): preserve explicit mcp fallback env
This commit is contained in:
parent
2c393bc78f
commit
bfadfc95ee
3 changed files with 40 additions and 0 deletions
|
|
@ -73,6 +73,7 @@ import {
|
|||
copyOpenCodeLocalMcpLaunchEnv,
|
||||
hasOpenCodeLocalMcpLaunchEnv,
|
||||
isOpenCodeMcpHttpBridgeEnabled,
|
||||
snapshotOpenCodeLocalMcpLaunchEnv,
|
||||
} from '@main/services/team/opencode/bridge/OpenCodeMcpBridgeEnv';
|
||||
import { ReviewApplierService } from '@main/services/team/ReviewApplierService';
|
||||
import { TeamBackupService } from '@main/services/team/TeamBackupService';
|
||||
|
|
@ -360,6 +361,7 @@ async function createOpenCodeRuntimeAdapterRegistry(
|
|||
bridgeEnv.CLAUDE_TEAM_APP_INSTANCE_ID = openCodeManagedHostInstanceId;
|
||||
bridgeEnv.AGENT_TEAMS_MCP_CLAUDE_DIR = getClaudeBasePath();
|
||||
const useHttpMcpBridge = isOpenCodeMcpHttpBridgeEnabled(bridgeEnv);
|
||||
const explicitLocalMcpLaunchEnv = snapshotOpenCodeLocalMcpLaunchEnv(bridgeEnv);
|
||||
if (!useHttpMcpBridge) {
|
||||
delete bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL;
|
||||
} else {
|
||||
|
|
@ -401,6 +403,11 @@ async function createOpenCodeRuntimeAdapterRegistry(
|
|||
copyOpenCodeLocalMcpLaunchEnv(bridgeEnv, targetEnv);
|
||||
return;
|
||||
}
|
||||
if (explicitLocalMcpLaunchEnv) {
|
||||
copyOpenCodeLocalMcpLaunchEnv(explicitLocalMcpLaunchEnv, targetEnv);
|
||||
copyOpenCodeLocalMcpLaunchEnv(explicitLocalMcpLaunchEnv, bridgeEnv);
|
||||
return;
|
||||
}
|
||||
|
||||
await applyMcpLaunchSpecEnv(targetEnv, options);
|
||||
if (hasOpenCodeLocalMcpLaunchEnv(targetEnv)) {
|
||||
|
|
|
|||
|
|
@ -31,6 +31,18 @@ export function copyOpenCodeLocalMcpLaunchEnv(
|
|||
}
|
||||
}
|
||||
|
||||
export function snapshotOpenCodeLocalMcpLaunchEnv(
|
||||
env: OpenCodeMcpBridgeEnv
|
||||
): OpenCodeMcpBridgeEnv | null {
|
||||
if (!hasOpenCodeLocalMcpLaunchEnv(env)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const snapshot: OpenCodeMcpBridgeEnv = {};
|
||||
copyOpenCodeLocalMcpLaunchEnv(env, snapshot);
|
||||
return snapshot;
|
||||
}
|
||||
|
||||
export function clearOpenCodeLocalMcpLaunchEnv(env: OpenCodeMcpBridgeEnv): void {
|
||||
for (const key of LOCAL_MCP_LAUNCH_ENV_KEYS) {
|
||||
delete env[key];
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import {
|
|||
copyOpenCodeLocalMcpLaunchEnv,
|
||||
hasOpenCodeLocalMcpLaunchEnv,
|
||||
isOpenCodeMcpHttpBridgeEnabled,
|
||||
snapshotOpenCodeLocalMcpLaunchEnv,
|
||||
} from '@main/services/team/opencode/bridge/OpenCodeMcpBridgeEnv';
|
||||
|
||||
describe('OpenCodeMcpBridgeEnv', () => {
|
||||
|
|
@ -69,6 +70,26 @@ describe('OpenCodeMcpBridgeEnv', () => {
|
|||
expect(target.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL).toBe('http://127.0.0.1:41001/mcp');
|
||||
});
|
||||
|
||||
it('snapshots explicit local MCP launch env before HTTP mode clears it', () => {
|
||||
const env: NodeJS.ProcessEnv = {
|
||||
CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND: ' node ',
|
||||
CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ENTRY: ' mcp-server/dist/index.js ',
|
||||
CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ARGS_JSON: ' ["mcp-server/dist/index.js"] ',
|
||||
CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL: 'http://127.0.0.1:41001/mcp',
|
||||
};
|
||||
|
||||
const snapshot = snapshotOpenCodeLocalMcpLaunchEnv(env);
|
||||
clearOpenCodeLocalMcpLaunchEnv(env);
|
||||
|
||||
expect(snapshot).toEqual({
|
||||
CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND: 'node',
|
||||
CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ENTRY: 'mcp-server/dist/index.js',
|
||||
CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ARGS_JSON: '["mcp-server/dist/index.js"]',
|
||||
});
|
||||
expect(hasOpenCodeLocalMcpLaunchEnv(snapshot ?? {})).toBe(true);
|
||||
expect(env.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND).toBeUndefined();
|
||||
});
|
||||
|
||||
it('removes local MCP launch env when HTTP MCP is active', () => {
|
||||
const env: NodeJS.ProcessEnv = {
|
||||
CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND: 'node',
|
||||
|
|
|
|||
Loading…
Reference in a new issue