Skip to content

Releases: keepnotes-ai/keep

v0.112.0

26 Mar 12:58

Choose a tag to compare

What's new

  • Read-path perf instrumentationget, find, and get_context are now instrumented with timing breakdowns (embed, semantic search, FTS, RRF fusion, hydration, deep follow, enrichment, context assembly). Stats reported in keep-ops.log and via --verbose.
  • Fix pending --list count — flow items were capped at 100 in display; now shows all.
  • Fix perf_stats.reset() crash — referenced undefined attribute.
  • Design doclater/design-unified-get-query-cache.md for unified get + query cache (future work).

v0.111.2

25 Mar 20:49

Choose a tag to compare

OpenClaw plugin contract fixes, bump script improvement

  • Fix stale info.version: main CE was stuck at 0.108.0; bump script now replaces all occurrences in index.ts
  • Add missing estimatedTokens: bootstrap CE assemble return now satisfies AssembleResult contract
  • Accept prompt/model in assemble: uses explicit prompt param when provided, falls back to extraction
  • Delegate compact() to runtime: fixes /compact and overflow recovery (was a no-op that blocked compaction)
  • Fix onSubagentEnded type: reason now uses SubagentEndReason union instead of string
  • Fix test/source drift: formatTurn test had bogus 500-char user limit; aligned to maxInlineLength
  • Add scripts/release.sh: automated release script for patch and minor versions

v0.111.1

25 Mar 18:54

Choose a tag to compare

Skip redundant analysis for single-version untruncated content. analyze() now avoids the LLM decomposition call when content fits in the summary and has no version history — parts would be redundant. The guard runs before chunk gathering, also saving the list_versions query.

v0.111.0

25 Mar 14:39

Choose a tag to compare

3D model file metadata extraction

Extract structural metadata from 3D model files at ingest time, pure stdlib (no new dependencies):

  • STL (binary + ASCII): triangle count, bounding box, dimensions
  • OBJ: vertex/face counts, bounding box, groups, materials
  • PLY: vertex/face counts, format, vertex properties
  • glTF/GLB: mesh/material/animation counts, scene name, bounds
  • 3MF: object count, vertex/triangle counts

v0.110.3

25 Mar 11:52

Choose a tag to compare

Tag action mutations, remove dead TaggingProvider, test fix

  • tag action: return set_tags mutations instead of direct context.tag() writes
  • Remove dead TaggingProvider: protocol + all implementations (Anthropic, OpenAI, Ollama, Gemini, Mistral, MLX, Noop) — superseded by auto_tag + TagClassifier
  • Fix CI test: test_versions_limit_exact_conformance no longer hits real APIs
  • Email supernode prompt: tighten scope from *@* to *@*.*

Net -379 lines.

v0.110.2

25 Mar 02:17

Choose a tag to compare

Fix _EnvActionContext missing methods for write-path actions

  • resolve_duplicates: add find_by_content_hash to _EnvActionContext
  • describe: add media provider kind to _EnvActionContext.resolve_provider
  • Remove dead document/tagging provider entries from flow env
  • Add regression tests

v0.110.1

25 Mar 01:54

Choose a tag to compare

Fix git ingest: multi-line commit bodies were leaking into --name-only file lists, producing invalid item IDs.

v0.110.0 — supernode review pipeline

24 Mar 20:48

Choose a tag to compare

What's new

Supernode review pipeline

Background pipeline that discovers high-cardinality nodes (email addresses, URLs, files) with stale or missing descriptions and generates factsheets from their inbound references via LLM.

  • find_supernodes action: edge table query with fan-in scoring, stub guard, scope-glob prompt matching
  • generate action extended: accepts prompt param for .prompt/* doc resolution with item ID scope matching
  • 3 supernode prompt docs: default, email (*@*), URL (http*://*) — extractive, English-only, no preamble
  • review-supernodes state doc: get → traverse → generate → put (single candidate per work item)
  • .meta/supernodes: context surfacing — reviewed supernodes appear in keep get frontmatter

Daemon timer events

  • Queue replenishment: daemon periodically (30min) checks for supernode candidates and enqueues reviews
  • Timer state persistence: .timer_state.json tracks last-run timestamps; daemon resumes schedule on restart
  • Daemon stays alive: timer events (supernodes, watches) prevent daemon exit when work queue is empty
  • keep pending: spawns daemon when timer events need servicing, even with empty queue

Improved pending --list

  • Flow items shown by state name: flow:after-write (13 items), flow:review-supernodes (4 items)
  • Timer events section shows last run, next scheduled, and detail for each periodic task

Infrastructure

  • find_supernode_candidates() on DocumentStore — single SQL query for fan-in counts with timestamp filtering
  • _resolve_prompt_doc scope-glob matching via fnmatch — prompts can match item IDs by pattern
  • get_document_store() exposed on flow action context
  • list_pending() returns input data for richer display
  • 14 new tests, 1630 total pass

v0.109.0 — meta-docs as flows, unified context assembly

24 Mar 03:26

Choose a tag to compare

What's new

Meta-docs as flows

Meta-docs (.meta/*) are now state docs — same match/rules/do/with syntax as all other flows. Each rule uses find(similar_to=..., tags=...) for context-relevant, similarity-ranked results. Legacy line-based parser kept as fallback for one version cycle.

Unified context assembly

.state/get-context.state/get with fragment composition. The OpenClaw-specific rules (search, intentions, session) move to a .state/get/openclaw fragment that extends the base via the existing fragment system. .state/openclaw-assemble deleted — replaced by base + fragment.

System doc migration: replaces: tag

When a bundled system doc declares replaces: .old/id in its frontmatter, the migration automatically deletes the old doc. Data-driven cleanup — no hardcoded ID lists in code.

Documentation sweep

All references to get-context and openclaw-assemble state doc names updated across 15+ files (docs, SKILL.md, code, tests).

  • 1616 tests pass

v0.108.0 — meta-docs as flows

24 Mar 00:21

Choose a tag to compare

What's new

Meta-docs are now state docs. The .meta/* documents use the same match/rules/do/with syntax as all other flows. Each rule uses find(similar_to=..., tags=...) for context-relevant, similarity-ranked results — replacing the bespoke line-based parser and separate ranking step.

Details

  • 5 system meta-docs rewritten to YAML state-doc format with inline documentation
  • resolve_meta() runs each meta-doc via run_flow(foreground=True)
  • resolve_inline_meta() builds dynamic state docs from query args
  • when guards with has() replace old prerequisite (key=*) syntax
  • Async delegation: meta-docs with async actions enqueue cursor for daemon
  • Legacy line-based parser kept as fallback for one version cycle
  • Performance: env/loader/runner shared across meta-doc evaluations
  • docs/META-TAGS.md fully rewritten for the new format
  • Design docs updated (STATE-ACTIONS.md, BUILTIN-STATE-DOCS.md)
  • 6 new tests, 3 updated, 1616 total pass