fix wechat mp page reply routing
This commit is contained in:
+1
-7
@@ -919,7 +919,7 @@ export function shouldRetryHtmlGenerationReply({
|
|||||||
if (isMissingRequiredPublishSkill(reply, intent) || isSuspiciousBareCompletionReply(reply, intent)) {
|
if (isMissingRequiredPublishSkill(reply, intent) || isSuspiciousBareCompletionReply(reply, intent)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!usedStaticPagePublishSkill(reply?.messages ?? [])) return true;
|
if (!usedStaticPagePublishSkill(reply?.messages ?? [])) return false;
|
||||||
return !hasAnyUrl(reply?.text);
|
return !hasAnyUrl(reply?.text);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1917,9 +1917,6 @@ export function createWechatMpService({
|
|||||||
if (reply.tokenState) {
|
if (reply.tokenState) {
|
||||||
await userAuth.billSessionUsage(user.userId, sessionId, reply.tokenState, requestId);
|
await userAuth.billSessionUsage(user.userId, sessionId, reply.tokenState, requestId);
|
||||||
}
|
}
|
||||||
if (looksLikeHtmlGenerationIntent(intent?.agentText) && verifiedArtifacts.length === 0 && confirmedArtifacts.length === 0) {
|
|
||||||
throw new Error(buildHtmlPublishFailureText());
|
|
||||||
}
|
|
||||||
const finalizedReply = await maybeAttachPublishedHtmlLink(reply, {
|
const finalizedReply = await maybeAttachPublishedHtmlLink(reply, {
|
||||||
workingDir,
|
workingDir,
|
||||||
publicBaseUrl: config.publicBaseUrl,
|
publicBaseUrl: config.publicBaseUrl,
|
||||||
@@ -1989,9 +1986,6 @@ export function createWechatMpService({
|
|||||||
if (reply.tokenState) {
|
if (reply.tokenState) {
|
||||||
await userAuth.billSessionUsage(user.userId, sessionId, reply.tokenState, retryId);
|
await userAuth.billSessionUsage(user.userId, sessionId, reply.tokenState, retryId);
|
||||||
}
|
}
|
||||||
if (looksLikeHtmlGenerationIntent(intent?.agentText) && verifiedArtifacts.length === 0 && confirmedArtifacts.length === 0) {
|
|
||||||
throw new Error(buildHtmlPublishFailureText());
|
|
||||||
}
|
|
||||||
const finalizedReply = await maybeAttachPublishedHtmlLink(reply, {
|
const finalizedReply = await maybeAttachPublishedHtmlLink(reply, {
|
||||||
workingDir,
|
workingDir,
|
||||||
publicBaseUrl: config.publicBaseUrl,
|
publicBaseUrl: config.publicBaseUrl,
|
||||||
|
|||||||
+32
-4
@@ -226,6 +226,32 @@ test('shouldRetryHtmlGenerationReply does not skip retry because unrelated recen
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('shouldRetryHtmlGenerationReply allows normal H5 agent text without fake page links', () => {
|
||||||
|
const intent = { agentText: '帮我生成页面吧' };
|
||||||
|
const reply = {
|
||||||
|
text: '请告诉我要生成什么主题和内容,我再继续。',
|
||||||
|
messages: [
|
||||||
|
{
|
||||||
|
content: [
|
||||||
|
{
|
||||||
|
type: 'text',
|
||||||
|
text: '请告诉我要生成什么主题和内容,我再继续。',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
assert.equal(
|
||||||
|
shouldRetryHtmlGenerationReply({
|
||||||
|
reply,
|
||||||
|
intent,
|
||||||
|
confirmedArtifacts: [],
|
||||||
|
hasValidLinkInReply: false,
|
||||||
|
}),
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
test('wechat mp service rejects blocked publish claims that did not use the H5 page skill', async () => {
|
test('wechat mp service rejects blocked publish claims that did not use the H5 page skill', async () => {
|
||||||
const wechatCalls = [];
|
const wechatCalls = [];
|
||||||
const service = createBoundWechatService({
|
const service = createBoundWechatService({
|
||||||
@@ -2228,7 +2254,7 @@ test('wechat mp service does not trust unrelated recent html artifacts when repl
|
|||||||
assert.match(payload.text.content, /没有按 H5 里的页面技能真正生成成功|页面生成未完成/);
|
assert.match(payload.text.content, /没有按 H5 里的页面技能真正生成成功|页面生成未完成/);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('wechat mp service refuses to fabricate a fallback page when html generation produced no file', async () => {
|
test('wechat mp service forwards H5 agent text when page generation produced no file or fake link', async () => {
|
||||||
const token = 'token';
|
const token = 'token';
|
||||||
const timestamp = '1710000000';
|
const timestamp = '1710000000';
|
||||||
const nonce = 'nonce';
|
const nonce = 'nonce';
|
||||||
@@ -2329,11 +2355,12 @@ test('wechat mp service refuses to fabricate a fallback page when html generatio
|
|||||||
assert.equal(fs.existsSync(htmlPath), false);
|
assert.equal(fs.existsSync(htmlPath), false);
|
||||||
const sendCall = wechatCalls.find(([url]) => String(url).includes('/cgi-bin/message/custom/send'));
|
const sendCall = wechatCalls.find(([url]) => String(url).includes('/cgi-bin/message/custom/send'));
|
||||||
const payload = JSON.parse(sendCall[2]);
|
const payload = JSON.parse(sendCall[2]);
|
||||||
assert.match(payload.text.content, /没有按 H5 里的页面技能真正生成成功/);
|
assert.match(payload.text.content, /🌴 泰国简易攻略/);
|
||||||
|
assert.doesNotMatch(payload.text.content, /没有按 H5 里的页面技能真正生成成功/);
|
||||||
assert.doesNotMatch(payload.text.content, /https:\/\/m\.tkmind\.cn\/MindSpace\/.+\/public\/thailand-guide\.html/);
|
assert.doesNotMatch(payload.text.content, /https:\/\/m\.tkmind\.cn\/MindSpace\/.+\/public\/thailand-guide\.html/);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('wechat mp service retries poisoned publish claims and still refuses fallback output', async () => {
|
test('wechat mp service retries poisoned publish claims before forwarding H5 retry text', async () => {
|
||||||
const token = 'token';
|
const token = 'token';
|
||||||
const timestamp = '1710000000';
|
const timestamp = '1710000000';
|
||||||
const nonce = 'nonce';
|
const nonce = 'nonce';
|
||||||
@@ -2497,7 +2524,8 @@ test('wechat mp service retries poisoned publish claims and still refuses fallba
|
|||||||
const sendCall = wechatCalls.find(([url]) => String(url).includes('/cgi-bin/message/custom/send'));
|
const sendCall = wechatCalls.find(([url]) => String(url).includes('/cgi-bin/message/custom/send'));
|
||||||
const payload = JSON.parse(sendCall[2]);
|
const payload = JSON.parse(sendCall[2]);
|
||||||
assert.doesNotMatch(payload.text.content, /页面都已经成功发布了|主题页面已发布/);
|
assert.doesNotMatch(payload.text.content, /页面都已经成功发布了|主题页面已发布/);
|
||||||
assert.match(payload.text.content, /没有按 H5 里的页面技能真正生成成功/);
|
assert.match(payload.text.content, /🌴 夏日主题页面/);
|
||||||
|
assert.doesNotMatch(payload.text.content, /没有按 H5 里的页面技能真正生成成功/);
|
||||||
assert.doesNotMatch(payload.text.content, /summer-breeze-journal\.html/);
|
assert.doesNotMatch(payload.text.content, /summer-breeze-journal\.html/);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user