Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
d1e6e7f
feat(memory): add standalone service and viewer
hijzy Aug 25, 2026
ae74d37
fix(memory): preserve standalone service lifecycle
hijzy Aug 25, 2026
9e05a5b
fix(agent): enable image generation by default
Wang-Daoji Aug 26, 2026
dada878
test(frontend): align nickname flow assertion
Wang-Daoji Aug 26, 2026
9433196
feat(tui): add slash command menu
Wang-Daoji Aug 28, 2026
95c2c84
Merge upstream/v1.1.2 into codex/memmy-tui-slash-worktree
Wang-Daoji Aug 28, 2026
5219706
Merge pull request #313 from Wang-Daoji/codex/memmy-tui-slash-worktree
Wang-Daoji Aug 28, 2026
fcc5b8e
fix(memory): refresh L3 context before each turn
Wang-Daoji Aug 28, 2026
d74e1e8
Merge upstream/main into codex/memory-world-model-worktree
Wang-Daoji Aug 28, 2026
36a656b
Merge remote-tracking branch 'upstream/v1.1.2' into codex/memory-worl…
Wang-Daoji Aug 28, 2026
2c9da62
Merge pull request #314 from Wang-Daoji/codex/memory-world-model-work…
Wang-Daoji Aug 28, 2026
9ed3c93
fix(backend): mitigate Codex full scan memory pressure
Aug 31, 2026
8b6aba6
fix(windows): harden NSIS upgrade migration and prune runtime
Aug 31, 2026
8f01da2
feat(cli): make onboard interactive by default
hijzy Aug 31, 2026
853521a
Merge pull request #320 from hijzy/v1.1.2
hijzy Aug 31, 2026
a875eb7
feat(memory): align viewer and runtime behavior
hijzy Aug 31, 2026
d27647f
Merge upstream/v1.1.2 into main
hijzy Aug 31, 2026
b35ee3c
fix(linux): install migration runtime dependencies
hijzy Aug 31, 2026
a1224f8
Merge pull request #321 from hijzy/main
hijzy Aug 31, 2026
0edd5b4
fix: harden model indexing and agent scans
EF1874 Aug 31, 2026
a419816
fix(windows): repair CLI PATH and startup integration
Aug 31, 2026
ea4d41b
fix(onboarding): prevent first report output leaks
hijzy Aug 31, 2026
6947084
feat(settings): filter token usage by model
EF1874 Aug 31, 2026
a40ffbf
fix(settings): refresh token usage on focus
EF1874 Aug 31, 2026
dbc7373
fix(agent): respect active home for token usage
EF1874 Aug 31, 2026
7e20440
Merge pull request #324 from hijzy/main
hijzy Aug 31, 2026
04c0f0f
fix(models): separate local and cloud embeddings
EF1874 Aug 31, 2026
33ba416
merge upstream/v1.1.2 into Windows NSIS upgrade branch
Sep 1, 2026
8731e75
Merge pull request #319 from EF1874/codex/token-usage-model-filter-v1…
ZongYue99 Sep 1, 2026
0920355
Merge pull request #322 from EF1874/codex/fix-model-index-scan-v1.1.2
ZongYue99 Sep 1, 2026
fb11602
Merge pull request #325 from EF1874/codex/fix-windows-cli-path-v1.1.2
ZongYue99 Sep 1, 2026
1b86223
merge latest upstream/v1.1.2 into Windows NSIS upgrade branch
Sep 1, 2026
b8ffd82
docs: add terminal usage guides
EF1874 Sep 1, 2026
521aa94
[AI-assist] fix(desktop): upload pasted files
EF1874 Sep 1, 2026
5c5dc9b
fix(analytics): route app launch through cloud
Sep 1, 2026
f0a73bd
fix(windows): validate relocation sources before relay
Sep 1, 2026
54c10f5
Merge pull request #327 from EF1874/codex/docs-terminal-guides
wustzdy Sep 1, 2026
8403ee5
Merge pull request #329 from EF1874/codex/paste-file-upload-v1.1.2
wustzdy Sep 1, 2026
78745dd
Merge pull request #330 from EF1874/codex/windows-nsis-runtime-prune-…
wustzdy Sep 1, 2026
312dc9d
fix(memory): migrate legacy summary timeout
hijzy Sep 1, 2026
cb5c27e
Merge pull request #332 from hijzy/main
hijzy Sep 1, 2026
5ac36dd
Merge pull request #331 from antalike/tracking
ZongYue99 Sep 1, 2026
ff06186
fix(memory): harden embedding input limits
hijzy Sep 1, 2026
a8eeb4d
Merge pull request #333 from hijzy/main
hijzy Sep 1, 2026
259661a
docs:Remove the /dream* slash command from the docs.
Sep 1, 2026
176f935
Merge pull request #336 from leslie1992-dqp/v1.1.2
hijzy Sep 1, 2026
931bfef
fix(tui): reset sessions and extend memory timeout
hijzy Sep 1, 2026
01f0be7
Merge pull request #337 from hijzy/main
hijzy Sep 1, 2026
f95ccf2
release: Memmy v1.1.2
Sep 1, 2026
fa76cf7
fix(memory): harden standalone service contracts
Sep 1, 2026
e349058
test(smoke): restore executable release coverage
Sep 1, 2026
88563de
fix(agent): satisfy changed lint
Sep 1, 2026
c63292c
Merge remote-tracking branch 'refs/remotes/upstream/v1.1.2' into rele…
Sep 1, 2026
149e9f6
Merge remote-tracking branch 'refs/remotes/upstream/main' into releas…
Sep 1, 2026
4eea5f5
fix: make agent source scans persistent and streaming
hijzy Sep 2, 2026
dfbe3aa
fix(mac): package standalone memory runtime correctly
Sep 2, 2026
73b3b22
fix: include scan core in Linux CLI archive
hijzy Sep 2, 2026
17f929b
fix(memory): merge duplicate legacy raw turns
hijzy Sep 2, 2026
988605e
Merge release/v1.1.2 into main
hijzy Sep 2, 2026
87d2ded
fix: normalize staged agent source ids
hijzy Sep 2, 2026
f083f4d
Merge pull request #342 from hijzy/main
hijzy Sep 2, 2026
7453b84
fix(dsh): support old and new conversation APIs
hijzy Sep 2, 2026
31b167b
Merge pull request #344 from hijzy/main
hijzy Sep 2, 2026
7580586
fix(onboarding): preserve completion across BYOK switch
Sep 2, 2026
9709ce4
Merge pull request #345 from syzsunshine219/codex/backport-onboarding…
syzsunshine219 Sep 2, 2026
4ca431f
fix(mac): exit fullscreen before tray hide (MEMMY-362)
Sep 2, 2026
2615866
fix(desktop): refine update status controls
Sep 3, 2026
b482ca0
Merge pull request #347 from dolnna/codex/refine-update-status-contro…
syzsunshine219 Sep 3, 2026
55ea7ac
Merge pull request #346 from MemTensor/codex/memmy-362-v1.1.2-pr
syzsunshine219 Sep 3, 2026
f9b1b95
Merge pull request #341 from Memtensor-AI/release/v1.1.2
syzsunshine219 Sep 3, 2026
eee9460
Merge upstream/main into release/v1.1.2
Sep 3, 2026
c7feae0
fix(memory): keep full scan message counts stable
Sep 3, 2026
db7cb65
fix(windows): package standalone memory runtime offline
Sep 3, 2026
f7685b3
Merge pull request #350 from EF1874/fix/windows-memory-runtime-packag…
syzsunshine219 Sep 3, 2026
ff0a09d
fix(memory): support opaque embedding aliases
hijzy Sep 3, 2026
efc9dda
Merge pull request #351 from hijzy/main
hijzy Sep 3, 2026
5aceaa8
fix(memory): guard summary model context
hijzy Sep 3, 2026
7e3eacc
Merge pull request #352 from hijzy/main
hijzy Sep 3, 2026
ee6ead6
test(windows): track packaged runtime manifest helper
Sep 3, 2026
d709688
Merge pull request #353 from Memtensor-AI/codex/fix-packaged-runtime-…
syzsunshine219 Sep 4, 2026
20f69e1
fix(memory): allow migration-aware runtime health startup
Sep 3, 2026
02c6684
fix(memory): cap health retry backoff at deadline
Sep 4, 2026
15ca157
Merge pull request #354 from Memtensor-AI/codex/memory-migration-time…
syzsunshine219 Sep 4, 2026
7ee8fdf
fix(backend): align Codex scan mitigation with PR 328
hijzy Sep 4, 2026
fccd90a
Merge pull request #2 from hijzy/agent/pr328-adapt-fork-main
hijzy Sep 4, 2026
9df1b28
Merge pull request #355 from hijzy/main
hijzy Sep 4, 2026
e7fa162
Merge pull request #328 from zzh7777/fix/codex-scan-oom-mitigation
hijzy Sep 4, 2026
e657cad
test: isolate release gate fixtures
Sep 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
39 changes: 39 additions & 0 deletions .github/release-notes/v1.1.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Memmy v1.1.2

## Highlights

- Added a standalone, independently versioned Memory service and browser viewer. The viewer brings Overview, Memories, Tasks, Experiences, World Models, Skills, User Memories, Analytics, Logs, and Settings into one place.
- Moved built-in Cross-Agent discovery, history import, and integration management into Memory itself for Cursor, Claude Code, Codex, OpenCode, OpenClaw, Hermes, DeepSeek Harness, WorkBuddy, Pi, and QwenWork. Scans support startup and scheduled synchronization, incremental resume, progress reporting, pause, and stop controls.
- Added a slash-command menu to the terminal UI, with live Gateway commands, search and filtering, keyboard navigation and completion, plus safe local `/stop`, `/last-compaction`, and `/quit` actions.

## Agent and CLI improvements

- `memmy onboard` now opens the interactive setup flow by default. Use `memmy onboard --defaults` for non-interactive initialization or refresh; the terminal documentation has been reorganized around the current CLI and TUI flows.
- Enabled the image-generation tool gate by default while continuing to honor an explicit `enabled: false` setting.
- Memory-backed L3 context is now refreshed before every system-prompt build, so later turns can see updated World Model context while retaining the last successful snapshot across transient read failures.
- Improved compatibility with Claude Sonnet 5 and Claude Opus 4.7/5 endpoints by omitting unsupported temperature fields.

## Memory improvements

- Added `memmy-memory install`, `upgrade`, and service lifecycle flows for versioned standalone runtimes. Runtime archives are checksum-verified, activated atomically, registered with the platform user service manager, health-checked, and protected against accidental downgrades.
- Memmy Desktop now leaves the standalone Memory service running after the desktop app exits by default. A new **Stop Memory when quitting** setting opts back into stopping it, and the CLI stop flow verifies the local service before requesting shutdown.
- Long inputs for known OpenAI embedding models are now tokenized and split with a safe 7,500-token ceiling. OpenAI-compatible deployment aliases can opt into the same handling with `memmyMemory.embedding.maxInputTokens` or `MEMMY_EMBEDDING_MAX_INPUT_TOKENS`.
- Improved large Agent-history imports by tracking targeted summary and indexing progress, isolating token-limit failures, avoiding unnecessary deterministic retries, and tolerating Agent Skill links that disappear during a scan.

## Desktop, setup, and migration reliability

- The desktop composer now accepts supported pasted document and text files in addition to pasted images.
- Settings can filter local BYOK token usage by model, distinguish duplicate model names by endpoint or preset, and refresh usage when the Token tab regains focus. Usage recording also follows the active `MEMMY_HOME`.
- Model settings now distinguish Memmy Platform local Embedding, cloud Embedding, and custom Embedding assignments. An unconfigured account assignment is no longer silently treated as local.
- First-use reports now hide model planning preambles and internal task-context payloads, strip raw HTML while preserving visible text, and disable unnecessary thinking output for the account report model.
- Windows packaged installs now expose the `.cmd` CLI launchers through the user `PATH`, preserve unrelated and expanded-path entries, and make the launch-at-login setting reflect the effective registered startup command.
- Hardened Windows upgrades and installation-directory moves with source and target validation, junction checks, transactional data relocation, rollback and interrupted-upgrade recovery, and protection against unrelated existing runtimes.
- Desktop packaging now prunes only verified non-runtime dependency files with fail-closed guards, while Linux CLI installs include the workspace dependencies required by packaged migrations.

## Upgrade notes

- Memory, its viewer, and `memmy-memory` now have the independent component version `2.1.0`; this is intentionally separate from the Memmy application version `1.1.2`.
- Scripts that previously used `memmy onboard --wizard` must switch to `memmy onboard`. Unattended setup should use `memmy onboard --defaults`.
- Existing configurations whose Memory summary timeout is exactly the legacy default of 45 seconds are migrated to 180 seconds. User-defined timeout values are preserved.
- After upgrading, quitting Memmy Desktop no longer stops Memory unless **Stop Memory when quitting** is enabled.
- Image generation is enabled by default at the tool-gate level. Set `tools.imageGeneration.enabled: false` to retain an explicitly disabled configuration.
102 changes: 102 additions & 0 deletions .github/workflows/memory-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: Memory 2.1 Release

on:
workflow_dispatch:
inputs:
version:
description: Memory version (X.Y.Z)
required: true
default: 2.1.0
push:
tags:
- "memory-v*"

permissions:
contents: write

jobs:
verify:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm run typecheck -w @memmy/memory
- run: npm test -w @memmy/memory
- run: npx vitest run App/shell/desktop/tests/packaged-runtime-boundary.test.ts App/shell/desktop/tests/runtime-services.test.ts

runtime:
needs: verify
strategy:
fail-fast: false
matrix:
include:
- target: darwin-arm64
os: macos-14
- target: darwin-x64
os: macos-15-intel
- target: linux-arm64
os: ubuntu-24.04-arm
- target: linux-x64
os: ubuntu-24.04
- target: windows-arm64
os: windows-11-arm
- target: windows-x64
os: windows-2025
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- name: Resolve version
id: version
shell: bash
run: |
version="${{ inputs.version }}"
if [[ -z "$version" ]]; then version="${GITHUB_REF_NAME#memory-v}"; fi
node -e 'if (!/^\d+\.\d+\.\d+$/.test(process.argv[1])) process.exit(1)' "$version"
echo "value=$version" >> "$GITHUB_OUTPUT"
- name: Build self-contained runtime
shell: bash
run: node Memory/src/cli/scripts/build-runtime.mjs --target "${{ matrix.target }}" --version "${{ steps.version.outputs.value }}" --output Memory/dist/release-part
- name: Build CLI launcher
shell: bash
env:
MEMMY_MEMORY_TARGET: ${{ matrix.target }}
MEMMY_MEMORY_VERSION: ${{ steps.version.outputs.value }}
run: bash Memory/src/cli/scripts/build-binary.sh
- uses: actions/upload-artifact@v4
with:
name: memory-${{ matrix.target }}
path: |
Memory/dist/release-part/*.tar.gz
Memory/src/cli/dist/binaries/*.tar.gz
if-no-files-found: error

publish:
needs: runtime
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: Memory/dist/release-input
- name: Resolve version
id: version
run: |
version="${{ inputs.version }}"
if [[ -z "$version" ]]; then version="${GITHUB_REF_NAME#memory-v}"; fi
echo "value=$version" >> "$GITHUB_OUTPUT"
- run: node Memory/src/cli/scripts/assemble-release.mjs Memory/dist/release-input Memory/dist/release "${{ steps.version.outputs.value }}"
- uses: softprops/action-gh-release@v2
with:
tag_name: memory-v${{ steps.version.outputs.value }}
name: Memmy Memory ${{ steps.version.outputs.value }}
generate_release_notes: true
files: Memory/dist/release/*
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ sessions/
.env.*
!.env.example
App/backend/src/adapters/outbound/skill-writer/workspace-bridge/memmy-workspace-bridge.mjs
Memory/src/agent-source/integration/workspace-bridge/memmy-workspace-bridge.mjs
13 changes: 13 additions & 0 deletions AgentSourceCore/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "@memmy/agent-source-core",
"version": "0.0.0",
"private": true,
"type": "module",
"main": "./dist/src/index.js",
"types": "./dist/src/index.d.ts",
"scripts": {
"build": "tsc -p tsconfig.json",
"typecheck": "tsc -p tsconfig.json --noEmit",
"test": "vitest run"
}
}
32 changes: 32 additions & 0 deletions AgentSourceCore/src/index.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { describe, expect, it } from "vitest";
import { conversationContentHash, orderedTurns, splitTurn, type ConversationMessage } from "./index.js";

const message = (id: string, role: ConversationMessage["role"], content: string, createdAt: string): ConversationMessage => ({
messageId: id, sourceId: "fixture", conversationId: "conversation", role, content, createdAt,
workspacePath: null, gitRoot: null, rawMeta: {}
});

describe("agent source core", () => {
it("emits stable turns across page boundaries", async () => {
const pages = (async function*() {
yield message("u1", "user", "hello", "2026-01-01T00:00:00Z");
yield message("t1", "tool", "tool", "2026-01-01T00:00:01Z");
yield message("a1", "assistant", "world", "2026-01-01T00:00:02Z");
yield message("u2", "user", "next", "2026-01-01T00:00:03Z");
yield message("a2", "assistant", "done", "2026-01-01T00:00:04Z");
})();
const turns = [];
for await (const turn of orderedTurns(pages)) turns.push(turn);
expect(turns).toHaveLength(2);
expect(turns.map((turn) => turn.messages[0]?.messageId)).toEqual(["u1", "u2"]);
});

it("splits oversized content with unique part hashes", () => {
const turn = { sourceId: "fixture", conversationId: "conversation", turnIndex: 0, messages: [message("u", "user", "x".repeat(30_000), "2026-01-01T00:00:00Z"), message("a", "assistant", "ok", "2026-01-01T00:00:01Z")] };
const parts = splitTurn(turn, 4000, 1_000_000);
expect(parts.length).toBeGreaterThan(1);
expect(new Set(parts.map((part) => part.contentHash)).size).toBe(parts.length);
expect(parts.every((part) => Buffer.byteLength(part.content) <= 1_000_000)).toBe(true);
expect(conversationContentHash(turn.messages)).toHaveLength(64);
});
});
Loading
Loading