Repository navigation
Conversation
…mand
A turn routed as end_topic used to be dropped from L1 capture as a whole,
so feedback, work conventions and instructions sent together with the
closing words never reached L1, user memory or the episode reward.
Only a bare end-topic command ("结束会话" / "不聊了") is still kept out of
L1. Every other end_topic turn now goes through the same capture decision
as a normal turn; the closed episode waits for that decision before
reflection and reward are queued.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Preserve complete extraction for PDF and Office documents and return bounded chunks with continuation offsets. Select PDF pages before pagination and keep continuation hints within the tool result budget. Add regression fixtures, runtime recovery checks, reproducible benchmarks, and isolated account-model review scripts. Record 140 passing tests, typecheck results, and three successful live synthetic scenarios. Leave plain-text pagination and extraction caching outside this change.
A trailing newline was shown as an extra blank line, so patches against one-line memory files failed to match. Co-authored-by: Cursor <cursoragent@cursor.com>
Keep the long-document fix limited to the runtime change and its tests. Co-authored-by: Cursor <cursoragent@cursor.com>
Every memmy-memory run reports memmy_cli_* events to the cloud analytics endpoint. resolveCommandIdentity took the second positional word as command_action unconditionally, which was meant for subcommands such as `session close`. For search, add, get and delete that word is the search query, the memory text or the memory id, so it was sent verbatim. An unrecognized first word was also sent verbatim as command_group. command_action is now reported only when the first word is a group with subcommands (service, session, turn, raw) and the second word is one of that group's known subcommands; raw methods match case-insensitively, as runRaw does. An unrecognized first word is reported as command_group "unknown". The known commands live in a small table in analytics.ts that mirrors runCommand and mapTopLevelCommand. has_session_id and has_turn_id are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The session close route only woke the auto worker when the close result listed closed episodes, jobs, or scheduled evolution. For an L3 World Model v2 session, closeSession also freezes the pending L3 evidence batches and queues l3_world_model_update jobs, but it does not return them. When the session's episode had already closed earlier (idle timeout or end_topic), closedEpisodeIds was empty and nothing woke the worker. The worker does not poll, so the new L3 jobs stayed queued until an unrelated request happened to wake it. The close route now always schedules the worker, as the token compaction boundary already does after freezing batches. A close with no follow-up work costs one empty drain. A new REST contract test closes an L3 v2 session whose episode had already ended and checks that the worker picks up the frozen L3 job. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Synchronize the main branch code to the v1.2.0 branch
App updates left previously installed Cursor, Claude Code, and Codex hooks on the first-install script. Startup now compares the stored hook fingerprint and reinstalls when it is missing or stale. Co-authored-by: Cursor <cursoragent@cursor.com>
Keep the hook revision test beside the Cursor resume test renamed on v1.2.1. Co-authored-by: Cursor <cursoragent@cursor.com>
DeepSeek Harness no longer accepts a generic plugin message source, and completed assistant turns are recorded as assistant/message. Co-authored-by: Cursor <cursoragent@cursor.com>
DeepSeek Harness rejects official model requests when an enabled plugin manifest has no version. Co-authored-by: Cursor <cursoragent@cursor.com>
fix(dsh): restore Memmy plugin activation across supported DSH tags
fix: remove legacy memory embedding config
A stored fingerprint no longer counts as current unless the on-disk script and bridge match it, and the fingerprint is recorded only after the rest of the install succeeds. Co-authored-by: Cursor <cursoragent@cursor.com>
Send account identity with plugin and scan events, and coerce boolean params so GA4 keeps the events.
fix: Hook无法自动更新
fix(analytics): report each newly stored memory once
…ding fix(documents): 支持长文档分段续读
…-count fix:记忆更新出错
…ry-repair-queue fix: deprioritize startup summary repairs
…-worker fix(memory): wake the worker after every session close
v1.2.2 requires the turn capture decision to return a non-empty l1.title together with l1.summary. The mixed feedback-and-closing test stub only returned a summary, so the capture decision threw and the closing L1 stayed in resolving instead of being activated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…and-action fix(memory): stop sending CLI arguments as analytics command actions
fix(memory): stop dropping end-topic turns that carry feedback from L1
Synchronize the latest code from the main branch to v1.2.2
…-format fix: 兼容 LM Studio 的 JSON 响应格式
…upgrade-v1.2.2 fix(memory): replace stale runtimes by build identity
fix: 限制 Memory 初始化等待,避免会话卡在思考中
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.
问题定位
首次 API Key 登录或在模型库添加模型时,如果新模型与已有配置属于同一 Provider,且使用相同协议、API 地址、有效 API Key 和额外请求参数,前端仍可能为新模型生成另一个 endpoint ID。首次登录读取配置时,已有 API Key 会被脱敏;客户端无法直接用用户输入的明文 Key 与脱敏值判断 endpoint 是否相同,因此提交了重复定义。
连接测试只验证 API 地址和 Key 能否调用模型服务,不会写入模型目录,所以测试可以成功。点击保存后,后端原有的重复定义校验会抛出
Duplicate endpoint definition for Provider openai,导致配置保存失败,新模型没有落盘。保存新模型分为两阶段:先创建模型 preset,再写入模型用途 assignment。只在后端合并 endpoint 还不够;如果前端仍使用原 endpoint ID 查找刚创建的 preset,第二阶段就无法正确引用服务端保留的 endpoint。
修复内容
验证结果
npm run test -w @memmy/backend -- src/infrastructure/memmy-config/tests/model-config-catalog.test.ts— 17 项通过。npm run test -w @memmy/frontend/desktop -- src/api/tests/config-client.test.ts— 10 项通过。git diff --check upstream/v1.2.2...HEAD— 通过。gpt-6-luna。连接测试成功,保存未再报重复定义;配置只保留一个 endpoint,新 preset 指向该 endpoint,重启后模型仍存在。验收使用临时应用副本、本地模型列表 mock 和 fake key,没有调用外部模型服务。