feat(page-data): add validation suggestions, repair path, and thinking fixes
Memind CI / Test, build, and release guards (push) Failing after 3m18s

Map Page Data failure codes to Chinese remediation hints, trigger one-shot
goosed repair for remediable cases, and recover poisoned thinking sessions.
Route local DeepSeek through the no-think proxy via host.docker.internal so
tool rounds no longer hit reasoning_content 400; document gate and case-study
scenarios for event registration repair.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-07-25 23:01:55 +08:00
parent 6b6f9ed01c
commit 8ccf2db05c
28 changed files with 1652 additions and 154 deletions
+25 -3
View File
@@ -162,9 +162,28 @@ export function resolveExcelMcpServerPath(overridePath, runtimeRoot) {
);
}
function isGoosedMcpContainerized(sandboxMcp = null) {
const containerFlag = String(process.env.GOOSED_MCP_CONTAINERIZED ?? '').trim();
if (containerFlag) return containerFlag === '1';
return Boolean(sandboxMcp?.containerized);
}
function resolveBundledMcpRuntimeRoot(sandboxMcp) {
if (!sandboxMcp?.containerized || !sandboxMcp?.serverPath) return undefined;
return path.dirname(sandboxMcp.serverPath);
// Prefer the sandbox MCP's container-visible directory when present.
if (sandboxMcp?.containerized && sandboxMcp?.serverPath) {
return path.dirname(sandboxMcp.serverPath);
}
// tkmind-search / excel can still be enabled when sandbox-fs is absent
// (e.g. sandbox setup failed). Keep their stdio paths on the same
// container-canonical root as GOOSED_MCP_SERVER_PATH so reconcile does not
// oscillate between host and /opt/portal paths.
if (isGoosedMcpContainerized(sandboxMcp)) {
const serverPath = String(
sandboxMcp?.serverPath || process.env.GOOSED_MCP_SERVER_PATH || '',
).trim();
if (serverPath) return path.dirname(serverPath);
}
return undefined;
}
export const CAPABILITY_CATALOG = [
@@ -609,7 +628,10 @@ export function buildAgentExtensionPolicy(
if (capabilities.chat_recall) {
extensions.push(makeExtension('platform', 'chatrecall', []));
}
if (capabilities.context_memory) {
if (
capabilities.context_memory
&& !extensions.some((ext) => ext.name === 'projectmemory')
) {
extensions.push(makeExtension('platform', 'projectmemory', []));
}
if (capabilities.memory_store) {