fa20f735a5
Memind CI / Test, build, and release guards (push) Failing after 5m45s
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>
79 lines
2.5 KiB
JavaScript
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,
|
|
});
|
|
}
|