← Changelog

v1.2.0

Memory integrity, reviewed patterns, and new SDKs — grounded extraction, safer recall, the TypeScript, Python, and Rust SDKs, and a hosted MCP endpoint.

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, Python, and 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.