Files
memind/chat-task-intent-config.test.mjs
T
John a30b62b987
Memind CI / Test, build, and release guards (push) Has been cancelled
feat(chat-intent): observe routing, keep discuss-first on chat, and escalate short follow-ups
Close the chat-session dead zone without flipping production flags: record 0.72 fallbacks, stop C-2 from treating「先聊聊」as execute, and promote「不对你去执行」after a completed direct turn on both h5direct and date sessions.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-19 13:13:17 +08:00

74 lines
2.8 KiB
JavaScript

import assert from 'node:assert/strict';
import test from 'node:test';
import {
isChatSessionDeferEnabledForUser,
isDirectEscalationContextEnabledForUser,
isDirectFollowupEscalateEnabledForUser,
resolveChatSessionDeferPolicy,
resolveDirectEscalationContextPolicy,
resolveDirectFollowupEscalatePolicy,
shouldDeferChatSessionRoutingToLlm,
} from './chat-task-intent-config.mjs';
test('resolveDirectEscalationContextPolicy defaults to disabled', () => {
const policy = resolveDirectEscalationContextPolicy({});
assert.equal(policy.enabled, false);
assert.equal(policy.canaryUserIds.size, 0);
});
test('isDirectEscalationContextEnabledForUser respects canary list', () => {
const policy = {
enabled: true,
canaryUserIds: new Set(['user-a']),
};
assert.equal(isDirectEscalationContextEnabledForUser('user-a', policy), true);
assert.equal(isDirectEscalationContextEnabledForUser('user-b', policy), false);
});
test('shouldDeferChatSessionRoutingToLlm skips explicit direct chat text', () => {
assert.equal(shouldDeferChatSessionRoutingToLlm({
enabled: true,
text: '你好',
isExplicitDirectChatOnlyText: (value) => value === '你好',
}), false);
assert.equal(shouldDeferChatSessionRoutingToLlm({
enabled: true,
text: '帮我研究一下车载冰箱的参数和选购建议',
minTextLength: 12,
isExplicitDirectChatOnlyText: () => false,
}), true);
assert.equal(shouldDeferChatSessionRoutingToLlm({
enabled: false,
text: '帮我研究一下车载冰箱的参数和选购建议',
isExplicitDirectChatOnlyText: () => false,
}), false);
});
test('resolveChatSessionDeferPolicy parses min text length', () => {
const policy = resolveChatSessionDeferPolicy({
MEMIND_CHAT_ROUTER_CHAT_SESSION_DEFER_ENABLED: '1',
MEMIND_CHAT_ROUTER_CHAT_SESSION_DEFER_MIN_TEXT_LENGTH: '20',
MEMIND_CHAT_ROUTER_CHAT_SESSION_DEFER_CANARY_USER_IDS: 'john',
});
assert.equal(policy.enabled, true);
assert.equal(policy.minTextLength, 20);
assert.deepEqual([...policy.canaryUserIds], ['john']);
assert.equal(isChatSessionDeferEnabledForUser('john', policy), true);
assert.equal(isChatSessionDeferEnabledForUser('other', policy), false);
});
test('resolveDirectFollowupEscalatePolicy defaults to disabled', () => {
const policy = resolveDirectFollowupEscalatePolicy({});
assert.equal(policy.enabled, false);
assert.equal(isDirectFollowupEscalateEnabledForUser('john', policy), false);
});
test('isDirectFollowupEscalateEnabledForUser respects canary list', () => {
const policy = resolveDirectFollowupEscalatePolicy({
MEMIND_CHAT_ROUTER_DIRECT_FOLLOWUP_ESCALATE_ENABLED: '1',
MEMIND_CHAT_ROUTER_DIRECT_FOLLOWUP_ESCALATE_CANARY_USER_IDS: 'john',
});
assert.equal(isDirectFollowupEscalateEnabledForUser('john', policy), true);
assert.equal(isDirectFollowupEscalateEnabledForUser('other', policy), false);
});