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>
Remove per-user gray gates so WeChat MP always honors agentReplyTimeoutMs and enables Page Data Aider review when the feature flag is on.
Co-authored-by: Cursor <cursoragent@cursor.com>
103 production uses launchd goosed-native instead of Docker bind mounts;
fall back to kickstarting native services when docker compose is unavailable.
Co-authored-by: Cursor <cursoragent@cursor.com>
The self-hosted macOS runner cannot run apt-get or install Linux-only Sharp
packages; gate CI on sqlite availability and platform-specific Sharp setup.
Also wait for ephemeral Express listen before fetch to avoid AUTH-08 flakes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Drop optional cover meta from the fixture and scope UI-08 console errors to
the final public-page view so chat /api/goals polling does not fail the gate.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add period_images_bonus and ledger tracking, gate image_make on remaining quota,
expose admin image-quota routes, show remaining image quota in the balance popover,
and document that admin UI must live in memind_adm (5174) not ops.
Co-authored-by: Cursor <cursoragent@cursor.com>
Record that the branch core LLM router work is already on main and production,
and mark the stale branch as read-only to prevent merge or release reuse.
Co-authored-by: Cursor <cursoragent@cursor.com>
Collect request-scoped tool messages in the WeChat SSE stream, infer this
turn Page Data HTML via mtime when messages lack writes, and limit bind and
delivery smoke to those paths so historical already_bound pages cannot block new surveys.
Co-authored-by: Cursor <cursoragent@cursor.com>
Include already_bound auto-bind skips and request-scoped relative paths
when building Page Data delivery artifacts, so pre-bound survey pages are
verified and linked instead of failing the finish guard.
Co-authored-by: Cursor <cursoragent@cursor.com>
Tunnel agents can report spawn scheduled while the SSH forward is already
healthy; treating that as failure caused successful releases to roll back.
Co-authored-by: Cursor <cursoragent@cursor.com>
Historical workspace Page Data HTML was failing delivery smoke checks and
blocking new survey links from reaching WeChat users. Add a webhook scenario
test script for 103 regression runs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Prevent chat-to-page flows like writing a poem then saying "做成页面吧" from opening
a fresh session without carried content, failing with a vague error, or letting Memory
page-template preferences replace the immediate topic.
Co-authored-by: Cursor <cursoragent@cursor.com>
Generate SVG/PNG sidecars at HTML delivery and after share-preview repair so
forwarded service-account links get a raster og:image when only meta exists.
Co-authored-by: Cursor <cursoragent@cursor.com>
Intent routing and reply content now both trigger HTML delivery: public links,
public/*.html paths, or html writes in the agent reply enable artifact recovery,
link attachment, and fail-closed when the claimed page is missing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Persist formal replies when WeChat customer-service quota is exhausted,
claim them once on the next passive response, skip progress notices for
page generation, and suppress failure notices while a formal reply is pending.
Co-authored-by: Cursor <cursoragent@cursor.com>
Skip share-preview repair for tiny HTML fragments so sandbox write tests
and partial tool outputs stay unchanged while real pages still get metadata.
Co-authored-by: Cursor <cursoragent@cursor.com>
Production WeChat delivery strips localPath from artifacts, so share-preview
auto-repair never wrote back to HTML. Resolve paths via publishDir +
relativePath, repair at materialize and delivery prep, and pass h5Root from
Portal so page.generate can patch missing meta before sending links.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pages with real HTML content but missing description, mindspace-cover, or
platform brand markers are patched in-place so WeChat link delivery no longer
fails after successful generation.
Co-authored-by: Cursor <cursoragent@cursor.com>
Skip memory injection for short filler messages, demote page-workflow memory
pollution, keep scheduled automation off page.generate, and fail scheduled
tasks that only return clarification instead of deliverables.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add keyword fallback and dedupe for pgvector resolve, score personal vs episodic memories by relevance, record WeChat recall product events, and disable broken chatrecall on Postgres session storage.
Co-authored-by: Cursor <cursoragent@cursor.com>
Schedule LLM now binds an explicit provider key and fails closed on network errors so dead relay endpoints cannot block ordinary chat; relay bootstrap is opt-in only.
Co-authored-by: Cursor <cursoragent@cursor.com>
The admin page treated every section as enabled via section.enabled, but runtimeControl has no such field; derive status from agent resolve/injection/lifecycle flags and proxy runtime status from Portal.
Co-authored-by: Cursor <cursoragent@cursor.com>
Give WeChat MP its own chat.general→page.generate LLM refinement layer with memindadm toggles, shadow mode, and canary openids so service account routing stays independent of the H5 chatIntentRouter.
Co-authored-by: Cursor <cursoragent@cursor.com>
Skip hot-adding stdio extensions goosed omits from /extensions, stabilize MCP
scope during session start, and wire chat intent routing into the agent-run worker.
Co-authored-by: Cursor <cursoragent@cursor.com>