fix(wip): WIP - partial unify WeChat/H5 skill prompts (build agent changes)

- Reuse H5's buildAutoChatSkillPrefix in buildWechatAgentPrompt signature
- Inject autoSkillPrefix into voice/text message prompts
- Add origin tagging in GET /sessions for h5/wechat channel labels

Still TODO (will complete in next cycle):
- Full resolveGrantedSkills → buildWechatAgentPrompt flow
- ensureWechatAgentSession idle rotation logic
- setSessionOrigin + touchWechatAgentRoute calls
- Backend schema/migrations (h5_user_sessions origin column)
- Frontend type + UI component updates

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
john
2026-07-01 21:07:25 +08:00
parent 164c6627a0
commit ec375b1402
2 changed files with 30 additions and 3 deletions
+10
View File
@@ -1164,6 +1164,16 @@ export function createTkmindProxy({
const sessions = [...sessionsById.values()].sort(sortSessionsByRecent);
await enrichSessionHistory(sessions);
if (typeof userAuth.getSessionOrigins === 'function' && sessions.length > 0) {
try {
const origins = await userAuth.getSessionOrigins(sessions.map((s) => s.id));
for (const session of sessions) {
session.origin = origins.get(session.id) ?? 'h5';
}
} catch {
// leave sessions untagged on lookup failure
}
}
const summaries = sessions.map(projectSessionSummary).filter((item) => matchesSessionQuery(item, query));
const paged = summaries.slice(offset, offset + limit);
res.json({
+20 -3
View File
@@ -9,6 +9,7 @@ import { isScheduleIntent, parseScheduleIntent, shouldUseScheduleAssistant } fro
import { materializeMissingPublicHtmlWrites } from './mindspace-public-finish-sync.mjs';
import { buildCurrentTimeAgentPrefix } from './user-memory-profile.mjs';
import { PUBLISH_ROOT_DIR } from './user-publish.mjs';
import { buildAutoChatSkillPrefix } from './chat-skills.mjs';
import { downloadTemporaryMedia, persistWechatImage } from './wechat-media.mjs';
import { buildAckText } from './wechat/ack/ack-provider.mjs';
@@ -1073,8 +1074,12 @@ function normalizeWechatInboundIntent(inbound) {
return base;
}
export function buildWechatAgentPrompt(intent) {
export function buildWechatAgentPrompt(intent, { grantedSkills = [] } = {}) {
const msgType = String(intent?.msgType ?? 'text');
const autoSkillPrefix =
msgType === 'text' || msgType === 'voice'
? buildAutoChatSkillPrefix(intent?.agentText ?? intent?.content, grantedSkills)
: '';
const docxDownloadHint =
looksLikeHtmlGenerationIntent(intent?.agentText ?? intent?.content) &&
looksLikeDocxDownloadIntent(intent?.agentText ?? intent?.content)
@@ -1116,7 +1121,7 @@ export function buildWechatAgentPrompt(intent) {
scheduleAssistantHint,
'【微信服务号语音消息】用户通过语音输入,以下是微信识别结果。',
'',
`用户语音识别文本:${String(intent?.agentText ?? '').trim()}`,
`用户语音识别文本:${autoSkillPrefix}${String(intent?.agentText ?? '').trim()}`,
]
.filter(Boolean)
.join('\n');
@@ -1174,7 +1179,7 @@ export function buildWechatAgentPrompt(intent) {
'【微信服务号新消息】请只回答下面这条用户消息,不要主动延续无关的历史话题。',
'若用户只是在测试连通性,请一句话确认收到即可,不要展开旧任务。',
'',
`用户消息:${content}`,
`用户消息:${autoSkillPrefix}${content}`,
);
return lines.join('\n');
}
@@ -1804,6 +1809,18 @@ export function createWechatMpService({
});
};
const resolveGrantedSkills = async (userId) => {
try {
const row = await userAuth.getUserById(userId);
if (!row) return [];
const caps = await userAuth.resolveUserCapabilities(row);
return Array.isArray(caps?.grantedSkills) ? caps.grantedSkills : [];
} catch (err) {
logger.warn?.('WeChat MP granted skills lookup failed:', err);
return [];
}
};
const runIntentMessage = async ({ inbound, intent, user }) => {
const resetCandidate =
intent.msgType === 'text' || intent.msgType === 'voice' ? intent.agentText : '';