Files
memind/wechat-cursor-executor-policy.mjs
T
john fa20f735a5
Memind CI / Test, build, and release guards (push) Failing after 5m45s
Skip Cursor Chat Bridge for WeChat MP and page.generate sessions.
WeChat Goose turns always include tools, which the bridge PoC rejects with HTTP 501; keep Kimi/DeepSeek on the session while Cursor handles page execution separately.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-31 10:16:03 +08:00

79 lines
2.5 KiB
JavaScript

import {
CURSOR_EXECUTOR_CHANNEL,
isChannelAllowedByCursorPolicy,
isCursorFeatureEnabled,
isIntentAllowedByWechatCursorPolicy,
isUserAllowedByWechatCursorPolicy,
} from './wechat-cursor-executor-admin-config.mjs';
import { CURSOR_CHANNEL_FEATURES } from './cursor-channel-features.mjs';
export { CURSOR_EXECUTOR_CHANNEL, CURSOR_CHANNEL_FEATURES };
export function resolveCursorChannelEligible({
user = null,
userId = null,
channel = '',
intentKind = '',
policy = null,
} = {}) {
if (!policy?.enabled) return false;
const subject = user ?? { userId };
if (!isUserAllowedByWechatCursorPolicy(subject, policy)) return false;
if (!isChannelAllowedByCursorPolicy(channel, policy)) return false;
const normalizedChannel = String(channel ?? '').trim().toLowerCase();
if (normalizedChannel === CURSOR_EXECUTOR_CHANNEL.WECHAT_MP) {
if (!isIntentAllowedByWechatCursorPolicy(intentKind, policy)) return false;
}
return true;
}
export function resolveCursorChatBridgeEligible({
user = null,
userId = null,
channel = '',
intentKind = '',
policy = null,
env = process.env,
} = {}) {
if (!policy?.enabled) return false;
const subject = user ?? { userId };
if (!isUserAllowedByWechatCursorPolicy(subject, policy)) return false;
if (!isCursorFeatureEnabled(policy, CURSOR_CHANNEL_FEATURES.CHAT_BRIDGE)) return false;
const normalizedChannel = String(channel ?? '').trim().toLowerCase();
// WeChat Goose sessions always carry tools; the bridge PoC rejects tool calls.
if (normalizedChannel === CURSOR_EXECUTOR_CHANNEL.WECHAT_MP) return false;
if (String(intentKind ?? '').trim() === 'page.generate') return false;
if (!isChannelAllowedByCursorPolicy(normalizedChannel || CURSOR_EXECUTOR_CHANNEL.H5, policy)) {
return false;
}
const bridgeEnvEnabled = String(env?.MEMIND_CURSOR_CHAT_BRIDGE_ENABLED ?? '').trim();
if (!['1', 'true', 'yes', 'on'].includes(bridgeEnvEnabled.toLowerCase())) return false;
return true;
}
export function resolveCursorScheduledTaskEligible({
user = null,
userId = null,
policy = null,
} = {}) {
if (!policy?.enabled) return false;
const subject = user ?? { userId };
if (!isUserAllowedByWechatCursorPolicy(subject, policy)) return false;
return isCursorFeatureEnabled(policy, CURSOR_CHANNEL_FEATURES.SCHEDULED_TASKS);
}
export function resolveWechatCursorExecutorEligible({
user = null,
userId = null,
intentKind = '',
policy = null,
} = {}) {
return resolveCursorChannelEligible({
user,
userId,
channel: CURSOR_EXECUTOR_CHANNEL.WECHAT_MP,
intentKind,
policy,
});
}