416bf7a29a
Memind CI / Test, build, and release guards (push) Failing after 4m22s
Non-allowlisted users stay on the existing Goose/DeepSeek path; only memindadm whitelist users enter the TKMind Cursor channel on selected intents and channels. Co-authored-by: Cursor <cursoragent@cursor.com>
165 lines
7.2 KiB
JavaScript
165 lines
7.2 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import {
|
|
enforcePageGenerationCursorRuntime,
|
|
isPageCursorDefaultCandidate,
|
|
resolveCursorTaskKind,
|
|
applyCursorFirstAgentExecution,
|
|
} from './cursor-page-routing.mjs';
|
|
|
|
const enabledEnv = {
|
|
MEMIND_CURSOR_EXECUTOR_ENABLED: '1',
|
|
MEMIND_CURSOR_PAGE_TASKS_DEFAULT: '1',
|
|
};
|
|
|
|
test('page cursor default matches poem page requests', () => {
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '帮我写首诗,并做成页面' }],
|
|
metadata: { displayText: '帮我写首诗,并做成页面', userVisible: true },
|
|
};
|
|
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: true }), true);
|
|
assert.equal(resolveCursorTaskKind('帮我写首诗,并做成页面'), 'page_generation');
|
|
});
|
|
|
|
test('page cursor default matches survey page-data requests', () => {
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '帮我做一个调查问卷,结果存 PG' }],
|
|
metadata: { displayText: '帮我做一个调查问卷,结果存 PG' },
|
|
};
|
|
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: true }), true);
|
|
assert.equal(resolveCursorTaskKind('帮我做一个调查问卷,结果存 PG'), 'page_data');
|
|
});
|
|
|
|
test('page cursor default matches excel analysis requests', () => {
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '帮我分析这个 Excel 表格的数据趋势' }],
|
|
metadata: { displayText: '帮我分析这个 Excel 表格的数据趋势' },
|
|
};
|
|
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: true }), true);
|
|
assert.equal(resolveCursorTaskKind('帮我分析这个 Excel 表格的数据趋势'), 'excel_analysis');
|
|
});
|
|
|
|
test('page cursor default skips generic empty page requests', () => {
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '帮我做一个页面吧' }],
|
|
metadata: { displayText: '帮我做一个页面吧' },
|
|
};
|
|
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: true }), false);
|
|
});
|
|
|
|
test('page cursor default skips page-data dev repair requests', () => {
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '问卷页面提交失败,帮我排查 Page Data 绑定' }],
|
|
metadata: { displayText: '问卷页面提交失败,帮我排查 Page Data 绑定' },
|
|
};
|
|
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: true }), false);
|
|
});
|
|
|
|
test('enforcePageGenerationCursorRuntime switches page generation to code cursor executor', () => {
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '帮我写首诗,并做成页面' }],
|
|
metadata: { displayText: '帮我写首诗,并做成页面' },
|
|
};
|
|
const enforced = enforcePageGenerationCursorRuntime(userMessage, { env: enabledEnv, channelEligible: true });
|
|
assert.equal(enforced.rawToolMode, 'code');
|
|
assert.equal(enforced.taskType, 'h5_chat_code_task');
|
|
assert.equal(enforced.requiredExecutor, 'cursor');
|
|
assert.equal(enforced.userMessage.metadata.memindRun.executor, 'cursor');
|
|
assert.equal(enforced.userMessage.metadata.memindRun.pageCursorDefault, true);
|
|
assert.equal(enforced.userMessage.metadata.memindRun.cursorTaskKind, 'page_generation');
|
|
assert.equal(enforced.userMessage.metadata.memindRun.selectedChatSkill, 'static-page-publish');
|
|
assert.match(
|
|
enforced.userMessage.content[0].text,
|
|
/MindSpace 工作区生成或更新 public\/\*\.html/,
|
|
);
|
|
});
|
|
|
|
test('enforcePageGenerationCursorRuntime switches survey tasks to cursor page-data flow', () => {
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '帮我做一个调查问卷,结果存 PG' }],
|
|
metadata: { displayText: '帮我做一个调查问卷,结果存 PG' },
|
|
};
|
|
const enforced = enforcePageGenerationCursorRuntime(userMessage, { env: enabledEnv, channelEligible: true });
|
|
assert.equal(enforced.rawToolMode, 'code');
|
|
assert.equal(enforced.requiredExecutor, 'cursor');
|
|
assert.equal(enforced.userMessage.metadata.memindRun.cursorTaskKind, 'page_data');
|
|
assert.equal(enforced.userMessage.metadata.memindRun.selectedChatSkill, 'page-data-collect');
|
|
assert.equal(enforced.userMessage.metadata.memindRun.suggestedDelivery, 'mindspace_page_data');
|
|
assert.match(enforced.userMessage.content[0].text, /Page Data survey task via TKMind 智趣 executor/);
|
|
assert.match(enforced.userMessage.content[0].text, /page-data-api-usage\.md/);
|
|
});
|
|
|
|
test('enforcePageGenerationCursorRuntime switches excel analysis to cursor flow', () => {
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '帮我分析这个 Excel 表格的数据趋势' }],
|
|
metadata: { displayText: '帮我分析这个 Excel 表格的数据趋势' },
|
|
};
|
|
const enforced = enforcePageGenerationCursorRuntime(userMessage, { env: enabledEnv, channelEligible: true });
|
|
assert.equal(enforced.rawToolMode, 'code');
|
|
assert.equal(enforced.requiredExecutor, 'cursor');
|
|
assert.equal(enforced.userMessage.metadata.memindRun.cursorTaskKind, 'excel_analysis');
|
|
assert.equal(enforced.userMessage.metadata.memindRun.selectedChatSkill, 'excel-analyst');
|
|
assert.match(enforced.userMessage.content[0].text, /Excel analysis task via TKMind 智趣 executor/);
|
|
});
|
|
|
|
test('page cursor default is disabled without channelEligible even when executor env is on', () => {
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '帮我写首诗,并做成页面' }],
|
|
metadata: { displayText: '帮我写首诗,并做成页面' },
|
|
};
|
|
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: false }), false);
|
|
});
|
|
|
|
test('page cursor default is disabled without env flag', () => {
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '帮我写首诗,并做成页面' }],
|
|
metadata: { displayText: '帮我写首诗,并做成页面' },
|
|
};
|
|
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: {} }), false);
|
|
});
|
|
|
|
test('applyCursorFirstAgentExecution no longer forces cursor for generic agent tasks', () => {
|
|
const enabledEnv = {
|
|
MEMIND_CURSOR_EXECUTOR_ENABLED: '1',
|
|
MEMIND_CURSOR_AGENT_TASKS_DEFAULT: '1',
|
|
};
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '帮我查一下今天的热点新闻并总结' }],
|
|
metadata: { memindRun: {} },
|
|
};
|
|
const applied = applyCursorFirstAgentExecution(userMessage, { toolMode: 'chat' }, {
|
|
routingDecision: 'agent_orchestration',
|
|
env: enabledEnv,
|
|
});
|
|
assert.equal(applied.cursorFirst, false);
|
|
assert.equal(applied.runOptions.toolMode, 'chat');
|
|
});
|
|
|
|
test('applyCursorFirstAgentExecution skips direct chat routes', () => {
|
|
const enabledEnv = {
|
|
MEMIND_CURSOR_EXECUTOR_ENABLED: '1',
|
|
MEMIND_CURSOR_AGENT_TASKS_DEFAULT: '1',
|
|
};
|
|
const userMessage = {
|
|
role: 'user',
|
|
content: [{ type: 'text', text: '你好' }],
|
|
metadata: { memindRun: {} },
|
|
};
|
|
const applied = applyCursorFirstAgentExecution(userMessage, { toolMode: 'chat' }, {
|
|
routingDecision: 'direct_chat',
|
|
env: enabledEnv,
|
|
});
|
|
assert.equal(applied.cursorFirst, false);
|
|
});
|