fix(agent-run): resolve MCP paths correctly from bundled worker
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:
john
2026-08-31 19:32:39 +08:00
parent 334b78a7df
commit 61eebb44ec
3 changed files with 56 additions and 1 deletions
+10 -1
View File
@@ -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,
+41
View File
@@ -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;
}
});
+5
View File
@@ -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) {