feat(wechat): add channel split with intent classifier and stub-safe page verify

Introduce wechat/ package (classifier, page-generate prompt/handler, artifact
verify) and wire page.generate intents through dedicated flow. Stub HTML
artifacts are never sent to users; page failures notify via customer service.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-07-04 13:06:00 +08:00
parent f36e8b9292
commit aee465b6a3
8 changed files with 413 additions and 24 deletions
+37
View File
@@ -0,0 +1,37 @@
/** WeChat channel intent patterns — not shared with H5 chat-skills routing. */
export const PAGE_GENERATE_PATTERN =
/(?:生成|创建|做|写|帮我.*(?:生成|创建|做|写)).*(?:html|页面|网页|page|文件)/iu;
export const DOCX_DOWNLOAD_PATTERN =
/(?:(?:word|docx|\.docx|\.doc|文档).*(?:下载|链接|导出|给我)|(?:下载|导出|提供|给我).*(?:word|docx|\.docx|\.doc|文档))/iu;
export const TOPIC_RESET_PATTERN =
/^(换(个)?话题|新问题|忽略之前|不管之前|重新开始|reset)$/iu;
export const TOPIC_RESET_LOOSE_PATTERN = /忽略.*之前|不要管.*之前|别管.*之前/u;
export const STATUS_PROBE_PATTERN = /^[?]+$/u;
export const GREETING_PATTERN =
/^(你好|您好|在吗|在不在|嗨|hi|hello|hey)[!!。.\s]*$/iu;
export const CONNECTIVITY_TEST_PATTERN = /^(测试\s*\d*|test\s*\d*)[!!。.\s]*$/iu;
export function isPageGenerateText(text) {
const normalized = String(text ?? '').trim();
if (!normalized) return false;
return PAGE_GENERATE_PATTERN.test(normalized);
}
export function isTopicResetText(text) {
const normalized = String(text ?? '').trim();
if (!normalized) return false;
return TOPIC_RESET_PATTERN.test(normalized) || TOPIC_RESET_LOOSE_PATTERN.test(normalized);
}
export function wantsDocxDownload(text) {
const normalized = String(text ?? '').trim();
if (!normalized) return false;
return DOCX_DOWNLOAD_PATTERN.test(normalized);
}