Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 18 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ operation.
Install the latest tagged release from GitHub with Codex's native plugin flow:

```sh
codex plugin marketplace add Team-Volt/codex-lcm --ref v0.2.8
codex plugin marketplace add Team-Volt/codex-lcm --ref v0.2.9
codex plugin add codex-lcm@codex-lcm
```

Expand All @@ -123,20 +123,20 @@ The native plugin manifest wires the MCP server, lifecycle hooks, and
The first TUI session after install asks you to review and trust the lifecycle
hooks. That is expected. Hooks capture the session data that LCM indexes.

Upgrade an existing GitHub marketplace install to `v0.2.8`:
Upgrade an existing GitHub marketplace install to `v0.2.9`:

```sh
codex plugin marketplace remove codex-lcm
codex plugin marketplace add Team-Volt/codex-lcm --ref v0.2.8
codex plugin marketplace add Team-Volt/codex-lcm --ref v0.2.9
codex plugin add codex-lcm@codex-lcm
```

Upgrade a local checkout install to `v0.2.8` by checking out the release tag,
Upgrade a local checkout install to `v0.2.9` by checking out the release tag,
then asking Codex to refresh the installed plugin cache:

```sh
git -C /path/to/codex-lcm fetch --tags origin
git -C /path/to/codex-lcm checkout v0.2.8
git -C /path/to/codex-lcm checkout v0.2.9
codex plugin add codex-lcm@codex-lcm
```

Expand Down Expand Up @@ -165,7 +165,7 @@ codex plugin remove codex-lcm@codex-lcm

## Release Status

Current release: `v0.2.8`.
Current release: `v0.2.9`.

Codex LCM is a local-first Codex memory plugin with native plugin installation,
hook ingestion, sanitized raw event storage, SQLite FTS, DAG-backed retrieval,
Expand All @@ -175,19 +175,20 @@ tools. The `lcm-recall` skill gives Codex a repeatable retrieval workflow for
resumes, compaction recovery, long-running work, and questions about prior
sessions.

### v0.2.8 notes
### v0.2.9 notes

This release makes truncated payloads recoverable through search and description
tools, adds a repeatable retrieval-quality benchmark, and fixes two data-shape
issues in stored and packed results.
This release hardens raw event durability, fixes post-compaction recovery so it
packs context once without exposing internal recovery work, expands secret
redaction, and improves paraphrase recall guidance and measurement.

- Preserves sanitized overflow payloads, lets `lcm_grep` search them, and pages
verified content through `lcm_describe`.
- Adds `codex-lcm benchmark retrieval-quality` with Recall@1, Recall@5, mean
reciprocal rank, category scores, and per-query ranks.
- Keeps boolean `private` package metadata instead of redacting it as a secret.
- Returns packed recovery Markdown in MCP structured content so Codex Desktop
can restore context from structured tool results.
- Keeps raw events durable and recoverable across concurrent writers, lock
failures, SQLite failures, and interrupted indexing.
- Requires one successful `lcm_pack_context` result after compaction, then
resumes the task without announcing the recovery step.
- Redacts credential URI passwords and secret assignments nested inside JSON or
shell strings while preserving benign token metrics.
- Expands the retrieval benchmark to 39 sessions and 38 queries, with separate
development and holdout results for paraphrase recall.

Use the [Installation](#installation) section for install and upgrade commands.

Expand Down
33 changes: 33 additions & 0 deletions docs/releases/v0.2.9.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
`v0.2.9` hardens raw event durability, fixes post-compaction recovery so it
packs context once without exposing internal recovery work, expands secret
redaction, and improves paraphrase recall guidance and measurement.

## Changes

- ([#53](https://github.com/Team-Volt/codex-lcm/pull/53)) Retry empty `lcm_grep` results with up to two same-scope query reformulations, and expand the retrieval benchmark to 39 sessions and 38 queries with separate development and holdout metrics.
- ([#54](https://github.com/Team-Volt/codex-lcm/pull/54)) Keep post-compaction recovery pending until context packing succeeds, redact credential URI passwords, enforce private storage permissions, make fresh-store cleanup a no-op, and search each verified overflow payload through its 8 MiB safety bound.
- ([#55](https://github.com/Team-Volt/codex-lcm/pull/55)) Split storage and MCP responsibilities without changing their public contracts, and redact secret assignments nested inside JSON and shell strings while preserving benign token metrics.
- ([#56](https://github.com/Team-Volt/codex-lcm/pull/56)) Keep post-compaction recovery silent unless the user asks about it.
- ([#57](https://github.com/Team-Volt/codex-lcm/pull/57)) Make raw JSONL writes safer under concurrency and lock failures, keep durable events recoverable after SQLite failures, and split storage responsibilities into focused modules without changing the public API.
- ([#58](https://github.com/Team-Volt/codex-lcm/pull/58)) Pack context once after compaction, consume Markdown from that result, and keep recovery pending for failed, malformed, inherited, or unrelated tool results.

## Upgrade to v0.2.9

Restart Codex Desktop or open a fresh Codex CLI/TUI session after upgrading so
the refreshed plugin cache, MCP server, hooks, and skill are loaded.

For an existing GitHub marketplace install:

```sh
codex plugin marketplace remove codex-lcm
codex plugin marketplace add Team-Volt/codex-lcm --ref v0.2.9
codex plugin add codex-lcm@codex-lcm
```

For a local checkout install:

```sh
git -C /path/to/codex-lcm fetch --tags origin
git -C /path/to/codex-lcm checkout v0.2.9
codex plugin add codex-lcm@codex-lcm
```
2 changes: 1 addition & 1 deletion plugins/codex-lcm/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "codex-lcm",
"version": "0.2.8",
"version": "0.2.9",
"description": "Codex-native session-first lossless context memory with hook ingestion and MCP retrieval.",
"author": {
"name": "Team Volt"
Expand Down
1 change: 1 addition & 0 deletions plugins/codex-lcm/.npmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
.omo/
2 changes: 1 addition & 1 deletion plugins/codex-lcm/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "codex-lcm",
"version": "0.2.8",
"version": "0.2.9",
"description": "Codex-native session-first lossless context memory plugin.",
"license": "MIT",
"author": "Team Volt",
Expand Down
2 changes: 1 addition & 1 deletion plugins/codex-lcm/src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { createStorage } from "./storage.ts";
export async function main(argv: string[]): Promise<void> {
const [command, ...rest] = argv;
if (command === "--version" || command === "-v") {
process.stdout.write("0.2.8\n");
process.stdout.write("0.2.9\n");
return;
}
if (command === "--help" || command === "-h" || command === undefined) {
Expand Down
2 changes: 1 addition & 1 deletion plugins/codex-lcm/src/mcp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ type JsonRpcRequest = {
};

const SERVER_NAME = "codex-lcm";
const SERVER_VERSION = "0.2.8";
const SERVER_VERSION = "0.2.9";
const SUPPORTED_PROTOCOL_VERSION = "2025-11-25";
const HEADER_SEPARATOR = Buffer.from("\r\n\r\n", "utf8");
const MAX_MESSAGE_BYTES = DEFAULT_LIMITS.maxInputBytes;
Expand Down