Isolate Cursor executor to admin-configured whitelist channel for H5 and WeChat.
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>
This commit is contained in:
john
2026-08-28 15:27:10 +08:00
parent 02fdcdedc5
commit 416bf7a29a
13 changed files with 339 additions and 42 deletions
+17 -8
View File
@@ -18,7 +18,7 @@ test('page cursor default matches poem page requests', () => {
content: [{ type: 'text', text: '帮我写首诗,并做成页面' }],
metadata: { displayText: '帮我写首诗,并做成页面', userVisible: true },
};
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv }), true);
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: true }), true);
assert.equal(resolveCursorTaskKind('帮我写首诗,并做成页面'), 'page_generation');
});
@@ -28,7 +28,7 @@ test('page cursor default matches survey page-data requests', () => {
content: [{ type: 'text', text: '帮我做一个调查问卷,结果存 PG' }],
metadata: { displayText: '帮我做一个调查问卷,结果存 PG' },
};
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv }), true);
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: true }), true);
assert.equal(resolveCursorTaskKind('帮我做一个调查问卷,结果存 PG'), 'page_data');
});
@@ -38,7 +38,7 @@ test('page cursor default matches excel analysis requests', () => {
content: [{ type: 'text', text: '帮我分析这个 Excel 表格的数据趋势' }],
metadata: { displayText: '帮我分析这个 Excel 表格的数据趋势' },
};
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv }), true);
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: true }), true);
assert.equal(resolveCursorTaskKind('帮我分析这个 Excel 表格的数据趋势'), 'excel_analysis');
});
@@ -48,7 +48,7 @@ test('page cursor default skips generic empty page requests', () => {
content: [{ type: 'text', text: '帮我做一个页面吧' }],
metadata: { displayText: '帮我做一个页面吧' },
};
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv }), false);
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: true }), false);
});
test('page cursor default skips page-data dev repair requests', () => {
@@ -57,7 +57,7 @@ test('page cursor default skips page-data dev repair requests', () => {
content: [{ type: 'text', text: '问卷页面提交失败,帮我排查 Page Data 绑定' }],
metadata: { displayText: '问卷页面提交失败,帮我排查 Page Data 绑定' },
};
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv }), false);
assert.equal(isPageCursorDefaultCandidate(userMessage, { env: enabledEnv, channelEligible: true }), false);
});
test('enforcePageGenerationCursorRuntime switches page generation to code cursor executor', () => {
@@ -66,7 +66,7 @@ test('enforcePageGenerationCursorRuntime switches page generation to code cursor
content: [{ type: 'text', text: '帮我写首诗,并做成页面' }],
metadata: { displayText: '帮我写首诗,并做成页面' },
};
const enforced = enforcePageGenerationCursorRuntime(userMessage, { env: enabledEnv });
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');
@@ -86,7 +86,7 @@ test('enforcePageGenerationCursorRuntime switches survey tasks to cursor page-da
content: [{ type: 'text', text: '帮我做一个调查问卷,结果存 PG' }],
metadata: { displayText: '帮我做一个调查问卷,结果存 PG' },
};
const enforced = enforcePageGenerationCursorRuntime(userMessage, { env: enabledEnv });
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');
@@ -102,7 +102,7 @@ test('enforcePageGenerationCursorRuntime switches excel analysis to cursor flow'
content: [{ type: 'text', text: '帮我分析这个 Excel 表格的数据趋势' }],
metadata: { displayText: '帮我分析这个 Excel 表格的数据趋势' },
};
const enforced = enforcePageGenerationCursorRuntime(userMessage, { env: enabledEnv });
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');
@@ -110,6 +110,15 @@ test('enforcePageGenerationCursorRuntime switches excel analysis to cursor flow'
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',