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,
|
copyOpenCodeLocalMcpLaunchEnv,
|
||||||
hasOpenCodeLocalMcpLaunchEnv,
|
hasOpenCodeLocalMcpLaunchEnv,
|
||||||
isOpenCodeMcpHttpBridgeEnabled,
|
isOpenCodeMcpHttpBridgeEnabled,
|
||||||
|
snapshotOpenCodeLocalMcpLaunchEnv,
|
||||||
} from '@main/services/team/opencode/bridge/OpenCodeMcpBridgeEnv';
|
} from '@main/services/team/opencode/bridge/OpenCodeMcpBridgeEnv';
|
||||||
import { ReviewApplierService } from '@main/services/team/ReviewApplierService';
|
import { ReviewApplierService } from '@main/services/team/ReviewApplierService';
|
||||||
import { TeamBackupService } from '@main/services/team/TeamBackupService';
|
import { TeamBackupService } from '@main/services/team/TeamBackupService';
|
||||||
|
|
@ -360,6 +361,7 @@ async function createOpenCodeRuntimeAdapterRegistry(
|
||||||
bridgeEnv.CLAUDE_TEAM_APP_INSTANCE_ID = openCodeManagedHostInstanceId;
|
bridgeEnv.CLAUDE_TEAM_APP_INSTANCE_ID = openCodeManagedHostInstanceId;
|
||||||
bridgeEnv.AGENT_TEAMS_MCP_CLAUDE_DIR = getClaudeBasePath();
|
bridgeEnv.AGENT_TEAMS_MCP_CLAUDE_DIR = getClaudeBasePath();
|
||||||
const useHttpMcpBridge = isOpenCodeMcpHttpBridgeEnabled(bridgeEnv);
|
const useHttpMcpBridge = isOpenCodeMcpHttpBridgeEnabled(bridgeEnv);
|
||||||
|
const explicitLocalMcpLaunchEnv = snapshotOpenCodeLocalMcpLaunchEnv(bridgeEnv);
|
||||||
if (!useHttpMcpBridge) {
|
if (!useHttpMcpBridge) {
|
||||||
delete bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL;
|
delete bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -401,6 +403,11 @@ async function createOpenCodeRuntimeAdapterRegistry(
|
||||||
copyOpenCodeLocalMcpLaunchEnv(bridgeEnv, targetEnv);
|
copyOpenCodeLocalMcpLaunchEnv(bridgeEnv, targetEnv);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (explicitLocalMcpLaunchEnv) {
|
||||||
|
copyOpenCodeLocalMcpLaunchEnv(explicitLocalMcpLaunchEnv, targetEnv);
|
||||||
|
copyOpenCodeLocalMcpLaunchEnv(explicitLocalMcpLaunchEnv, bridgeEnv);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
await applyMcpLaunchSpecEnv(targetEnv, options);
|
await applyMcpLaunchSpecEnv(targetEnv, options);
|
||||||
if (hasOpenCodeLocalMcpLaunchEnv(targetEnv)) {
|
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 {
|
export function clearOpenCodeLocalMcpLaunchEnv(env: OpenCodeMcpBridgeEnv): void {
|
||||||
for (const key of LOCAL_MCP_LAUNCH_ENV_KEYS) {
|
for (const key of LOCAL_MCP_LAUNCH_ENV_KEYS) {
|
||||||
delete env[key];
|
delete env[key];
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import {
|
||||||
copyOpenCodeLocalMcpLaunchEnv,
|
copyOpenCodeLocalMcpLaunchEnv,
|
||||||
hasOpenCodeLocalMcpLaunchEnv,
|
hasOpenCodeLocalMcpLaunchEnv,
|
||||||
isOpenCodeMcpHttpBridgeEnabled,
|
isOpenCodeMcpHttpBridgeEnabled,
|
||||||
|
snapshotOpenCodeLocalMcpLaunchEnv,
|
||||||
} from '@main/services/team/opencode/bridge/OpenCodeMcpBridgeEnv';
|
} from '@main/services/team/opencode/bridge/OpenCodeMcpBridgeEnv';
|
||||||
|
|
||||||
describe('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');
|
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', () => {
|
it('removes local MCP launch env when HTTP MCP is active', () => {
|
||||||
const env: NodeJS.ProcessEnv = {
|
const env: NodeJS.ProcessEnv = {
|
||||||
CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND: 'node',
|
CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND: 'node',
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue