Skip to content

We're open source. If actrone-memory has been useful to you, a star on GitHub means a lot to us.

changelog

Every release of the open-source packages

Newest first, for actrone-memory in Python and TypeScript and for create-actrone-app. Each entry comes from the package’s own CHANGELOG.md, so this page and the repositories never disagree.

RSS feed

7 releases

#ts-0.1.2

actrone-memory 0.1.2

TypeScript

npmGitHub release

Framework compatibility fixes, found by type-checking every adapter against the real framework at the oldest and newest release of its supported range, and fact extraction that works on small local models.

Fixed7

  • Fact extraction returned nothing on small models. With qwen2.5:3b on Ollama, extraction came back empty on 12 of 15 real exchanges, because the model read the assistant's reply as part of what to mine. Extraction spec 1.1 frames the conversation, says whose facts to record, asks for a JSON-schema structured output and gives two worked examples (one with facts, one with none). On the same model it found 14 of 14 expected facts and stored nothing for small talk. OpenAIFactExtractor falls back to JSON mode, for good, only when a server rejects the schema. EXTRACTION_SPEC_VERSION is now "1.1"; EXTRACTION_RESPONSE_SCHEMA and formatExtractionInput are exported for custom extractors.
  • Passing a real openai client to OpenAIFactExtractor failed to compile. ChatCompleterLike typed each message's role as a plain string, which the openai SDK's message types reject, so new OpenAIFactExtractor(new OpenAI(...)) only worked with a cast. The roles are now the literal ones the extractor sends, and a docs example type-checks the real client in CI.
  • npm install actrone-memory failed next to current framework releases. The optional peer ranges stopped below the versions most projects now run, and npm refuses such installs (ERESOLVE) rather than warning. For example, a project on the Vercel AI SDK 7 could not install 0.1.1. The ranges now cover the current majors: ai >=5 <8, @mastra/core >=0.10 <2 and @voltagent/core >=0.1.14 <3.
#py-0.2.1

actrone-memory 0.2.1

Python

PyPIGitHub release

Framework integration fixes found by running every integration against the real framework at the oldest and newest version we support, fact extraction that works on small local models, plus PyPI listing updates.

Fixed7

  • Fact extraction returned nothing on small models. With qwen2.5:3b on Ollama, extraction came back empty on 12 of 15 real exchanges, because the model read the assistant's reply as part of what to mine. Extraction spec 1.1 frames the conversation, says whose facts to record, asks for a JSON-schema structured output and gives two worked examples (one with facts, one with none). On the same model it found 14 of 14 expected facts and stored nothing for small talk. EXTRACTION_SPEC_VERSION is now "1.1"; the prompt, EXTRACTION_RESPONSE_SCHEMA and format_extraction_input are exported for custom extractors.
  • Microsoft Agent Framework. The adapter targeted the pre-1.0 API (ChatAgent, ContextProvider.invoking, Context), which Agent Framework 1.x removed. It now implements the 1.x ContextProvider (before_run adds the recalled context through context.extend_instructions, after_run saves the turn from the response), so Agent(client, context_providers=[memory.as_context_provider()]) works.
  • LangGraph. ActroneCheckpointer was a plain class, so graph.compile(checkpointer=...) rejected it. It is now a real BaseCheckpointSaver that wraps a saver of your choice (saver=, an in-memory saver by default) for graph state and also records each completed human and AI exchange as memory, once per exchange.

Added1

  • OpenAIFactExtractor works with local and self-hosted models. It takes base_url (for example http://localhost:11434/v1 for Ollama) or a ready client, so any OpenAI-compatible server can do extraction, as the TypeScript library already allowed. It asks for a JSON schema and falls back to JSON mode, for good, only when a server rejects the schema.

Changed3

  • Newer framework majors are supported. Haystack 3, Agno 2 and 3, Pydantic AI 2 and Google ADK 2 passed the same checks as the older releases, so the extras now allow them: haystack-ai>=2.0,<4, agno>=1.0,<4, pydantic-ai>=1.32,<3 and google-adk>=1.2,<3.
  • Supported framework versions now match what was tested. Each extra's lower bound is the oldest release the integration was verified against: crewai>=0.95, autogen-agentchat and autogen-core>=0.4.3, smolagents>=1.5.1, openai-agents>=0.2, pydantic-ai>=1.32, semantic-kernel>=1.16 and google-adk>=1.2. Older releases fail to install or import with current dependencies, or lack the API the integration uses. The dspy extra now installs dspy (the package was renamed from dspy-ai) and allows 3.x: dspy>=2.5,<4.
  • PyPI listing. Keywords now cover what people search for (agent-memory, long-term-memory, semantic-search, rag, llm, pgvector, agno), and new classifiers state that the package is typed, asyncio-based, built on Pydantic 2, Python 3 only and OS independent.
#ts-0.1.1

actrone-memory 0.1.1

TypeScript

npmGitHub release

A metadata-only release: no code changes.

Changed1

  • npm listing. The description now says what the library does today, and no longer describes it as an on-ramp to a hosted product that is not available yet. Keywords now cover what people search for (agent-memory, long-term-memory, semantic-search, the Vercel AI SDK, LangChain.js, Mastra, Qdrant, Redis, pgvector), and the homepage link opens the memory docs.
#ts-0.1.0

actrone-memory 0.1.0

TypeScriptInitial release

npmGitHub release

Added15

  • PgVectorL2Store, a Postgres + pgvector long-term store, so teams already running Postgres add no new service. Takes an injected pg-compatible client (PgLike), like the Redis and Qdrant adapters, so there is still no hard database dependency. Ranking reuses the shared hybridRank fusion, so recall ordering matches the in-memory and Qdrant stores given the same candidates.
  • Published store conformance suite, exported as actrone-memory/testing. checkL1Store and checkL2Store assert the behaviours TypeScript cannot: turns come back oldest-first, n windows from the end, a search never returns another agent's memories, threshold and limit are honoured, an upsert replaces rather than duplicates, and erasure is scoped. InMemoryStore and PgVectorL2Store pass it. The Python library ships the same suite as actrone_memory.testing, so an adapter in either language is held to one contract.
  • Valkey support, without a new adapter. RedisL1Store uses only standard Redis commands, so Valkey, DragonflyDB, ElastiCache and Upstash work with it unmodified. Now documented explicitly rather than left to inference.

Supply chain1

  • Published to npm via OIDC Trusted Publishing with npm provenance, no long-lived tokens.
#py-0.2.0

actrone-memory 0.2.0

Python

PyPIGitHub release

The first release published to PyPI. It includes everything built since 0.1.0, which was an internal milestone and was never published.

Added12

  • Postgres for both tiers, so no new service is needed. PostgresStore (actrone_memory.l1.postgres_store) holds recent turns and PgVectorStore (actrone_memory.l2.pgvector_store) holds long-term memories via pgvector. Install actrone-memory[pgvector]. Both accept a DSN (from_dsn) or a pool you already own (from_pool), so one Postgres pool can serve the whole library. Postgres has no TTL or list trimming, so the L1 store implements expiry and the retention cap explicitly, and orders turns by a bigserial rather than the clock so ordering is stable when timestamps collide.
  • Custom stores are now a supported path, not just a possible one. MemoryManager.create() accepts l1, l2 and embedder. Whatever you inject is used as-is and the matching built-in backend is never constructed, so injecting both stores opens no Redis or Qdrant connection. Previously a custom store meant calling the constructor the docs tell you not to call.
  • Published store conformance suite (actrone_memory.testing). check_l1_store and check_l2_store assert the behaviours the Protocol cannot: turns come back oldest-first, n windows from the end, a search never returns another agent's memories, threshold and limit are honoured, an upsert replaces rather than duplicates, and erasure is scoped. Both built-in stores and both Postgres stores pass it. The TypeScript library ships the same suite as actrone-memory/testing.

Changed10

  • The langchain extra now spans both majors (>=0.2,<3). LangChain removed langchain_core.memory in 1.x, retiring the BaseMemory abstraction, so the old <1 cap held users on a 0.3.x line whose published advisories are only fixed in 1.x. Tier 2 moves to ActroneChatMessageHistory; ActroneMemory remains for 0.x and raises on 1.x with a pointer to the alternatives.
  • Local-first, zero-service default backend. MemoryManager.create() now runs fully in-process with no Redis, no Qdrant, and no API key, parity with the TypeScript actrone-memory on-ramp. "Memory that never phones home."
    • New InMemoryStore (actrone_memory.in_memory) implements both the L1 (hot session) and L2 (cold semantic) tiers with the same blended relevance+recency ranking as the Qdrant backend.
    • New dependency-free HashingEmbedder (actrone_memory.l2.embedder), a deterministic hashing vectorizer (embedding_provider="hashing"), and the final fallback of the default local provider. No model download, no external call.
    • New L1Store / L2Store Protocols (actrone_memory.protocols), the manager now depends on the store seam, not concrete backends.
    • New config: backend: "memory" | "redis_qdrant" and hashing_dimensions.
  • Provenance-typed facts v1, every stored memory now carries source (attribution: user/assistant/tool/summary/injected/extracted/ reflection/imported/unknown, or a namespaced string like "import:crm") and sensitivity (none/low/pii/sensitive). inject_memory() accepts both; summaries are tagged source="summary". Defaults are backwards-compatible (unknown/none). New MemorySource/Sensitivity types exported.

Fixed6

  • Recall used one similarity threshold for every embedder. Scores are not comparable across models, so the fixed 0.72 recalled 4% of relevant memories with the lexical embedder, 23% with MiniLM and 65% with bge-small, measured on a labelled set of 48 relevant and 528 unrelated pairs. Each built-in embedder now declares its calibrated threshold (0.3, 0.4, 0.63), relevance_threshold defaults to that value, and MemoryManager.relevance_threshold reports the one in use. An explicit setting still wins; OpenAI and custom embedders keep 0.72.
  • The first store_turn downloaded tiktoken's encoding file, contradicting the no-egress promise and failing on an air-gapped first run.
  • The library printed its own debug and info events to stdout in any program that imported it. Without a logging setup it is now quiet, and warnings go to stderr.

create-actrone-app 0.1.0

create-actrone-appInitial release

npmGitHub release

Added4

  • npm create actrone-app@latest <name> scaffolds a new project with four files: src/agent.ts, a runnable agent with memory wired up; package.json, with actrone-memory as its one dependency; a strict ESM tsconfig.json; and a README.md that says how to run it.
  • Framework wiring with --framework. core (the default, no framework), vercel, langchain, langgraph, mastra, llamaindex, openai-agents and genkit. An unknown name fails with the list of valid ones instead of scaffolding something broken, and --help prints the same list.
  • New projects only. It refuses to write into a non-empty directory. For an existing project, npx actrone-memory add <framework> prints a recipe instead and never edits your code.
  • Requires Node.js 22 or newer.

Supply chain1

  • Published to npm via OIDC Trusted Publishing with npm provenance, no long-lived tokens.
#py-0.1.0

actrone-memory 0.1.0

PythonNot published

An internal milestone that was never published to PyPI. The first public release was 0.2.0.