fix(agent-run): resolve MCP paths correctly from bundled worker
Memind CI / Test, build, and release guards (push) Successful in 4m10s
Memind CI / Test, build, and release guards (push) Successful in 4m10s
Agent-run-worker bundles under scripts/, so fallback MCP resolution pointed at scripts/tkmind-excel-mcp.mjs and broke Goose session startup on H5 image tasks. Pin MEMIND_PORTAL_H5_ROOT to the repo root and honor TKMIND_EXCEL_MCP_SERVER_PATH. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+10
-1
@@ -183,6 +183,15 @@ export function resolveExcelMcpServerPath(overridePath, runtimeRoot) {
|
||||
);
|
||||
}
|
||||
|
||||
/** Prefer explicit env overrides; TKMIND_* matches search MCP naming on 103/.env. */
|
||||
export function resolveExcelMcpOverridePath(env = process.env) {
|
||||
return String(
|
||||
env.GOOSED_EXCEL_MCP_SERVER_PATH
|
||||
?? env.TKMIND_EXCEL_MCP_SERVER_PATH
|
||||
?? '',
|
||||
).trim();
|
||||
}
|
||||
|
||||
function isGoosedMcpContainerized(sandboxMcp = null) {
|
||||
const containerFlag = String(process.env.GOOSED_MCP_CONTAINERIZED ?? '').trim();
|
||||
if (containerFlag) return containerFlag === '1';
|
||||
@@ -852,7 +861,7 @@ export function buildAgentExtensionPolicy(
|
||||
cmd: resolveSandboxMcpNodeExecPath(sandboxMcp?.nodeExecPath),
|
||||
args: [
|
||||
resolveExcelMcpServerPath(
|
||||
process.env.GOOSED_EXCEL_MCP_SERVER_PATH,
|
||||
resolveExcelMcpOverridePath(),
|
||||
bundledMcpRuntimeRoot,
|
||||
),
|
||||
excelWorkspaceRoot,
|
||||
|
||||
@@ -10,6 +10,7 @@ import {
|
||||
normalizeCapabilityPatch,
|
||||
resolveMindSearchMcpEndpoint,
|
||||
resolveExcelMcpServerPath,
|
||||
resolveExcelMcpOverridePath,
|
||||
resolveMindSearchMcpServerPath,
|
||||
resolveSandboxMcpNodeExecPath,
|
||||
resolveSandboxMcpServerPath,
|
||||
@@ -710,3 +711,43 @@ test('Excel analyst uses the container-visible bundled MCP directory', () => {
|
||||
const extension = policy.extensionOverrides.find((ext) => ext.name === 'tkmind-excel');
|
||||
assert.equal(extension.args[0], '/opt/portal/tkmind-excel-mcp.mjs');
|
||||
});
|
||||
|
||||
test('resolveExcelMcpOverridePath prefers GOOSED then TKMIND env', () => {
|
||||
assert.equal(
|
||||
resolveExcelMcpOverridePath({
|
||||
GOOSED_EXCEL_MCP_SERVER_PATH: '/opt/goosed/tkmind-excel-mcp.mjs',
|
||||
TKMIND_EXCEL_MCP_SERVER_PATH: '/opt/tkmind/tkmind-excel-mcp.mjs',
|
||||
}),
|
||||
'/opt/goosed/tkmind-excel-mcp.mjs',
|
||||
);
|
||||
assert.equal(
|
||||
resolveExcelMcpOverridePath({
|
||||
TKMIND_EXCEL_MCP_SERVER_PATH: '/Users/john/Project/Memind/tkmind-excel-mcp.mjs',
|
||||
}),
|
||||
'/Users/john/Project/Memind/tkmind-excel-mcp.mjs',
|
||||
);
|
||||
});
|
||||
|
||||
test('Excel analyst honors TKMIND_EXCEL_MCP_SERVER_PATH override', () => {
|
||||
const previous = process.env.TKMIND_EXCEL_MCP_SERVER_PATH;
|
||||
process.env.TKMIND_EXCEL_MCP_SERVER_PATH = '/srv/memind/tkmind-excel-mcp.mjs';
|
||||
try {
|
||||
const policy = buildAgentExtensionPolicy(
|
||||
{
|
||||
...DEFAULT_USER_CAPABILITIES,
|
||||
excel_analysis: true,
|
||||
},
|
||||
{
|
||||
sandboxMcp: {
|
||||
serverPath: '/Users/john/Project/Memind/mindspace-sandbox-mcp.mjs',
|
||||
workspaceRoot: '/Users/john/Project/Memind/MindSpace/user-1',
|
||||
},
|
||||
},
|
||||
);
|
||||
const extension = policy.extensionOverrides.find((ext) => ext.name === 'tkmind-excel');
|
||||
assert.equal(extension.args[0], '/srv/memind/tkmind-excel-mcp.mjs');
|
||||
} finally {
|
||||
if (previous === undefined) delete process.env.TKMIND_EXCEL_MCP_SERVER_PATH;
|
||||
else process.env.TKMIND_EXCEL_MCP_SERVER_PATH = previous;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -95,6 +95,11 @@ function printHelp() {
|
||||
|
||||
loadEnvFile(process.env.MEMIND_ENV_FILE || path.join(root, '.env'));
|
||||
loadEnvFile(path.join(root, '.env.local'));
|
||||
// Bundled worker lives under scripts/; MCP path resolution must not use that
|
||||
// directory as the portal runtime root (see resolveBundledMcpServerPath).
|
||||
if (!String(process.env.MEMIND_PORTAL_H5_ROOT ?? '').trim()) {
|
||||
process.env.MEMIND_PORTAL_H5_ROOT = root;
|
||||
}
|
||||
|
||||
const args = parseArgs(process.argv.slice(2));
|
||||
if (args.help) {
|
||||
|
||||
Reference in New Issue
Block a user