fix(opencode): preserve MCP fallback on refresh failure
This commit is contained in:
parent
f3f38dd0e9
commit
f3a01d173f
1 changed files with 51 additions and 18 deletions
|
|
@ -353,6 +353,33 @@ async function createOpenCodeRuntimeAdapterRegistry(
|
||||||
const bridgeEnv = applyOpenCodeAutoUpdatePolicy({ ...process.env });
|
const bridgeEnv = applyOpenCodeAutoUpdatePolicy({ ...process.env });
|
||||||
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 applyMcpLaunchSpecEnv = async (
|
||||||
|
targetEnv: NodeJS.ProcessEnv,
|
||||||
|
options: { emitProgress?: boolean } = {}
|
||||||
|
): Promise<void> => {
|
||||||
|
try {
|
||||||
|
if (options.emitProgress) {
|
||||||
|
reportProgress('runtime-mcp', 'Resolving Agent Teams MCP server...');
|
||||||
|
}
|
||||||
|
const mcpLaunchSpec = await resolveAgentTeamsMcpLaunchSpec({
|
||||||
|
onProgress: options.emitProgress
|
||||||
|
? ({ phase, message }) => reportProgress(`mcp-${phase}`, message)
|
||||||
|
: undefined,
|
||||||
|
});
|
||||||
|
const mcpEntry = mcpLaunchSpec.args[0];
|
||||||
|
if (mcpEntry) {
|
||||||
|
targetEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND = mcpLaunchSpec.command;
|
||||||
|
targetEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ENTRY = mcpEntry;
|
||||||
|
targetEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ARGS_JSON = JSON.stringify(mcpLaunchSpec.args);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
logger.warn(
|
||||||
|
`[OpenCode] Runtime adapter bridge MCP entrypoint unresolved: ${
|
||||||
|
error instanceof Error ? error.message : String(error)
|
||||||
|
}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
try {
|
try {
|
||||||
const appManagedOpenCodeBinary = await resolveVerifiedAppManagedOpenCodeRuntimeBinaryPath();
|
const appManagedOpenCodeBinary = await resolveVerifiedAppManagedOpenCodeRuntimeBinaryPath();
|
||||||
if (appManagedOpenCodeBinary && !bridgeEnv.CLAUDE_MULTIMODEL_OPENCODE_BIN_PATH) {
|
if (appManagedOpenCodeBinary && !bridgeEnv.CLAUDE_MULTIMODEL_OPENCODE_BIN_PATH) {
|
||||||
|
|
@ -394,24 +421,7 @@ async function createOpenCodeRuntimeAdapterRegistry(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (!bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL) {
|
if (!bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL) {
|
||||||
try {
|
await applyMcpLaunchSpecEnv(bridgeEnv, { emitProgress: true });
|
||||||
reportProgress('runtime-mcp', 'Resolving Agent Teams MCP server...');
|
|
||||||
const mcpLaunchSpec = await resolveAgentTeamsMcpLaunchSpec({
|
|
||||||
onProgress: ({ phase, message }) => reportProgress(`mcp-${phase}`, message),
|
|
||||||
});
|
|
||||||
const mcpEntry = mcpLaunchSpec.args[0];
|
|
||||||
if (mcpEntry) {
|
|
||||||
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND = mcpLaunchSpec.command;
|
|
||||||
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ENTRY = mcpEntry;
|
|
||||||
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ARGS_JSON = JSON.stringify(mcpLaunchSpec.args);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
logger.warn(
|
|
||||||
`[OpenCode] Runtime adapter bridge MCP entrypoint unresolved: ${
|
|
||||||
error instanceof Error ? error.message : String(error)
|
|
||||||
}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reportProgress('runtime-bridge', 'Preparing OpenCode bridge...');
|
reportProgress('runtime-bridge', 'Preparing OpenCode bridge...');
|
||||||
|
|
@ -424,8 +434,31 @@ async function createOpenCodeRuntimeAdapterRegistry(
|
||||||
const mcpHttpServer = await agentTeamsMcpHttpServer.ensureStarted();
|
const mcpHttpServer = await agentTeamsMcpHttpServer.ensureStarted();
|
||||||
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL = mcpHttpServer.url;
|
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL = mcpHttpServer.url;
|
||||||
nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL = mcpHttpServer.url;
|
nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL = mcpHttpServer.url;
|
||||||
|
delete nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND;
|
||||||
|
delete nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ENTRY;
|
||||||
|
delete nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ARGS_JSON;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
delete nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL;
|
delete nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_URL;
|
||||||
|
if (
|
||||||
|
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND &&
|
||||||
|
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ENTRY &&
|
||||||
|
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ARGS_JSON
|
||||||
|
) {
|
||||||
|
nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND =
|
||||||
|
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND;
|
||||||
|
nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ENTRY =
|
||||||
|
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ENTRY;
|
||||||
|
nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ARGS_JSON =
|
||||||
|
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ARGS_JSON;
|
||||||
|
} else {
|
||||||
|
await applyMcpLaunchSpecEnv(nextEnv);
|
||||||
|
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND =
|
||||||
|
nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_COMMAND;
|
||||||
|
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ENTRY =
|
||||||
|
nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ENTRY;
|
||||||
|
bridgeEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ARGS_JSON =
|
||||||
|
nextEnv.CLAUDE_MULTIMODEL_AGENT_TEAMS_MCP_ARGS_JSON;
|
||||||
|
}
|
||||||
logger.warn(
|
logger.warn(
|
||||||
`[OpenCode] Runtime adapter bridge MCP HTTP server refresh failed: ${
|
`[OpenCode] Runtime adapter bridge MCP HTTP server refresh failed: ${
|
||||||
error instanceof Error ? error.message : String(error)
|
error instanceof Error ? error.message : String(error)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue