Drop the user_confirmed_at gate so public, online, unexpired pages can enter sitemap/llms and receive SEO/GEO tags. Defaults now enable all discovery switches; stored all-off config is still preserved until admin saves.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prevent silent drops when users send follow-up instructions during waiting or streaming by showing the message immediately, notifying them it is queued, and auto-flushing after the composer returns to idle.
Co-authored-by: Cursor <cursoragent@cursor.com>
Finish now releases static HTML delivery contracts in a finally block so
re-edited pages are not stuck at HTTP 409, and M成果 groups pages by
Asia/Shanghai calendar dates to avoid duplicate day headings.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expose a DB-backed catalog of all online publications with SEO, GEO, total,
and bot view counts from h5_publication_views for the memind_adm dashboard.
Co-authored-by: Cursor <cursoragent@cursor.com>
load-env.mjs depends on memind-runtime-profile.mjs; include it in portal
runtime packaging so wechat-mp-menu.mjs works on 103 without manual scp.
Co-authored-by: Cursor <cursoragent@cursor.com>
Ship the M成果 page with list/delete UX, fix deletePage for incomplete page records, route /space/achievements, and add M成果 under the WeChat M空间 menu.
Co-authored-by: Cursor <cursoragent@cursor.com>
goosed stdio MCPs do not inherit Portal env, so scheduled_task_create
always reported worker disabled even when H5_REMINDER_WORKER_ENABLED=1.
Forward worker flags in sandboxMcpEnvs and add a regression test.
Co-authored-by: Cursor <cursoragent@cursor.com>
Cross-repo publish order for memind-analytics, Portal, and memind_adm;
update platform and 105 operations docs for systemd artifact deploy.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prevent publication delivery from crashing when test or proxy requests omit
headers while attaching SEO/GEO discovery metadata.
Co-authored-by: Cursor <cursoragent@cursor.com>
Treat hollow requests like「我要做一个定时执行任务」as missing taskSpec so
WeChat preflight asks for both schedule and executable content instead of
accepting「执行」as a deliverable task description.
Co-authored-by: Cursor <cursoragent@cursor.com>
Document Umami as the sole analytics platform, remove Rybbit proxy and
tracker code, and classify public page traffic with discovery_channel for
adm SEO/GEO dashboards.
Co-authored-by: Cursor <cursoragent@cursor.com>
Extend live verify wait budget to cover Agent execution timeout, use a
deterministic smoke taskSpec, and accept concise successful replies like
「验证成功」 instead of treating them as non-delivery.
Co-authored-by: Cursor <cursoragent@cursor.com>
Scheduled automations were saved but never executed because the worker
required an explicit env flag. Follow H5_REMINDER_WORKER_ENABLED when unset,
add WeChat preflight to write tasks deterministically, and surface worker
warnings on create.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reconcile now re-adds missing sandbox-fs before reply; update the dedicated
session test to assert add_extension and restart are invoked.
Co-authored-by: Cursor <cursoragent@cursor.com>
Agent runs quiesced stdio MCP extensions including sandbox-fs, but reconcile
skipped re-adding missing stdio extensions and treated absent listings as OK.
Preserve sandbox-fs across quiesce and re-add other required stdio extensions
on the next reconcile so generate_image and write_file stay available.
Co-authored-by: Cursor <cursoragent@cursor.com>
Write h5_usage_records when plan quota fully covers a session bill so
WeChat and H5 consumption stays visible in admin usage history.
Co-authored-by: Cursor <cursoragent@cursor.com>
Allow margin/FX/cost-mode knobs to be overridden via h5_billing_admin_config so memind_adm can adjust DeepSeek billing without editing env.
Co-authored-by: Cursor <cursoragent@cursor.com>
Umami creator labels read event_data.username; server events only sent
owner_label, so dashboards fell back to MindSpace UUID path segments.
Co-authored-by: Cursor <cursoragent@cursor.com>
When passive Recognition is empty, convert AMR to mp3 and call WeChat
addvoicetorecofortext before the existing asr.tkmind.cn fallback.
Co-authored-by: Cursor <cursoragent@cursor.com>
Grant-only bonus adjustments cannot lower capacity below the stored plan
limit; admin set now updates period_images_limit when needed.
Co-authored-by: Cursor <cursoragent@cursor.com>
Goosed GET /sessions/:id returns accumulated_cost null while memind_sessions
PG has the real upstream cost. Fall back to PG before token estimate billing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Public generated pages were calling umami.identify(owner_id), collapsing
every visitor into the creator session. Anonymous visits now skip identify;
logged-in viewers identify with their own distinct id.
Co-authored-by: Cursor <cursoragent@cursor.com>
Record closure of feature/billing-session-cost-priority after merge to main
and 103 release 20260805-095542-44121df.
Co-authored-by: Cursor <cursoragent@cursor.com>