Skip to content

release: Memmy v1.1.3 - #361

Merged
syzsunshine219 merged 22 commits into
mainfrom
release/v1.1.3
Sep 8, 2026
Merged

syzsunshine219 merged 22 commits into
mainfrom
release/v1.1.3

Conversation

@syzsunshine219

@syzsunshine219 syzsunshine219 commented Sep 5, 2026 •

Copy link
Copy Markdown
Collaborator

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:

  • Local Harness Full verification passed. All 12 checks returned pass; the local API matrix and renderer/interface checks were not applicable to the diff. Lint, affected typechecks, workspace tests, smoke plans, full build, and distribution checks executed successfully.
  • Backend 835, Agent 5134, Desktop 247, and Memory 789 tests passed. Existing platform-specific skips remain; the native Windows test skipped on macOS was exercised by CI.
  • Windows Memory CI: 65/65 unit and upgrade checks plus 1/1 native scheduled-task test passed, with zero skips. The native test covers real registration, startup, duplicate-run prevention, process cleanup after task termination, restart, Unicode paths, and file logging.
  • Linux CLI CI passed: build and repeated installation / CLI smoke on x64 and arm64.

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 EMISSINGTARGET for the AgentSourceCore runtime 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.3 into 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.3 head fd086adea0dfa8449bc97fe9184ba95110080f19 was pulled and revalidated without product-code changes. The first Full run hit a 3-second timeout in the Agent /restart priority-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_evolution model. The remaining reproduced case requires a retained legacy raw memmyMemory.evolution connection: editing only the Summary card in Memory Viewer can send summary plus roleRouting.summary, which also resynchronizes evolution from that stale connection. The real Viewer adapter, route write-back, loadMemmyConfig, and resolveEvolutionConfig then select agent_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 EMISSINGTARGET entry 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.

@syzsunshine219

Copy link
Copy Markdown
Collaborator Author

Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify.

@syzsunshine219 syzsunshine219 changed the title release/v1.1.3 release: Memmy v1.1.3 Sep 5, 2026
memory-lee and others added 7 commits September 7, 2026 12:01
…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
@syzsunshine219

Copy link
Copy Markdown
Collaborator Author

Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify.

eric1hua and others added 3 commits September 7, 2026 16:10
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
@syzsunshine219

Copy link
Copy Markdown
Collaborator Author

Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify.

@syzsunshine219

Copy link
Copy Markdown
Collaborator Author

Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify.

@syzsunshine219

Copy link
Copy Markdown
Collaborator Author

Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify.

@syzsunshine219

Copy link
Copy Markdown
Collaborator Author

Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify.

@syzsunshine219

Copy link
Copy Markdown
Collaborator Author

Project Harness review handoff marker. Only reviews submitted strictly after this GitHub timestamp qualify.

@syzsunshine219
syzsunshine219 marked this pull request as ready for review September 8, 2026 06:14
@syzsunshine219
syzsunshine219 merged commit 1807e3a into main Sep 8, 2026
5 checks passed
@syzsunshine219
syzsunshine219 deleted the release/v1.1.3 branch September 8, 2026 06:46

This branch was successfully deployed

1 active deployment
release — fd086ade Deployed Sep 8, 2026 by syzsunshine219 via release #27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants