@@ -4,6 +4,134 @@ All notable changes to total-agent-memory are documented in this file.
44Format follows [ Keep a Changelog] ( https://keepachangelog.com/en/1.1.0/ )
55and versions use [ Semantic Versioning] ( https://semver.org/ ) .
66
7+ ## [ 12.4.0] — 2026-05-26 — 100% functional through every install path
8+
9+ ` npx connect ` , ` bash install.sh ` , ` docker run ` , ` docker compose up ` — same
10+ 4 services, same MCP HTTP API, same dashboard. No path is missing pieces
11+ anymore.
12+
13+ ### Added — MCP Streamable HTTP transport
14+ - ` src/server.py ` now supports ` MCP_TRANSPORT=http ` (also accepts
15+ ` streamable-http ` ). Boots a uvicorn ASGI app exposing:
16+ - ` POST/GET/DELETE /mcp ` — MCP Streamable HTTP (spec 2025-03-26)
17+ - ` GET /healthz ` — DB-independent liveness probe
18+ - Same ` Server ` instance powers both stdio and HTTP, so all 60+ MCP tools
19+ are reachable over the network — IDEs, sidecars, k8s pods can all
20+ connect without a stdio bridge.
21+ - `` stateless=False `` keeps in-process session multiplexing; clean
22+ SIGTERM via uvicorn's ` timeout_graceful_shutdown=5 ` matches Docker
23+ stop-grace.
24+
25+ ### Added — scheduler service (cron-style)
26+ - ` docker/scheduler_daemon.py ` — stdlib-only scheduler that runs
27+ ` orphan-backfill ` 4×/day and ` check-updates ` weekly inside the same
28+ image. Replaces the ` mcuadros/ofelia ` external container and its
29+ Docker-socket mount.
30+ - npm wrapper 1.3.0 ships matching scheduler services on macOS
31+ (` StartCalendarInterval ` ) and Linux (` OnCalendar ` systemd timers).
32+
33+ ### Added — full single-image stack
34+ - ` tam-entrypoint ` shim routes ` docker run … mcp|dashboard|reflection|scheduler|all `
35+ through the supervisor.
36+ - Default ` TAM_SUPERVISOR_SERVICES=mcp,dashboard,reflection,scheduler `
37+ → ` docker run -p 3737:3737 -p 37737:37737 -v vol:/data ghcr.io/.../total-agent-memory `
38+ brings the whole product up with one command.
39+ - ` EXPOSE 3737 37737 ` ; HEALTHCHECK probes both ` /healthz ` endpoints.
40+ - ML caches pinned to the data volume (` HF_HOME ` , ` TRANSFORMERS_CACHE ` ,
41+ ` TORCHINDUCTOR_CACHE_DIR ` ) — prevents torch._ dynamo from crashing on
42+ containers with tmpfs ` /tmp ` < 100 MB.
43+ - Default ` OLLAMA_URL=http://host.docker.internal:11434 ` — single-image
44+ finds host Ollama out of the box on Docker Desktop / Windows / WSL2.
45+ Graceful degradation to FTS+embeddings if Ollama unreachable.
46+
47+ ### Added (v12.3 carry-over — never tagged separately)
48+ - ` docker/tam_supervisor.py ` — stdlib supervisor (prefix logging,
49+ exponential-backoff restarts, signal propagation).
50+ - ` /healthz ` endpoint on the dashboard.
51+ - Auto-initialise ` memory.db ` on first boot inside the container.
52+ - ` launchagents/com.total-agent-memory.dashboard.plist ` (installed by
53+ ` install.sh ` on macOS).
54+ - ` .github/workflows/docker.yml ` — multi-arch (amd64+arm64) build+push
55+ to ghcr on every git tag, with ` /healthz ` + ` /api/stats ` + docker
56+ healthcheck smoke before publish.
57+ - ` .github/workflows/smoke.yml ` — install-matrix smoke on every PR.
58+ - ` tests/smoke/install-docker-pull.sh ` , ` tests/smoke/install-sh-macos.sh ` .
59+ - Plist placeholders unified to ` __INSTALL_DIR__ ` / ` __MEMORY_DIR__ ` /
60+ ` __HOME__ ` . Old plists hardcoded ` __HOME__/claude-memory-server/... ` ,
61+ breaking clones with any other directory name.
62+
63+ ### Changed
64+ - ` docker-compose.yml ` ` mcp ` service is back (was removed in v12.3 when
65+ HTTP transport didn't exist). Same image as ` dashboard ` /` reflection ` ,
66+ ` command: ["mcp"] ` .
67+ - ` scheduler ` compose service now runs in the main image
68+ (` command: ["scheduler"] ` ) instead of ` mcuadros/ofelia ` — no more
69+ Docker socket mount in the stack.
70+ - ` install.sh ` Step 5 (old ` dashboard-service.sh install ` call) removed
71+ — it created a ` com.claude-total-memory.dashboard ` plist that fought
72+ the canonical ` com.total-agent-memory.dashboard ` plist for port 37737.
73+
74+ ### Fixed
75+ - ` bash install.sh ` under any clone name now writes valid plist/unit
76+ paths instead of references to a non-existent ` ~/claude-memory-server/ ` .
77+ - ` bash install.sh --uninstall ` cleans up the new dashboard plist too.
78+
79+ ## [ 12.3.0] — never tagged — folded into 12.4.0
80+
81+ The 1.1.0 npm wrapper, ` docker pull ` , and certain ` git clone ` layouts all
82+ left users with a non-functional web dashboard despite the module being
83+ present in the package. v12.3 closes those gaps end-to-end.
84+
85+ ### Added
86+ - ` docker/tam_supervisor.py ` — single-container supervisor (~ 150 LOC,
87+ stdlib only) that runs dashboard + reflection together with prefix
88+ logging, exponential-backoff restarts, and clean SIGTERM propagation.
89+ Makes ` docker run ghcr.io/.../total-agent-memory ` give a working
90+ dashboard with one command.
91+ - ` tam-entrypoint ` shim in the image — routes ` docker run … mcp|dashboard|reflection|all `
92+ through the supervisor so compose services and single-image use share
93+ a single CMD shape.
94+ - ` /healthz ` endpoint on the dashboard — DB-independent liveness probe
95+ suitable for Docker ` HEALTHCHECK ` and Kubernetes ` livenessProbe ` . Fresh
96+ volumes no longer report unhealthy until the first save.
97+ - Auto-initialise ` memory.db ` on first boot in the supervisor.
98+ - ` launchagents/com.total-agent-memory.dashboard.plist ` — keeps the
99+ dashboard running and restarts on crash. Installed automatically by
100+ ` install.sh ` on macOS.
101+ - ` .github/workflows/docker.yml ` — build + push multi-arch
102+ (` amd64 ` , ` arm64 ` ) ghcr images on every git tag, with ` /healthz ` +
103+ ` /api/stats ` + Docker healthcheck smoke before publish. Tags produced:
104+ ` :X.Y.Z ` , ` :X.Y ` , ` :X ` , ` :latest ` .
105+ - ` .github/workflows/smoke.yml ` — runs install-matrix smoke on every PR.
106+ - ` tests/smoke/install-docker-pull.sh ` + ` tests/smoke/install-sh-macos.sh `
107+ — black-box end-to-end install verifiers.
108+
109+ ### Changed
110+ - ` install.sh ` Step 5 (the old ` dashboard-service.sh install ` call)
111+ removed — it created a ` com.claude-total-memory.dashboard ` plist that
112+ fought the canonical ` com.total-agent-memory.dashboard ` plist for
113+ port 37737. One always ended up in crash-loop.
114+ - Plist placeholders unified to ` __INSTALL_DIR__ ` / ` __MEMORY_DIR__ ` /
115+ ` __HOME__ ` . Old plists hardcoded ` __HOME__/claude-memory-server/... ` ,
116+ breaking any clone whose directory name wasn't ` claude-memory-server `
117+ — the common case after the rebrand.
118+ - Dockerfile ` CMD ` switched to the supervisor; ` EXPOSE ` narrowed to
119+ ` 37737 ` (the MCP HTTP port 3737 was never functional — see Known Issues).
120+ - ` docker-compose.yml ` ` mcp ` service removed — ` MCP_TRANSPORT=http ` was
121+ silently ignored by ` src/server.py ` (stdio-only). For MCP, use
122+ ` docker/run-mcp.sh ` (stdio bridge). HTTP transport lands in v12.4.
123+
124+ ### Fixed
125+ - ` bash install.sh ` under any clone name now writes valid plist/unit
126+ paths instead of references to a non-existent ` ~/claude-memory-server/ ` .
127+ - ` bash install.sh --uninstall ` cleans up the new dashboard plist too.
128+ - New regression test ` test_launchagents_substitute_install_dir_and_memory_dir `
129+ guards against placeholder leakage.
130+
131+ ### Known issues
132+ - MCP server is still stdio-only inside the Docker image — connect via
133+ ` docker/run-mcp.sh ` . Streamable HTTP transport is tracked for v12.4.
134+
7135## [ 12.2.0] — 2026-05-24 — v11 W3 dispatch fix + Codex env alignment
8136
9137Bugfix release that restores four previously-broken v11 W3 MCP tools and
0 commit comments