mirror of
https://github.com/samvallad33/vestige.git
synced 2026-05-04 05:12:36 +02:00
First AI memory system to model forgetting as a neuroscience-grounded PROCESS rather than passive decay. Adds the `suppress` MCP tool (#24), Rac1 cascade worker, migration V10, and dashboard forgetting indicators. Based on: - Anderson, Hanslmayr & Quaegebeur (2025), Nat Rev Neurosci — right lateral PFC as the domain-general inhibitory controller; SIF compounds with each stopping attempt. - Cervantes-Sandoval et al. (2020), Front Cell Neurosci PMC7477079 — Rac1 GTPase as the active synaptic destabilization mechanism. What's new: * `suppress` MCP tool — each call compounds `suppression_count` and subtracts a `0.15 × count` penalty (saturating at 80%) from retrieval scores during hybrid search. Distinct from delete (removes) and demote (one-shot). * Rac1 cascade worker — background sweep piggybacks the 6h consolidation loop, walks `memory_connections` edges from recently-suppressed seeds, applies attenuated FSRS decay to co-activated neighbors. You don't just forget Jake — you fade the café, the roommate, the birthday. * 24h labile window — reversible via `suppress({id, reverse: true})` within 24 hours. Matches Nader reconsolidation semantics. * Migration V10 — additive-only (`suppression_count`, `suppressed_at` + partial indices). All v2.0.x DBs upgrade seamlessly on first launch. * Dashboard: `ForgettingIndicator.svelte` pulses when suppressions are active. 3D graph nodes dim to 20% opacity when suppressed. New WebSocket events: `MemorySuppressed`, `MemoryUnsuppressed`, `Rac1CascadeSwept`. Heartbeat carries `suppressed_count`. * Search pipeline: SIF penalty inserted into the accessibility stage so it stacks on top of passive FSRS decay. * Tool count bumped 23 → 24. Cognitive modules 29 → 30. Memories persist — they are INHIBITED, not erased. `memory.get(id)` returns full content through any number of suppressions. The 24h labile window is a grace period for regret. Also fixes issue #31 (dashboard graph view buggy) as a companion UI bug discovered during the v2.0.5 audit cycle: * Root cause: node glow `SpriteMaterial` had no `map`, so `THREE.Sprite` rendered as a solid-coloured 1×1 plane. Additive blending + `UnrealBloomPass(0.8, 0.4, 0.85)` amplified the square edges into hard-edged glowing cubes. * Fix: shared 128×128 radial-gradient `CanvasTexture` singleton used as the sprite map. Retuned bloom to `(0.55, 0.6, 0.2)`. Halved fog density (0.008 → 0.0035). Edges bumped from dark navy `0x4a4a7a` to brand violet `0x8b5cf6` with higher opacity. Added explicit `scene.background` and a 2000-point starfield for depth. * 21 regression tests added in `ui-fixes.test.ts` locking every invariant in (shared texture singleton, depthWrite:false, scale ×6, bloom magic numbers via source regex, starfield presence). Tests: 1,284 Rust (+47) + 171 Vitest (+21) = 1,455 total, 0 failed Clippy: clean across all targets, zero warnings Release binary: 22.6MB, `cargo build --release -p vestige-mcp` green Versions: workspace aligned at 2.0.5 across all 6 crates/packages Closes #31
53 lines
2.5 KiB
HTML
53 lines
2.5 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
|
<meta name="theme-color" content="#050510" />
|
|
<meta name="description" content="Vestige — Cognitive Memory Dashboard. 3D visualization of your AI's long-term memory." />
|
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
<meta name="apple-mobile-web-app-title" content="Vestige" />
|
|
<link rel="icon" type="image/svg+xml" href="/dashboard/favicon.svg" />
|
|
<link rel="apple-touch-icon" href="/dashboard/favicon.svg" />
|
|
<link rel="manifest" href="/dashboard/manifest.json" />
|
|
<link href="/dashboard/_app/immutable/entry/start.CM2cmm4m.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/DwA4GIGc.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/nyjtQ1Ok.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/DAj0p1rI.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/urMNLRPv.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/DeTA_5mp.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/entry/app.DzQ7RYYG.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/C4L78yoI.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/B0IenmM-.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/Bzak7iHL.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/B17metm1.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/C3lo34Tx.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/DAhpUNCK.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/BPtVz5jm.js" rel="modulepreload">
|
|
<link href="/dashboard/_app/immutable/chunks/C3ZC25l2.js" rel="modulepreload">
|
|
|
|
<title>Vestige</title>
|
|
</head>
|
|
<body data-sveltekit-preload-data="hover">
|
|
<div style="display: contents">
|
|
<script>
|
|
{
|
|
__sveltekit_1ysfr3o = {
|
|
base: "/dashboard",
|
|
assets: "/dashboard"
|
|
};
|
|
|
|
const element = document.currentScript.parentElement;
|
|
|
|
Promise.all([
|
|
import("/dashboard/_app/immutable/entry/start.CM2cmm4m.js"),
|
|
import("/dashboard/_app/immutable/entry/app.DzQ7RYYG.js")
|
|
]).then(([kit, app]) => {
|
|
kit.start(app, element);
|
|
});
|
|
}
|
|
</script>
|
|
</div>
|
|
</body>
|
|
</html>
|