项目文件夹

文件
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 行
12 KiB
Markdown

# 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 35–85%).
## 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 (10–60 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.
## 5–7. 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 (theta–gamma 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 (~30–90 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
- Theta–gamma 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