Releases: keepnotes-ai/keep
v0.112.0
What's new
- Read-path perf instrumentation —
get,find, andget_contextare now instrumented with timing breakdowns (embed, semantic search, FTS, RRF fusion, hydration, deep follow, enrichment, context assembly). Stats reported inkeep-ops.logand via--verbose. - Fix
pending --listcount — flow items were capped at 100 in display; now shows all. - Fix
perf_stats.reset()crash — referenced undefined attribute. - Design doc —
later/design-unified-get-query-cache.mdfor unified get + query cache (future work).
v0.111.2
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 satisfiesAssembleResultcontract - Accept
prompt/modelin assemble: uses explicit prompt param when provided, falls back to extraction - Delegate
compact()to runtime: fixes/compactand overflow recovery (was a no-op that blocked compaction) - Fix
onSubagentEndedtype: reason now usesSubagentEndReasonunion instead ofstring - 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
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
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
Tag action mutations, remove dead TaggingProvider, test fix
- tag action: return
set_tagsmutations instead of directcontext.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_conformanceno longer hits real APIs - Email supernode prompt: tighten scope from
*@*to*@*.*
Net -379 lines.
v0.110.2
Fix _EnvActionContext missing methods for write-path actions
- resolve_duplicates: add
find_by_content_hashto_EnvActionContext - describe: add
mediaprovider kind to_EnvActionContext.resolve_provider - Remove dead
document/taggingprovider entries from flow env - Add regression tests
v0.110.1
v0.110.0 — supernode review pipeline
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_supernodesaction: edge table query with fan-in scoring, stub guard, scope-glob prompt matchinggenerateaction extended: acceptspromptparam for.prompt/*doc resolution with item ID scope matching- 3 supernode prompt docs: default, email (
*@*), URL (http*://*) — extractive, English-only, no preamble review-supernodesstate doc: get → traverse → generate → put (single candidate per work item).meta/supernodes: context surfacing — reviewed supernodes appear inkeep getfrontmatter
Daemon timer events
- Queue replenishment: daemon periodically (30min) checks for supernode candidates and enqueues reviews
- Timer state persistence:
.timer_state.jsontracks 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_docscope-glob matching viafnmatch— prompts can match item IDs by patternget_document_store()exposed on flow action contextlist_pending()returns input data for richer display- 14 new tests, 1630 total pass
v0.109.0 — meta-docs as flows, unified context assembly
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
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 viarun_flow(foreground=True)resolve_inline_meta()builds dynamic state docs from query argswhenguards withhas()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.mdfully rewritten for the new format- Design docs updated (STATE-ACTIONS.md, BUILTIN-STATE-DOCS.md)
- 6 new tests, 3 updated, 1616 total pass