Backfill missing platform-brand footer at serve time and block service-
account links when the HTML file omits data-mindspace-page-tag.
Co-authored-by: Cursor <cursoragent@cursor.com>
Mock HTML in wechat-mp tests now includes mindspace-cover metadata so
page link delivery assertions match production guard behavior.
Co-authored-by: Cursor <cursoragent@cursor.com>
Notify users when HTML publish guards reject stub pages instead of silently
failing, send real page links when non-stub files exist, and split wechat-mp
into wechat-mp.bundle.mjs for fast production updates without full portal rebuilds.
Co-authored-by: Cursor <cursoragent@cursor.com>
When Goose surfaces session poison errors as assistant text instead of Error events,
assertWechatAgentReplyIsSendable now throws to trigger session recreation. Outbound
sanitization prevents raw API errors from reaching WeChat users.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use session snapshot message counts alongside WeChat route counts so long-lived dedicated sessions rotate before Goose history bloats, and refresh snapshots asynchronously so customer replies are not blocked.
Co-authored-by: Cursor <cursoragent@cursor.com>
When a dedicated WeChat session history leaves unmatched tool_calls, the next reply fails with a 400 LLM validation error; detect that pattern and recreate the session before retrying.
Co-authored-by: Cursor <cursoragent@cursor.com>
Replace fixed ackText with a rule-based AckProvider that picks
response templates by message type and intent (translate, summary,
rewrite, poster, ppt, mindmap, code, search, schedule). Pure sync,
zero I/O, auto-falls back to config.ackText on any error.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add WeChat service account routing with sync acks, connectivity tests, and context isolation; document deploy runbooks; and bundle related MindSpace, voice, Plaza, and server gateway changes for production rollout.
Co-authored-by: Cursor <cursoragent@cursor.com>