Skip to content

3ngram 1.2.1

Choose a tag to compare

@github-actions github-actions released this 04 Aug 15:59
385b298

3ngram v1.2.1

Minor release: the MCP retrieval surface v2 (epic #42). Agents pulling context
no longer hit hard walls — every read tool is now bounded, tunable, and
pageable, and truncated results are always followable to full content.

(v1.2.0 was tagged but never published: its release image failed the
vulnerability-scan gate on a transitive dependency. v1.2.1 is the first
published version of this line and additionally forces ip-address to 10.3.1,
fixing CVE-2026-69192.)

Changes

  • New MCP tool get_memories — batched full-content read by id (up to 20
    ids, per-item maxContentChars). A truncated: true search or handoff hit
    is no longer a dead end. Unknown and cross-tenant ids land in notFound as
    data, never an error.
  • Briefing/handoff bounds are caller-tunablesectionLimit (up to 100,
    previously a fixed cap of 25), sections selection on briefing (compute
    only what you need), hasMore + exact count per briefing section, and
    exact counts + per-section truncated flags on handoff.
  • Search filters v2memoryTypes[] (multi-type OR) and
    recordedAfter/recordedBefore range filters, on MCP search and the REST
    list endpoint alike. Filters narrow candidates before ranking fusion; the
    ranking itself is unchanged.
  • Search pagination — an opaque cursor with frozen-pool ordering (no
    duplicates or skips under concurrent writes) plus a projection: 'compact'
    mode that omits hit content for cheap broad scans; scan compact, then
    get_memories the interesting ids.
  • scope_project selector — scope AND project together, with an
    includeUnscoped: true opt-in that surfaces NULL-project memories in
    project-filtered briefings and handoffs.
  • Per-user retrieval-scope policyconfigure_scope gains
    set_retrieval_default: mode default fills unscoped reads with your
    default scope and echoes appliedScope (never silent); require rejects
    unscoped reads with a typed error naming the registered scopes; off
    preserves shipped behavior exactly.
  • Stale-candidate allowlist — briefing staleCandidates now only proposes
    reviewable types (decision, preference, blocker, fact) instead of
    every aging memory.
  • Recorded-range hardening — both transports reject inverted ranges and
    sub-millisecond precision at the schema boundary.

Upgrade notes

  • New database migration 0030_user_retrieval_policy. Self-hosters: run
    the migrations step (docker compose … run --rm migrations) before starting
    the new server, as in the standard upgrade flow.
  • All shipped tool contracts are unchanged (byte-stable): new fields and
    selector variants are additive and optional.

Release artifacts

  • @3ngram/server@1.2.1, @3ngram/sdk@1.2.1, and 3ngram@1.2.1 on npm
  • @3ngram/db@0.7.0, @3ngram/core@0.7.0, and @3ngram/schema@0.6.0 on npm
  • @3ngram/config@0.2.3 and @3ngram/llm@0.2.2 on npm
  • ghcr.io/b3dmar/3ngram:1.2.1 for Linux amd64 and arm64
  • BuildKit SBOM plus provenance and GitHub-signed SLSA attestations

The hosted 3ngram dashboard and cloud-operations code are proprietary and are
not included in this repository.

Immutable container reference

ghcr.io/b3dmar/3ngram@sha256:9b006cf0107fe5f04f6fecc1c723e83bfe041ce1ec7ecc39b0b81620c99a55ff