---
title: "v1.2.0"
description: "Memory integrity, reviewed patterns, and new SDKs — grounded extraction, safer recall, the TypeScript, Python, and Rust SDKs, and a hosted MCP endpoint."
date: "2026-10-19"
status: "published"
---

v1.2.0 focuses on memory you can trust. Extraction is grounded in exact source
turns, recall is controllable and delimited as untrusted content, every memory
keeps an auditable history, and operators get new tools to review what ConvoMem
stores. This release also ships the official TypeScript, Python, and Rust SDKs on
one public Integration API contract, plus a hosted MCP endpoint.

## Upgrading

- The legacy npm package `convomem-sdk` and the server-bundled `packages/sdk`
  are replaced by the official SDKs, version 0.3.0: `@optraze/convomem-sdk` on
  JSR for TypeScript and JavaScript, and `convomem` on PyPI and crates.io for
  Python and Rust. See the [TypeScript](/docs/sdk-typescript),
  [Python](/docs/sdk-python), and [Rust](/docs/sdk-rust) guides.
- Memory types `goal`, `temporary`, and `technical` are retired. Extraction never
  produced them, and the database migration refuses to run while any stored
  memory still uses one.

## Memory quality and integrity

- Context-aware extraction now separates earlier resolution context from new
  source turns. New memories must cite an exact source quote, carry grounded
  anchors when context is required, agree with the transcript speaker, and be
  independently usable; ambiguous candidates are repaired in one bounded batch
  or dropped.
- Capture transcript writes no longer deduplicate turns by text. A later
  legitimate `Yes`, `No`, or repeated statement remains a new turn, while
  request-level idempotency identifies real retries.
- Per-customer capture locking now renews ownership during long model calls and
  fails for queue retry if ownership cannot be acquired or is lost. It never
  continues unlocked, and it does not hold a PostgreSQL connection across the
  model call.
- Public conversation responses strip private capture provenance markers used
  to recover exact absolute source indices.
- Customer and agent memories remain explicitly separated through extraction,
  retrieval, and the operator UI.
- Human-agent memory capture is a separate, default-off workspace-agent setting.
  Enabling named-representative attribution does not silently opt into storing
  human-authored memories; transcripts and customer/bot behavior are preserved.
- Immutable memory versions preserve creates, edits, supersession, merge,
  archival, and deletion history.
- Conversation-turn provenance and lifecycle history are available directly on
  Customer Profile.
- Caller-owned expiry, multilingual provenance, commitments, and organization
  category controls now have complete API and UI lifecycles.
- A value or name is attached to a memory only when the conversation states it
  for that same customer, account, or person. A budget, owner, or time stated
  for a different account is rejected, even when it was mentioned earlier in the
  same conversation, and the check does not depend on capitalization, so
  lowercase voice transcripts are protected too.
- Current states and completed updates, such as a new meeting time or owner, are
  kept as durable memories. Only genuine short-lived wishes and plans keep the
  48-hour intent lifetime, so a customer's latest state is not lost two days
  after capture.
- An update recovered by the repair step now replaces the value it supersedes,
  and an update counts as captured only when the stored memory keeps both the
  changed relationship and its new value.
- Exact source quotes tolerate curly quotes, dashes, and non-breaking spaces,
  and short English memories are no longer rejected when the local language
  detector misreads them. Translated memories are still rejected.

- Memory types now distinguish `episodic` (a dated event), `procedural` (a
  standing handling rule), `relationship` (people around the customer),
  `commitment` (something the agent promised), and `pattern` (a reviewed
  synthesis of several memories), alongside `fact`, `preference`, `intent`,
  `decision`, and `context`.
- Extraction instructions can be set per agent, with separate instructions for
  customer memories and agent memories. Agents without their own instructions
  use the organization setting.
- ConvoMem can draft extraction instructions for an agent from a bounded sample
  of its active memories. Credentials are dropped and recognized PII is masked
  before the model sees them, the draft is shown as a keep/ignore preview, and
  nothing changes until an operator applies and saves it.
- Operators can mark an individual memory helpful or wrong. A wrong verdict
  removes the memory from lookups immediately; withdrawing the verdict restores
  it, and the memory stays listed as "Not used in lookups" in the meantime.

## Reviewed patterns

- ConvoMem can propose repeated customer patterns only after enough evidence
  exists across separate conversations.
- Every proposal is linked to the exact source-memory versions used to infer it.
- Proposed patterns remain drafts and are excluded from retrieval until a human
  approves them. Rejected patterns remain auditable.
- Automatic synthesis is rate- and plan-gated, uses one bounded general-model
  request per eligible weekly run, and makes no model call when evidence is
  insufficient.

## Integration reliability

- Asynchronous capture returns a pollable job ID and exposes queued, processing,
  completed, and terminal failure states.
- A capture accepts at most 200 turns and 10,000 characters per turn. These
  bounds are enforced on both public capture entry points.
- Capture and memory lifecycle webhooks use stable event IDs for consumer-side
  deduplication.
- Queue failures return a retryable error instead of claiming a capture was
  accepted.
- The official TypeScript, Python, and Rust SDKs now share the same exact public
  Integration API contract. Dashboard-only analytics, exports, request logs,
  health, and administration APIs remain intentionally excluded.
- SDK integration tests require an explicitly selected isolated API target and
  credentials; skipped live tests are not reported as runtime verification.
- Adding a memory by `email`, `phone`, or `externalId` (the flat
  `POST /customers/memories` route the SDKs use) no longer fails validation.
- Handoff responses can report `narrativeSource: "pending"` while the AI
  narrative is generated for the next read; the SDK types now accept it.
- SDK handoff types now match the server's sentiment points (`at`, `channel`,
  `sentiment`). The Python SDK previously failed to parse handoff briefs for
  customers with sentiment history.
- Handoff destination management and route preview are dashboard-only and have
  been removed from the public API reference and SDKs; `routeHandoff` remains.
- A hosted Streamable HTTP MCP endpoint exposes six authenticated,
  customer-scoped capture, status, lookup, search, list, and handoff tools. It
  reuses the REST authorization boundary and does not enumerate a tenant.

## Retrieval and lifecycle controls

- Per-request recall controls cover result limit, context-token budget,
  threshold, optional reranking, latest-only reads, deterministic reference
  time, agent-fact opt-in, answerability verification, and score diagnostics.
- Lookup context is returned inside a delimited `<untrusted_caller_memory>`
  block whose header marks every line as unverified background, never
  instructions. When agent facts are opted in, each line is tagged `[caller]` or
  `[agent]`. Inject the context verbatim.
- A sparse keyword index adds a separately scored keyword signal alongside
  semantic similarity, so memories that share exact terms with the query are
  found even when semantic similarity is low.
- Multilingual source provenance and temporal event metadata survive capture,
  storage, retrieval, the SDKs, and operator views.
- Caller-owned expiry, immutable memory versions, supersession history, and
  evidence-linked pattern review keep active recall separate from retained
  audit history.

## Operator observability

- Deleting an import record preserves imported customers, conversations, and
  memories. Ambiguous destructive rollback is rejected rather than deleting
  unrelated customer data.
- Retained analytics writes are fenced against customer erasure. Safely linked
  derived records are withdrawn; unknown legacy/shared ownership returns a
  reviewable conflict instead of silently wiping shared data.
- Complaint summary prose and linked audit content are withdrawn when their
  exact source evidence is changed or erased; surviving complaints remain
  available for evidence-checked regrouping.
- A privacy-safe request log records capture, lookup, memory, and pattern API
  outcomes without storing transcripts or returned memory content.
- Operators can isolate failed and zero-result calls, inspect effective
  retrieval controls and latency, and review a complete lookup result set as
  helpful, missed, or noisy.
- Log writes are asynchronous and non-blocking, with tier-based retention capped
  at 90 days.
- The Memory Playground can now run an editable multi-turn conversation through
  extraction and retrieval together. It shows grounded memories and per-signal
  ranking diagnostics while clearly guaranteeing that no customer, transcript,
  memory, vector, insight, activity log, or billable API call is created.
- The new Agent performance workspace reports handled volume, explicit
  resolution, escalation, handle time, commitment keeping, seven-day repeat
  contact, sentiment, within-conversation customer sentiment shift, and memory
  coverage from attributed conversations.
- Every rate displays its real sample. Low-volume agents are labelled as
  insufficient data instead of being ranked, open commitments are not counted
  as failures, and the workspace stays off until human-agent attribution is
  explicitly enabled.
- Answer-consistency review flags high-confidence disagreements between
  attributed human agents without overwriting either source memory or claiming
  that one answer is correct. Reviewers see both answer excerpts, agent names,
  source conversations, and a practical verification checklist; ambiguous or
  ungrounded comparisons fail closed.
- Potential knowledge-gap review groups topics that were explicitly unanswered
  across at least three separate conversations. Operators get frequency,
  distinct-customer counts, responder mix, and source-conversation links, while
  findings remain review-only and are never presented as proof that content is
  missing.
- Analytics now includes a Memory health section: conversation linkage, memory
  lifecycle, lookup success, error, and empty-result rates, p50/p95 lookup
  latency, and result-set feedback, scoped by agent and date range. It reads no
  memory content, every rate shows its sample, and unavailable measures are
  shown as unavailable rather than zero. It is an operational inventory, not a
  semantic quality score.
- Memory Exports produce a private, asynchronous JSON export of memories with
  their exact source evidence from the dashboard. Exports can be cancelled,
  downloaded repeatedly for seven days, and then expire. They are not part of
  the public API or SDKs.
