Files
wehub-resource-sync 26382a7ac6
CI / Clippy (push) Failing after 15m13s
CI / Test (ubuntu-latest) (push) Failing after 16m1s
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (windows-latest) (push) Has been cancelled
CI / Build (no embeddings / no ORT) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Cookbook (Node) (push) Has been cancelled
CI / Pi Extension (Node) (push) Has been cancelled
CI / Rust SDK (lean-ctx-client) (push) Has been cancelled
CI / Embed SDK (lean-ctx-sdk) (push) Has been cancelled
CI / Python SDK (leanctx) (push) Has been cancelled
CI / Hermes Plugin (Python) (push) Has been cancelled
CI / SDK Conformance Matrix (push) Has been cancelled
CI / Coverage (push) Has been cancelled
CI / cargo-deny (push) Has been cancelled
CI / Adversarial Safety (push) Has been cancelled
CI / Benchmarks (push) Has been cancelled
CI / Output-Quality Gate (eval A/B) (push) Has been cancelled
CI / Documentation (push) Has been cancelled
CI / CI Green (push) Has been cancelled
JetBrains Plugin / Actionlint (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (rust) (push) Has been cancelled
JetBrains Plugin / Validation (push) Has been cancelled
JetBrains Plugin / Build (push) Has been cancelled
JetBrains Plugin / Test (push) Has been cancelled
Security Check / Security Scan (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:35:30 +08:00

237 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Adaptive Learning Layers
lean-ctx tunes itself from outcomes. Seven research-driven layers (GL #538#544)
observe how compression, context placement and multi-agent coordination actually
perform on *your* machine — and adapt. This page explains what each layer learns,
where its data lives and how to inspect or share it.
All learning is **local-first**, bounded and clamped: research-tuned defaults stay
the anchor; learned adjustments decay back toward them when the evidence ages.
## The layers at a glance
| Layer | Learns | Store (`~/.lean-ctx/`) | Inspect |
|---|---|---|---|
| Learned thresholds (#538) | Per-file-type compression aggressiveness | `thresholds_learned.json` | `lean-ctx learning`, `ctx_metrics` |
| LITM calibration (#539) | Where wakeup facts are actually recalled from (begin vs end) | `litm_calibration.json` | `lean-ctx learning`, `ctx_metrics` |
| Stigmergy scent field (#540) | What parallel agents work on, where they got stuck | `scent_field.json` | Dashboard → Trends, `ctx_agent sync` |
| Delta playbook (#541) | Strategies, pitfalls, key files that survive checkpoints | session state | `ctx_compress` output, Dashboard |
| Query-conditioned IB (#542) | Nothing persistent — biases compression toward your active query | — | `ctx_read` entropy mode |
| Theta-gamma chunking (#543) | Nothing persistent — clusters wakeup facts into topic chunks | — | wakeup output |
| Semantic likelihood scorer (#544) | Nothing persistent — drops semantically redundant lines | — | entropy mode (needs embeddings) |
## 1. Learned compression thresholds (#538)
Every compressed read is an implicit experiment. Four outcome signals adjust a
per-extension entropy-threshold delta:
- **Bounce** (compressed read → full re-read within 5 reads): strong *back off*.
- **Edit failure** after a compressed read: strongest *back off*.
- **Clean compressed read**: gentle *compress more*.
- **Wasted full read** (large full read of a never-bouncing type): *compress more*.
Deltas are clamped to ±0.15, decay 2% daily toward zero and only apply after 10
observations per extension. Result: `.md` files that keep bouncing get gentler
compression on *your* machine; generated `.json` that nobody re-reads gets more.
```
$ lean-ctx learning
Learned compression thresholds:
.rs: delta +0.041 (27 signals) — compresses more
.md: delta -0.060 (11 signals) — backs off
```
## 2. LITM placement calibration (#539)
"Lost in the middle" placement (task at the end, anchors at the begin) ships with
research defaults. The calibration layer measures where *your* client's recalls
actually hit — every explicit `ctx_knowledge recall` that matches a wakeup
manifest entry scores its position — and shifts the begin/end budget share
accordingly (clamped to 3585%).
## 3. Stigmergy scent field (#540)
Parallel agents coordinate indirectly, like ant pheromones: deposits of
`CLAIMED`, `DONE`, `STUCK`, `HOT`, `AVOID` on files/tasks, with per-kind
exponential decay (1060 min half-life).
- `ctx_agent claim <path>` — claim a work target; second agent gets a rejection
with holder + age. Rejected claims are counted as **prevented duplicate work**.
- `ctx_agent release <path>` — release early.
- `ctx_agent sync` — see the live field.
- `ctx_read` shows `[scent: claimed by …]` hints on foreign-claimed files.
Identity: explicitly registered agents use their registered ID; unconfigured
processes get a PID-distinct identity (`local-12345`), so two Cursor windows on
the same machine genuinely see each other (#547).
## 4. Delta playbook (#541)
Checkpoints (`ctx_compress`) no longer re-summarize prior summaries (the ACE
"context collapse" failure mode). Instead the session distills into itemized
entries with stable IDs — `Strategy`, `Pitfall`, `Fact`, `FileRef` — that are
only appended, confirmed (dedup by token-Jaccard), voted and locally evicted.
Resumed sessions replay the playbook instead of a lossy prose summary.
## 57. Query-aware compression (#542, #543, #544)
- **#542**: entropy-mode compression fuses token entropy with an IDF-weighted
relevance score against your active task / latest semantic query.
- **#543**: wakeup facts render as topic-clustered chunks (thetagamma model:
~4 items per chunk), saving tokens and improving recall structure.
- **#544**: with the embedding engine active, near-duplicate lines are dropped
by cosine similarity against a sliding window of kept lines (MMR-style).
## Embeddings: self-activating (#551)
Semantic features need a local ONNX embedding model (~3090 MB). On the first
semantic need lean-ctx downloads it **in the background** (TOFU SHA-256 pinned,
see `docs/guides/custom-embeddings.md`) and warms the engine — no hot path ever
blocks. Opt out for air-gapped machines:
```toml
[embedding]
auto_download = false
```
or `LEAN_CTX_EMBEDDINGS_AUTO_DOWNLOAD=0` (env wins in both directions).
`ctx_metrics` always shows the engine status and the reason if it is off.
## Sharing learning with your team (#550)
Learning state is shareable as a secret-free JSON bundle (file extensions,
client profiles and aggregate numbers only — no paths, no content):
```
$ lean-ctx learning export team.json # on the experienced machine
$ lean-ctx learning import team.json # on the new machine
```
Merge semantics are double-count-safe and idempotent:
- threshold deltas: **sample-weighted average**, clamps enforced;
- LITM counters: **element-wise maximum**.
Re-importing the same bundle is a no-op, so bundles can be committed to a repo
or distributed via CI without drift.
## Proving it works (#549)
`ctx_metrics` carries a **Learning Efficacy** section, and the dashboard
(Trends page) shows the same evidence:
- bounce rate week-over-week (from the signed savings ledger),
- LITM placement hit-rate movement (30-day snapshot ring),
- playbook survival (aged entries still net-helpful),
- duplicate work prevented (rejected claims).
If a learning layer does not move its metric, it gets retuned or removed — the
layers earn their place with evidence, not theory.
## Cognition v2 — science-grounded subsystems
A second wave of layers models the *context lifecycle itself* on neuroscience and
physics. Unlike the adaptive layers above (which tune compression), these govern
what stays in working context, how salience decays, and what is admitted from
external sources. **All are deterministic by default** so tool output stays
byte-stable (prompt-cache contract / Rule #498); probabilistic exploration is
opt-in via `LEAN_CTX_STOCHASTIC=1`.
| Subsystem | Science | What it does | Key config |
|---|---|---|---|
| Time-variant Φ | Attention salience | Recomputes + EMA-blends context Φ on every re-read instead of freezing it | — |
| Power-law decay | Ebbinghaus + spacing | Knowledge confidence decays `R = exp(-Δt/S)`, `S` grows per retrieval | `forgetting_model`, `base_stability_days`, `LEAN_CTX_LIFECYCLE_FORGETTING` |
| Hebbian eviction | "Fire together, wire together" | Co-accessed cache entries protect each other from eviction | — |
| CLS consolidation | Complementary learning systems | Replay lifts confidence of related, frequently-retrieved facts | — |
| Integration-aware Φ | IIT non-redundancy (MMR) | Greedy MMR selection + **content**-based dedup (not paths) | — |
| Global-workspace ignition | Global Workspace Theory | High-Φ outliers are broadcast/pinned, resist downgrade | `LEAN_CTX_GWT_IGNITION_Z` |
| Learned field weights | Reinforcement learning | Bandit picks Φ weights — argmax-of-mean by default, Thompson under flag | `LEAN_CTX_STOCHASTIC` |
| Idle replay | Sharp-wave-ripple replay | A quiet gap triggers a deeper background consolidation pass | `LEAN_CTX_COGNITION_IDLE_SECS` |
| FEP prefetch | Active inference / free energy | Surfaces likely-next co-accessed files as a warmup hint (never auto-reads) | — |
| Immune detector | Artificial immune system | Screens external provider data for injection/poisoning before ingest; stricter for untrusted workspaces | coupled to Workspace Trust |
| Observation synthesis | Entity-summary memory (Hindsight) | Distils per-entity fact clusters into deterministic, recall-prioritized observation summaries | `cognition_synthesis_min_cluster`, `cognition_loop_max_steps` |
### Proving they are active
Every subsystem ticks a shared activity registry at its real call site. Inspect
what is wired and what has actually fired this session:
```
$ lean-ctx introspect cognition
Cognition subsystems: 8/12 active (12 wired)
[active] Sticky-Phi fix count=42 last=3s ago time-variant salience (attention)
[active] Immune detector count=2 last=1m ago artificial immune system
[idle ] QUBO selection (spike) count=0 last=never quantum-inspired optimization
...
```
`lean-ctx doctor` summarizes the same (`Cognition 8/12 subsystems active`).
Add `--json` for machine-readable output.
### Observation synthesis (entity summaries)
Inspired by [Hindsight](https://github.com/vectorize-io/hindsight)'s *observation
network*, the loop's 9th step distils clusters of related facts into compact,
per-entity **observations** — a synthesized orientation layer over the raw store.
- **Epistemic typing (evidence vs. inference).** Every fact is typed by archetype
on write (`infer_from_category`), separating objective *evidence* (architecture,
dependency, convention, gotcha, fact) from *inference* (decision, preference,
observation). Typing already feeds salience ranking, and — opt-in via
`archetype_aware_decay` — lets structural evidence decay slower than inference on
the Ebbinghaus curve.
- **Deterministic synthesis.** Facts are grouped by an entity anchor (a file path
in the key/value, else the category); each cluster of ≥
`cognition_synthesis_min_cluster` (default 3) facts becomes one observation
written through the normal `remember()` path — so versioning, persistence, and
idempotency come for free (unchanged facts → confirmation; changed → supersede).
The value is a stable function of the source content (no timestamps/counters), so
hot-path recall stays byte-stable (#498). An optional LLM refinement sits behind
`llm.enabled`; the deterministic digest is always the fallback.
- **Recall priority.** A relevant synthesized observation gets a *balanced* recall
boost — above incidental matches, but below an exact key hit — so a stale summary
never buries a precise raw fact.
Synthesis runs as step 9, active only when `cognition_loop_max_steps >= 9` (the new
default; set 8 to disable). Activity shows as `observation_synthesis` in
`lean-ctx introspect cognition`.
### QUBO selection (research spike)
Context selection under a token budget is a quadratic optimization (maximize Φ,
penalize redundancy, respect budget) — i.e. a QUBO, the form solved by quantum
annealers. A deterministic simulated-annealing solver and a benchmark harness ship
behind `LEAN_CTX_EXPERIMENTAL_QUBO`:
```
$ lean-ctx introspect qubo
QUBO spike (experimental, greedy stays default)
items=13 budget=1500
greedy: phi=3.800 tokens=1500
qubo: phi=3.800 tokens=1500
phi gain: +0.0%
```
On clean problems QUBO reaches parity with the greedy knapsack — **no measurable
win, so greedy remains the default.** The spike exists to *measure*; promotion is
conditional on a future, reproducible gain.
## Research references
- LLMLingua / LLMLingua-2 (2403.12968) — perplexity/classifier token pruning
- ACE: Agentic Context Engineering (2510.04618) — delta contexts, anti-collapse
- Lost in the Middle (2307.03172) — U-shaped attention
- StreamingLLM / H2O (2309.17453, 2306.14048) — attention sinks, KV eviction
- Thetagamma coupling (Lisman & Jensen 2013) — working-memory chunking
- Information Bottleneck (Tishby et al.) — relevance-conditioned compression
- Stigmergy (Theraulaz & Bonabeau 1999) — indirect coordination
- Ebbinghaus (1885), SM-2 spacing — forgetting curve, spacing effect
- Hebb (1949), McClelland CLS (1995) — associative learning, consolidation
- Integrated Information Theory (Tononi 2004) — integration / non-redundancy
- Global Workspace Theory (Baars 1988; Dehaene) — ignition / broadcast
- Free-Energy Principle (Friston 2010) — active inference, prefetch
- Artificial Immune Systems (de Castro & Timmis 2002) — anomaly/self-nonself
- QUBO / simulated bifurcation (Goto et al. 2019) — quantum-inspired optimization
- Hindsight (Vectorize, 2025) — agent observation networks, evidence vs. inference