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); });