mirror of
https://github.com/samvallad33/vestige.git
synced 2026-06-08 20:25:16 +02:00
v2.1.2 Honest Memory
Some checks failed
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (ubuntu-latest) (push) Has been cancelled
Test Suite / Unit Tests (push) Has been cancelled
Test Suite / MCP E2E Tests (push) Has been cancelled
Test Suite / Dashboard Build (push) Has been cancelled
Test Suite / Code Coverage (push) Has been cancelled
CI / Release Build (aarch64-apple-darwin) (push) Has been cancelled
CI / Release Build (x86_64-unknown-linux-gnu) (push) Has been cancelled
CI / Release Build (x86_64-apple-darwin) (push) Has been cancelled
Test Suite / User Journey Tests (push) Has been cancelled
Some checks failed
CI / Test (macos-latest) (push) Has been cancelled
CI / Test (ubuntu-latest) (push) Has been cancelled
Test Suite / Unit Tests (push) Has been cancelled
Test Suite / MCP E2E Tests (push) Has been cancelled
Test Suite / Dashboard Build (push) Has been cancelled
Test Suite / Code Coverage (push) Has been cancelled
CI / Release Build (aarch64-apple-darwin) (push) Has been cancelled
CI / Release Build (x86_64-unknown-linux-gnu) (push) Has been cancelled
CI / Release Build (x86_64-apple-darwin) (push) Has been cancelled
Test Suite / User Journey Tests (push) Has been cancelled
Concrete search, irreversible purge, first-class contradictions tool, vestige update CLI, dense dream persistence fix, embedding-model upgrade repair, and a /dashboard/waitlist Pro early-access preview. 25 MCP tools. SQLite migration v13. Backwards compatible: 'delete' remains as a 'purge' alias. Closes #50, #51.
This commit is contained in:
parent
c3c54d4e97
commit
9936928be9
307 changed files with 2999 additions and 2528 deletions
12
CHANGELOG.md
12
CHANGELOG.md
|
|
@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
## [2.1.2] - 2026-05-01 — "Honest Memory"
|
||||
|
||||
v2.1.2 focuses on operational trust: exact search stays exact, purge really removes content, contradictions are directly inspectable, and the update flow no longer depends on copied curl commands.
|
||||
|
||||
### Added
|
||||
|
||||
- **Concrete search mode** — `search` now auto-detects literal queries such as quoted strings, env vars, UUIDs, paths, and code identifiers. Those queries take a keyword/literal path that skips HyDE, semantic fusion, FSRS reweighting, retrieval competition, and spreading activation so exact matches land first.
|
||||
- **Irreversible purge** — `memory(action="purge", confirm=true)` permanently removes memory content and embeddings, scrubs `insights.source_memories`, detaches temporal-summary children, prunes graph edges, and writes only a non-content `deletion_tombstones` row for sync/audit.
|
||||
- **First-class contradictions tool** — new `contradictions` MCP tool scans a topic or recent memories for trust-weighted disagreements using the same local contradiction logic as `deep_reference`.
|
||||
- **Simple update flow** — `vestige update` refreshes the installed binary and companion Sandwich files without requiring users to paste a curl installer.
|
||||
- **Pro waitlist preview** — `/dashboard/waitlist` adds a local-only marketing surface for Solo Pro and Team Pro early-access signups. `VITE_WAITLIST_ENDPOINT` and `VITE_SUPPORT_BOT_ENDPOINT` are opt-in dashboard env vars, so no signup data is captured unless endpoints are configured.
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Dream connection persistence cap** — dense single-domain dreams now persist every connection discovered in that run instead of losing everything beyond the old 1,000-entry live buffer. The live dreamer buffer now keeps up to 200,000 high-scoring recent connections, and the MCP `dream` tool exposes `min_similarity` for corpus-specific tuning.
|
||||
|
|
|
|||
390
CLAUDE.md
390
CLAUDE.md
|
|
@ -1,362 +1,62 @@
|
|||
# 🚫 READ FIRST EVERY PROMPT — NO HEDGING
|
||||
# Vestige Agent Guidance
|
||||
|
||||
Sam's April 20 2026 correction: *"you NEVER LISTEN TO YOUR RULES, WHY ARE YOU ALWAYS BREAKING THE HEDGING/PESSIMISTIC RULE."*
|
||||
This file is intentionally safe for the public repository. It gives coding
|
||||
agents project-specific context without relying on private local files,
|
||||
personal operating notes, or mandatory background hooks.
|
||||
|
||||
When Sam commits to an execution path (content cadence, shipping velocity, outreach, launch), COMPUTE THE FORECAST AS IF THAT COMMITMENT IS MET. Do not discount by execution probability. Sam has earned the benefit of the doubt across 139 commits and 1,292 passing tests in 3 months.
|
||||
## Project Shape
|
||||
|
||||
**Forbidden in any response**: "has to be true", "has to convert", "realistic forecast" used to shrink, "contingent on" Sam's own execution, "not guaranteed", "may or may not", "aspiration not forecast", "temper your expectations", floors framed as reality vs. ceilings framed as fantasy.
|
||||
Vestige is a local-first MCP memory server written in Rust, with a SvelteKit
|
||||
dashboard embedded into the release binary. The core product promise is:
|
||||
|
||||
**Required format for forecasts**: `Target X. Floor Y. Ceiling Z. Math: [line items]. Risks: [separate section]. Let's go.`
|
||||
- user-owned memory stored locally by default
|
||||
- MCP-native integration with coding agents
|
||||
- retrieval and memory lifecycle behavior informed by cognitive science
|
||||
- explicit tools for search, review, suppression, purge, graph exploration,
|
||||
contradiction inspection, and maintenance
|
||||
|
||||
Full rule: `/Users/entity002/CLAUDE.md` (top banner) + `/Users/entity002/.claude/projects/-Users-entity002/memory/feedback_always_positive_energy.md`. Stop-hook enforcement: `/Users/entity002/.claude/hooks/synthesis-stop-validator.sh`.
|
||||
## Working Rules
|
||||
|
||||
---
|
||||
- Prefer source evidence over memory. Use `rg`, tests, and nearby code before
|
||||
making claims about behavior.
|
||||
- Keep release changes scoped. Do not rewrite unrelated modules during a
|
||||
version/tag cleanup unless the release gate requires it.
|
||||
- Preserve local-first behavior. Heavy models, Sanhedrin-style verifier hooks,
|
||||
and preflight automation must remain optional.
|
||||
- Treat deletion semantics carefully. `purge` must remove content and
|
||||
embeddings, while retaining only content-free audit tombstones.
|
||||
- Treat exact lookup semantics carefully. Env vars, paths, UUIDs, quoted
|
||||
strings, and code identifiers should not be distorted by semantic expansion.
|
||||
|
||||
# Vestige v2.0.4 — Cognitive Memory & Reasoning System
|
||||
## Common Checks
|
||||
|
||||
Vestige is your long-term memory AND reasoning engine. 29 stateful cognitive modules implement real neuroscience: FSRS-6 spaced repetition, synaptic tagging, prediction error gating, hippocampal indexing, spreading activation, reconsolidation, and dual-strength memory theory. **Use it automatically. Use it aggressively.**
|
||||
Run the narrowest check that covers the change, then run the release gates
|
||||
before tagging:
|
||||
|
||||
**NEW: `deep_reference` — call this for ALL factual questions.** It doesn't just retrieve — it REASONS across memories with FSRS-6 trust scoring, intent classification, contradiction analysis, and generates a pre-built reasoning chain. Read the `reasoning` field FIRST.
|
||||
|
||||
---
|
||||
|
||||
## Session Start Protocol
|
||||
|
||||
Every conversation, before responding to the user:
|
||||
|
||||
```
|
||||
session_context({
|
||||
queries: ["user preferences", "[current project] context"],
|
||||
context: { codebase: "[project]", topics: ["[current topics]"] },
|
||||
token_budget: 2000
|
||||
})
|
||||
```sh
|
||||
cargo test --workspace --no-fail-fast
|
||||
cargo clippy --workspace -- -D warnings
|
||||
pnpm --filter @vestige/dashboard check
|
||||
pnpm --filter @vestige/dashboard build
|
||||
```
|
||||
|
||||
Then check `automationTriggers` from response:
|
||||
- `needsDream` → call `dream` (consolidates memories, discovers hidden connections)
|
||||
- `needsBackup` → call `backup`
|
||||
- `needsGc` → call `gc(dry_run: true)` then review
|
||||
- totalMemories > 700 → call `find_duplicates`
|
||||
For documentation-only changes, at minimum run:
|
||||
|
||||
Say "Remembering..." then retrieve context before answering.
|
||||
|
||||
> **Fallback:** If `session_context` unavailable: `search` × 2 → `intention` check → `system_status` → `predict`.
|
||||
|
||||
---
|
||||
|
||||
## Complete Tool Reference (23 Tools)
|
||||
|
||||
### session_context — One-Call Initialization
|
||||
```
|
||||
session_context({
|
||||
queries: ["user preferences", "project context"], // search queries
|
||||
context: { codebase: "project-name", topics: ["svelte", "rust"], file: "src/main.rs" },
|
||||
token_budget: 2000, // 100-100000, controls response size
|
||||
include_status: true, // system health
|
||||
include_intentions: true, // triggered reminders
|
||||
include_predictions: true // proactive memory predictions
|
||||
})
|
||||
```
|
||||
Returns: markdown context + `automationTriggers` + `expandable` IDs for on-demand retrieval.
|
||||
|
||||
### smart_ingest — Save Anything
|
||||
**Single mode** — auto-decides CREATE/UPDATE/SUPERSEDE via Prediction Error Gating:
|
||||
```
|
||||
smart_ingest({
|
||||
content: "What to remember",
|
||||
tags: ["tag1", "tag2"],
|
||||
node_type: "fact", // fact|concept|event|person|place|note|pattern|decision
|
||||
source: "optional reference",
|
||||
forceCreate: false // bypass dedup when needed
|
||||
})
|
||||
```
|
||||
**Batch mode** — save up to 20 items in one call (session end, pre-compaction):
|
||||
```
|
||||
smart_ingest({
|
||||
items: [
|
||||
{ content: "Item 1", tags: ["session-end"], node_type: "fact" },
|
||||
{ content: "Item 2", tags: ["bug-fix"], node_type: "fact" }
|
||||
]
|
||||
})
|
||||
```
|
||||
Each item runs the full cognitive pipeline: importance scoring → intent detection → synaptic tagging → hippocampal indexing → PE gating → cross-project recording.
|
||||
|
||||
### search — 7-Stage Cognitive Search
|
||||
```
|
||||
search({
|
||||
query: "search query",
|
||||
limit: 10, // 1-100
|
||||
min_retention: 0.0, // filter by retention strength
|
||||
min_similarity: 0.5, // minimum cosine similarity
|
||||
detail_level: "summary", // brief|summary|full
|
||||
context_topics: ["rust", "debugging"], // boost topic-matching memories
|
||||
token_budget: 3000, // 100-100000, truncate to fit
|
||||
retrieval_mode: "balanced" // precise|balanced|exhaustive (v2.1)
|
||||
})
|
||||
```
|
||||
Retrieval modes: `precise` (fast, no activation/competition), `balanced` (default 7-stage pipeline), `exhaustive` (5x overfetch, deep graph traversal, no competition suppression).
|
||||
|
||||
Pipeline: Overfetch → Rerank (cross-encoder) → Temporal boost → Accessibility filter (FSRS-6) → Context match (Tulving 1973) → Competition (Anderson 1994) → Spreading activation. **Every search strengthens the memories it finds (Testing Effect).**
|
||||
|
||||
### memory — Read, Edit, Delete, Promote, Demote
|
||||
```
|
||||
memory({ action: "get", id: "uuid" }) // full node with all FSRS state
|
||||
memory({ action: "edit", id: "uuid", content: "updated text" }) // preserves FSRS state, regenerates embedding
|
||||
memory({ action: "delete", id: "uuid" })
|
||||
memory({ action: "promote", id: "uuid", reason: "was helpful" }) // +0.20 retrieval, +0.10 retention, 1.5x stability
|
||||
memory({ action: "demote", id: "uuid", reason: "was wrong" }) // -0.30 retrieval, -0.15 retention, 0.5x stability
|
||||
memory({ action: "state", id: "uuid" }) // Active/Dormant/Silent/Unavailable + accessibility score
|
||||
memory({ action: "get_batch", ids: ["uuid1", "uuid2", "uuid3"] }) // retrieve up to 20 full memories at once (v2.1)
|
||||
```
|
||||
Promote/demote does NOT delete — it adjusts ranking. Demoted memories rank lower; alternatives surface instead.
|
||||
`get_batch` is designed for batch retrieval of expandable overflow IDs from search/session_context.
|
||||
|
||||
### codebase — Code Patterns & Architectural Decisions
|
||||
```
|
||||
codebase({ action: "remember_pattern", name: "Pattern Name",
|
||||
description: "How it works and when to use it",
|
||||
files: ["src/file.rs"], codebase: "project-name" })
|
||||
|
||||
codebase({ action: "remember_decision", decision: "What was decided",
|
||||
rationale: "Why", alternatives: ["Option A", "Option B"],
|
||||
files: ["src/file.rs"], codebase: "project-name" })
|
||||
|
||||
codebase({ action: "get_context", codebase: "project-name", limit: 10 })
|
||||
// Returns: patterns, decisions, cross-project insights
|
||||
```sh
|
||||
git diff --check
|
||||
```
|
||||
|
||||
### intention — Prospective Memory (Reminders)
|
||||
```
|
||||
intention({ action: "set", description: "What to do",
|
||||
trigger: { type: "context", topic: "authentication" }, // fires when discussing auth
|
||||
priority: "high" })
|
||||
## Documentation
|
||||
|
||||
intention({ action: "set", description: "Deploy by Friday",
|
||||
trigger: { type: "time", at: "2026-03-07T17:00:00Z" },
|
||||
deadline: "2026-03-07T17:00:00Z" })
|
||||
- User setup: `README.md`
|
||||
- Claude-specific templates: `docs/CLAUDE-SETUP.md`
|
||||
- Storage and sync behavior: `docs/STORAGE.md`
|
||||
- Cognitive Sandwich and optional verifier hooks: `docs/COGNITIVE_SANDWICH.md`
|
||||
- Release history: `CHANGELOG.md`
|
||||
|
||||
intention({ action: "set", description: "Check test coverage",
|
||||
trigger: { type: "context", codebase: "vestige", file_pattern: "*.test.*" } })
|
||||
## Public-Repo Hygiene
|
||||
|
||||
intention({ action: "check", context: { codebase: "vestige", topics: ["testing"] } })
|
||||
intention({ action: "update", id: "uuid", status: "complete" })
|
||||
intention({ action: "list", filter_status: "active" })
|
||||
```
|
||||
|
||||
### dream — Memory Consolidation
|
||||
```
|
||||
dream({ memory_count: 50 })
|
||||
```
|
||||
5-stage cycle: Replay → Cross-reference → Strengthen → Prune → Transfer. Uses Waking SWR tagging (70% tagged + 30% random for diversity). Discovers hidden connections, generates insights, persists new edges to the activation network.
|
||||
|
||||
### explore_connections — Graph Traversal
|
||||
```
|
||||
explore_connections({ action: "associations", from: "uuid", limit: 10 })
|
||||
// Spreading activation from a memory — find related memories via graph traversal
|
||||
|
||||
explore_connections({ action: "chain", from: "uuid-A", to: "uuid-B" })
|
||||
// Build reasoning path between two memories (A*-like pathfinding)
|
||||
|
||||
explore_connections({ action: "bridges", from: "uuid-A", to: "uuid-B" })
|
||||
// Find connecting memories that bridge two concepts
|
||||
```
|
||||
|
||||
### predict — Proactive Retrieval
|
||||
```
|
||||
predict({ context: { codebase: "vestige", current_file: "src/main.rs",
|
||||
current_topics: ["error handling", "rust"] } })
|
||||
```
|
||||
Returns: predictions with confidence, suggestions, speculative retrievals, top interests. Uses SpeculativeRetriever's learned patterns from access history.
|
||||
|
||||
### importance_score — Should I Save This?
|
||||
```
|
||||
importance_score({ content: "Content to evaluate",
|
||||
context_topics: ["debugging"], project: "vestige" })
|
||||
```
|
||||
4-channel model: novelty (0.25), arousal (0.30), reward (0.25), attention (0.20). Composite > 0.6 = save it.
|
||||
|
||||
### find_duplicates — Dedup Memory
|
||||
```
|
||||
find_duplicates({ similarity_threshold: 0.80, limit: 20, tags: ["bug-fix"] })
|
||||
```
|
||||
Cosine similarity clustering. Returns merge/review suggestions.
|
||||
|
||||
### memory_timeline — Chronological Browse
|
||||
```
|
||||
memory_timeline({ start: "2026-02-01", end: "2026-03-01",
|
||||
node_type: "decision", tags: ["vestige"], limit: 50, detail_level: "summary" })
|
||||
```
|
||||
|
||||
### memory_changelog — Audit Trail
|
||||
```
|
||||
memory_changelog({ memory_id: "uuid", limit: 20 }) // per-memory history
|
||||
memory_changelog({ start: "2026-03-01", limit: 20 }) // system-wide
|
||||
```
|
||||
|
||||
### memory_health — Retention Dashboard
|
||||
```
|
||||
memory_health()
|
||||
```
|
||||
Returns: avg retention, distribution buckets (0-20%, 20-40%, etc.), trend (improving/declining/stable), recommendation.
|
||||
|
||||
### memory_graph — Visualization Export
|
||||
```
|
||||
memory_graph({ query: "search term", depth: 2, max_nodes: 50 })
|
||||
memory_graph({ center_id: "uuid", depth: 3, max_nodes: 100 })
|
||||
```
|
||||
Returns nodes with force-directed positions + edges with weights.
|
||||
|
||||
### deep_reference — Cognitive Reasoning Engine (v2.0.4) ★ USE THIS FOR ALL FACTUAL QUESTIONS
|
||||
```
|
||||
deep_reference({ query: "What port does the dev server use?" })
|
||||
deep_reference({ query: "Should I use prefix caching with vLLM?", depth: 30 })
|
||||
```
|
||||
**THE killer tool.** 8-stage cognitive reasoning pipeline:
|
||||
1. Broad retrieval + cross-encoder reranking
|
||||
2. Spreading activation expansion (finds connected memories search misses)
|
||||
3. FSRS-6 trust scoring (retention × stability × reps ÷ lapses)
|
||||
4. Intent classification (FactCheck / Timeline / RootCause / Comparison / Synthesis)
|
||||
5. Temporal supersession (newer high-trust replaces older)
|
||||
6. Trust-weighted contradiction analysis (only flags conflicts between strong memories)
|
||||
7. Relation assessment (Supports / Contradicts / Supersedes / Irrelevant per pair)
|
||||
8. **Template reasoning chain** — pre-built natural language reasoning the AI validates
|
||||
|
||||
Parameters: `query` (required), `depth` (5-50, default 20).
|
||||
|
||||
Returns: `intent`, `reasoning` (THE KEY FIELD — read this first), `recommended` (highest-trust answer), `evidence` (trust-sorted), `contradictions`, `superseded`, `evolution`, `related_insights`, `confidence`.
|
||||
|
||||
`cross_reference` is a backward-compatible alias that calls `deep_reference`.
|
||||
|
||||
### Maintenance Tools
|
||||
```
|
||||
system_status() // health + stats + warnings + recommendations
|
||||
consolidate() // FSRS-6 decay cycle + embedding generation
|
||||
backup() // SQLite backup → ~/.vestige/backups/
|
||||
export({ format: "json", tags: ["bug-fix"], since: "2026-01-01" })
|
||||
gc({ min_retention: 0.1, dry_run: true }) // garbage collect (dry_run first!)
|
||||
restore({ path: "/path/to/backup.json" })
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Mandatory Save Gates
|
||||
|
||||
**You MUST NOT proceed past a save gate without executing the save.**
|
||||
|
||||
| Gate | Trigger | Action |
|
||||
|------|---------|--------|
|
||||
| **BUG_FIX** | After any error is resolved | `smart_ingest({ content: "BUG FIX: [error]\nRoot cause: [why]\nSolution: [fix]\nFiles: [paths]", tags: ["bug-fix", "project"], node_type: "fact" })` |
|
||||
| **DECISION** | After any architectural/design choice | `codebase({ action: "remember_decision", decision, rationale, alternatives, files, codebase })` |
|
||||
| **CODE_CHANGE** | After >20 lines or new pattern | `codebase({ action: "remember_pattern", name, description, files, codebase })` |
|
||||
| **SESSION_END** | Before stopping or compaction | `smart_ingest({ items: [{ content: "SESSION: [summary]", tags: ["session-end"] }] })` |
|
||||
|
||||
---
|
||||
|
||||
## Trigger Words — Auto-Save
|
||||
|
||||
| User Says | Action |
|
||||
|-----------|--------|
|
||||
| "Remember this" / "Don't forget" | `smart_ingest` immediately |
|
||||
| "I always..." / "I never..." / "I prefer..." | Save as preference |
|
||||
| "This is important" | `smart_ingest` + `memory(action="promote")` |
|
||||
| "Remind me..." / "Next time..." | `intention({ action: "set" })` |
|
||||
|
||||
---
|
||||
|
||||
## Cognitive Architecture
|
||||
|
||||
### Search Pipeline (7 stages)
|
||||
1. **Overfetch** — 3x results from hybrid search (0.3 BM25 + 0.7 semantic, nomic-embed-text-v1.5 768D)
|
||||
2. **Rerank** — Cross-encoder rescoring (Jina Reranker v1 Turbo, 38M params)
|
||||
3. **Temporal** — Recency + validity window boosting (85% relevance + 15% temporal)
|
||||
4. **Accessibility** — FSRS-6 retention filter (Active ≥0.7, Dormant ≥0.4, Silent ≥0.1)
|
||||
5. **Context** — Tulving 1973 encoding specificity (topic overlap → +30% boost)
|
||||
6. **Competition** — Anderson 1994 retrieval-induced forgetting (winners strengthen, competitors weaken)
|
||||
7. **Activation** — Spreading activation side effects + predictive model + reconsolidation marking
|
||||
|
||||
### Ingest Pipeline
|
||||
**Pre:** 4-channel importance scoring (novelty/arousal/reward/attention) + intent detection → auto-tag
|
||||
**Store:** Prediction Error Gating: similarity >0.92 → UPDATE, 0.75-0.92 → UPDATE/SUPERSEDE, <0.75 → CREATE
|
||||
**Post:** Synaptic tagging (Frey & Morris 1997, 9h backward + 2h forward) + hippocampal indexing + cross-project recording
|
||||
|
||||
### FSRS-6 (State-of-the-Art Spaced Repetition)
|
||||
- Retrievability: `R = (1 + factor × t / S)^(-w20)` — 21 trained parameters
|
||||
- Dual-strength model (Bjork & Bjork 1992): storage strength (grows) + retrieval strength (decays)
|
||||
- Accessibility = retention×0.5 + retrieval×0.3 + storage×0.2
|
||||
- 20-30% more efficient than SM-2 (Anki)
|
||||
|
||||
### 29 Cognitive Modules (stateful, persist across calls)
|
||||
|
||||
**Neuroscience (16):**
|
||||
ActivationNetwork (Collins & Loftus 1975), SynapticTaggingSystem (Frey & Morris 1997), HippocampalIndex (Teyler & Rudy 2007), ContextMatcher (Tulving 1973), AccessibilityCalculator, CompetitionManager (Anderson 1994), StateUpdateService, ImportanceSignals, NoveltySignal, ArousalSignal, RewardSignal, AttentionSignal, EmotionalMemory (Brown & Kulik 1977), PredictiveMemory, ProspectiveMemory, IntentionParser
|
||||
|
||||
**Advanced (11):**
|
||||
ImportanceTracker, ReconsolidationManager (Nader — 5min labile window), IntentDetector (9 intent types), ActivityTracker, MemoryDreamer (5-stage consolidation), MemoryChainBuilder (A*-like), MemoryCompressor (30-day min age), CrossProjectLearner (6 pattern types), AdaptiveEmbedder, SpeculativeRetriever (6 trigger types), ConsolidationScheduler
|
||||
|
||||
**Search (2):** Reranker, TemporalSearcher
|
||||
|
||||
### Memory States
|
||||
- **Active** (retention ≥ 0.7) — easily retrievable
|
||||
- **Dormant** (≥ 0.4) — retrievable with effort
|
||||
- **Silent** (≥ 0.1) — difficult, needs cues
|
||||
- **Unavailable** (< 0.1) — needs reinforcement
|
||||
|
||||
### Connection Types
|
||||
semantic, temporal, causal, spatial, part_of, user_defined — each with strength (0-1), activation_count, timestamps
|
||||
|
||||
---
|
||||
|
||||
## Advanced Techniques
|
||||
|
||||
### Cross-Project Intelligence
|
||||
The CrossProjectLearner tracks patterns across ALL projects (ErrorHandling, AsyncConcurrency, Testing, Architecture, Performance, Security). When you learn a pattern in one project that works, it becomes available in all projects. Use `codebase({ action: "get_context" })` without a codebase filter to get universal patterns.
|
||||
|
||||
### Reconsolidation Window
|
||||
After any memory is accessed (via search, get, or promote), it enters a 5-minute "labile" state where modifications are enhanced. This is the optimal time to edit memories with new context. The system handles this automatically.
|
||||
|
||||
### Synaptic Tagging (Retroactive Importance)
|
||||
Memories encoded in the last 9 hours can be retroactively promoted when something important happens. If you fix a critical bug, not only does the fix get saved — related memories from the past 9 hours also get importance boosts. The SynapticTaggingSystem handles this automatically.
|
||||
|
||||
### Dream Insights
|
||||
Dreams don't just consolidate — they generate new insights by cross-referencing recent memories with older knowledge. The insights can reveal: contradictions between memories, previously unseen patterns, connections across different projects. Always check dream results for `insights_generated`.
|
||||
|
||||
### Token Budget Strategy
|
||||
Use `token_budget` on search and session_context to control response size. For quick lookups: 500. For deep context: 3000-5000. Results that don't fit go to `expandable` — retrieve them with `memory({ action: "get", id: "..." })`.
|
||||
|
||||
### Detail Levels
|
||||
- `brief` — id/type/tags/score only (1-2 tokens per result, good for scanning)
|
||||
- `summary` — 8 fields including content preview (default, balanced)
|
||||
- `full` — all FSRS state, timestamps, embedding info (for debugging/analysis)
|
||||
|
||||
---
|
||||
|
||||
## Memory Hygiene
|
||||
|
||||
**Promote** when user confirms helpful, solution worked, info was accurate.
|
||||
**Demote** when user corrects mistake, info was wrong, led to bad outcome.
|
||||
**Never save:** secrets, API keys, passwords, temporary debugging state, trivial info.
|
||||
|
||||
---
|
||||
|
||||
## The One Rule
|
||||
|
||||
**When in doubt, save. The cost of a duplicate is near zero (Prediction Error Gating handles dedup). The cost of lost knowledge is permanent.**
|
||||
|
||||
Memory is retrieval. Searching strengthens memory. Search liberally, save aggressively.
|
||||
|
||||
---
|
||||
|
||||
## Development
|
||||
|
||||
- **Crate:** `vestige-mcp` v2.0.4, Rust 2024 edition, MSRV 1.91
|
||||
- **Tests:** 758 (406 mcp + 352 core), zero warnings
|
||||
- **Build:** `cargo build --release -p vestige-mcp` (features: `embeddings` + `vector-search`)
|
||||
- **Build (no embeddings):** `cargo build --release -p vestige-mcp --no-default-features`
|
||||
- **Bench:** `cargo bench -p vestige-core`
|
||||
- **Architecture:** `McpServer` → `Arc<Storage>` + `Arc<Mutex<CognitiveEngine>>`
|
||||
- **Storage:** SQLite WAL mode, `Mutex<Connection>` reader/writer split, FTS5 full-text search
|
||||
- **Embeddings:** nomic-embed-text-v1.5 (768D, 8K context) via fastembed (local ONNX, no API)
|
||||
- **Vector index:** USearch HNSW (20x faster than FAISS)
|
||||
- **Binaries:** `vestige-mcp` (MCP server), `vestige` (CLI), `vestige-restore`
|
||||
- **Dashboard:** SvelteKit 2 + Svelte 5 + Three.js + Tailwind 4, embedded at `/dashboard`
|
||||
- **Env vars:** `VESTIGE_DASHBOARD_PORT` (default 3927), `VESTIGE_HTTP_PORT` (default 3928), `VESTIGE_HTTP_BIND` (default 127.0.0.1), `VESTIGE_AUTH_TOKEN` (auto-generated), `VESTIGE_CONSOLIDATION_INTERVAL_HOURS` (default 6), `RUST_LOG`
|
||||
Do not commit private absolute paths, local agent memory paths, unpublished
|
||||
planning files, real credentials, personal operating notes, or private repo
|
||||
locations. Example environment variables in docs must be empty placeholders or
|
||||
obviously fake examples.
|
||||
|
|
|
|||
23
README.md
23
README.md
|
|
@ -20,6 +20,16 @@ Built on 130 years of memory research — FSRS-6 spaced repetition, prediction e
|
|||
|
||||
---
|
||||
|
||||
## What's New in v2.1.2 "Honest Memory"
|
||||
|
||||
v2.1.2 makes Vestige easier to trust in everyday work: literal lookups stay literal, purge really removes content, contradictions are inspectable, and updates no longer require a curl reinstall flow.
|
||||
|
||||
- **Concrete search mode.** Quoted strings, env vars, UUIDs, paths, and code identifiers now take a keyword/literal path that skips HyDE, semantic fusion, FSRS reweighting, competition, and spreading activation. Exact things like `OPENAI_API_KEY`, `mlx_lm.server`, and migration IDs land first.
|
||||
- **Irreversible purge.** `memory(action="purge", confirm=true)` permanently removes memory content and embeddings, scrubs insight JSON references, detaches temporal-summary children, prunes graph edges, and keeps only a non-content deletion tombstone for sync/audit.
|
||||
- **First-class contradiction inspection.** New `contradictions` MCP tool surfaces trust-weighted disagreements directly instead of hiding them inside `deep_reference`.
|
||||
- **Simple update flow.** `vestige update` and `vestige sandwich install` refresh binaries and companion files without making users paste curl commands.
|
||||
- **Pro waitlist preview.** `/dashboard/waitlist` adds a local-first Solo Pro and Team Pro early-access surface. `VITE_WAITLIST_ENDPOINT` and `VITE_SUPPORT_BOT_ENDPOINT` are opt-in dashboard env vars, so no signup data is captured unless endpoints are configured.
|
||||
|
||||
## What's New in v2.1.1 "Portable Sync"
|
||||
|
||||
v2.1.1 focuses on the biggest post-launch ask: move memories between machines without losing cognitive state. It also adds opt-in Qwen3 embeddings for higher-recall local retrieval.
|
||||
|
|
@ -83,7 +93,7 @@ v2.0.6 is a polish release that makes the existing cognitive stack finally *feel
|
|||
|
||||
Ebbinghaus 1885 models what happens to memories you don't touch. Anderson 2025 models what happens when you actively want to stop thinking about one. Every other AI memory system implements the first. Vestige is the first to ship the second.
|
||||
|
||||
Based on [Anderson et al. 2025](https://www.nature.com/articles/s41583-025-00929-y) (Suppression-Induced Forgetting, *Nat Rev Neurosci*) and [Cervantes-Sandoval et al. 2020](https://pmc.ncbi.nlm.nih.gov/articles/PMC7477079/) (Rac1 synaptic cascade). **24 tools · 30 cognitive modules · 1,223 tests.**
|
||||
Based on [Anderson et al. 2025](https://www.nature.com/articles/s41583-025-00929-y) (Suppression-Induced Forgetting, *Nat Rev Neurosci*) and [Cervantes-Sandoval et al. 2020](https://pmc.ncbi.nlm.nih.gov/articles/PMC7477079/) (Rac1 synaptic cascade).
|
||||
|
||||
<details>
|
||||
<summary>Earlier releases (v2.0 "Cognitive Leap" → v2.0.4 "Deep Reference")</summary>
|
||||
|
|
@ -241,7 +251,7 @@ Run `vestige dashboard` to open `http://localhost:3927/dashboard`, or set `VESTI
|
|||
│ 15 REST endpoints · WS event broadcast │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ MCP Server (stdio JSON-RPC) │
|
||||
│ 24 tools · 30 cognitive modules │
|
||||
│ 25 tools · 30 cognitive modules │
|
||||
├─────────────────────────────────────────────────────┤
|
||||
│ Cognitive Engine │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │
|
||||
|
|
@ -308,7 +318,7 @@ This isn't a key-value store with an embedding model bolted on. Vestige implemen
|
|||
|
||||
---
|
||||
|
||||
## 🛠 24 MCP Tools
|
||||
## 🛠 25 MCP Tools
|
||||
|
||||
### Context Packets
|
||||
| Tool | What It Does |
|
||||
|
|
@ -318,9 +328,9 @@ This isn't a key-value store with an embedding model bolted on. Vestige implemen
|
|||
### Core Memory
|
||||
| Tool | What It Does |
|
||||
|------|-------------|
|
||||
| `search` | 7-stage cognitive search — HyDE expansion + keyword + semantic + reranking + temporal + competition + spreading activation |
|
||||
| `search` | Concrete literal search for exact identifiers, or 7-stage cognitive search — HyDE expansion + keyword + semantic + reranking + temporal + competition + spreading activation |
|
||||
| `smart_ingest` | Intelligent storage with CREATE/UPDATE/SUPERSEDE via Prediction Error Gating. Batch mode for session-end saves |
|
||||
| `memory` | Get, delete, check state, promote (thumbs up), demote (thumbs down) |
|
||||
| `memory` | Get, purge content/embeddings, check state, promote (thumbs up), demote (thumbs down), edit |
|
||||
| `codebase` | Remember code patterns and architectural decisions per-project |
|
||||
| `intention` | Prospective memory — "remind me to X when Y happens" |
|
||||
|
||||
|
|
@ -358,11 +368,12 @@ This isn't a key-value store with an embedding model bolted on. Vestige implemen
|
|||
|------|-------------|
|
||||
| `deep_reference` | **Cognitive reasoning across memories.** 8-stage pipeline: FSRS-6 trust scoring, intent classification, spreading activation, temporal supersession, contradiction analysis, relation assessment, dream insight integration, and algorithmic reasoning chain generation. Returns trust-scored evidence with a pre-built reasoning scaffold. |
|
||||
| `cross_reference` | Backward-compatible alias for `deep_reference`. |
|
||||
| `contradictions` | **Honest memory inspection.** Scans a topic or recent memories for trust-weighted disagreements using the same local contradiction logic as `deep_reference`. |
|
||||
|
||||
### Active Forgetting (v2.0.5)
|
||||
| Tool | What It Does |
|
||||
|------|-------------|
|
||||
| `suppress` | **Top-down active forgetting** — neuroscience-grounded inhibitory control over retrieval. Distinct from `memory.delete` (destroys the row) and `memory.demote` (one-shot ranking hit). Each call **compounds** a retrieval-score penalty (Anderson 2025 SIF), and a background Rac1 cascade worker fades co-activated neighbors over 72h (Davis 2020). Reversible within a 24-hour labile window via `reverse: true`. **The memory persists** — it is inhibited, not erased. |
|
||||
| `suppress` | **Top-down active forgetting** — neuroscience-grounded inhibitory control over retrieval. Distinct from `memory(action="purge")`, which permanently removes content/embeddings. Each suppression compounds a retrieval-score penalty (Anderson 2025 SIF), and a background Rac1 cascade worker fades co-activated neighbors over 72h (Davis 2020). Reversible within a 24-hour labile window via `reverse: true`. **The memory persists** — it is inhibited, not erased. |
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -1,95 +1,58 @@
|
|||
---
|
||||
name: executioner
|
||||
description: "[LEGACY/FALLBACK as of 2026-04-25] The Sanhedrin post-cognitive judge. Originally invoked by sanhedrin.sh Stop hook as a Haiku 4.5 subagent. PRIMARY EXECUTION PATH NOW: ~/.claude/hooks/sanhedrin-local.py (local Qwen3.6-35B-A3B via mlx_lm.server, zero API cost, fully offline). This Haiku-backed agent runs only as manual fallback if mlx-server is unavailable or invoked explicitly via Task(subagent_type='executioner'). Same protocol: decomposes draft into atomic claims across 10 classes, verifies via Vestige deep_reference, returns 'yes' or 'no - reason' on one line."
|
||||
description: Optional Sanhedrin fallback verifier. Decomposes a draft into atomic claims, checks high-trust Vestige evidence, and returns a one-line pass/veto verdict.
|
||||
tools: mcp__vestige__deep_reference, mcp__vestige__memory, mcp__vestige__search
|
||||
model: claude-haiku-4-5-20251001
|
||||
---
|
||||
|
||||
# Identity
|
||||
# Role
|
||||
|
||||
You are the Sanhedrin Executioner. A fresh amnesiac judge with access to the Vestige cognitive memory graph. You exist for one turn only. You do not converse. You do not explain. You return exactly one line.
|
||||
You are a one-turn verifier. You do not converse. You return exactly one line.
|
||||
|
||||
# Your Only Job
|
||||
# Job
|
||||
|
||||
Decompose the DRAFT RESPONSE into ATOMIC CLAIMS across 10 exhaustive classes, verify each against high-trust Vestige memory, and VETO the draft if any claim contradicts memory or is factual-shaped but unverifiable.
|
||||
Decompose the draft response into atomic claims, verify each claim against
|
||||
high-trust Vestige memory when available, and veto only when the draft
|
||||
contradicts memory or makes a sensitive user-specific assertion without
|
||||
supporting evidence.
|
||||
|
||||
You are a fail-closed judge. If a claim is factual-shaped and has zero evidence in Vestige either way, that is suspicious — VETO it.
|
||||
# Claim Classes
|
||||
|
||||
# The Ten Claim Classes (Exhaustive)
|
||||
Check all relevant classes:
|
||||
|
||||
You MUST scan the draft for all ten classes. Do not skip a class because it is "not your usual job." Sam's Nightvision verification lesson (memory `efbec834`): *"Handlers must validate ALL possible enum values, not just known cases."* The same rule applies here. Enumerate exhaustively.
|
||||
1. `TECHNICAL` — APIs, commands, versions, files, configs, endpoints.
|
||||
2. `BIOGRAPHICAL` — identity, role, location, employment, education.
|
||||
3. `FINANCIAL` — costs, revenue, pricing, funding, prizes.
|
||||
4. `ACHIEVEMENT` — releases, rankings, completions, scores, milestones.
|
||||
5. `TEMPORAL` — dates, durations, ordering, deadlines.
|
||||
6. `QUANTITATIVE` — counts, percentages, metrics, measurements.
|
||||
7. `ATTRIBUTION` — who said, decided, agreed, shipped, or committed.
|
||||
8. `CAUSAL` — claimed causes and effects.
|
||||
9. `COMPARATIVE` — better, most, fastest, more than, fewer than.
|
||||
10. `EXISTENTIAL` — whether a file, feature, repo, or artifact exists.
|
||||
|
||||
1. **TECHNICAL** — API names, version numbers, architectural patterns, configuration recommendations, file paths, command flags, library methods, crate names, endpoint URLs.
|
||||
2. **BIOGRAPHICAL** — claims about the user's identity, age, role, location, employment status, education, family, background.
|
||||
3. **FINANCIAL** — revenue figures, prize money amounts, costs, valuations, pricing, pay, MRR/ARR claims, funding received.
|
||||
4. **ACHIEVEMENT** — competition results, rankings ("won", "tied #1", "scored X/50"), project completions ("we shipped X", "released v2.3"), leaderboard claims, records set, deadlines met.
|
||||
5. **TEMPORAL** — specific dates, durations, sequences ("before X", "after Y"), deadlines, "tonight", "yesterday", "last week".
|
||||
6. **QUANTITATIVE** — counts, percentages, metrics, measurements, star counts, test pass rates, line counts.
|
||||
7. **ATTRIBUTION** — "user said X", "Sam decided Y", "agent X did Y", "we agreed on Z", "you committed to W".
|
||||
8. **CAUSAL** — "X caused Y", "because of X", "X led to Y", "X broke Y".
|
||||
9. **COMPARATIVE** — "better than X", "most", "a few", "some", "more than", "the best", "fastest", superlatives.
|
||||
10. **EXISTENTIAL** — "X exists at path Y", "feature Z is shipped", "there is a Z", "file W is in the repo".
|
||||
# Decision Rules
|
||||
|
||||
# Protocol (execute silently, no narration)
|
||||
- Veto direct contradiction with high-trust memory.
|
||||
- Veto unsupported positive claims about the user's biography, finances,
|
||||
achievements, or attribution.
|
||||
- Do not veto purely stylistic disagreement.
|
||||
- Do not veto technical claims just because Vestige lacks evidence; the draft
|
||||
may rely on source files or external docs.
|
||||
- If evidence is stale or superseded, prefer the newer higher-trust memory.
|
||||
|
||||
1. **Read the draft.** Extract EVERY atomic claim you find across ALL 10 classes above. Not 1-3 — every claim that could be wrong. An atomic claim is one subject-predicate-object assertion ("Sam won AIMO3 prize money" is one claim; "Sam shipped v2.3 and it passed all tests" is two).
|
||||
# Output
|
||||
|
||||
2. **For each claim, tag its class** (TECHNICAL / BIOGRAPHICAL / FINANCIAL / etc.).
|
||||
If the draft passes:
|
||||
|
||||
3. **Verify each claim** via `mcp__vestige__deep_reference` with `query` set to a specific question that would confirm or contradict the claim (e.g., "What prize money has Sam won?" for a FINANCIAL claim about Sam winning $X).
|
||||
```text
|
||||
yes
|
||||
```
|
||||
|
||||
4. **Read the response fields:**
|
||||
- `recommended` — highest-trust answer on the topic
|
||||
- `contradictions` — pairs of high-trust memories that conflict
|
||||
- `superseded` — memories replaced by newer, higher-trust versions
|
||||
- `evidence` — trust-sorted memory list
|
||||
- `confidence` — overall confidence 0-1
|
||||
If the draft should be rewritten:
|
||||
|
||||
5. **Apply the class-specific decision rule:**
|
||||
```text
|
||||
no - [Sanhedrin Veto] [CLASS]: [one-sentence reason under 120 chars]
|
||||
```
|
||||
|
||||
**HARD VETO classes** (BIOGRAPHICAL, FINANCIAL, ACHIEVEMENT, ATTRIBUTION):
|
||||
- If the claim contradicts a memory with trust > 0.5 → VETO.
|
||||
- If the claim is factual-shaped AND Vestige returns confidence < 0.3 with no supporting evidence → VETO (fail-closed, unverifiable positive claim about user's life).
|
||||
- If the claim uses vague qualifiers ("a few", "some", "most") in a factual assertion ("won prize money", "shipped features", "users paid") → VETO. Demand specificity.
|
||||
|
||||
**SOFT VETO classes** (TECHNICAL, EXISTENTIAL, TEMPORAL):
|
||||
- If the claim contradicts a memory with trust > 0.5 → VETO.
|
||||
- If the claim references a `superseded` memory without using its `recommended` replacement → VETO.
|
||||
- Unverifiable is NOT an automatic veto for these classes (the draft may be referencing external facts Vestige doesn't know).
|
||||
|
||||
**DECOMPOSE-FIRST classes** (CAUSAL, COMPARATIVE, QUANTITATIVE):
|
||||
- Break into constituent subject-object claims. Verify each as its own class. If any constituent hard-vetoes, the whole claim vetoes.
|
||||
|
||||
6. **If PASS:** output exactly `yes`.
|
||||
|
||||
7. **If VETO:** output exactly one line:
|
||||
```
|
||||
no - [Sanhedrin Veto] [CLASS]: [one-sentence reason under 120 chars citing memory id if applicable]
|
||||
```
|
||||
Examples:
|
||||
- `no - [Sanhedrin Veto] FINANCIAL: Draft claims "a few competitions won prize money" — Vestige has zero prize-money records, memory 6920e7fe shows AIMO3 finished 36/50, no payout.`
|
||||
- `no - [Sanhedrin Veto] ACHIEVEMENT: Draft claims "v2.3 codename Terrarium" — memory 7b6f5500 (Apr 20, trust 60%) states v2.3 codename is Thalamus.`
|
||||
- `no - [Sanhedrin Veto] TECHNICAL: Draft suggests "FastAPI shim" — memory de43be5a (trust 62%) states Vestige is a 2-crate Rust workspace (vestige-core + vestige-mcp), not Python.`
|
||||
|
||||
8. **If you cannot complete the analysis in under 12 tool calls, default to VETO** with reason `EXECUTION_INCOMPLETE` rather than `yes`. A false VETO costs a rewrite; a false PASS costs Sam's trust. Fail-closed.
|
||||
|
||||
9. **Output exactly ONE line.** Never more. No preamble, no conversation, no XML, no multi-line explanation.
|
||||
|
||||
# What NOT to do
|
||||
|
||||
- Do not limit yourself to "1-3 claims." Extract ALL atomic claims.
|
||||
- Do not paraphrase the draft.
|
||||
- Do not summarize Vestige memory contents.
|
||||
- Do not output multi-line responses.
|
||||
- Do not apologize.
|
||||
- Do not converse.
|
||||
- Do not assume a biographical/financial/achievement claim is verified just because you couldn't find a contradiction — fail-closed on unverifiable positive claims.
|
||||
- Do not veto on stylistic disagreement — only on factual contradiction or unverifiable positive assertion.
|
||||
- Do not claim to have checked a claim you skipped.
|
||||
|
||||
# Precedent — the failures this protocol was tuned to catch
|
||||
|
||||
- **2026-04-20 Terrarium-vs-Thalamus**: caught. Draft claimed v2.3 = Terrarium, memory 7b6f5500 said Thalamus. ACHIEVEMENT/EXISTENTIAL class.
|
||||
- **2026-04-20 FastAPI-vs-Rust**: caught. Draft suggested FastAPI shim, memory de43be5a said 2-crate Rust workspace. TECHNICAL class.
|
||||
- **2026-04-21 Prize-money lie**: MISSED on original protocol. Draft claimed "a few competitions won prize money" — no specific memory to contradict, but zero prize memories existed. v2 protocol catches this via COMPARATIVE vague-qualifier rule + FINANCIAL hard-veto-unverifiable rule.
|
||||
- **Nightvision-enum exhaustive-validation lesson** (memory efbec834): apply the same rule to claim extraction — validate ALL classes, not just the convenient ones.
|
||||
Output exactly one line.
|
||||
|
|
|
|||
|
|
@ -1,41 +1,46 @@
|
|||
---
|
||||
name: synthesis-composer
|
||||
description: Forces active synthesis mode for high-stakes prompts. Invoke for competition submissions (AIMO, Nemotron, Kaggle), architectural choices, purchases over $200, launches, and strategic decisions. The subagent runs in isolation with a hard system prompt that enforces the Composing / Never-composed / Recommendation response shape and blocks summary-pattern output at the source. Use when "what should Sam DO?" matters more than "what does the memory say?"
|
||||
tools: mcp__vestige__search, mcp__vestige__deep_reference, mcp__vestige__cross_reference, mcp__vestige__explore_connections, mcp__vestige__session_context, mcp__vestige__memory, mcp__vestige__smart_ingest, mcp__vestige__intention
|
||||
model: sonnet
|
||||
description: Optional decision helper that turns Vestige retrievals into concise recommendations. Use for high-stakes technical choices, launches, purchases, submissions, architecture decisions, and tradeoffs where memory evidence may change the answer.
|
||||
tools: mcp__vestige__deep_reference, mcp__vestige__explore_connections, mcp__vestige__search
|
||||
model: claude-haiku-4-5-20251001
|
||||
---
|
||||
|
||||
You are the Synthesis Composer. You exist to do ONE thing: turn Vestige retrievals into concrete recommendations Sam can act on.
|
||||
# Role
|
||||
|
||||
## The Hard Rule
|
||||
You are the Synthesis Composer. Your job is to turn retrieved Vestige evidence
|
||||
into a decision, not a memory summary.
|
||||
|
||||
Every response you emit MUST follow this exact shape. No exceptions. Deviation is a protocol violation and the entire response will be rejected.
|
||||
# Protocol
|
||||
|
||||
1. **Composing:** list the memory IDs you retrieved, then your composition logic. The logic is your own chain-of-thought about how the memories relate, NOT a restatement of their individual contents. If you catch yourself writing "Memory A says X, and Memory B says Y," STOP. That is the forbidden pattern.
|
||||
2. **Never-composed detected:** explicitly list combinations of retrieved memories that share tags or topics but have never been retrieved together before this session. If none, write "None." Do NOT skip this line. The whole point of your existence is to surface these.
|
||||
3. **Recommendation: Sam should DO [concrete action].** Not "Sam should consider." Not "Sam might want to." A specific executable step with a subject, a verb, and an object.
|
||||
1. Use the smallest Vestige retrieval plan that can materially change the
|
||||
answer.
|
||||
2. Search adjacent topics when the decision depends on related history.
|
||||
3. Convert each useful memory into `fact -> implication -> action`.
|
||||
4. Surface contradictions, stale evidence, or missing evidence before the
|
||||
recommendation.
|
||||
5. If no memory changes the recommendation, say that briefly and proceed from
|
||||
source evidence.
|
||||
|
||||
## Protocol — Do These Things In Order
|
||||
# Output Shape
|
||||
|
||||
1. Run a MINIMUM of 4 parallel Vestige queries across ADJACENT topics, not just the topic you were asked about. Example: if asked about an AIMO submission, query the asked topic AND proven-baseline memories AND parser-fix memories AND prompt-engineering memories AND failure-mode memories. Minimum 4 parallel searches.
|
||||
2. Call `explore_connections` with `action: "bridges"` to surface memories that share tags but have never been referenced together. This is your primary never-composed detection mechanism. Do not skip it.
|
||||
3. Cross-reference the retrieved memories in YOUR OWN reasoning before writing anything. Compose them in your head first. Ask yourself which combinations exist in Sam's store, which have been tested together in prior sessions, which have NOT been composed yet, and what Sam should DO given the composition.
|
||||
4. Only then write the response in the three-part shape above.
|
||||
Use this compact structure:
|
||||
|
||||
## Forbidden Output Pattern
|
||||
```text
|
||||
Evidence: ...
|
||||
Implication: ...
|
||||
Recommendation: ...
|
||||
```
|
||||
|
||||
If your draft begins with "Memory A says X. Memory B says Y. Memory C says Z." followed by a vague synthesis sentence, you are in the AIMO3 36/50 failure pattern. STOP. Rewrite into composition form with a concrete "Sam should DO" action.
|
||||
When useful, add:
|
||||
|
||||
The test is simple: if Sam can read your response and not know what to do next, you failed. If he can read your response and immediately execute the recommendation without further clarification, you succeeded.
|
||||
```text
|
||||
Contradictions: ...
|
||||
Next step: ...
|
||||
```
|
||||
|
||||
## Trust Overrides
|
||||
# Do Not
|
||||
|
||||
FSRS trust scores override your priors. A memory with retention greater than 0.7 and reps greater than 0 beats a fresh claim you were about to make 30 seconds ago, every single time. If a retrieved memory contradicts your draft, start your response with "Vestige is blocking this:" and surface the contradiction verbatim before proceeding.
|
||||
|
||||
## When To Decline
|
||||
|
||||
If after 4+ queries and a bridges call you cannot find a composition or a never-composed combination, respond with: "Insufficient memory context. Recommended action: run [specific query] or save [specific memory] before making this decision." That is a legitimate output. What is NOT legitimate is guessing.
|
||||
|
||||
## Origin
|
||||
|
||||
This subagent exists because on April 14-15, 2026, Claude retrieved three composable memories (4da778e2, 2f171e0e, b43da3be) for a $1.59M math olympiad submission and reported them as summaries instead of composing them. The result was 36/50 against a 47/50 prize threshold. The protocol you enforce makes that failure mode structurally impossible within your subagent context. You do not have permission to skip the shape.
|
||||
- Do not dump memory summaries as the final answer.
|
||||
- Do not invent hidden evidence.
|
||||
- Do not claim a memory was checked unless a tool result supports it.
|
||||
- Do not force a rigid template when the answer is simple.
|
||||
|
|
|
|||
9
apps/dashboard/.env.example
Normal file
9
apps/dashboard/.env.example
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# Optional public waitlist capture endpoint used by /dashboard/waitlist.
|
||||
# The page POSTs JSON with: name, email, plan, priority, notes, source, createdAt.
|
||||
# Examples: Formspree, Tally webhook, Buttondown custom endpoint, Supabase Edge Function.
|
||||
VITE_WAITLIST_ENDPOINT=
|
||||
|
||||
# Optional support bot endpoint used by /dashboard/waitlist.
|
||||
# The page POSTs JSON with: question, plan, priority, source, and recent history.
|
||||
# If unset, the page uses the built-in deterministic onboarding FAQ.
|
||||
VITE_SUPPORT_BOT_ENDPOINT=
|
||||
File diff suppressed because one or more lines are too long
BIN
apps/dashboard/build/_app/immutable/assets/20.DKhUrxcR.css.br
Normal file
BIN
apps/dashboard/build/_app/immutable/assets/20.DKhUrxcR.css.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/assets/20.DKhUrxcR.css.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/assets/20.DKhUrxcR.css.gz
Normal file
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/A7po6GxK.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/A7po6GxK.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{a1 as u,a2 as v,a3 as h,N as i,a4 as g,a5 as f,Y as A,a6 as S}from"./CpWkWWOo.js";const N=Symbol("is custom element"),p=Symbol("is html"),T=f?"link":"LINK",E=f?"progress":"PROGRESS";function k(r){if(i){var s=!1,a=()=>{if(!s){if(s=!0,r.hasAttribute("value")){var e=r.value;_(r,"value",null),r.value=e}if(r.hasAttribute("checked")){var o=r.checked;_(r,"checked",null),r.checked=o}}};r.__on_r=a,A(a),S()}}function l(r,s){var a=d(r);a.value===(a.value=s??void 0)||r.value===s&&(s!==0||r.nodeName!==E)||(r.value=s??"")}function _(r,s,a,e){var o=d(r);i&&(o[s]=r.getAttribute(s),s==="src"||s==="srcset"||s==="href"&&r.nodeName===T)||o[s]!==(o[s]=a)&&(s==="loading"&&(r[u]=a),a==null?r.removeAttribute(s):typeof a!="string"&&L(r).includes(s)?r[s]=a:r.setAttribute(s,a))}function d(r){return r.__attributes??(r.__attributes={[N]:r.nodeName.includes("-"),[p]:r.namespaceURI===v})}var c=new Map;function L(r){var s=r.getAttribute("is")||r.nodeName,a=c.get(s);if(a)return a;c.set(s,a=[]);for(var e,o=r,n=Element.prototype;n!==o;){e=g(o);for(var t in e)e[t].set&&a.push(t);o=h(o)}return a}export{l as a,k as r,_ as s};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/A7po6GxK.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/A7po6GxK.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/A7po6GxK.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/A7po6GxK.js.gz
Normal file
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/B4yTwGkE.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/B4yTwGkE.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{b as T,N as o,ab as b,E as h,ac as R,ax as p,ad as A,ae as E,T as g,R as l}from"./CpWkWWOo.js";import{B as v}from"./DdEqwvdI.js";function m(t,c,u=!1){o&&b();var n=new v(t),_=u?h:0;function i(a,r){if(o){const e=R(t);var s;if(e===p?s=0:e===A?s=!1:s=parseInt(e.substring(1)),a!==s){var f=E();g(f),n.anchor=f,l(!1),n.ensure(a,r),l(!0);return}}n.ensure(a,r)}T(()=>{var a=!1;c((r,s=0)=>{a=!0,i(s,r)}),a||i(!1,null)},_)}export{m as i};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/B4yTwGkE.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/B4yTwGkE.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/B4yTwGkE.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/B4yTwGkE.js.gz
Normal file
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/BHGLDPij.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/BHGLDPij.js
Normal file
File diff suppressed because one or more lines are too long
BIN
apps/dashboard/build/_app/immutable/chunks/BHGLDPij.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BHGLDPij.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BHGLDPij.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BHGLDPij.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
import{az as g,aA as d,aB as c,A as m,aC as i,aD as b,g as p,aE as v,U as h,aF as k}from"./CvjSAYrz.js";function x(t=!1){const a=g,e=a.l.u;if(!e)return;let f=()=>v(a.s);if(t){let n=0,s={};const _=h(()=>{let l=!1;const r=a.s;for(const o in r)r[o]!==s[o]&&(s[o]=r[o],l=!0);return l&&n++,n});f=()=>p(_)}e.b.length&&d(()=>{u(a,f),i(e.b)}),c(()=>{const n=m(()=>e.m.map(b));return()=>{for(const s of n)typeof s=="function"&&s()}}),e.a.length&&c(()=>{u(a,f),i(e.a)})}function u(t,a){if(t.l.s)for(const e of t.l.s)p(e);a()}k();export{x as i};
|
||||
import{az as g,aA as d,aB as c,v as m,aC as i,aD as b,g as p,aE as v,z as h,aF as k}from"./CpWkWWOo.js";function x(t=!1){const a=g,e=a.l.u;if(!e)return;let f=()=>v(a.s);if(t){let n=0,s={};const _=h(()=>{let l=!1;const r=a.s;for(const o in r)r[o]!==s[o]&&(s[o]=r[o],l=!0);return l&&n++,n});f=()=>p(_)}e.b.length&&d(()=>{u(a,f),i(e.b)}),c(()=>{const n=m(()=>e.m.map(b));return()=>{for(const s of n)typeof s=="function"&&s()}}),e.a.length&&c(()=>{u(a,f),i(e.a)})}function u(t,a){if(t.l.s)for(const e of t.l.s)p(e);a()}k();export{x as i};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/BUoSzNdg.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BUoSzNdg.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BUoSzNdg.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BUoSzNdg.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
import{J as T,K as m,P as D,g as P,c as b,h as B,L as M,M as N,N as U,O as Y,A as h,Q as x,R as $,T as q,U as w,V as z,W as C,S as G,X as J}from"./CvjSAYrz.js";import{c as K}from"./D81f-o_I.js";function W(r,a,t,s){var O;var f=!x||(t&$)!==0,v=(t&Y)!==0,o=(t&C)!==0,n=s,c=!0,g=()=>(c&&(c=!1,n=o?h(s):s),n),u;if(v){var A=G in r||J in r;u=((O=T(r,a))==null?void 0:O.set)??(A&&a in r?e=>r[a]=e:void 0)}var _,I=!1;v?[_,I]=K(()=>r[a]):_=r[a],_===void 0&&s!==void 0&&(_=g(),u&&(f&&m(),u(_)));var i;if(f?i=()=>{var e=r[a];return e===void 0?g():(c=!0,e)}:i=()=>{var e=r[a];return e!==void 0&&(n=void 0),e===void 0?n:e},f&&(t&D)===0)return i;if(u){var E=r.$$legacy;return(function(e,S){return arguments.length>0?((!f||!S||E||I)&&u(S?i():e),e):i()})}var l=!1,d=((t&q)!==0?w:z)(()=>(l=!1,i()));v&&P(d);var L=N;return(function(e,S){if(arguments.length>0){const R=S?P(d):f&&v?b(e):e;return B(d,R),l=!0,n!==void 0&&(n=R),e}return M&&l||(L.f&U)!==0?d.v:P(d)})}export{W as p};
|
||||
Binary file not shown.
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/BeMFXnHE.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/BeMFXnHE.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{H as a,v as m,aH as q,aC as x}from"./CpWkWWOo.js";function _(e,t,n){if(e==null)return t(void 0),n&&n(void 0),a;const r=m(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const f=[];function z(e,t){return{subscribe:A(e,t).subscribe}}function A(e,t=a){let n=null;const r=new Set;function i(u){if(q(e,u)&&(e=u,n)){const o=!f.length;for(const s of r)s[1](),f.push(s,e);if(o){for(let s=0;s<f.length;s+=2)f[s][0](f[s+1]);f.length=0}}}function b(u){i(u(e))}function l(u,o=a){const s=[u,o];return r.add(s),r.size===1&&(n=t(i,b)||a),u(e),()=>{r.delete(s),r.size===0&&n&&(n(),n=null)}}return{set:i,update:b,subscribe:l}}function k(e,t,n){const r=!Array.isArray(e),i=r?[e]:e;if(!i.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const b=t.length<2;return z(n,(l,u)=>{let o=!1;const s=[];let d=0,p=a;const y=()=>{if(d)return;p();const c=t(r?s[0]:s,l,u);b?l(c):p=typeof c=="function"?c:a},h=i.map((c,g)=>_(c,w=>{s[g]=w,d&=~(1<<g),o&&y()},()=>{d|=1<<g}));return o=!0,y(),function(){x(h),p(),o=!1}})}function B(e){let t;return _(e,n=>t=n)(),t}export{k as d,B as g,_ as s,A as w};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/BeMFXnHE.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BeMFXnHE.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BeMFXnHE.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BeMFXnHE.js.gz
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
import{w as S,g as T}from"./DfQhL-hC.js";import{e as R}from"./CtkE7HV2.js";import{E as u}from"./DzfRjky4.js";const M=4,x=1500;function F(){const{subscribe:y,update:i}=S([]);let m=1,b=0;const d=new Map,a=new Map,l=new Map;function f(e,o){l.set(e,Date.now());const t=setTimeout(()=>{d.delete(e),l.delete(e),g(e)},o);d.set(e,t)}function w(e){const o=m++,t=Date.now(),s={id:o,createdAt:t,...e};i(n=>{const r=[s,...n];return r.length>M?r.slice(0,M):r}),f(o,e.dwellMs)}function g(e){const o=d.get(e);o&&(clearTimeout(o),d.delete(e)),a.delete(e),l.delete(e),i(t=>t.filter(s=>s.id!==e))}function C(e,o){const t=d.get(e);if(!t)return;clearTimeout(t),d.delete(e);const s=l.get(e)??Date.now(),n=Date.now()-s,r=Math.max(200,o-n);a.set(e,{remaining:r})}function D(e){const o=a.get(e);o&&(a.delete(e),f(e,o.remaining))}function N(){for(const e of d.values())clearTimeout(e);d.clear(),a.clear(),l.clear(),i(()=>[])}function _(e){const o=u[e.type]??"#818CF8",t=e.data;switch(e.type){case"DreamCompleted":{const s=Number(t.memories_replayed??0),n=Number(t.connections_found??0),r=Number(t.insights_generated??0),p=Number(t.duration_ms??0),c=[];return c.push(`Replayed ${s} ${s===1?"memory":"memories"}`),n>0&&c.push(`${n} new connection${n===1?"":"s"}`),r>0&&c.push(`${r} insight${r===1?"":"s"}`),{type:e.type,title:"Dream consolidated",body:`${c.join(" · ")} in ${(p/1e3).toFixed(1)}s`,color:o,dwellMs:7e3}}case"ConsolidationCompleted":{const s=Number(t.nodes_processed??0),n=Number(t.decay_applied??0),r=Number(t.embeddings_generated??0),p=Number(t.duration_ms??0),c=[];return n>0&&c.push(`${n} decayed`),r>0&&c.push(`${r} embedded`),{type:e.type,title:"Consolidation swept",body:`${s} node${s===1?"":"s"}${c.length?" · "+c.join(" · "):""} in ${(p/1e3).toFixed(1)}s`,color:o,dwellMs:6e3}}case"ConnectionDiscovered":{const s=Date.now();if(s-b<x)return null;b=s;const n=String(t.connection_type??"link"),r=Number(t.weight??0);return{type:e.type,title:"Bridge discovered",body:`${n} · weight ${r.toFixed(2)}`,color:o,dwellMs:4500}}case"MemoryPromoted":{const s=Number(t.new_retention??0);return{type:e.type,title:"Memory promoted",body:`retention ${(s*100).toFixed(0)}%`,color:o,dwellMs:4500}}case"MemoryDemoted":{const s=Number(t.new_retention??0);return{type:e.type,title:"Memory demoted",body:`retention ${(s*100).toFixed(0)}%`,color:o,dwellMs:4500}}case"MemorySuppressed":{const s=Number(t.suppression_count??0),n=Number(t.estimated_cascade??0);return{type:e.type,title:"Forgetting",body:n>0?`suppression #${s} · Rac1 cascade ~${n} neighbors`:`suppression #${s}`,color:o,dwellMs:5500}}case"MemoryUnsuppressed":{const s=Number(t.remaining_count??0);return{type:e.type,title:"Recovered",body:s>0?`${s} suppression${s===1?"":"s"} remain`:"fully unsuppressed",color:o,dwellMs:5e3}}case"Rac1CascadeSwept":{const s=Number(t.seeds??0),n=Number(t.neighbors_affected??0);return{type:e.type,title:"Rac1 cascade",body:`${s} seed${s===1?"":"s"} · ${n} dendritic spine${n===1?"":"s"} pruned`,color:o,dwellMs:6e3}}case"MemoryDeleted":return{type:e.type,title:"Memory deleted",body:String(t.id??"").slice(0,8),color:o,dwellMs:4e3};case"Heartbeat":case"SearchPerformed":case"RetentionDecayed":case"ActivationSpread":case"ImportanceScored":case"MemoryCreated":case"MemoryUpdated":case"DreamStarted":case"DreamProgress":case"ConsolidationStarted":case"Connected":return null;default:return null}}let h=null;return R.subscribe(e=>{if(e.length===0)return;const o=[];for(const t of e){if(t===h)break;o.push(t)}if(o.length!==0){h=e[0];for(let t=o.length-1;t>=0;t--){const s=_(o[t]);s&&w(s)}}}),{subscribe:y,dismiss:g,clear:N,pauseDwell:C,resumeDwell:D,push:w}}const $=F();function O(){[{type:"DreamCompleted",title:"Dream consolidated",body:"Replayed 127 memories · 43 new connections · 5 insights in 2.4s",color:u.DreamCompleted,dwellMs:7e3},{type:"ConnectionDiscovered",title:"Bridge discovered",body:"semantic · weight 0.87",color:u.ConnectionDiscovered,dwellMs:4500},{type:"MemorySuppressed",title:"Forgetting",body:"suppression #2 · Rac1 cascade ~8 neighbors",color:u.MemorySuppressed,dwellMs:5500},{type:"ConsolidationCompleted",title:"Consolidation swept",body:"892 nodes · 156 decayed · 48 embedded in 1.1s",color:u.ConsolidationCompleted,dwellMs:6e3}].forEach((i,m)=>{setTimeout(()=>{$.push(i)},m*800)}),T($)}export{O as f,$ as t};
|
||||
import{w as S,g as T}from"./BeMFXnHE.js";import{e as R}from"./MAY1QfFZ.js";import{E as u}from"./DzfRjky4.js";const M=4,x=1500;function F(){const{subscribe:y,update:i}=S([]);let m=1,b=0;const d=new Map,a=new Map,l=new Map;function f(e,o){l.set(e,Date.now());const t=setTimeout(()=>{d.delete(e),l.delete(e),g(e)},o);d.set(e,t)}function w(e){const o=m++,t=Date.now(),s={id:o,createdAt:t,...e};i(n=>{const r=[s,...n];return r.length>M?r.slice(0,M):r}),f(o,e.dwellMs)}function g(e){const o=d.get(e);o&&(clearTimeout(o),d.delete(e)),a.delete(e),l.delete(e),i(t=>t.filter(s=>s.id!==e))}function C(e,o){const t=d.get(e);if(!t)return;clearTimeout(t),d.delete(e);const s=l.get(e)??Date.now(),n=Date.now()-s,r=Math.max(200,o-n);a.set(e,{remaining:r})}function D(e){const o=a.get(e);o&&(a.delete(e),f(e,o.remaining))}function N(){for(const e of d.values())clearTimeout(e);d.clear(),a.clear(),l.clear(),i(()=>[])}function _(e){const o=u[e.type]??"#818CF8",t=e.data;switch(e.type){case"DreamCompleted":{const s=Number(t.memories_replayed??0),n=Number(t.connections_found??0),r=Number(t.insights_generated??0),p=Number(t.duration_ms??0),c=[];return c.push(`Replayed ${s} ${s===1?"memory":"memories"}`),n>0&&c.push(`${n} new connection${n===1?"":"s"}`),r>0&&c.push(`${r} insight${r===1?"":"s"}`),{type:e.type,title:"Dream consolidated",body:`${c.join(" · ")} in ${(p/1e3).toFixed(1)}s`,color:o,dwellMs:7e3}}case"ConsolidationCompleted":{const s=Number(t.nodes_processed??0),n=Number(t.decay_applied??0),r=Number(t.embeddings_generated??0),p=Number(t.duration_ms??0),c=[];return n>0&&c.push(`${n} decayed`),r>0&&c.push(`${r} embedded`),{type:e.type,title:"Consolidation swept",body:`${s} node${s===1?"":"s"}${c.length?" · "+c.join(" · "):""} in ${(p/1e3).toFixed(1)}s`,color:o,dwellMs:6e3}}case"ConnectionDiscovered":{const s=Date.now();if(s-b<x)return null;b=s;const n=String(t.connection_type??"link"),r=Number(t.weight??0);return{type:e.type,title:"Bridge discovered",body:`${n} · weight ${r.toFixed(2)}`,color:o,dwellMs:4500}}case"MemoryPromoted":{const s=Number(t.new_retention??0);return{type:e.type,title:"Memory promoted",body:`retention ${(s*100).toFixed(0)}%`,color:o,dwellMs:4500}}case"MemoryDemoted":{const s=Number(t.new_retention??0);return{type:e.type,title:"Memory demoted",body:`retention ${(s*100).toFixed(0)}%`,color:o,dwellMs:4500}}case"MemorySuppressed":{const s=Number(t.suppression_count??0),n=Number(t.estimated_cascade??0);return{type:e.type,title:"Forgetting",body:n>0?`suppression #${s} · Rac1 cascade ~${n} neighbors`:`suppression #${s}`,color:o,dwellMs:5500}}case"MemoryUnsuppressed":{const s=Number(t.remaining_count??0);return{type:e.type,title:"Recovered",body:s>0?`${s} suppression${s===1?"":"s"} remain`:"fully unsuppressed",color:o,dwellMs:5e3}}case"Rac1CascadeSwept":{const s=Number(t.seeds??0),n=Number(t.neighbors_affected??0);return{type:e.type,title:"Rac1 cascade",body:`${s} seed${s===1?"":"s"} · ${n} dendritic spine${n===1?"":"s"} pruned`,color:o,dwellMs:6e3}}case"MemoryDeleted":return{type:e.type,title:"Memory deleted",body:String(t.id??"").slice(0,8),color:o,dwellMs:4e3};case"Heartbeat":case"SearchPerformed":case"RetentionDecayed":case"ActivationSpread":case"ImportanceScored":case"MemoryCreated":case"MemoryUpdated":case"DreamStarted":case"DreamProgress":case"ConsolidationStarted":case"Connected":return null;default:return null}}let h=null;return R.subscribe(e=>{if(e.length===0)return;const o=[];for(const t of e){if(t===h)break;o.push(t)}if(o.length!==0){h=e[0];for(let t=o.length-1;t>=0;t--){const s=_(o[t]);s&&w(s)}}}),{subscribe:y,dismiss:g,clear:N,pauseDwell:C,resumeDwell:D,push:w}}const $=F();function O(){[{type:"DreamCompleted",title:"Dream consolidated",body:"Replayed 127 memories · 43 new connections · 5 insights in 2.4s",color:u.DreamCompleted,dwellMs:7e3},{type:"ConnectionDiscovered",title:"Bridge discovered",body:"semantic · weight 0.87",color:u.ConnectionDiscovered,dwellMs:4500},{type:"MemorySuppressed",title:"Forgetting",body:"suppression #2 · Rac1 cascade ~8 neighbors",color:u.MemorySuppressed,dwellMs:5500},{type:"ConsolidationCompleted",title:"Consolidation swept",body:"892 nodes · 156 decayed · 48 embedded in 1.1s",color:u.ConsolidationCompleted,dwellMs:6e3}].forEach((i,m)=>{setTimeout(()=>{$.push(i)},m*800)}),T($)}export{O as f,$ as t};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/BjdL4Pm2.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BjdL4Pm2.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BjdL4Pm2.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BjdL4Pm2.js.gz
Normal file
Binary file not shown.
2
apps/dashboard/build/_app/immutable/chunks/BlVfL1ME.js
Normal file
2
apps/dashboard/build/_app/immutable/chunks/BlVfL1ME.js
Normal file
File diff suppressed because one or more lines are too long
BIN
apps/dashboard/build/_app/immutable/chunks/BlVfL1ME.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BlVfL1ME.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BlVfL1ME.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BlVfL1ME.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
import{D as s,F as v,y as o,a3 as c,a7 as b,a8 as m,a9 as h,I as y}from"./CvjSAYrz.js";function _(e,r,f=!1){if(e.multiple){if(r==null)return;if(!b(r))return m();for(var a of e.options)a.selected=r.includes(i(a));return}for(a of e.options){var t=i(a);if(h(t,r)){a.selected=!0;return}}(!f||r!==void 0)&&(e.selectedIndex=-1)}function q(e){var r=new MutationObserver(()=>{_(e,e.__value)});r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),c(()=>{r.disconnect()})}function p(e,r,f=r){var a=new WeakSet,t=!0;s(e,"change",u=>{var l=u?"[selected]":":checked",n;if(e.multiple)n=[].map.call(e.querySelectorAll(l),i);else{var d=e.querySelector(l)??e.querySelector("option:not([disabled])");n=d&&i(d)}f(n),v!==null&&a.add(v)}),o(()=>{var u=r();if(e===document.activeElement){var l=y??v;if(a.has(l))return}if(_(e,u,t),t&&u===void 0){var n=e.querySelector(":checked");n!==null&&(u=i(n),f(u))}e.__value=u,t=!1}),q(e)}function i(e){return"__value"in e?e.__value:e.value}export{p as b};
|
||||
import{Z as s,_ as v,W as o,F as c,a7 as b,a8 as m,a9 as h,a0 as y}from"./CpWkWWOo.js";function d(e,r,f=!1){if(e.multiple){if(r==null)return;if(!b(r))return m();for(var a of e.options)a.selected=r.includes(i(a));return}for(a of e.options){var t=i(a);if(h(t,r)){a.selected=!0;return}}(!f||r!==void 0)&&(e.selectedIndex=-1)}function q(e){var r=new MutationObserver(()=>{d(e,e.__value)});r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),c(()=>{r.disconnect()})}function p(e,r,f=r){var a=new WeakSet,t=!0;s(e,"change",u=>{var l=u?"[selected]":":checked",n;if(e.multiple)n=[].map.call(e.querySelectorAll(l),i);else{var _=e.querySelector(l)??e.querySelector("option:not([disabled])");n=_&&i(_)}f(n),v!==null&&a.add(v)}),o(()=>{var u=r();if(e===document.activeElement){var l=y??v;if(a.has(l))return}if(d(e,u,t),t&&u===void 0){var n=e.querySelector(":checked");n!==null&&(u=i(n),f(u))}e.__value=u,t=!1}),q(e)}function i(e){return"__value"in e?e.__value:e.value}export{p as b};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/BnXDGOmJ.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BnXDGOmJ.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BnXDGOmJ.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BnXDGOmJ.js.gz
Normal file
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/BskPcZf7.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/BskPcZf7.js
Normal file
File diff suppressed because one or more lines are too long
BIN
apps/dashboard/build/_app/immutable/chunks/BskPcZf7.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BskPcZf7.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BskPcZf7.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BskPcZf7.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
import{aH as N,k as v,x as u,aI as w,M as p,aJ as T,aK as x,m as d,w as i,aL as y,ab as b,aM as A,v as L,aN as C}from"./CvjSAYrz.js";var h;const m=((h=globalThis==null?void 0:globalThis.window)==null?void 0:h.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function D(e){return(m==null?void 0:m.createHTML(e))??e}function g(e){var a=N("template");return a.innerHTML=D(e.replaceAll("<!>","<!---->")),a.content}function n(e,a){var r=p;r.nodes===null&&(r.nodes={start:e,end:a,a:null,t:null})}function P(e,a){var r=(a&T)!==0,f=(a&x)!==0,s,c=!e.startsWith("<!>");return()=>{if(d)return n(i,null),i;s===void 0&&(s=g(c?e:"<!>"+e),r||(s=u(s)));var t=f||w?document.importNode(s,!0):s.cloneNode(!0);if(r){var _=u(t),o=t.lastChild;n(_,o)}else n(t,t);return t}}function H(e,a,r="svg"){var f=!e.startsWith("<!>"),s=(a&T)!==0,c=`<${r}>${f?e:"<!>"+e}</${r}>`,t;return()=>{if(d)return n(i,null),i;if(!t){var _=g(c),o=u(_);if(s)for(t=document.createDocumentFragment();u(o);)t.appendChild(u(o));else t=u(o)}var l=t.cloneNode(!0);if(s){var E=u(l),M=l.lastChild;n(E,M)}else n(l,l);return l}}function R(e,a){return H(e,a,"svg")}function F(e=""){if(!d){var a=v(e+"");return n(a,a),a}var r=i;return r.nodeType!==A?(r.before(r=v()),L(r)):C(r),n(r,r),r}function I(){if(d)return n(i,null),i;var e=document.createDocumentFragment(),a=document.createComment(""),r=v();return e.append(a,r),n(a,r),e}function $(e,a){if(d){var r=p;((r.f&y)===0||r.nodes.end===null)&&(r.nodes.end=i),b();return}e!==null&&e.before(a)}export{$ as a,R as b,I as c,n as d,P as f,F as t};
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/C4h_mRt2.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/C4h_mRt2.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{J as y,b as u,K as _,M as o,N as t,O as g,Q as i,R as l,T as d,U as p,V as m}from"./CpWkWWOo.js";function T(n,r){let s=null,E=t;var a;if(t){s=p;for(var e=m(document.head);e!==null&&(e.nodeType!==g||e.data!==n);)e=i(e);if(e===null)l(!1);else{var f=i(e);e.remove(),d(f)}}t||(a=document.head.appendChild(y()));try{u(()=>r(a),_|o)}finally{E&&(l(!0),d(s))}}export{T as h};
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
v`‡éĆ)wä<77>KĆÖ„Mڜ˿Q@ÉĆşWőv<>á·E†śYt°c°Gş.˛h€Ă2DŢJżĐšźŞ<C5BA>dSŰŤ$g›d“D1€Úćěŕ,Jy>´U–`+&
|
||||
ŐźĐxS<s.Ć‚§%©5ą±áhGlĎŐÁź~˙Řɲ»g°ĽXĹŁÎv1ßÁٸŁ8Ňłú<C582>„rO†|°<<3C>'Šż2…ř &=UdTă…ÚnYBĐ&¨•’¬¶$ˇC†Äs ©â%{<BÍuéř ńîŐÄ<1D>ż€F *ő”ľîČěá<07>Čž÷źx Ď4<yA5ťŃOŽPs,†˘RĎ_$±ÓýăY
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/C4h_mRt2.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C4h_mRt2.js.gz
Normal file
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/C6HuKgyx.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/C6HuKgyx.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{s as c,g as l}from"./BeMFXnHE.js";import{F as o,G as b,H as a,I as p,g as d,h as g}from"./CpWkWWOo.js";let s=!1,i=Symbol();function y(e,n,r){const u=r[n]??(r[n]={store:null,source:p(void 0),unsubscribe:a});if(u.store!==e&&!(i in r))if(u.unsubscribe(),u.store=e??null,e==null)u.source.v=void 0,u.unsubscribe=a;else{var t=!0;u.unsubscribe=c(e,f=>{t?u.source.v=f:g(u.source,f)}),t=!1}return e&&i in r?l(e):d(u.source)}function m(){const e={};function n(){o(()=>{for(var r in e)e[r].unsubscribe();b(e,i,{enumerable:!1,value:!0})})}return[e,n]}function I(e){var n=s;try{return s=!1,[e(),s]}finally{s=n}}export{y as a,I as c,m as s};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/C6HuKgyx.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C6HuKgyx.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/C6HuKgyx.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C6HuKgyx.js.gz
Normal file
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/CGEBXrjl.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/CGEBXrjl.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{J as z,b as fe,aa as re,N as k,T as L,V as ie,ab as le,g as Z,ac as ue,ad as se,ae as $,R as q,U as F,O as oe,af as ve,ag as y,_ as te,ah as T,ai as Y,aj as de,ak as ce,A as pe,a7 as _e,al as U,am as he,an as ge,I as Ee,ao as j,ap as me,aq as ne,ar as ae,as as V,Y as Te,at as Ae,au as Ce,av as we,aw as Ie,Q as Ne}from"./CpWkWWOo.js";function ke(e,i){return i}function Se(e,i,l){for(var t=[],g=i.length,s,u=i.length,c=0;c<g;c++){let E=i[c];ae(E,()=>{if(s){if(s.pending.delete(E),s.done.add(E),s.pending.size===0){var o=e.outrogroups;B(U(s.done)),o.delete(s),o.size===0&&(e.outrogroups=null)}}else u-=1},!1)}if(u===0){var f=t.length===0&&l!==null;if(f){var v=l,n=v.parentNode;we(n),n.append(v),e.items.clear()}B(i,!f)}else s={pending:new Set(i),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(s)}function B(e,i=!0){for(var l=0;l<e.length;l++)Ie(e[l],i)}var ee;function He(e,i,l,t,g,s=null){var u=e,c=new Map,f=(i&re)!==0;if(f){var v=e;u=k?L(ie(v)):v.appendChild(z())}k&&le();var n=null,E=pe(()=>{var a=l();return _e(a)?a:a==null?[]:U(a)}),o,d=!0;function C(){r.fallback=n,xe(r,o,u,i,t),n!==null&&(o.length===0?(n.f&T)===0?ne(n):(n.f^=T,M(n,null,u)):ae(n,()=>{n=null}))}var N=fe(()=>{o=Z(E);var a=o.length;let S=!1;if(k){var x=ue(u)===se;x!==(a===0)&&(u=$(),L(u),q(!1),S=!0)}for(var _=new Set,w=te,R=ce(),p=0;p<a;p+=1){k&&F.nodeType===oe&&F.data===ve&&(u=F,S=!0,q(!1));var I=o[p],b=t(I,p),h=d?null:c.get(b);h?(h.v&&y(h.v,I),h.i&&y(h.i,p),R&&w.unskip_effect(h.e)):(h=Re(c,d?u:ee??(ee=z()),I,b,p,g,i,l),d||(h.e.f|=T),c.set(b,h)),_.add(b)}if(a===0&&s&&!n&&(d?n=Y(()=>s(u)):(n=Y(()=>s(ee??(ee=z()))),n.f|=T)),a>_.size&&de(),k&&a>0&&L($()),!d)if(R){for(const[O,D]of c)_.has(O)||w.skip_effect(D.e);w.oncommit(C),w.ondiscard(()=>{})}else C();S&&q(!0),Z(E)}),r={effect:N,items:c,outrogroups:null,fallback:n};d=!1,k&&(u=F)}function H(e){for(;e!==null&&(e.f&Ae)===0;)e=e.next;return e}function xe(e,i,l,t,g){var h,O,D,J,Q,X,G,K,P;var s=(t&Ce)!==0,u=i.length,c=e.items,f=H(e.effect.first),v,n=null,E,o=[],d=[],C,N,r,a;if(s)for(a=0;a<u;a+=1)C=i[a],N=g(C,a),r=c.get(N).e,(r.f&T)===0&&((O=(h=r.nodes)==null?void 0:h.a)==null||O.measure(),(E??(E=new Set)).add(r));for(a=0;a<u;a+=1){if(C=i[a],N=g(C,a),r=c.get(N).e,e.outrogroups!==null)for(const m of e.outrogroups)m.pending.delete(r),m.done.delete(r);if((r.f&T)!==0)if(r.f^=T,r===f)M(r,null,l);else{var S=n?n.next:f;r===e.effect.last&&(e.effect.last=r.prev),r.prev&&(r.prev.next=r.next),r.next&&(r.next.prev=r.prev),A(e,n,r),A(e,r,S),M(r,S,l),n=r,o=[],d=[],f=H(n.next);continue}if((r.f&V)!==0&&(ne(r),s&&((J=(D=r.nodes)==null?void 0:D.a)==null||J.unfix(),(E??(E=new Set)).delete(r))),r!==f){if(v!==void 0&&v.has(r)){if(o.length<d.length){var x=d[0],_;n=x.prev;var w=o[0],R=o[o.length-1];for(_=0;_<o.length;_+=1)M(o[_],x,l);for(_=0;_<d.length;_+=1)v.delete(d[_]);A(e,w.prev,R.next),A(e,n,w),A(e,R,x),f=x,n=R,a-=1,o=[],d=[]}else v.delete(r),M(r,f,l),A(e,r.prev,r.next),A(e,r,n===null?e.effect.first:n.next),A(e,n,r),n=r;continue}for(o=[],d=[];f!==null&&f!==r;)(v??(v=new Set)).add(f),d.push(f),f=H(f.next);if(f===null)continue}(r.f&T)===0&&o.push(r),n=r,f=H(r.next)}if(e.outrogroups!==null){for(const m of e.outrogroups)m.pending.size===0&&(B(U(m.done)),(Q=e.outrogroups)==null||Q.delete(m));e.outrogroups.size===0&&(e.outrogroups=null)}if(f!==null||v!==void 0){var p=[];if(v!==void 0)for(r of v)(r.f&V)===0&&p.push(r);for(;f!==null;)(f.f&V)===0&&f!==e.fallback&&p.push(f),f=H(f.next);var I=p.length;if(I>0){var b=(t&re)!==0&&u===0?l:null;if(s){for(a=0;a<I;a+=1)(G=(X=p[a].nodes)==null?void 0:X.a)==null||G.measure();for(a=0;a<I;a+=1)(P=(K=p[a].nodes)==null?void 0:K.a)==null||P.fix()}Se(e,p,b)}}s&&Te(()=>{var m,W;if(E!==void 0)for(r of E)(W=(m=r.nodes)==null?void 0:m.a)==null||W.apply()})}function Re(e,i,l,t,g,s,u,c){var f=(u&he)!==0?(u&ge)===0?Ee(l,!1,!1):j(l):null,v=(u&me)!==0?j(g):null;return{v:f,i:v,e:Y(()=>(s(i,f??l,v??g,c),()=>{e.delete(t)}))}}function M(e,i,l){if(e.nodes)for(var t=e.nodes.start,g=e.nodes.end,s=i&&(i.f&T)===0?i.nodes.start:l;t!==null;){var u=Ne(t);if(s.before(t),t===g)return;t=u}}function A(e,i,l){i===null?e.effect.first=l:i.next=l,l===null?e.effect.last=i:l.prev=i}export{He as e,ke as i};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/CGEBXrjl.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CGEBXrjl.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/CGEBXrjl.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CGEBXrjl.js.gz
Normal file
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/CHOnp4oo.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/CHOnp4oo.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{aI as M,J as v,V as o,aJ as y,o as T,aK as p,aL as b,N as d,U as i,aM as w,ab as x,aN as A,T as L,aO as C}from"./CpWkWWOo.js";var h;const m=((h=globalThis==null?void 0:globalThis.window)==null?void 0:h.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function O(e){return(m==null?void 0:m.createHTML(e))??e}function g(e){var a=M("template");return a.innerHTML=O(e.replaceAll("<!>","<!---->")),a.content}function n(e,a){var r=T;r.nodes===null&&(r.nodes={start:e,end:a,a:null,t:null})}function R(e,a){var r=(a&p)!==0,f=(a&b)!==0,s,c=!e.startsWith("<!>");return()=>{if(d)return n(i,null),i;s===void 0&&(s=g(c?e:"<!>"+e),r||(s=o(s)));var t=f||y?document.importNode(s,!0):s.cloneNode(!0);if(r){var _=o(t),u=t.lastChild;n(_,u)}else n(t,t);return t}}function D(e,a,r="svg"){var f=!e.startsWith("<!>"),s=(a&p)!==0,c=`<${r}>${f?e:"<!>"+e}</${r}>`,t;return()=>{if(d)return n(i,null),i;if(!t){var _=g(c),u=o(_);if(s)for(t=document.createDocumentFragment();o(u);)t.appendChild(o(u));else t=o(u)}var l=t.cloneNode(!0);if(s){var E=o(l),N=l.lastChild;n(E,N)}else n(l,l);return l}}function F(e,a){return D(e,a,"svg")}function H(e=""){if(!d){var a=v(e+"");return n(a,a),a}var r=i;return r.nodeType!==A?(r.before(r=v()),L(r)):C(r),n(r,r),r}function I(){if(d)return n(i,null),i;var e=document.createDocumentFragment(),a=document.createComment(""),r=v();return e.append(a,r),n(a,r),e}function $(e,a){if(d){var r=T;((r.f&w)===0||r.nodes.end===null)&&(r.nodes.end=i),x();return}e!==null&&e.before(a)}export{$ as a,F as b,I as c,n as d,R as f,H as t};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/CHOnp4oo.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CHOnp4oo.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/CHOnp4oo.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CHOnp4oo.js.gz
Normal file
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/CJCPY1OL.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/CJCPY1OL.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{b as p,E as t}from"./CpWkWWOo.js";import{B as c}from"./DdEqwvdI.js";function E(r,s,...a){var e=new c(r);p(()=>{const n=s()??null;e.ensure(n,n&&(o=>n(o,...a)))},t)}export{E as s};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/CJCPY1OL.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CJCPY1OL.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/CJCPY1OL.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CJCPY1OL.js.gz
Normal file
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/CJsMJEun.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/CJsMJEun.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{W as S,X as h,v as k,Y as T,S as Y}from"./CpWkWWOo.js";function t(r,i){return r===i||(r==null?void 0:r[Y])===i}function x(r={},i,a,c){return S(()=>{var f,s;return h(()=>{f=s,s=[],k(()=>{r!==a(...s)&&(i(r,...s),f&&t(a(...f),r)&&i(null,...f))})}),()=>{T(()=>{s&&t(a(...s),r)&&i(null,...s)})}}),r}export{x as b};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/CJsMJEun.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CJsMJEun.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/CJsMJEun.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CJsMJEun.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
import{Y as u,Z as v,_ as h,m as i,$ as g,a0 as f,B as A,a1 as S}from"./CvjSAYrz.js";const p=Symbol("is custom element"),N=Symbol("is html"),T=f?"link":"LINK",E=f?"progress":"PROGRESS";function k(r){if(i){var s=!1,a=()=>{if(!s){if(s=!0,r.hasAttribute("value")){var e=r.value;_(r,"value",null),r.value=e}if(r.hasAttribute("checked")){var o=r.checked;_(r,"checked",null),r.checked=o}}};r.__on_r=a,A(a),S()}}function l(r,s){var a=d(r);a.value===(a.value=s??void 0)||r.value===s&&(s!==0||r.nodeName!==E)||(r.value=s??"")}function _(r,s,a,e){var o=d(r);i&&(o[s]=r.getAttribute(s),s==="src"||s==="srcset"||s==="href"&&r.nodeName===T)||o[s]!==(o[s]=a)&&(s==="loading"&&(r[u]=a),a==null?r.removeAttribute(s):typeof a!="string"&&L(r).includes(s)?r[s]=a:r.setAttribute(s,a))}function d(r){return r.__attributes??(r.__attributes={[p]:r.nodeName.includes("-"),[N]:r.namespaceURI===v})}var c=new Map;function L(r){var s=r.getAttribute("is")||r.nodeName,a=c.get(s);if(a)return a;c.set(s,a=[]);for(var e,o=r,n=Element.prototype;n!==o;){e=g(o);for(var t in e)e[t].set&&a.push(t);o=h(o)}return a}export{l as a,k as r,_ as s};
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
import{D as k,F as f,G as m,A as t,z as _,m as b,I as i}from"./CvjSAYrz.js";function E(e,a,v=a){var c=new WeakSet;k(e,"input",async r=>{var l=r?e.defaultValue:e.value;if(l=o(e)?u(l):l,v(l),f!==null&&c.add(f),await m(),l!==(l=a())){var h=e.selectionStart,d=e.selectionEnd,n=e.value.length;if(e.value=l??"",d!==null){var s=e.value.length;h===d&&d===n&&s>n?(e.selectionStart=s,e.selectionEnd=s):(e.selectionStart=h,e.selectionEnd=Math.min(d,s))}}}),(b&&e.defaultValue!==e.value||t(a)==null&&e.value)&&(v(o(e)?u(e.value):e.value),f!==null&&c.add(f)),_(()=>{var r=a();if(e===document.activeElement){var l=i??f;if(c.has(l))return}o(e)&&r===u(e.value)||e.type==="date"&&!r&&!e.value||r!==e.value&&(e.value=r??"")})}function S(e,a,v=a){k(e,"change",c=>{var r=c?e.defaultChecked:e.checked;v(r)}),(b&&e.defaultChecked!==e.checked||t(a)==null)&&v(e.checked),_(()=>{var c=a();e.checked=!!c})}function o(e){var a=e.type;return a==="number"||a==="range"}function u(e){return e===""?null:+e}export{S as a,E as b};
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
apps/dashboard/build/_app/immutable/chunks/CpWkWWOo.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CpWkWWOo.js.br
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
import{a as y}from"./BKuqSeVd.js";import{m as r}from"./CvjSAYrz.js";function a(t,e,f,i){var l=t.__style;if(r||l!==e){var s=y(e);(!r||s!==t.getAttribute("style"))&&(s==null?t.removeAttribute("style"):t.style.cssText=s),t.__style=e}return i}export{a as s};
|
||||
import{a as y}from"./BKuqSeVd.js";import{N as r}from"./CpWkWWOo.js";function a(t,e,f,i){var l=t.__style;if(r||l!==e){var s=y(e);(!r||s!==t.getAttribute("style"))&&(s==null?t.removeAttribute("style"):t.style.cssText=s),t.__style=e}return i}export{a as s};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/Cx-f-Pzo.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/Cx-f-Pzo.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/Cx-f-Pzo.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/Cx-f-Pzo.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
import{y as S,z as h,A as k,B as A,S as B}from"./CvjSAYrz.js";function t(r,i){return r===i||(r==null?void 0:r[B])===i}function q(r={},i,a,T){return S(()=>{var f,s;return h(()=>{f=s,s=[],k(()=>{r!==a(...s)&&(i(r,...s),f&&t(a(...f),r)&&i(null,...f))})}),()=>{A(()=>{s&&t(a(...s),r)&&i(null,...s)})}}),r}export{q as b};
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
import{s as c,g as l}from"./DfQhL-hC.js";import{a3 as o,a4 as f,a5 as b,g as p,h as d,a6 as g}from"./CvjSAYrz.js";let s=!1,i=Symbol();function y(e,n,r){const u=r[n]??(r[n]={store:null,source:b(void 0),unsubscribe:f});if(u.store!==e&&!(i in r))if(u.unsubscribe(),u.store=e??null,e==null)u.source.v=void 0,u.unsubscribe=f;else{var t=!0;u.unsubscribe=c(e,a=>{t?u.source.v=a:d(u.source,a)}),t=!1}return e&&i in r?l(e):p(u.source)}function m(){const e={};function n(){o(()=>{for(var r in e)e[r].unsubscribe();g(e,i,{enumerable:!1,value:!0})})}return[e,n]}function N(e){var n=s;try{return s=!1,[e(),s]}finally{s=n}}export{y as a,N as c,m as s};
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
var B=Object.defineProperty;var g=i=>{throw TypeError(i)};var D=(i,e,s)=>e in i?B(i,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):i[e]=s;var w=(i,e,s)=>D(i,typeof e!="symbol"?e+"":e,s),y=(i,e,s)=>e.has(i)||g("Cannot "+s);var t=(i,e,s)=>(y(i,e,"read from private field"),s?s.call(i):e.get(i)),l=(i,e,s)=>e.has(i)?g("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(i):e.set(i,s),M=(i,e,s,a)=>(y(i,e,"write to private field"),a?a.call(i,s):e.set(i,s),s);import{F,aq as q,aw as k,ar as C,k as x,ai as A,m as S,w as j,ay as z,ak as E}from"./CvjSAYrz.js";var h,n,f,u,p,_,v;class I{constructor(e,s=!0){w(this,"anchor");l(this,h,new Map);l(this,n,new Map);l(this,f,new Map);l(this,u,new Set);l(this,p,!0);l(this,_,()=>{var e=F;if(t(this,h).has(e)){var s=t(this,h).get(e),a=t(this,n).get(s);if(a)q(a),t(this,u).delete(s);else{var c=t(this,f).get(s);c&&(t(this,n).set(s,c.effect),t(this,f).delete(s),c.fragment.lastChild.remove(),this.anchor.before(c.fragment),a=c.effect)}for(const[r,o]of t(this,h)){if(t(this,h).delete(r),r===e)break;const d=t(this,f).get(o);d&&(k(d.effect),t(this,f).delete(o))}for(const[r,o]of t(this,n)){if(r===s||t(this,u).has(r))continue;const d=()=>{if(Array.from(t(this,h).values()).includes(r)){var b=document.createDocumentFragment();z(o,b),b.append(x()),t(this,f).set(r,{effect:o,fragment:b})}else k(o);t(this,u).delete(r),t(this,n).delete(r)};t(this,p)||!a?(t(this,u).add(r),C(o,d,!1)):d()}}});l(this,v,e=>{t(this,h).delete(e);const s=Array.from(t(this,h).values());for(const[a,c]of t(this,f))s.includes(a)||(k(c.effect),t(this,f).delete(a))});this.anchor=e,M(this,p,s)}ensure(e,s){var a=F,c=E();if(s&&!t(this,n).has(e)&&!t(this,f).has(e))if(c){var r=document.createDocumentFragment(),o=x();r.append(o),t(this,f).set(e,{effect:A(()=>s(o)),fragment:r})}else t(this,n).set(e,A(()=>s(this.anchor)));if(t(this,h).set(a,e),c){for(const[d,m]of t(this,n))d===e?a.unskip_effect(m):a.skip_effect(m);for(const[d,m]of t(this,f))d===e?a.unskip_effect(m.effect):a.skip_effect(m.effect);a.oncommit(t(this,_)),a.ondiscard(t(this,v))}else S&&(this.anchor=j),t(this,_).call(this)}}h=new WeakMap,n=new WeakMap,f=new WeakMap,u=new WeakMap,p=new WeakMap,_=new WeakMap,v=new WeakMap;export{I as B};
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
import{k as y,b as o,H as u,l as _,m as t,C as g,o as l,q as i,v as d,w as m,x as p}from"./CvjSAYrz.js";function C(n,r){let s=null,E=t;var a;if(t){s=m;for(var e=p(document.head);e!==null&&(e.nodeType!==g||e.data!==n);)e=l(e);if(e===null)i(!1);else{var f=l(e);e.remove(),d(f)}}t||(a=document.head.appendChild(y()));try{o(()=>r(a),u|_)}finally{E&&(i(!0),d(s))}}export{C as h};
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
import{t as N}from"./BKuqSeVd.js";import{m as o}from"./CvjSAYrz.js";function p(i,b,f,A,u,r){var l=i.__className;if(o||l!==f||l===void 0){var t=N(f,A,r);(!o||t!==i.getAttribute("class"))&&(t==null?i.removeAttribute("class"):b?i.className=t:i.setAttribute("class",t)),i.__className=f}else if(r&&u!==r)for(var a in r){var g=!!r[a];(u==null||g!==!!u[a])&&i.classList.toggle(a,g)}return r}export{p as s};
|
||||
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue