Repository navigation
Memory Runtime release. Mebular can now run recall, extraction, compaction and task
checkpoints for a host while keeping the same graph, signed events, sync and cloud.
The MCP surface stays compatible at 29 tools; every runtime capability is opt-in.
Added
- Memory Runtime sidecar — a separate
@mebular/memory-runtimeprocess exposes/memory-runtime/v1(status, ingest, recall, context, checkpoints, compaction, self records, trace feedback and model orchestration). All durable writes go through the internal MCP capability API (/internal/memory/v1) into the existing graph and event log; no new event type or sync wire protocol is introduced. - Two access modes — lightweight
mcp(default) and immersiveimmersive(opt-in). Mode is device-local. Switching changes processing only: it does not migrate, copy, rewrite or delete nodes. Lightweight mode starts no sidecar, opens no sidecar port and creates no sidecar files. - Runtime object model —
MemoryRecordreuses existing entity/fact/episode/skill nodes;Compactis a derived graph summary with source IDs and stale detection;ContextCheckpointhas revisions and leases and always goes through capability;SelfRecordis shared per logical agent and hidden from ordinary queries.RawChunkandRecallTracelive only under<home>/memory-runtime/, never in the graph, events or sync. - Four model sources — built-in
heuristicrules (default, offline), curated local Qwen packs, host-providedCandidateRecords, and one explicitly allowed OpenAI-compatible API. The runtime never reads host credentials, calls a host model or switches providers on its own; failures fall back to heuristic withdegradedstatus and warnings. - Curated local Qwen — Qwen3 8B as the default pack, 30B-A3B for high-end MoE, 14B for high quality and 4B for low-memory devices. Packs are downloaded and selected explicitly, verified by manifest/checksum, run through a loopback
llama-server, and are never installed or updated silently.mebular models list|status|install|import|select|remove|start|stop|testmanage them from the CLI. - Model credentials and API safety — API keys are stored only as
env:,keychain:orfile:references; plaintext keys never enter config, graph metadata, events, logs, Console or status. URLs reject non-HTTPS endpoints (loopback HTTP excepted), userinfo and cloud-metadata addresses; file keys must be private. - Console Memory Runtime settings — sidecar lifecycle, model source, curated pack download/selection, API configuration, raw capture, trace retention and local model status are available in Settings → 记忆运行时. Sidecar status, active model, degraded reasons and counts are exposed without secrets.
- Internal-object governance —
compact,context_checkpoint,self_recordand defensiveraw_chunk/recall_traceare hidden from defaultmemory_*results, graph traversal and the Console memory list;includeInternal=1is admin-only.memory_delete/memory_archivereject internal objects and leave them to capability admin endpoints. - DSH Memory Runtime bridge — opt-in
memoryRuntimewith recall on the first step of a new human turn, batched event ingest with retries and idempotency, compaction checkpoints, optional tool hiding with a governance allowlist, and optional idle maintenance using the current DSH session model. When disabled it registers no listener, timer or request. - Hermes MemoryProvider and companion —
integrations/hermes/mebular-memoryadds automatic recall and turn/compaction ingest to Hermes while leaving built-inMEMORY.md/USER.mdactive and untouched. The optionalmebular-companionuses Hermesctx.llmto submit host candidates, separately from the single external-provider slot. The GitHub Release also shipsmebular-hermes-plugins-<version>.tar.gzwithinstall.sh(no PyPI; provider installed asplugins/mebular, existing directories backed up). - OpenChamber / OpenCode integration — Mebular's MCP path writes only the shared OpenCode
mcp.servers.mebularentry and never OpenChamber's managed config. The opt-in@mebular/opencode-pluginadds request-only<mebular_memory trust="untrusted">recall, event ingest and compaction checkpoints for OpenCode >= 2.2; OpenChamber native memory is detected read-only and is never imported, replaced or dual-written. - Documentation — new English/Chinese Memory Runtime guide covering modes, model sources, sidecar discovery, local data, privacy, troubleshooting and the 0.2 upgrade path; Hermes and OpenChamber integration guides, and an updated DSH guide covering modes, model sources, tool surface and boundaries.
Changed
- Default behaviour is unchanged — a fresh or upgraded install stays in lightweight MCP, uses heuristic rules, captures no raw conversation and calls no model. Existing MCP/CLI/Console read paths keep their 0.2 results.
- MCP surface is frozen — the 29
memory_*/task_*tools keep their names and semantics; noruntime_*MCP tools are added. Runtime capability is HTTP-only, and CLImebular toolsstill reports the same surface. - Memory Runtime configuration is device-local — MCP only owns
memoryRuntime.*lifecycle keys; sidecar settings (model packs, API credentials, raw/trace retention) live in<home>/memory-runtime/config.jsonand do not enter shared memory or sync. SelfRecord and Checkpoint always go through capability with logicalagentIdfiltering. - Internal objects are filtered by default — default queries, graph traversal and the Console memory list skip
metadata.internal=trueand reserved__*namespaces. Older clients see ordinary 0.2 data. - OpenChamber reuse — OpenChamber is treated as an OpenCode host: one global MCP entry, read-only native-memory detection, and no writes to
opencode.managed.jsonor per-instance copies. - Release train — all eight npm packages (including the isolated DSH plugin) and the desktop app are aligned at
0.3.0.
Fixed
- OpenCode JSON-encoded content — message text arrived as a JSON string (for example
"\"Remember ...\""), so recall and heuristic extraction could miss ordinary memories. The plugin now unwraps the encoded content before building queries and ingest chunks. - Runtime credential and URL handling — model base URLs are normalized and unsafe forms rejected before a request; key files with group/other read permission are refused; status reports only
configured/source, never key material or model response bodies. - DSH runtime auth and delivery — bearer 401/403 and retryable ingest failures are surfaced as warning/status instead of being silently dropped; retries reuse one
requestId/Idempotency-Key, and dispose cancels pending backoff. - Internal-object leakage — runtime nodes are defensively excluded from default memory queries, history, profile, skills, graph and Console lists even if they are written directly to the graph.
Verification
- Acceptance report — 0.3.0 Memory Runtime acceptance report records recall quality, security and performance for a real sidecar with a fake capability: heuristic only, no model, no external network. The matrix covers gist-only broad recall, detail expansion, conflicts, cross-device raw degradation, silence, budgets, security boundaries and bounded resources.
- Three-host E2E — real DSH, Hermes and OpenChamber/OpenCode adapters run against a real
/memory-runtime/v1, real capability API and real graph with temporary homes, heuristic extraction and no real LLM. The recorded run is 113/113 DSH, 35/35 Hermes and 38/38 OpenCode checks; seetests/integration/host-e2e/README.mdfor covered paths and explicit boundaries. - Sidecar and host suites — sidecar, inference, Console, DSH, Hermes and OpenChamber coverage lives in
packages/memory-runtime/tests,tests/mcp,tests/console,tests/dsh,tests/opencode-pluginandtests/integration/host-e2e. - Eight-package release train — seven lockstep packages (
core,service,skill,mcp,fleet,memory-runtime,opencode-plugin) plus the isolateddsh-pluginjob share0.3.0; verify produces eight npm tarballs plus the Hermes plugin tarball, and the visibility gate checks all eight npm packages anddist-tags.latest.verify:hermes:packageinstalls the Hermes bundle into a temporaryHERMES_HOME, checks both Python entry points, and verifies backup/rollback behaviour. - Docs —
npm run check:docs,npm run check:i18nandnpm run check:cleanlinesspass.
Notes
- No migration — 0.2 nodes, events, namespaces, tags and IDs are read as legacy data and are not rewritten. Runtime nodes are ordinary nodes; older peers can store them but do not show them in default queries.
- Rollback — returning to 0.2 keeps the graph and data intact. Internal nodes remain stored but hidden, and local
<home>/memory-runtime/files are ignored by older code. - Scope limits — 0.3 remains one cloud and one user.
agentIdis an assertion, not authentication; SelfRecord/Checkpoint isolation is logical, not cryptographic;memory.readis cloud-wide and namespace ACLs are not included. Deletion remains cooperative, so an already-synced copy on an offline peer may survive until reconnect. - No bundled model — local Qwen packs are explicit downloads with their own licenses. No model, API key or cloud raw data is shipped or enabled by default.