chore(release): publish Memmy v1.0.5 - #174
Merged
Merged
Conversation
merge main to v1.0.5
fix: unify cross-agent action backgrounds
fix: simplify memory tool call headings
feat(memory): commit episode routing on turn complete
fix(memory): separate retrieval content and validate L3 evidence
fix(memory): finalize episode rewards and processing
chore: docs
feat(memory): link related memory details
…emTensor#139) Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell
…t tour Ship the first-chat relay/opt-in cards, memory verification loop, and a memory-first product tour without local mock switches or test-only scaffolding. Co-authored-by: Cursor <cursoragent@cursor.com>
fix(backend): share scan permission per installation
fix(backend): refine onboarding permissions and actions
fix: surface structured quota exhaustion errors
MemTensor#148) Keep params.user_id for event dimensions while also exposing userId alongside clientId so the cloud proxy can filter and map GA4 user identity. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com>
Skip the logs tour step when scan is denied, and stabilize spotlight scrolling and bubble placement so onboarding steps stay readable. Co-authored-by: Cursor <cursoragent@cursor.com>
Emit viewed/skipped per tour step with flow branching, and defer onboarding_completed until nickname. Co-authored-by: Cursor <cursoragent@cursor.com>
Feat/onboarding activation
Co-authored-by: jiachengzhen <jiacz@memtensor.cn>
Persist the onboarding insight report into a WebUI session as soon as it is generated, then open that history on home so finishing the guide no longer triggers a duplicate Thinking turn. Co-authored-by: Cursor <cursoragent@cursor.com>
Feat/onboarding activation
fix: seed first-report chat instead of re-running the agent
Feat/onboarding activation
* chore: show invitation token * codeowners
fix: onboarding
fix(onboarding): streamline first report handoff
…ensor#162) Use workbuddy://task?action=start&prompt= for GUI handoff, prefix the continuation text with /memmy-memory, and fall back to opening the app without Terminal. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com>
Dev onboarding
Wang-Daoji
added a commit
that referenced
this pull request
Aug 7, 2026
* feat: exclude dependency tests and docs from desktop packages (#123) * fix: unify cross-agent action backgrounds * fix: simplify memory tool call headings * feat(memory): commit episode routing on turn complete * fix(memory): separate retrieval content and validate L3 evidence * fix(memory): finalize episode rewards and processing * chore: docs * chore: readme * chore: show invitation token (#135) * feat(memory): link related memory details * feat(analytics): track desktop memory adds during agent-source scans (#139) Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: merge pkg && optimize pkg (#140) * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: tighten onboarding activation with cross-agent relay and product tour Ship the first-chat relay/opt-in cards, memory verification loop, and a memory-first product tour without local mock switches or test-only scaffolding. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(backend): share scan permission per installation * chore: reorganize desktop packaging internal scripts (#141) * fix(backend): refine onboarding permissions and actions * fix: surface structured quota exhaustion errors * feat(memory): add time-filtered trace recall * feat: trust Codex hooks and reveal account identifiers * fix(config): fail loud on invalid config instead of silently using defaults (#7) loadConfig() caught YAML parse and schema validation errors, logged a console.warn, and returned a fresh default Config. Any onboarded settings (including BYOK provider credentials) were silently discarded and the CLI kept running against defaults with no non-zero exit, contradicting the project's fail-loud philosophy. Throw a new ConfigError (ConfigLoadError for bad YAML/schema, EnvValueError for missing env var references, both now exported) when the config file exists but is invalid. A missing config file still returns the defaults unchanged, since first-run `memmy onboard` depends on that path. The CLI entrypoint (main.ts) catches ConfigError specifically and prints a concise `memmy: <reason>` message with a non-zero exit code instead of an unhandled stack trace; other entrypoints (serve/gateway route through the same CLI main(), and the frontend-bridge/websocket HTTP layer already has generic catch blocks that turn thrown errors into clean error responses). * feat(feishu): add QR bot setup (#127) * fix(memmy-memory): surface memory-service outages instead of silent fallback (#9) MemmyMemoryHook.beforeRun/afterRun/sessionStart/sessionEnd caught every connection error from the memory service and only recorded it on an unread `lastError` field, so an unreachable service (e.g. default http://127.0.0.1:18960 down) degraded completely silently: no CLI/log warning, and the LLM turn context received neither a recall block nor any notice, indistinguishable from "memory checked, found nothing". This contradicted the README's fail-loud promise and drove agents to silently fall back to the local MEMORY.md/history.jsonl store. - Replace the blanket try/catch with per-phase handling that emits a deduped console.warn (once per session, reset on recovery) and injects an honest <memmy_memory_status status="unavailable"> notice into the user message so the model is told memory wasn't checked, instead of implying nothing relevant was found. - Drop the stale in-flight turn entry on a failed beforeRun so afterRun doesn't try to complete a turn that was never opened server-side. - Document the new status tag in the memory context protocol prompt. Failures still never crash the turn (fail-loud, not fail-crash). * chore: add embedding mode into pkg (#147) * feat(analytics): send userId at the top level of /api/analytics/events (#148) Keep params.user_id for event dimensions while also exposing userId alongside clientId so the cloud proxy can filter and map GA4 user identity. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: refine product tour for deny-scan and scroll placement Skip the logs tour step when scan is denied, and stabilize spotlight scrolling and bubble placement so onboarding steps stay readable. Co-authored-by: Cursor <cursoragent@cursor.com> * feat: reshape onboarding analytics for funnel-friendly step tracking Emit viewed/skipped per tour step with flow branching, and defer onboarding_completed until nickname. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(settings): show BYOK usage detail copy (#155) Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix: seed first-report chat instead of re-running the agent Persist the onboarding insight report into a WebUI session as soon as it is generated, then open that history on home so finishing the guide no longer triggers a duplicate Thinking turn. Co-authored-by: Cursor <cursoragent@cursor.com> * feat(onboarding): focus initial report on preferences and latest task * feat(onboarding): prioritize first report memory handoff * codeowners (#159) * chore: show invitation token * codeowners * fix(onboarding): preserve first report context across agents * fix(onboarding): streamline first report handoff * fix: open WorkBuddy with task deeplink and /memmy-memory prompt (#162) Use workbuddy://task?action=start&prompt= for GUI handoff, prefix the continuation text with /memmy-memory, and fall back to opening the app without Terminal. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * chore(release): prepare Memmy v1.0.5 * test(release): align v1.0.5 smoke contracts * test(config): expect invalid files to fail loudly --------- Co-authored-by: Wang Daoji <75928131+Wang-Daoji@users.noreply.github.com> Co-authored-by: Hustzdy <67457465+wustzdy@users.noreply.github.com> Co-authored-by: jiang <fdjzy@qq.com> Co-authored-by: Jiang <33757498+hijzy@users.noreply.github.com> Co-authored-by: ZongYue <52625187+ZongYue99@users.noreply.github.com> Co-authored-by: antalike <527949167@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: shsfcx <shsfcx@shsfcxdeMacBook-Pro.local> Co-authored-by: Daoji Wang <627665797@qq.com> Co-authored-by: Xinmin Zeng <135568692+fancyboi999@users.noreply.github.com> Co-authored-by: Ericwong <970699442@qq.com> Co-authored-by: antalike <> Co-authored-by: zhiqi <99724206+dolnna@users.noreply.github.com> Co-authored-by: jiachengzhen <jiacz@memtensor.cn>
ZongYue99
added a commit
that referenced
this pull request
Aug 11, 2026
* feat: exclude dependency tests and docs from desktop packages (#123) * fix: unify cross-agent action backgrounds * fix: simplify memory tool call headings * feat(memory): commit episode routing on turn complete * fix(memory): separate retrieval content and validate L3 evidence * fix(memory): finalize episode rewards and processing * chore: docs * chore: readme * chore: show invitation token (#135) * feat(memory): link related memory details * feat(analytics): track desktop memory adds during agent-source scans (#139) Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: merge pkg && optimize pkg (#140) * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: tighten onboarding activation with cross-agent relay and product tour Ship the first-chat relay/opt-in cards, memory verification loop, and a memory-first product tour without local mock switches or test-only scaffolding. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(backend): share scan permission per installation * chore: reorganize desktop packaging internal scripts (#141) * fix(backend): refine onboarding permissions and actions * fix: surface structured quota exhaustion errors * feat(memory): add time-filtered trace recall * feat: trust Codex hooks and reveal account identifiers * fix(config): fail loud on invalid config instead of silently using defaults (#7) loadConfig() caught YAML parse and schema validation errors, logged a console.warn, and returned a fresh default Config. Any onboarded settings (including BYOK provider credentials) were silently discarded and the CLI kept running against defaults with no non-zero exit, contradicting the project's fail-loud philosophy. Throw a new ConfigError (ConfigLoadError for bad YAML/schema, EnvValueError for missing env var references, both now exported) when the config file exists but is invalid. A missing config file still returns the defaults unchanged, since first-run `memmy onboard` depends on that path. The CLI entrypoint (main.ts) catches ConfigError specifically and prints a concise `memmy: <reason>` message with a non-zero exit code instead of an unhandled stack trace; other entrypoints (serve/gateway route through the same CLI main(), and the frontend-bridge/websocket HTTP layer already has generic catch blocks that turn thrown errors into clean error responses). * feat(feishu): add QR bot setup (#127) * fix(memmy-memory): surface memory-service outages instead of silent fallback (#9) MemmyMemoryHook.beforeRun/afterRun/sessionStart/sessionEnd caught every connection error from the memory service and only recorded it on an unread `lastError` field, so an unreachable service (e.g. default http://127.0.0.1:18960 down) degraded completely silently: no CLI/log warning, and the LLM turn context received neither a recall block nor any notice, indistinguishable from "memory checked, found nothing". This contradicted the README's fail-loud promise and drove agents to silently fall back to the local MEMORY.md/history.jsonl store. - Replace the blanket try/catch with per-phase handling that emits a deduped console.warn (once per session, reset on recovery) and injects an honest <memmy_memory_status status="unavailable"> notice into the user message so the model is told memory wasn't checked, instead of implying nothing relevant was found. - Drop the stale in-flight turn entry on a failed beforeRun so afterRun doesn't try to complete a turn that was never opened server-side. - Document the new status tag in the memory context protocol prompt. Failures still never crash the turn (fail-loud, not fail-crash). * chore: add embedding mode into pkg (#147) * feat(analytics): send userId at the top level of /api/analytics/events (#148) Keep params.user_id for event dimensions while also exposing userId alongside clientId so the cloud proxy can filter and map GA4 user identity. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: refine product tour for deny-scan and scroll placement Skip the logs tour step when scan is denied, and stabilize spotlight scrolling and bubble placement so onboarding steps stay readable. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(memory): keep short pattern terms out of raw JSON metadata columns Two-char tokens like "ts" skip FTS and hit the pattern channel, which LIKE-matched them against raw properties_json/info_json. Every trace carries the JSON key "ts", so unrelated recent memories outranked real hits. Short ASCII terms now only match id, key, value and tags; longer terms and CJK bigrams keep their metadata reach. * fix(backend): stop capturing tool results as the user query Claude Code transcripts store tool results as user-role records, so the Stop-event transcript fallback could save tool output to memory as the user's query. Classify tool_result records as tool messages so the fallback finds the real prompt. * feat: reshape onboarding analytics for funnel-friendly step tracking Emit viewed/skipped per tour step with flow branching, and defer onboarding_completed until nickname. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(settings): show BYOK usage detail copy (#155) Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix: seed first-report chat instead of re-running the agent Persist the onboarding insight report into a WebUI session as soon as it is generated, then open that history on home so finishing the guide no longer triggers a duplicate Thinking turn. Co-authored-by: Cursor <cursoragent@cursor.com> * feat(onboarding): focus initial report on preferences and latest task * feat(onboarding): prioritize first report memory handoff * fix(onboarding): preserve first report context across agents * fix(onboarding): streamline first report handoff * fix(desktop): store Windows packaged data under install dir (#165) * feat(timezone): honor user UTC offsets across memory * feat: add Pi and QwenWork memory sources * fix: rename qwenwork display label * feat: add preset Agent selector * memmy-agent: Let every AI remember the same you - V1.0.5 (#173) * codeowners (#159) * chore: show invitation token * codeowners * fix: open WorkBuddy with task deeplink and /memmy-memory prompt (#162) Use workbuddy://task?action=start&prompt= for GUI handoff, prefix the continuation text with /memmy-memory, and fall back to opening the app without Terminal. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * release: Memmy v1.0.5 (#170) * chore(release): prepare Memmy v1.0.5 * test(release): align v1.0.5 smoke contracts * test(config): expect invalid files to fail loudly --------- Co-authored-by: jiachengzhen <jiacz@memtensor.cn> --------- Co-authored-by: Jiang <33757498+hijzy@users.noreply.github.com> Co-authored-by: antalike <527949167@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: zhaxi <syzsunshine219@gmail.com> Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix(desktop): keep conversation composer growing and scrollable (#171) Resync textarea height on draft/chrome changes, and stop locking single-line mode behind overflow:hidden so wrapped input is not clipped. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * fix(memory): show quota error title for 40309 * fix(memory): harden cross-agent onboarding * fix(memory): hide unverified agent drafts * chore(release): publish Memmy v1.0.5 (#174) * feat: exclude dependency tests and docs from desktop packages (#123) * fix: unify cross-agent action backgrounds * fix: simplify memory tool call headings * feat(memory): commit episode routing on turn complete * fix(memory): separate retrieval content and validate L3 evidence * fix(memory): finalize episode rewards and processing * chore: docs * chore: readme * chore: show invitation token (#135) * feat(memory): link related memory details * feat(analytics): track desktop memory adds during agent-source scans (#139) Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: merge pkg && optimize pkg (#140) * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: tighten onboarding activation with cross-agent relay and product tour Ship the first-chat relay/opt-in cards, memory verification loop, and a memory-first product tour without local mock switches or test-only scaffolding. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(backend): share scan permission per installation * chore: reorganize desktop packaging internal scripts (#141) * fix(backend): refine onboarding permissions and actions * fix: surface structured quota exhaustion errors * feat(memory): add time-filtered trace recall * feat: trust Codex hooks and reveal account identifiers * fix(config): fail loud on invalid config instead of silently using defaults (#7) loadConfig() caught YAML parse and schema validation errors, logged a console.warn, and returned a fresh default Config. Any onboarded settings (including BYOK provider credentials) were silently discarded and the CLI kept running against defaults with no non-zero exit, contradicting the project's fail-loud philosophy. Throw a new ConfigError (ConfigLoadError for bad YAML/schema, EnvValueError for missing env var references, both now exported) when the config file exists but is invalid. A missing config file still returns the defaults unchanged, since first-run `memmy onboard` depends on that path. The CLI entrypoint (main.ts) catches ConfigError specifically and prints a concise `memmy: <reason>` message with a non-zero exit code instead of an unhandled stack trace; other entrypoints (serve/gateway route through the same CLI main(), and the frontend-bridge/websocket HTTP layer already has generic catch blocks that turn thrown errors into clean error responses). * feat(feishu): add QR bot setup (#127) * fix(memmy-memory): surface memory-service outages instead of silent fallback (#9) MemmyMemoryHook.beforeRun/afterRun/sessionStart/sessionEnd caught every connection error from the memory service and only recorded it on an unread `lastError` field, so an unreachable service (e.g. default http://127.0.0.1:18960 down) degraded completely silently: no CLI/log warning, and the LLM turn context received neither a recall block nor any notice, indistinguishable from "memory checked, found nothing". This contradicted the README's fail-loud promise and drove agents to silently fall back to the local MEMORY.md/history.jsonl store. - Replace the blanket try/catch with per-phase handling that emits a deduped console.warn (once per session, reset on recovery) and injects an honest <memmy_memory_status status="unavailable"> notice into the user message so the model is told memory wasn't checked, instead of implying nothing relevant was found. - Drop the stale in-flight turn entry on a failed beforeRun so afterRun doesn't try to complete a turn that was never opened server-side. - Document the new status tag in the memory context protocol prompt. Failures still never crash the turn (fail-loud, not fail-crash). * chore: add embedding mode into pkg (#147) * feat(analytics): send userId at the top level of /api/analytics/events (#148) Keep params.user_id for event dimensions while also exposing userId alongside clientId so the cloud proxy can filter and map GA4 user identity. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: refine product tour for deny-scan and scroll placement Skip the logs tour step when scan is denied, and stabilize spotlight scrolling and bubble placement so onboarding steps stay readable. Co-authored-by: Cursor <cursoragent@cursor.com> * feat: reshape onboarding analytics for funnel-friendly step tracking Emit viewed/skipped per tour step with flow branching, and defer onboarding_completed until nickname. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(settings): show BYOK usage detail copy (#155) Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix: seed first-report chat instead of re-running the agent Persist the onboarding insight report into a WebUI session as soon as it is generated, then open that history on home so finishing the guide no longer triggers a duplicate Thinking turn. Co-authored-by: Cursor <cursoragent@cursor.com> * feat(onboarding): focus initial report on preferences and latest task * feat(onboarding): prioritize first report memory handoff * codeowners (#159) * chore: show invitation token * codeowners * fix(onboarding): preserve first report context across agents * fix(onboarding): streamline first report handoff * fix: open WorkBuddy with task deeplink and /memmy-memory prompt (#162) Use workbuddy://task?action=start&prompt= for GUI handoff, prefix the continuation text with /memmy-memory, and fall back to opening the app without Terminal. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * chore(release): prepare Memmy v1.0.5 * test(release): align v1.0.5 smoke contracts * test(config): expect invalid files to fail loudly --------- Co-authored-by: Wang Daoji <75928131+Wang-Daoji@users.noreply.github.com> Co-authored-by: Hustzdy <67457465+wustzdy@users.noreply.github.com> Co-authored-by: jiang <fdjzy@qq.com> Co-authored-by: Jiang <33757498+hijzy@users.noreply.github.com> Co-authored-by: ZongYue <52625187+ZongYue99@users.noreply.github.com> Co-authored-by: antalike <527949167@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: shsfcx <shsfcx@shsfcxdeMacBook-Pro.local> Co-authored-by: Daoji Wang <627665797@qq.com> Co-authored-by: Xinmin Zeng <135568692+fancyboi999@users.noreply.github.com> Co-authored-by: Ericwong <970699442@qq.com> Co-authored-by: antalike <> Co-authored-by: zhiqi <99724206+dolnna@users.noreply.github.com> Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix(desktop): mask account identifiers * fix(backend): quote hook commands for Windows shells (#153) Hook commands used POSIX single quotes, which cmd.exe and PowerShell cannot execute, so installed hooks never ran on Windows. Use double quotes on win32 and keep the POSIX form elsewhere. Fixes #149 * fix(openai-api): report turn token usage (#181) * fix(desktop): set microphone usage description by package edition (#185) Write NSMicrophoneUsageDescription from cn/intl at macOS package time. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: Enhance error handling and metadata propagation for model errors (#182) * feat(scripts): add Windows clear-all utility (#190) Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * feat(analytics): track tools and connections outcomes to cloud GA4 (#191) Report channel/integration connect, disconnect, fail, and mid-flow cancel via backend analytics so real usage lands in the cloud event pipeline. Co-authored-by: antalike <> * polish readme (#194) * readme * readme-contributors * readme-slogan * feat: add startup splash localization and HTML rendering (#193) * fix(settings): show Windows status bar copy (#192) * fix(settings): show Windows status bar copy * test(frontend): align quality checks --------- Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix(onboarding): hide first-report wrapper tags (#196) * fix(backend): hide simplified first-report wrappers * test(backend): align integration delete expectations --------- Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix(settings): default intl language selector to English (#195) * fix(settings): default intl language selector to English * test(frontend): align quality checks --------- Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * polish readme (#197) * readme * readme-contributors * readme-slogan * README.md:video * Update README.zh-CN.md-video * polish readme --------- Co-authored-by: Wang Daoji <75928131+Wang-Daoji@users.noreply.github.com> Co-authored-by: Hustzdy <67457465+wustzdy@users.noreply.github.com> Co-authored-by: jiang <fdjzy@qq.com> Co-authored-by: Jiang <33757498+hijzy@users.noreply.github.com> Co-authored-by: antalike <527949167@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: shsfcx <shsfcx@shsfcxdeMacBook-Pro.local> Co-authored-by: Daoji Wang <627665797@qq.com> Co-authored-by: Xinmin Zeng <135568692+fancyboi999@users.noreply.github.com> Co-authored-by: Ericwong <970699442@qq.com> Co-authored-by: antalike <> Co-authored-by: DevMello <pranavy2008@gmail.com> Co-authored-by: zhiqi <99724206+dolnna@users.noreply.github.com> Co-authored-by: zhaxi <syzsunshine219@gmail.com> Co-authored-by: jiachengzhen <jiacz@memtensor.cn> Co-authored-by: jiang <hijzy@qq.com> Co-authored-by: Pranav Yerramaneni <69360966+DevMello@users.noreply.github.com> Co-authored-by: EF1874 <57347272+EF1874@users.noreply.github.com>
Merged
ZongYue99
added a commit
that referenced
this pull request
Aug 17, 2026
* feat: polish readme (#101) * feat(auth): attach persistent device ID to authentication requests * fix(auth): use agent email verification endpoint * feat(quota): display cloud-configured token usage by scene * feat(dev): configure desktop edition from .env * feat: polish README * fix: show email verification errors * feat: polish readme * feat: polish readme * feat: polish readme * feat: polish readme * feat: support per-session model selection * fix: separate startup and recurring agent scans * fix: use writable cache for local embedding model * fix(memory): show latest retry error once * [Human] fix: correct * refactor: simplify session DAG builder prompt * [Human] fix: correct * fix: unify startup migration entry * refactor: finalize task metadata on DAG switches * fix: prevent product tour navigation loop * fix(dev): recognize model presets before gateway startup * fix model provider settings list * fix desktop provider api type defaults * feat: exclude dependency tests and docs from desktop packages (#123) * fix(agent): preserve channel streaming capability in GUI sync * fix desktop external user message display * fix(cli): show terminal target options in root help * fix: unify cross-agent action backgrounds * fix: simplify memory tool call headings * feat(desktop): restyle chat model selector * feat(desktop): add model provider logos * feat(desktop): show IM channel icons in task titles * fix(desktop): align IM icons with title line height * fix(desktop): use app icon for account models * feat(memory): commit episode routing on turn complete * fix(desktop): align model selector icons * fix(memory): separate retrieval content and validate L3 evidence * fix(memory): finalize episode rewards and processing * chore: docs * chore: readme * chore: show invitation token (#135) * feat(memory): link related memory details * feat(analytics): track desktop memory adds during agent-source scans (#139) Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: merge pkg && optimize pkg (#140) * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: tighten onboarding activation with cross-agent relay and product tour Ship the first-chat relay/opt-in cards, memory verification loop, and a memory-first product tour without local mock switches or test-only scaffolding. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(backend): share scan permission per installation * chore: reorganize desktop packaging internal scripts (#141) * fix(backend): refine onboarding permissions and actions * fix: surface structured quota exhaustion errors * feat(memory): add time-filtered trace recall * feat: trust Codex hooks and reveal account identifiers * fix(config): fail loud on invalid config instead of silently using defaults (#7) loadConfig() caught YAML parse and schema validation errors, logged a console.warn, and returned a fresh default Config. Any onboarded settings (including BYOK provider credentials) were silently discarded and the CLI kept running against defaults with no non-zero exit, contradicting the project's fail-loud philosophy. Throw a new ConfigError (ConfigLoadError for bad YAML/schema, EnvValueError for missing env var references, both now exported) when the config file exists but is invalid. A missing config file still returns the defaults unchanged, since first-run `memmy onboard` depends on that path. The CLI entrypoint (main.ts) catches ConfigError specifically and prints a concise `memmy: <reason>` message with a non-zero exit code instead of an unhandled stack trace; other entrypoints (serve/gateway route through the same CLI main(), and the frontend-bridge/websocket HTTP layer already has generic catch blocks that turn thrown errors into clean error responses). * feat(feishu): add QR bot setup (#127) * fix(memmy-memory): surface memory-service outages instead of silent fallback (#9) MemmyMemoryHook.beforeRun/afterRun/sessionStart/sessionEnd caught every connection error from the memory service and only recorded it on an unread `lastError` field, so an unreachable service (e.g. default http://127.0.0.1:18960 down) degraded completely silently: no CLI/log warning, and the LLM turn context received neither a recall block nor any notice, indistinguishable from "memory checked, found nothing". This contradicted the README's fail-loud promise and drove agents to silently fall back to the local MEMORY.md/history.jsonl store. - Replace the blanket try/catch with per-phase handling that emits a deduped console.warn (once per session, reset on recovery) and injects an honest <memmy_memory_status status="unavailable"> notice into the user message so the model is told memory wasn't checked, instead of implying nothing relevant was found. - Drop the stale in-flight turn entry on a failed beforeRun so afterRun doesn't try to complete a turn that was never opened server-side. - Document the new status tag in the memory context protocol prompt. Failures still never crash the turn (fail-loud, not fail-crash). * chore: add embedding mode into pkg (#147) * feat(analytics): send userId at the top level of /api/analytics/events (#148) Keep params.user_id for event dimensions while also exposing userId alongside clientId so the cloud proxy can filter and map GA4 user identity. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: add persistent cross-turn goal mode * fix: expose goal slash command in web ui * fix: polish goal command composer ui * feat: refine product tour for deny-scan and scroll placement Skip the logs tour step when scan is denied, and stabilize spotlight scrolling and bubble placement so onboarding steps stay readable. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: hide goal command argument hint * fix: normalize goal request display and titles * fix(memory): keep short pattern terms out of raw JSON metadata columns Two-char tokens like "ts" skip FTS and hit the pattern channel, which LIKE-matched them against raw properties_json/info_json. Every trace carries the JSON key "ts", so unrelated recent memories outranked real hits. Short ASCII terms now only match id, key, value and tags; longer terms and CJK bigrams keep their metadata reach. * fix(backend): stop capturing tool results as the user query Claude Code transcripts store tool results as user-role records, so the Stop-event transcript fallback could save tool output to memory as the user's query. Classify tool_result records as tool messages so the fallback finds the real prompt. * feat: reshape onboarding analytics for funnel-friendly step tracking Emit viewed/skipped per tour step with flow branching, and defer onboarding_completed until nickname. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: stabilize goal UI hydration * fix(settings): show BYOK usage detail copy (#155) Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix: seed first-report chat instead of re-running the agent Persist the onboarding insight report into a WebUI session as soon as it is generated, then open that history on home so finishing the guide no longer triggers a duplicate Thinking turn. Co-authored-by: Cursor <cursoragent@cursor.com> * feat(onboarding): focus initial report on preferences and latest task * fix: correct goal timer and composer action * feat(onboarding): prioritize first report memory handoff * codeowners (#159) * chore: show invitation token * codeowners * fix(onboarding): preserve first report context across agents * fix(onboarding): streamline first report handoff * fix(agent): report unchanged file mutations * test(agent): align invalid config expectation * fix: open WorkBuddy with task deeplink and /memmy-memory prompt (#162) Use workbuddy://task?action=start&prompt= for GUI handoff, prefix the continuation text with /memmy-memory, and fall back to opening the app without Terminal. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * fix(desktop): store Windows packaged data under install dir (#165) * feat(timezone): honor user UTC offsets across memory * fix: streamline DAG snapshot projection * feat: add Pi and QwenWork memory sources * fix: rename qwenwork display label * feat: add preset Agent selector * release: Memmy v1.0.5 (#170) * chore(release): prepare Memmy v1.0.5 * test(release): align v1.0.5 smoke contracts * test(config): expect invalid files to fail loudly --------- Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * memmy-agent: Let every AI remember the same you - V1.0.5 (#173) * codeowners (#159) * chore: show invitation token * codeowners * fix: open WorkBuddy with task deeplink and /memmy-memory prompt (#162) Use workbuddy://task?action=start&prompt= for GUI handoff, prefix the continuation text with /memmy-memory, and fall back to opening the app without Terminal. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * release: Memmy v1.0.5 (#170) * chore(release): prepare Memmy v1.0.5 * test(release): align v1.0.5 smoke contracts * test(config): expect invalid files to fail loudly --------- Co-authored-by: jiachengzhen <jiacz@memtensor.cn> --------- Co-authored-by: Jiang <33757498+hijzy@users.noreply.github.com> Co-authored-by: antalike <527949167@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: zhaxi <syzsunshine219@gmail.com> Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix(desktop): keep conversation composer growing and scrollable (#171) Resync textarea height on draft/chrome changes, and stop locking single-line mode behind overflow:hidden so wrapped input is not clipped. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * fix(memory): show quota error title for 40309 * fix(memory): harden cross-agent onboarding * fix(memory): hide unverified agent drafts * test(desktop): align product tour initial tab * chore(release): publish Memmy v1.0.5 (#174) * feat: exclude dependency tests and docs from desktop packages (#123) * fix: unify cross-agent action backgrounds * fix: simplify memory tool call headings * feat(memory): commit episode routing on turn complete * fix(memory): separate retrieval content and validate L3 evidence * fix(memory): finalize episode rewards and processing * chore: docs * chore: readme * chore: show invitation token (#135) * feat(memory): link related memory details * feat(analytics): track desktop memory adds during agent-source scans (#139) Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: merge pkg && optimize pkg (#140) * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: merge pkg shell * feat: tighten onboarding activation with cross-agent relay and product tour Ship the first-chat relay/opt-in cards, memory verification loop, and a memory-first product tour without local mock switches or test-only scaffolding. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(backend): share scan permission per installation * chore: reorganize desktop packaging internal scripts (#141) * fix(backend): refine onboarding permissions and actions * fix: surface structured quota exhaustion errors * feat(memory): add time-filtered trace recall * feat: trust Codex hooks and reveal account identifiers * fix(config): fail loud on invalid config instead of silently using defaults (#7) loadConfig() caught YAML parse and schema validation errors, logged a console.warn, and returned a fresh default Config. Any onboarded settings (including BYOK provider credentials) were silently discarded and the CLI kept running against defaults with no non-zero exit, contradicting the project's fail-loud philosophy. Throw a new ConfigError (ConfigLoadError for bad YAML/schema, EnvValueError for missing env var references, both now exported) when the config file exists but is invalid. A missing config file still returns the defaults unchanged, since first-run `memmy onboard` depends on that path. The CLI entrypoint (main.ts) catches ConfigError specifically and prints a concise `memmy: <reason>` message with a non-zero exit code instead of an unhandled stack trace; other entrypoints (serve/gateway route through the same CLI main(), and the frontend-bridge/websocket HTTP layer already has generic catch blocks that turn thrown errors into clean error responses). * feat(feishu): add QR bot setup (#127) * fix(memmy-memory): surface memory-service outages instead of silent fallback (#9) MemmyMemoryHook.beforeRun/afterRun/sessionStart/sessionEnd caught every connection error from the memory service and only recorded it on an unread `lastError` field, so an unreachable service (e.g. default http://127.0.0.1:18960 down) degraded completely silently: no CLI/log warning, and the LLM turn context received neither a recall block nor any notice, indistinguishable from "memory checked, found nothing". This contradicted the README's fail-loud promise and drove agents to silently fall back to the local MEMORY.md/history.jsonl store. - Replace the blanket try/catch with per-phase handling that emits a deduped console.warn (once per session, reset on recovery) and injects an honest <memmy_memory_status status="unavailable"> notice into the user message so the model is told memory wasn't checked, instead of implying nothing relevant was found. - Drop the stale in-flight turn entry on a failed beforeRun so afterRun doesn't try to complete a turn that was never opened server-side. - Document the new status tag in the memory context protocol prompt. Failures still never crash the turn (fail-loud, not fail-crash). * chore: add embedding mode into pkg (#147) * feat(analytics): send userId at the top level of /api/analytics/events (#148) Keep params.user_id for event dimensions while also exposing userId alongside clientId so the cloud proxy can filter and map GA4 user identity. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: refine product tour for deny-scan and scroll placement Skip the logs tour step when scan is denied, and stabilize spotlight scrolling and bubble placement so onboarding steps stay readable. Co-authored-by: Cursor <cursoragent@cursor.com> * feat: reshape onboarding analytics for funnel-friendly step tracking Emit viewed/skipped per tour step with flow branching, and defer onboarding_completed until nickname. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(settings): show BYOK usage detail copy (#155) Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix: seed first-report chat instead of re-running the agent Persist the onboarding insight report into a WebUI session as soon as it is generated, then open that history on home so finishing the guide no longer triggers a duplicate Thinking turn. Co-authored-by: Cursor <cursoragent@cursor.com> * feat(onboarding): focus initial report on preferences and latest task * feat(onboarding): prioritize first report memory handoff * codeowners (#159) * chore: show invitation token * codeowners * fix(onboarding): preserve first report context across agents * fix(onboarding): streamline first report handoff * fix: open WorkBuddy with task deeplink and /memmy-memory prompt (#162) Use workbuddy://task?action=start&prompt= for GUI handoff, prefix the continuation text with /memmy-memory, and fall back to opening the app without Terminal. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * chore(release): prepare Memmy v1.0.5 * test(release): align v1.0.5 smoke contracts * test(config): expect invalid files to fail loudly --------- Co-authored-by: Wang Daoji <75928131+Wang-Daoji@users.noreply.github.com> Co-authored-by: Hustzdy <67457465+wustzdy@users.noreply.github.com> Co-authored-by: jiang <fdjzy@qq.com> Co-authored-by: Jiang <33757498+hijzy@users.noreply.github.com> Co-authored-by: ZongYue <52625187+ZongYue99@users.noreply.github.com> Co-authored-by: antalike <527949167@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: shsfcx <shsfcx@shsfcxdeMacBook-Pro.local> Co-authored-by: Daoji Wang <627665797@qq.com> Co-authored-by: Xinmin Zeng <135568692+fancyboi999@users.noreply.github.com> Co-authored-by: Ericwong <970699442@qq.com> Co-authored-by: antalike <> Co-authored-by: zhiqi <99724206+dolnna@users.noreply.github.com> Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix(agent): finalize capped turns and queue follow-ups * feat(ui): compact goal controls into one line * fix(ui): expand goal objective into free space * fix(ui): format goal duration by time units * feat: expose queued messages in chat * fix(desktop): mask account identifiers * fix(backend): quote hook commands for Windows shells (#153) Hook commands used POSIX single quotes, which cmd.exe and PowerShell cannot execute, so installed hooks never ran on Windows. Use double quotes on win32 and keep the POSIX form elsewhere. Fixes #149 * fix(openai-api): report turn token usage (#181) * fix(desktop): set microphone usage description by package edition (#185) Write NSMicrophoneUsageDescription from cn/intl at macOS package time. Co-authored-by: antalike <> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: account byok multi model on byok (#186) * feat(desktop): add account BYOK workspace and per-chat model switching Let account users keep platform models while adding personal BYOK connections, pick models per conversation, and preserve selections across mode switches when the model still exists. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(desktop): align BYOK mode transitions and model controls Keep local BYOK available across account logout while simplifying model configuration and removing unnecessary model-switch notices. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: shsfcx <shsfcx@shsfcxdeMacBook-Pro.local> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: Enhance error handling and metadata propagation for model errors (#182) * feat(agent): share session queue across GUI and TUI * feat(scripts): add Windows clear-all utility (#190) Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * feat(analytics): track tools and connections outcomes to cloud GA4 (#191) Report channel/integration connect, disconnect, fail, and mid-flow cancel via backend analytics so real usage lands in the cloud event pipeline. Co-authored-by: antalike <> * polish readme (#194) * readme * readme-contributors * readme-slogan * feat: add startup splash localization and HTML rendering (#193) * fix(settings): show Windows status bar copy (#192) * fix(settings): show Windows status bar copy * test(frontend): align quality checks --------- Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix(onboarding): hide first-report wrapper tags (#196) * fix(backend): hide simplified first-report wrappers * test(backend): align integration delete expectations --------- Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * fix(settings): default intl language selector to English (#195) * fix(settings): default intl language selector to English * test(frontend): align quality checks --------- Co-authored-by: jiachengzhen <jiacz@memtensor.cn> * polish readme (#197) * readme * readme-contributors * readme-slogan * README.md:video * Update README.zh-CN.md-video * polish readme * feat: steer queued GUI messages into active turns * perf: optimize memory imports and panel reads * fix(settings): restore controlled view props * fix(onboarding): harden report parsing and language choice * fix(dev): support legacy model defaults * Revert "Merge branch 'byok' into v1.0.6" This reverts commit b63f20c, reversing changes made to c445f32. * feat: add Goal workspace environment and Git evidence panel * fix: show project environment before task creation * fix: supervise local agent gateway from Electron * fix: unify and harden workspace environment state * feat: complete BYOK model catalog integration (#200) * feat: add interactive workspace environment controls * fix(asr): show OS-specific microphone permission guidance Surface denied mic access as a clear toast with macOS/Windows settings paths, and let Windows first-use continue to getUserMedia so the system prompt can appear. * Revert "feat: add interactive workspace environment controls" * Route desktop UI analytics through cloud instead of gtag. Keep app_launch on gtag for GA4 session bootstrap, and drop the unused backend Measurement Protocol client. * perf: optimize memory imports and panel reads * fix(onboarding): harden report parsing and language choice * fix(asr): show OS-specific microphone permission guidance Surface denied mic access as a clear toast with macOS/Windows settings paths, and let Windows first-use continue to getUserMedia so the system prompt can appear. * fix(memory): keep init config compatible with agent schema * refactor(migrations): consolidate v1.0.7 migrations * fix(frontend): place goal above composer * fix: show unavailable model message before send * fix: simplify custom model capability selection * feat: add account image-to-text fallback * test: align image fallback fixture * fix(agent): correct session status reporting * fix(models): constrain long model names * fix(memory): open model configuration from errors * fix(composer): reserve model action rail * fix(settings): disable deleting final BYOK connection * fix(settings): retain connection test status * fix(settings): separate task model actions * fix(settings): strengthen default model button * fix(frontend): preserve new-chat model rejection * fix(frontend): reject empty Goal composer sends * fix(frontend): delete shared model connections * fix: map provider names in delete confirmations * feat: show token usage details inline * fix: preserve single tildes in markdown temperature ranges * fix(settings): repair BYOK model configuration (#229) * fix memory retrieval filtering and skill timing * fix: remove GUI goal budget controls * fix: repair goal controls and active steering (#232) * fix: refine goal composer interactions (#233) Require explicit command selection, preserve safe slash actions in Goal mode, and align the active conversation composer with the new-task layout. Co-authored-by: shsfcx <shsfcx@shsfcxdeMacBook-Pro.local> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: integrate Memmy with DeepSeek Harness * fix: keep log card spacing consistent * fix(settings): keep add config below drag region * fix: package Memory workspace dependencies on Windows (#236) * polish readme (#239) * readme * polish readme * Update README.md --------- Co-authored-by: Daoji Wang <627665797@qq.com> Co-authored-by: jiang <fdjzy@qq.com> Co-authored-by: Jiang <33757498+hijzy@users.noreply.github.com> Co-authored-by: 黑布林 <11641432+heiheiyouyou@user.noreply.gitee.com> Co-authored-by: Wang Daoji <75928131+Wang-Daoji@users.noreply.github.com> Co-authored-by: Hustzdy <67457465+wustzdy@users.noreply.github.com> Co-authored-by: antalike <527949167@qq.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: shsfcx <shsfcx@shsfcxdeMacBook-Pro.local> Co-authored-by: Xinmin Zeng <135568692+fancyboi999@users.noreply.github.com> Co-authored-by: Ericwong <970699442@qq.com> Co-authored-by: antalike <> Co-authored-by: DevMello <pranavy2008@gmail.com> Co-authored-by: zhiqi <99724206+dolnna@users.noreply.github.com> Co-authored-by: zhaxi <syzsunshine219@gmail.com> Co-authored-by: jiachengzhen <jiacz@memtensor.cn> Co-authored-by: jiang <hijzy@qq.com> Co-authored-by: Pranav Yerramaneni <69360966+DevMello@users.noreply.github.com> Co-authored-by: EF1874 <57347272+EF1874@users.noreply.github.com> Co-authored-by: lc <284264018@qq.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
PR #170 was merged into
v1.0.5, so theGitHub Releaseworkflow did not run: it only listens for mergedrelease/v*pull requests whose base ismain. PR #172 subsequently merged the v1.0.5 source intomain.This corrective PR restores the intended trigger path:
Change
mainrelease source.Verification
npm run version:check: passed; all managed versions are1.0.5.npm run test:release-workflow: passed (10/10).Content-MD5and object size; both macOS DMGs passedhdiutil verify.v1.0.5Tag or GitHub Release exists at PR creation time.The previously documented, release-owner-approved packaging exception from #170 is unchanged. Merging this PR should automatically publish GitHub Release
v1.0.5.