Repository navigation
release: Memmy v1.1.3 - #361
Merged
Merged
Conversation
…start-v1-1-3 fix(memory): repair signed-package service restart on Windows and macOS
Collaborator
Author
|
Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify. |
…ages MODEL_INPUT_CAPABILITIES is an exact-match catalog of model IDs reviewed against vendor docs, and getModelInputModalities falls back to text-only on a miss. For a BYOK preset that fallback is a guess about a model we have never seen: the runner refused the request locally, never called the endpoint, and told the user to switch to a multimodal model even when their own model reads images fine. BYOK also cannot use the account image2text fallback, so there was no recovery path. Distinguish "catalog says text-only" from "catalog has no entry". A BYOK model with no entry now goes to the provider, which returns the real error if it genuinely cannot read images (already classified as image_input_unsupported). Account-managed models and models the catalog explicitly marks text-only are unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…nput fix(agent): let BYOK models outside the capability catalog receive images
Memmy v1.1.2 on Windows can leave a persistent CMD window showing Memory capture and summary logs. The login task launches a `.cmd` directly, and the service launcher inherits its console. Hiding the installer's `schtasks` call cannot hide a task started independently by Task Scheduler. This change starts the task through a hidden WScript host that waits for Node, keeps the service child attached, and appends stdout/stderr and launcher errors to `memory-service/logs/service.log` and `service-error.log`. Task settings ignore duplicate runs, remove the execution time limit, and allow background operation on battery. Windows standalone restart uses the existing local service rebuild loop so it does not depend on a helper surviving termination of its own task. Existing launchers are refreshed on install, compatible reuse and start. Desktop also repairs a retained legacy task before returning early for a healthy compatible runtime, waits for a live database owner to finish startup/migrations first, and re-probes before taking ownership. Repair matches only the old task command for the current home, updates its definition without starting it, and preserves configuration, data and compatible runtime selection. Validation: - Regression tests were observed failing before implementation for task entry/logging/refresh/stop behavior, Windows restart dispatch and Desktop's same-version reuse path. - Targeted Memory/CLI suites: 79 passed, 1 Windows-only integration test skipped on macOS. - Targeted Desktop lifecycle suites: 64 passed. Windows native validation remains required: this development host is macOS. An opt-in integration test creates a unique temporary task and checks the real WScript/Node process tree, duplicate runs, stop/start, Unicode paths, output logs and main-window handles. On an interactive Windows desktop, run in PowerShell: ```powershell $env:MEMMY_WINDOWS_SERVICE_INTEGRATION = '1' npm test -w @memmy/memory -- tests/runtime-installer-windows.integration.test.ts ``` Also visually confirm there is no transient console flash during install/login/restart. The integration test never registers the product's default task. Target: `release/v1.1.3`. No version publication or merge is included.
fix(memory): keep account summaries on dedicated model
…console fix(memory): keep Windows background service console-free
Collaborator
Author
|
Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify. |
splitText computed `candidate` before the size check, then flushed `current` and reset it to "" — but the trailing `else` branch reassigned `current = candidate`, which still contained the text that had just been flushed. The accumulator therefore never shrank: every subsequent line tripped the limit again and pushed an ever-growing prefix into `chunks`. Output grew quadratically and the work cubically, so importing a single conversation turn containing one large multi-line message never finished. Observed on a 181 KB Claude Code message: the scan spun at ~85% CPU with RSS climbing to 900 MB and produced zero rows in 4.5 hours. Sibling `splitUtf8` already does this correctly (`current = character` after its flush); splitText was simply missing that step. After a flush `current` is "", so restarting the accumulator from `line` is exactly the intended behaviour and is a no-op on every path that did not flush. The existing oversized-content test uses `"x".repeat(30_000)`, a single line with no newlines, which takes the `line.length > maxChars` branch and never reaches the faulty `else` — hence the gap. The three added tests cover multi-line input, the token budget, and multibyte byte boundaries. On the unfixed code they report 28.8x content amplification, parts over the token budget, and 200 CJK characters emitted 19,397 times. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jdi5HaeP7tYuApntyxPtXq
splitUtf8 called Buffer.byteLength(current + character) once per character. Each call forces V8 to flatten the growing cons string, so a single call was O(n^2) in the length of the chunk being built. Track the running byte count instead and add Buffer.byteLength(character) per code point. Iterating a string with for...of always yields whole code points, so the running total matches what the previous expression measured, and the split boundaries are unchanged. Verified equivalent against the previous implementation over 72,690 cases (12,316 inputs — 5,723 real captured agent messages, length-truncated slices of them, and synthetic edge cases covering lone surrogates, astral plane characters, emoji ZWJ sequences and CJK — crossed with six maxBytes values from 8 to 512 KiB): zero differing outputs. Splitting a 16 KB chunk 20 times goes from 2058 ms to 11 ms. This is independent of the splitText correctness fix in the previous commit and can be dropped without affecting it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jdi5HaeP7tYuApntyxPtXq
Collaborator
Author
|
Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify. |
fix(agent-source): stop splitText re-emitting flushed text
Collaborator
Author
|
Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify. |
Collaborator
Author
|
Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify. |
Collaborator
Author
|
Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify. |
…y-startup fix(desktop): keep legacy plugin migration out of Memory startup
fix account memory role routing
Collaborator
Author
|
Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify. |
syzsunshine219
marked this pull request as ready for review
September 8, 2026 06:14
syzsunshine219
requested review from
Wang-Daoji,
ZongYue99 and
hijzy
as code owners
September 8, 2026 06:14
This branch was successfully deployed
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.
This release updates Memmy Desktop and Agent to 1.1.3 and the independently versioned Memory service, viewer, and CLI to 2.1.1.
Packaged Memory could fail to start or restart because of Windows scheduled-task permissions, visible console launchers, or macOS service-manager races. Desktop now owns its bundled child, can restart persistent Memory after its IPC connection closes, and safely upgrades older Desktop-owned runtimes after migrations and database-lock release. Optional legacy-task repair failures no longer prevent Desktop from using or starting Memory.
Windows scheduled tasks now use a hidden launcher, Unicode task XML, file logging, and child-process cleanup when their host exits. The service retains a short cleanup window before forced termination of its own child. The release also includes custom BYOK image inputs, dedicated account summary-model routing, and the merged AgentSourceCore split-text fixes (#360, #366, #367, #368, #370).
Linux release builds explicitly select release tags to avoid same-name branches. Windows CI directly queries the active session, gives native PowerShell checks a bounded execution budget, and requires the scheduled-task integration test to execute without skips. Default unit-test Memory discovery is isolated from developer-machine services and credentials.
Validation on
f0e9aee77d064ee17c1f64a4ed7adec45aaa9fcf:Release notes.
Release preparation still requires independent maintainer review and four signed installers from the final source: Windows x64 and macOS arm64, each in cn and intl editions. Signed-package installation and transient-console-flash acceptance have not been performed. An earlier local Mac packaging attempt hit
EMISSINGTARGETfor theAgentSourceCoreruntime lockfile target. This Harness-only verification did not rerun packaging, so the designated packaging machine must confirm its current outcome; the historical entry is not a new failure result.Merging
release/v1.1.3into main triggers the full GitHub Draft Release workflow, which requires the four installers already present in OSS; it does not build desktop packages. No publication was performed in this task. The PR does not claim to resolve the persistent-health-503 reports #349/#357; #358 and #348 are not part of this candidate.Validation snapshot: fd086ad
The latest
release/v1.1.3headfd086adea0dfa8449bc97fe9184ba95110080f19was pulled and revalidated without product-code changes. The first Full run hit a 3-second timeout in the Agent/restartpriority-layer test. Its isolated 21-test file passed, followed by a passing Full confirmation on the unchanged source. Both Full records are retained; the initial intermittent failure is not represented as a code fix.The confirmation passed Backend 835, Agent 5134, Desktop 249, and Memory 789 tests, plus six smoke-plan tests. Additional checks passed: release-workflow 35, packaging guards 30, Migrations 117 (one skipped), and AgentSourceCore five source tests. The Full local API matrix and renderer/interface checks were not applicable to this diff.
The same-head Windows CI passed 65 unit/upgrade checks and one native scheduled-task test with zero skips. Linux CI passed build and x64/arm64 repeated-installation smoke.
Clarified residual case on fd086ad: #372/#373 are merged, and normal account-mode startup correctly selects the dedicated
memory_evolutionmodel. The remaining reproduced case requires a retained legacy rawmemmyMemory.evolutionconnection: editing only the Summary card in Memory Viewer can sendsummaryplusroleRouting.summary, which also resynchronizes evolution from that stale connection. The real Viewer adapter, route write-back,loadMemmyConfig, andresolveEvolutionConfigthen selectagent_chat/byok. Normal startup and summary editing without the legacy connection remain correct. This is a specific save/write-back edge case, not a claim that the merged startup fix is ineffective.The earlier Mac
EMISSINGTARGETentry is a historical local attempt, not a failure reproduced by this Harness run. Its status on the designated packaging machine still needs confirmation; it must not be presented as proof that current packaging remains broken. Signed-installer and installation-acceptance results are outside this local Harness run. This validation run did not build signed packages, merge main, or publish a release.