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) {
|
function isGoosedMcpContainerized(sandboxMcp = null) {
|
||||||
const containerFlag = String(process.env.GOOSED_MCP_CONTAINERIZED ?? '').trim();
|
const containerFlag = String(process.env.GOOSED_MCP_CONTAINERIZED ?? '').trim();
|
||||||
if (containerFlag) return containerFlag === '1';
|
if (containerFlag) return containerFlag === '1';
|
||||||
@@ -852,7 +861,7 @@ export function buildAgentExtensionPolicy(
|
|||||||
cmd: resolveSandboxMcpNodeExecPath(sandboxMcp?.nodeExecPath),
|
cmd: resolveSandboxMcpNodeExecPath(sandboxMcp?.nodeExecPath),
|
||||||
args: [
|
args: [
|
||||||
resolveExcelMcpServerPath(
|
resolveExcelMcpServerPath(
|
||||||
process.env.GOOSED_EXCEL_MCP_SERVER_PATH,
|
resolveExcelMcpOverridePath(),
|
||||||
bundledMcpRuntimeRoot,
|
bundledMcpRuntimeRoot,
|
||||||
),
|
),
|
||||||
excelWorkspaceRoot,
|
excelWorkspaceRoot,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import {
|
|||||||
normalizeCapabilityPatch,
|
normalizeCapabilityPatch,
|
||||||
resolveMindSearchMcpEndpoint,
|
resolveMindSearchMcpEndpoint,
|
||||||
resolveExcelMcpServerPath,
|
resolveExcelMcpServerPath,
|
||||||
|
resolveExcelMcpOverridePath,
|
||||||
resolveMindSearchMcpServerPath,
|
resolveMindSearchMcpServerPath,
|
||||||
resolveSandboxMcpNodeExecPath,
|
resolveSandboxMcpNodeExecPath,
|
||||||
resolveSandboxMcpServerPath,
|
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');
|
const extension = policy.extensionOverrides.find((ext) => ext.name === 'tkmind-excel');
|
||||||
assert.equal(extension.args[0], '/opt/portal/tkmind-excel-mcp.mjs');
|
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(process.env.MEMIND_ENV_FILE || path.join(root, '.env'));
|
||||||
loadEnvFile(path.join(root, '.env.local'));
|
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));
|
const args = parseArgs(process.argv.slice(2));
|
||||||
if (args.help) {
|
if (args.help) {
|
||||||
|
|||||||
Reference in New Issue
Block a user