mirror of
https://github.com/samvallad33/vestige.git
synced 2026-07-26 23:51:02 +02:00
Merge pull request #147 from samvallad33/release/v2.3.0
v2.3.0 — Cognitive Observatory + Zero-Knowledge Sync CI 12/12 green. Also restores main to green after 8 days red (Rust 1.97 clippy + toolchain pin).
This commit is contained in:
commit
54f69b369e
367 changed files with 7093 additions and 4474 deletions
12
.github/workflows/ci.yml
vendored
12
.github/workflows/ci.yml
vendored
|
|
@ -59,6 +59,9 @@ jobs:
|
|||
- name: Test
|
||||
run: cargo test --workspace
|
||||
|
||||
- name: Test paid cloud-sync path
|
||||
run: cargo test --locked --package vestige-core --features cloud-sync cloud --lib
|
||||
|
||||
release-build:
|
||||
name: Release Build (${{ matrix.target }})
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
|
@ -81,7 +84,7 @@ jobs:
|
|||
# runtime linking is a user concern documented in INSTALL-INTEL-MAC.md.
|
||||
- os: macos-14
|
||||
target: x86_64-apple-darwin
|
||||
cargo_flags: "--no-default-features --features ort-dynamic,vector-search"
|
||||
cargo_flags: "--no-default-features --features ort-dynamic,vector-search,cloud-sync"
|
||||
- os: ubuntu-latest
|
||||
target: x86_64-unknown-linux-gnu
|
||||
cargo_flags: ""
|
||||
|
|
@ -93,6 +96,13 @@ jobs:
|
|||
with:
|
||||
targets: ${{ matrix.target }}
|
||||
|
||||
# rust-toolchain.toml pins the toolchain, so cargo runs the pinned version
|
||||
# rather than the stable one the action installed. Add the cross-compile
|
||||
# target to the pinned toolchain too, or the build fails with
|
||||
# "can't find crate for `core`".
|
||||
- name: Add target to the pinned toolchain
|
||||
run: rustup target add ${{ matrix.target }}
|
||||
|
||||
- name: Cache cargo
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
|
|
|
|||
11
.github/workflows/release.yml
vendored
11
.github/workflows/release.yml
vendored
|
|
@ -38,7 +38,7 @@ jobs:
|
|||
# generates 0 embeddings, and no model download is ever attempted.
|
||||
# usearch builds cleanly on MSVC because vestige-core pins it with
|
||||
# features=["fp16lib"] (see crates/vestige-core/Cargo.toml).
|
||||
cargo_flags: "--no-default-features --features embeddings,ort-download,vector-search"
|
||||
cargo_flags: "--no-default-features --features embeddings,ort-download,vector-search,cloud-sync,connectors"
|
||||
needs_onnxruntime: false
|
||||
# Intel Mac uses the ort-dynamic feature to runtime-link against a
|
||||
# system libonnxruntime (Homebrew), sidestepping the missing
|
||||
|
|
@ -48,7 +48,7 @@ jobs:
|
|||
- target: x86_64-apple-darwin
|
||||
os: macos-latest
|
||||
archive: tar.gz
|
||||
cargo_flags: "--no-default-features --features ort-dynamic,vector-search"
|
||||
cargo_flags: "--no-default-features --features ort-dynamic,vector-search,cloud-sync,connectors"
|
||||
- target: aarch64-apple-darwin
|
||||
os: macos-latest
|
||||
archive: tar.gz
|
||||
|
|
@ -75,6 +75,13 @@ jobs:
|
|||
with:
|
||||
targets: ${{ matrix.target }}
|
||||
|
||||
# rust-toolchain.toml pins the toolchain, so cargo runs the pinned version
|
||||
# rather than the stable one the action installed. Add the cross-compile
|
||||
# target to the pinned toolchain too, or the build fails with
|
||||
# "can't find crate for `core`".
|
||||
- name: Add target to the pinned toolchain
|
||||
run: rustup target add ${{ matrix.target }}
|
||||
|
||||
- name: Validate release version
|
||||
shell: bash
|
||||
env:
|
||||
|
|
|
|||
14
.gitignore
vendored
14
.gitignore
vendored
|
|
@ -142,3 +142,17 @@ fastembed-rs/
|
|||
|
||||
.claude/
|
||||
.codebase-memory/
|
||||
|
||||
# Internal AI-council planning scratch + session dumps — never public
|
||||
.council/
|
||||
|
||||
# Private business material: pricing strategy, sales playbooks, and outreach
|
||||
# lists containing third parties' names and contact details. These sit in the
|
||||
# working tree untracked; without this rule a single `git add -A` would publish
|
||||
# real people's personal data to a public repo.
|
||||
docs/business/
|
||||
*.session.jsonl
|
||||
blackbox-proof-*/*.jsonl
|
||||
|
||||
# Hermes agent-runtime conversation dumps (dated hex, tens of MB, embed system prompts)
|
||||
[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9]_[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]
|
||||
|
|
|
|||
208
CHANGELOG.md
208
CHANGELOG.md
|
|
@ -5,9 +5,150 @@ All notable changes to Vestige will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
## [2.3.0] - 2026-07-26 — "Cognitive Observatory + Zero-Knowledge Sync"
|
||||
|
||||
### Fixed — Auto-consolidation merge: opt-out lever + protected pins honored (#142)
|
||||
Two audits (39 verified fixes), three dormant features brought to life, a
|
||||
raw-WebGPU dashboard, and the first Vestige Pro surface — a cloud-sync client
|
||||
that refuses to sync anything it hasn't encrypted first.
|
||||
|
||||
### Added — Cognitive Observatory: a raw-WebGPU living memory field
|
||||
|
||||
The dashboard gains a full-bleed, zero-library WebGPU surface that renders the
|
||||
memory graph as a living cognitive field: GPU force simulation, HDR bloom, and
|
||||
a recall wavefront sweeping the **real** memory graph. Five deterministic demo
|
||||
moments are driven by a URL contract (`?demo=<name>&seed=...&frame=N`):
|
||||
recall-path, engram-birth, salience-rescue, forgetting-horizon, firewall —
|
||||
capture mode (`?frame=N`) freezes the sim so the same URL produces identical
|
||||
pixels. No Three.js, no chart library: bare-metal WebGPU engine, WGSL shaders,
|
||||
DOM as instrument overlays only. The Observatory is also embedded in the main
|
||||
graph page (an Observatory button beside Dream and Memory Cinema takes over
|
||||
full-bleed; Esc exits), and the field is clickable — GPU picking opens the
|
||||
same Memory Detail inspector Classic's picking drove.
|
||||
|
||||
### Added — Vestige Pro: zero-knowledge cloud-sync client + CLI/npm upgrade surfaces
|
||||
|
||||
The public client for the hosted Vestige Cloud managed-sync service lands
|
||||
behind the optional `cloud-sync` cargo feature, and encryption is mandatory:
|
||||
**the client refuses plaintext sync**. The portable archive is encrypted
|
||||
on-device before upload (Argon2id KDF → XChaCha20-Poly1305 AEAD, a
|
||||
self-describing `VSTGENC1` envelope) under a passphrase
|
||||
(`VESTIGE_CLOUD_ENCRYPTION_KEY`) that is **never sent to the server** and is
|
||||
independent of the bearer sync key — the hosted service only ever stores
|
||||
ciphertext, so "we hold no keys" is literally true, and a lost passphrase means
|
||||
the synced blob is unrecoverable by design (we cannot reset what we never
|
||||
have). The refusal cuts both ways: the client will not upload an unencrypted
|
||||
archive, and it rejects a plaintext blob on download instead of quietly
|
||||
accepting it. The transport is the existing pull-merge-push portable-sync
|
||||
engine over HTTP with ETag/`If-Match` optimistic concurrency, so two devices
|
||||
converge without lost updates. The Pro upgrade surfaces that ship with it are
|
||||
**CLI and npm only** — the `vestige sync --cloud` subscribe wall, the `--help`
|
||||
and `vestige health` footers, the npm README, and the postinstall banner. The
|
||||
dashboard gains no Pro surface in this release. **The hosted service is optional
|
||||
and paid; local-first stays free** — the default `vestige-core` library build
|
||||
links no HTTP client at all, and in the shipped server binary (whose default
|
||||
features do include `connectors` and `cloud-sync`, so it links `reqwest`) the
|
||||
cloud client is inert unless you set `VESTIGE_CLOUD_ENDPOINT`,
|
||||
`VESTIGE_CLOUD_SYNC_KEY`, and `VESTIGE_CLOUD_ENCRYPTION_KEY` and explicitly run
|
||||
`vestige sync --cloud`.
|
||||
|
||||
### Changed — The living field is now the main graph renderer
|
||||
|
||||
The main graph page defaults to the Observatory engine wherever WebGPU exists.
|
||||
A new **Field | Classic** toggle in the control bar keeps the Three.js view one
|
||||
click away and untouched (picking, colour modes, temporal scrubbing and legends
|
||||
remain Classic features); a missing or non-functional WebGPU stack forces
|
||||
Classic automatically — including the case where `'gpu' in navigator` is true
|
||||
but `requestAdapter()` returns null, `requestDevice()` throws, or the device is
|
||||
lost mid-session — and the choice persists in `localStorage` (the automatic
|
||||
fallback deliberately does not persist, so a machine whose GPU recovers gets
|
||||
the field back next session). Dream, Observatory takeover, Memory Cinema,
|
||||
and Reload work in both modes.
|
||||
|
||||
### Changed — `smart_ingest` batch mode honors an explicit `forceCreate: false`
|
||||
|
||||
**Write-semantics change for existing clients.** Batch mode has defaulted to
|
||||
`batchMergePolicy: "force_create"` since v2.1.23 — but under that default, an
|
||||
explicit per-call `forceCreate: false` was silently inverted into a
|
||||
force-create. An explicit `forceCreate` is now authoritative in both policies:
|
||||
pass `forceCreate: false` and batch items go through Prediction Error Gating
|
||||
(merge/update/create against existing memories) even under the default policy.
|
||||
Callers that were sending `forceCreate: false` while relying on the old
|
||||
always-create behavior will now see merges and updates instead of new nodes —
|
||||
drop the parameter (or send `true`) to keep the old behavior.
|
||||
|
||||
### Fixed — 29 bugs from the full-backend adversarial audit (#139)
|
||||
|
||||
A backend-wide audit (18 feature areas, each finding adversarially re-verified)
|
||||
surfaced 31 real bugs; this release fixes 29. Highlights: **migrations now run
|
||||
in a transaction** (a mid-migration failure no longer bricks the DB),
|
||||
`decide_memory_pr` rejects re-deciding a finalized PR, `suppress` reverse is a
|
||||
true inverse (was leaving stability permanently halved), `update_node_content`
|
||||
regenerates a stale embedding when the embedder wasn't ready, `plan_merge`
|
||||
validates `survivor_id` (was an unchecked-unwrap panic), the contradiction
|
||||
heuristic requires a real polarity flip (was demoting correct memories on
|
||||
benign "do not" notes), and hybrid-search relevance is the min-max-normalized
|
||||
RRF fused score. Full workspace stayed green (1556 tests, clippy `-D warnings`
|
||||
clean).
|
||||
|
||||
### Fixed — Three dormant features wired live (#117, #124, #137 via #140)
|
||||
|
||||
Honesty first: each of these is now genuinely producing data, and none of the
|
||||
three is 100% finished. The remaining edges are stated per item.
|
||||
|
||||
- **Agent Black Box records traces for real (#117)**: the trace recorder had
|
||||
zero production callers, so `agent_traces` never populated.
|
||||
`handle_tools_call` now records the opening `mcp.call` event before dispatch
|
||||
and the memory events after, under a shared `run_id` — including in pure
|
||||
stdio mode (was gated on a dashboard socket). **Tracing is on by default**
|
||||
and writes rows to your local database on every MCP tool call; set
|
||||
`VESTIGE_TRACE=0` (or `false`/`off`/`no`) to turn the recorder off. **Traces
|
||||
are pruned after 30 days by default** — the consolidation cycle sweeps
|
||||
`agent_traces` older than the retention window and drops any `agent_runs`
|
||||
roll-up left with no events. Override with `VESTIGE_TRACE_RETENTION_DAYS`;
|
||||
`0` keeps traces forever (sweep disabled). **Not yet wired**: the receipts
|
||||
and memory-PR producers — those Black Box surfaces still have no production
|
||||
writer and stay empty for now.
|
||||
- **Recurring intentions re-arm (#124)**: `mark_triggered` advances a
|
||||
recurring trigger's `next_occurrence` and returns it to Active (was firing
|
||||
once and staying Triggered forever). **Not yet done**: the re-arm logic is
|
||||
fixed, but recurring intentions are not yet hydrated into the live engine,
|
||||
so a re-armed intention is not automatically picked up by the running
|
||||
trigger loop.
|
||||
- **Co-access prediction is live (#137)**: `search_unified` feeds retrieved
|
||||
sets to the speculative retriever, so co-access patterns populate (were
|
||||
permanently empty). **Partially wired**: #137's remaining speculative
|
||||
channels are still only partially connected to production callers.
|
||||
|
||||
### Fixed — 10 more bugs from the second full-codebase audit (#141)
|
||||
|
||||
A second adversarial pass over areas the first under-covered. Majors: the FTS5
|
||||
sanitizer leaked bare operators on doubled input ("foo AND AND AND"), aborting
|
||||
MATCH or silently flipping AND→OR; unbounded MCP `hours_back`/`hours_forward`
|
||||
and an unclamped `limit` could panic the server (DoS); and the connector
|
||||
idempotency key omitted `source_project`, so two repos with overlapping issue
|
||||
ids clobbered each other's memories — **migration V19** adds the project to the
|
||||
key and unique index. Minors: `list_memories` honors `node_type`/`tag` on the
|
||||
search path, HTTP Accept handles `*/*` wildcards, Bearer matches
|
||||
case-insensitively (RFC 7235), dream insights no longer fabricate a
|
||||
TemporalTrend from sentinel dates, the dashboard WebSocket can't resurrect
|
||||
itself after `disconnect()`, and Redmine thread truncation keeps the newest
|
||||
journals. 1559 tests + clippy clean; dashboard check green.
|
||||
|
||||
### Fixed — Dashboard mock data replaced with real APIs
|
||||
|
||||
The `/duplicates`, `/contradictions`, and `/patterns` routes shipped hardcoded
|
||||
mock data — and `/duplicates` rendered a "Live" badge over it. The three mocks
|
||||
are replaced (`898bd33`) with real dashboard HTTP endpoints backed by existing
|
||||
core capabilities: `GET /api/duplicates` (dedup cluster detection),
|
||||
`GET /api/contradictions` (trust-weighted contradiction analysis), and
|
||||
`GET /api/patterns/cross-project` (cross-project pattern transfer). The "Live"
|
||||
badge is now truthful. Two more honesty fixes on the same routes: `/duplicates`
|
||||
loses its no-op "Merge all" button (the copy now points at the `dedup` MCP
|
||||
tool, which actually performs previewable, reversible merges), and the
|
||||
`/contradictions` stat card reports the number of memories actually analyzed
|
||||
instead of an inflated total.
|
||||
|
||||
### Fixed — Auto-consolidation merge: opt-out lever + protected pins honored (#142, via #143)
|
||||
|
||||
The background consolidation cycle's auto-dedup pass silently concat-merges
|
||||
near-duplicate memories (cosine ≥ 0.85): it keeps the strongest node, folds the
|
||||
|
|
@ -21,7 +162,68 @@ available for on-demand, previewable, reversible merges regardless. Second,
|
|||
unattended, contradicting the interactive contract that a protected node may only
|
||||
survive a merge, never be absorbed. A protected node is now never an anchor, never
|
||||
a cluster member, and thus never merged into or deleted, whether the lever is on
|
||||
or off.
|
||||
or off. To be plain about what did **not** change: when the pass is enabled,
|
||||
its merges are still hard-deletes with no reversible trail — the lever and the
|
||||
pin exclusion narrow the blast radius, they do not add a reflog. Thanks
|
||||
@Vrakoss for the report and the fix.
|
||||
|
||||
### Docs — README rewrite; CauseBench replaced by Silent Rotation
|
||||
|
||||
The README is rewritten for clarity, with stale facts and a dead link fixed.
|
||||
The advertised CauseBench benchmark is withdrawn: `benchmarks/causebench/` no
|
||||
longer exists, so its link and repro command 404'd, and its published numbers
|
||||
are retracted. It is replaced by **Silent Rotation**, which is real and
|
||||
auditable — three coding agents, one failing end-to-end test, a signing key
|
||||
that exists only in the memory layer, and 246 raw agent transcripts published
|
||||
instead of a summary table. The headline metric is the converged-wrong column:
|
||||
a no-memory fleet agrees on a planted decoy 21 times in 25; dense cosine 12 in
|
||||
23. The repro is three verbatim commands verified from a fresh clone. The
|
||||
ComposeBench roadmap note now points at the silent-rotation harness.
|
||||
|
||||
### Upgrade notes
|
||||
|
||||
- **BREAKING for 2.2.x cloud-sync users: encryption is no longer optional.**
|
||||
In 2.2.x, `VESTIGE_CLOUD_ENCRYPTION_KEY` was optional and `vestige sync
|
||||
--cloud` would upload a plaintext archive when it was unset. 2.3.0 makes
|
||||
zero-knowledge encryption mandatory in **both** directions: it refuses to
|
||||
start a cloud sync without a passphrase, and on download it **hard-rejects a
|
||||
plaintext remote archive** ("refusing plaintext cloud archive") rather than
|
||||
quietly accepting it. So if you synced plaintext under 2.2.x, 2.3.0 will not
|
||||
read that blob. Recovery: on the machine that **still holds the local data**,
|
||||
set `VESTIGE_CLOUD_ENCRYPTION_KEY` to a strong passphrase and re-run `vestige
|
||||
sync --cloud` to re-upload an encrypted archive, then set that same
|
||||
passphrase on every other device. Vestige never receives the passphrase and
|
||||
cannot reset it for you.
|
||||
|
||||
- **Black Box tracing is on by default and writes to your database.** Every MCP
|
||||
tool call now records trace rows (`agent_traces` / `agent_runs`). Set
|
||||
`VESTIGE_TRACE=0` (or `false`/`off`/`no`) to opt out. **Retention changed
|
||||
too**: traces older than **30 days** are pruned during the consolidation
|
||||
cycle; tune with `VESTIGE_TRACE_RETENTION_DAYS`, where `0` keeps them
|
||||
forever.
|
||||
|
||||
- **Migrations V19 and V20 run automatically.** V19 adds `source_project` to
|
||||
the connector idempotency key and unique index. If you synced **two or more
|
||||
projects of the same source system** (e.g. two GitHub repos) under 2.2.x,
|
||||
their overlapping issue ids clobbered each other's memories. V20 then clears
|
||||
the connector sync cursors, so the next `source_sync` for each project does a
|
||||
full re-scan and repairs the clobbered rows **automatically** — there is no
|
||||
manual step beyond running your normal sync. One caveat for large projects: a
|
||||
single `source_sync` run is bounded by `max_pages`, which defaults to `10`, so
|
||||
a big backlog may take more than one call (or one call with a higher
|
||||
`max_pages`) before the re-scan is complete.
|
||||
|
||||
### Credits
|
||||
|
||||
This release was again driven in part by the community:
|
||||
|
||||
- **@Vrakoss** reported the silent auto-consolidation merge behavior (#142)
|
||||
with a precise write-up of the missing opt-out and the ignored `dedup
|
||||
protect` pins, and contributed the basis of the fix itself — the
|
||||
`VESTIGE_AUTO_CONSOLIDATE_MERGE` lever and the protected-pin exclusion
|
||||
shipped as they built them (PR #143, co-authored in `f7a782d`).
|
||||
|
||||
Thank you.
|
||||
|
||||
## [2.2.1] - 2026-07-02 — "Windows embeddings + backfill safety"
|
||||
|
||||
|
|
|
|||
81
Cargo.lock
generated
81
Cargo.lock
generated
|
|
@ -456,7 +456,7 @@ dependencies = [
|
|||
"num_cpus",
|
||||
"objc2-foundation",
|
||||
"objc2-metal",
|
||||
"rand",
|
||||
"rand 0.9.3",
|
||||
"rand_distr",
|
||||
"rayon",
|
||||
"safetensors 0.7.0",
|
||||
|
|
@ -569,6 +569,17 @@ dependencies = [
|
|||
"cpufeatures 0.2.17",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "chacha20"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cpufeatures 0.3.0",
|
||||
"rand_core 0.10.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "chacha20poly1305"
|
||||
version = "0.10.1"
|
||||
|
|
@ -576,7 +587,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
|
||||
dependencies = [
|
||||
"aead",
|
||||
"chacha20",
|
||||
"chacha20 0.9.1",
|
||||
"cipher",
|
||||
"poly1305",
|
||||
"zeroize",
|
||||
|
|
@ -861,9 +872,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "crossbeam-epoch"
|
||||
version = "0.9.18"
|
||||
version = "0.9.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
|
||||
checksum = "2d6914041f254d6e9176c01941b21115dcfb7089e55135a35411081bd106ef3f"
|
||||
dependencies = [
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
|
@ -1348,7 +1359,7 @@ checksum = "c2d1f04709a8ac06e8e8042875a3c466cc4832d3c1a18dbcb9dba3c6e83046bc"
|
|||
dependencies = [
|
||||
"half",
|
||||
"num-traits",
|
||||
"rand",
|
||||
"rand 0.9.3",
|
||||
"rand_distr",
|
||||
]
|
||||
|
||||
|
|
@ -1769,11 +1780,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"js-sys",
|
||||
"libc",
|
||||
"r-efi 5.3.0",
|
||||
"wasip2",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1783,10 +1792,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"js-sys",
|
||||
"libc",
|
||||
"r-efi 6.0.0",
|
||||
"rand_core 0.10.1",
|
||||
"wasip2",
|
||||
"wasip3",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -1849,7 +1861,7 @@ dependencies = [
|
|||
"cfg-if",
|
||||
"crunchy",
|
||||
"num-traits",
|
||||
"rand",
|
||||
"rand 0.9.3",
|
||||
"rand_distr",
|
||||
"zerocopy",
|
||||
]
|
||||
|
|
@ -1915,7 +1927,7 @@ dependencies = [
|
|||
"libc",
|
||||
"log",
|
||||
"native-tls",
|
||||
"rand",
|
||||
"rand 0.9.3",
|
||||
"reqwest",
|
||||
"serde",
|
||||
"serde_json",
|
||||
|
|
@ -3480,14 +3492,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "quinn-proto"
|
||||
version = "0.11.14"
|
||||
version = "0.11.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "434b42fec591c96ef50e21e886936e66d3cc3f737104fdb9b737c40ffb94c098"
|
||||
checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"getrandom 0.3.4",
|
||||
"getrandom 0.4.2",
|
||||
"lru-slab",
|
||||
"rand",
|
||||
"rand 0.10.2",
|
||||
"rand_pcg",
|
||||
"ring",
|
||||
"rustc-hash",
|
||||
"rustls",
|
||||
|
|
@ -3544,6 +3557,17 @@ dependencies = [
|
|||
"rand_core 0.9.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80"
|
||||
dependencies = [
|
||||
"chacha20 0.10.1",
|
||||
"getrandom 0.4.2",
|
||||
"rand_core 0.10.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.9.0"
|
||||
|
|
@ -3572,6 +3596,12 @@ dependencies = [
|
|||
"getrandom 0.3.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
|
||||
|
||||
[[package]]
|
||||
name = "rand_distr"
|
||||
version = "0.5.1"
|
||||
|
|
@ -3579,7 +3609,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
"rand",
|
||||
"rand 0.9.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_pcg"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a"
|
||||
dependencies = [
|
||||
"rand_core 0.10.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -3609,7 +3648,7 @@ dependencies = [
|
|||
"num-traits",
|
||||
"paste",
|
||||
"profiling",
|
||||
"rand",
|
||||
"rand 0.9.3",
|
||||
"rand_chacha",
|
||||
"simd_helpers",
|
||||
"thiserror 2.0.18",
|
||||
|
|
@ -3874,9 +3913,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rustls-webpki"
|
||||
version = "0.103.11"
|
||||
version = "0.103.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "20a6af516fea4b20eccceaf166e8aa666ac996208e8a644ce3ef5aa783bc7cd4"
|
||||
checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e"
|
||||
dependencies = [
|
||||
"ring",
|
||||
"rustls-pki-types",
|
||||
|
|
@ -4395,7 +4434,7 @@ dependencies = [
|
|||
"monostate",
|
||||
"onig",
|
||||
"paste",
|
||||
"rand",
|
||||
"rand 0.9.3",
|
||||
"rayon",
|
||||
"rayon-cond",
|
||||
"regex",
|
||||
|
|
@ -4631,7 +4670,7 @@ dependencies = [
|
|||
"http",
|
||||
"httparse",
|
||||
"log",
|
||||
"rand",
|
||||
"rand 0.9.3",
|
||||
"sha1",
|
||||
"thiserror 2.0.18",
|
||||
"utf-8",
|
||||
|
|
@ -4897,7 +4936,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
|
|||
|
||||
[[package]]
|
||||
name = "vestige-core"
|
||||
version = "2.2.1"
|
||||
version = "2.3.0"
|
||||
dependencies = [
|
||||
"argon2",
|
||||
"blake3",
|
||||
|
|
@ -4938,7 +4977,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "vestige-mcp"
|
||||
version = "2.2.1"
|
||||
version = "2.3.0"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"axum",
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ exclude = [
|
|||
]
|
||||
|
||||
[workspace.package]
|
||||
version = "2.2.1"
|
||||
version = "2.3.0"
|
||||
edition = "2024"
|
||||
license = "AGPL-3.0-only"
|
||||
repository = "https://github.com/samvallad33/vestige"
|
||||
|
|
|
|||
22
README.md
22
README.md
|
|
@ -7,7 +7,7 @@ Local-first long-term memory for AI agents, delivered over MCP. Vestige remember
|
|||
[](https://github.com/samvallad33/vestige/releases/latest)
|
||||
[](LICENSE)
|
||||
|
||||
[What it is](#what-vestige-is) · [Install](#install) · [First interaction](#your-first-real-interaction) · [vs RAG](#how-it-differs-from-rag) · [Backward reach](#backward-reach-the-backfill-feature) · [Benchmark](#silent-rotation-a-reproducible-benchmark) · [Science](#the-science) · [Tools](#the-13-tools) · [Dashboard](#the-dashboard) · [Integrations](#works-with-every-agent) · [Docs](#go-deeper)
|
||||
[What it is](#what-vestige-is) · [Install](#install) · [First interaction](#your-first-real-interaction) · [vs RAG](#how-it-differs-from-rag) · [Backward reach](#backward-reach-the-backfill-feature) · [Benchmark](#silent-rotation-a-reproducible-benchmark) · [Science](#the-science) · [Tools](#the-13-tools) · [Dashboard](#the-dashboard) · [Integrations](#works-with-every-agent) · [Pro](#vestige-pro) · [Docs](#go-deeper)
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -248,6 +248,26 @@ This is opt-in. Vestige works fine with no protocol at all.
|
|||
|
||||
---
|
||||
|
||||
## Vestige Pro
|
||||
|
||||
Everything above is free forever and never metered. The engine runs on your machine, with no account, no quota, and no upsell inside the product.
|
||||
|
||||
Vestige Pro is for when that memory needs to follow you. It is managed, end-to-end encrypted continuity of your memory graph and your accountability history (Black Box traces, receipts, memory PRs) across every machine you work on. You record a decision on the laptop, and the agent on the desktop already knows it.
|
||||
|
||||
| | Detail |
|
||||
|---|---|
|
||||
| Price | $19/month |
|
||||
| What syncs | Your memory graph plus your accountability history |
|
||||
| Encryption | XChaCha20-Poly1305, applied on your machine before anything is uploaded |
|
||||
| Key derivation | Argon2id over a passphrase you choose |
|
||||
| What the server holds | Ciphertext only |
|
||||
|
||||
Zero-knowledge is the design, not a setting. You pick one passphrase, you use the same one on every device, and it never leaves your machine. The server stores bytes it cannot read, and the client refuses to sync anything in plaintext. If you lose that passphrase, the encrypted data is unrecoverable, by me and by anyone else. That is the property you are paying for, not a gap in it.
|
||||
|
||||
**Availability.** Checkout is not open yet, so there is nothing to buy today and no payment link here pretending otherwise. The client half already ships in this release, which is why `vestige sync --cloud` exists and tells you what it needs. Subscriptions open shortly. To catch the announcement, watch [Releases](https://github.com/samvallad33/vestige/releases) or follow [Discussions](https://github.com/samvallad33/vestige/discussions).
|
||||
|
||||
---
|
||||
|
||||
## Under the hood
|
||||
|
||||
Vestige is a single Rust binary. No sidecar services, no external database, no cloud dependency.
|
||||
|
|
|
|||
38
SECURITY.md
38
SECURITY.md
|
|
@ -4,8 +4,10 @@
|
|||
|
||||
| Version | Supported |
|
||||
| ------- | ------------------ |
|
||||
| 2.1.x | :white_check_mark: |
|
||||
| 2.0.x | Critical fixes only |
|
||||
| 2.3.x | :white_check_mark: |
|
||||
| 2.2.x | Critical fixes only |
|
||||
| 2.1.x | Critical fixes only |
|
||||
| 2.0.x | :x: |
|
||||
| 1.x | :x: |
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
|
@ -70,10 +72,38 @@ All MCP tool inputs are validated:
|
|||
|
||||
### Dependencies
|
||||
|
||||
We use well-maintained dependencies and run `cargo audit` regularly. Current status:
|
||||
We use well-maintained dependencies and run `cargo audit` as part of the release gate. Status as of the v2.3.0 audit (2026-07-25, 564 crate dependencies scanned):
|
||||
|
||||
- **Vulnerabilities**: 0
|
||||
- **Warnings**: 2 (unmaintained transitive dependencies with no known CVEs)
|
||||
- **Warnings**: 9 (3 unmaintained, 5 unsound, 1 yanked), all transitive, none with a known exploit path in Vestige
|
||||
|
||||
That zero is not the default state. The 2.3.0 lockfile carried 5 vulnerabilities
|
||||
until three transitive dependencies were updated. Resolved for this release:
|
||||
|
||||
| Advisory | Crate | Issue | Resolved by |
|
||||
|---|---|---|---|
|
||||
| RUSTSEC-2026-0185 (7.5 high) | `quinn-proto` | Remote memory exhaustion from unbounded out-of-order stream reassembly | 0.11.14 -> 0.11.16 |
|
||||
| RUSTSEC-2026-0104 | `rustls-webpki` | Reachable panic parsing a certificate revocation list | 0.103.11 -> 0.103.13 |
|
||||
| RUSTSEC-2026-0098 | `rustls-webpki` | Name constraints for URI names incorrectly accepted | 0.103.11 -> 0.103.13 |
|
||||
| RUSTSEC-2026-0099 | `rustls-webpki` | Name constraints accepted for certificates asserting a wildcard name | 0.103.11 -> 0.103.13 |
|
||||
| RUSTSEC-2026-0204 | `crossbeam-epoch` | Invalid pointer dereference in the `fmt::Pointer` impl | 0.9.18 -> 0.9.20 |
|
||||
|
||||
`rustls-webpki` is the certificate validation path that Vestige Pro cloud sync
|
||||
depends on, so these versions are pinned forward in `Cargo.lock` and a downgrade
|
||||
is a release blocker, not a lockfile detail.
|
||||
|
||||
The 9 remaining warnings are not vulnerabilities and have no available fix we can
|
||||
apply, because each is pulled in transitively by `fastembed`, `candle`,
|
||||
`usearch`, or `git2`:
|
||||
|
||||
- **Unmaintained**: `core2` (RUSTSEC-2026-0105, also yanked), `number_prefix`
|
||||
(RUSTSEC-2025-0119), `paste` (RUSTSEC-2024-0436)
|
||||
- **Unsound**: `anyhow` (RUSTSEC-2026-0190), `cxx` (RUSTSEC-2026-0202), `git2`
|
||||
(RUSTSEC-2026-0183, RUSTSEC-2026-0184), `memmap2` (RUSTSEC-2026-0186)
|
||||
|
||||
We track these and will pull the fixes through as soon as our direct
|
||||
dependencies publish releases that carry them. We would rather print the real
|
||||
number here than a zero.
|
||||
|
||||
## Security Checklist
|
||||
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
BIN
apps/dashboard/build/_app/immutable/assets/0.BRosXaQv.css.br
Normal file
BIN
apps/dashboard/build/_app/immutable/assets/0.BRosXaQv.css.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/assets/0.BRosXaQv.css.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/assets/0.BRosXaQv.css.gz
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
|||
.spine.svelte-8n8iia{position:absolute;left:8%;right:8%;bottom:calc(2.5rem + env(safe-area-inset-bottom,0px));pointer-events:none}.active-label.svelte-8n8iia{text-align:center;margin-bottom:.6rem;font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;font-size:.72rem;letter-spacing:.08em;color:#cfe9ff;text-shadow:0 0 24px rgba(30,180,255,.35);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.track.svelte-8n8iia{position:relative;height:2px;background:#ffffff12;border-radius:1px}.tick.svelte-8n8iia{position:absolute;top:50%;width:3px;height:10px;transform:translate(-50%,-50%);border-radius:2px;background:#6ef0e6;transition:opacity .2s linear}.tick.hot.svelte-8n8iia{box-shadow:0 0 12px #6ef0e6bf}.tick.backward.svelte-8n8iia{background:#ff4070}.tick.backward.hot.svelte-8n8iia{box-shadow:0 0 12px #ff4070bf}.playhead.svelte-8n8iia{position:absolute;top:50%;width:1.5px;height:16px;transform:translate(-50%,-50%);background:#cfe9ffe6;box-shadow:0 0 10px #1eb4ff80}.verdict.svelte-ssd7yu{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;padding:clamp(18px,3vw,40px) clamp(28px,6vw,80px);border-radius:20px;background:radial-gradient(ellipse at center,#05070edb,#05070eb8 60%,#05070e00);pointer-events:none}.k.svelte-ssd7yu{font-size:clamp(13px,1.8vw,18px);color:#9fd0e4;letter-spacing:.16em;text-transform:uppercase}.v.svelte-ssd7yu{font-size:clamp(32px,6.4vw,72px);font-weight:600;margin-top:.12em;line-height:1.05;background:linear-gradient(90deg,#7fe6c0,#6ef0e6,#a6dcff);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 26px rgba(110,240,220,.45))}.s.svelte-ssd7yu{font-size:clamp(11px,1.5vw,15px);color:#8fb0be;margin-top:.6em;font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;letter-spacing:.04em}.quarantine.svelte-ssd7yu .k:where(.svelte-ssd7yu){color:#ffb0a6}.quarantine.svelte-ssd7yu .v:where(.svelte-ssd7yu){background:linear-gradient(90deg,#ff6a5e,#ff9d6b,#ffd2a8);filter:drop-shadow(0 0 26px rgba(255,90,70,.45))}.quarantine.svelte-ssd7yu .s:where(.svelte-ssd7yu){color:#d9a49a}.observatory-canvas.svelte-16248mg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;background:#05060a}.fallback.svelte-16248mg{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem;text-align:center;padding:0 10%;font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;pointer-events:auto}.fallback-title.svelte-16248mg{color:#5dcaa5;font-size:.95rem;letter-spacing:.28em;text-shadow:0 0 20px rgba(93,202,165,.4)}.fallback-reason.svelte-16248mg{color:#9fd0e4;font-size:.8rem;letter-spacing:.04em;opacity:.85}.fallback-hint.svelte-16248mg{color:#7c8a97;font-size:.75rem;max-width:34rem;line-height:1.6}.fallback-hint.svelte-16248mg a:where(.svelte-16248mg){color:#cfe9ff;text-decoration:underline;text-underline-offset:3px}
|
||||
Binary file not shown.
Binary file not shown.
|
|
@ -1,2 +0,0 @@
|
|||
import{D as z,q as dr,aD as sr,G as A,L as U,N as gr,T as pr,g as m,U as hr,W as _r,X as x,K,M as G,I as Er,aE as Ar,aF as y,w as Sr,aG as b,$ as q,aH as Tr,a1 as Nr,ao as br,z as Ir,aI as V,aJ as Mr,aK as Or,ac as Cr,aL as rr,aM as Rr,Y as ur,_ as or,aN as P,R as lr,aO as Lr,aP as wr,aQ as Hr,Z as kr,J as Dr,aR as Fr,aS as Gr,aT as zr,aU as Ur,aV as tr,aW as Kr}from"./wpu9U-D0.js";function jr(r,e){return e}function Pr(r,e,f){for(var a=[],n=e.length,s,u=e.length,v=0;v<n;v++){let g=e[v];or(g,()=>{if(s){if(s.pending.delete(g),s.done.add(g),s.pending.size===0){var t=r.outrogroups;B(V(s.done)),t.delete(s),t.size===0&&(r.outrogroups=null)}}else u-=1},!1)}if(u===0){var o=a.length===0&&f!==null;if(o){var d=f,l=d.parentNode;Hr(l),l.append(d),r.items.clear()}B(e,!o)}else s={pending:new Set(e),done:new Set},(r.outrogroups??(r.outrogroups=new Set)).add(s)}function B(r,e=!0){for(var f=0;f<r.length;f++)kr(r[f],e)}var er;function mr(r,e,f,a,n,s=null){var u=r,v=new Map,o=(e&sr)!==0;if(o){var d=r;u=A?U(gr(d)):d.appendChild(z())}A&&pr();var l=null,g=br(()=>{var c=f();return Ir(c)?c:c==null?[]:V(c)}),t,p=!0;function S(){i.fallback=l,Yr(i,t,u,e,a),l!==null&&(t.length===0?(l.f&b)===0?ur(l):(l.f^=b,k(l,null,u)):or(l,()=>{l=null}))}var T=dr(()=>{t=m(g);var c=t.length;let C=!1;if(A){var R=hr(u)===_r;R!==(c===0)&&(u=x(),U(u),K(!1),C=!0)}for(var _=new Set,M=Sr,L=Nr(),h=0;h<c;h+=1){A&&G.nodeType===Er&&G.data===Ar&&(u=G,C=!0,K(!1));var O=t[h],w=a(O,h),E=p?null:v.get(w);E?(E.v&&y(E.v,O),E.i&&y(E.i,h),L&&M.unskip_effect(E.e)):(E=qr(v,p?u:er??(er=z()),O,w,h,n,e,f),p||(E.e.f|=b),v.set(w,E)),_.add(w)}if(c===0&&s&&!l&&(p?l=q(()=>s(u)):(l=q(()=>s(er??(er=z()))),l.f|=b)),c>_.size&&Tr(),A&&c>0&&U(x()),!p)if(L){for(const[D,F]of v)_.has(D)||M.skip_effect(F.e);M.oncommit(S),M.ondiscard(()=>{})}else S();C&&K(!0),m(g)}),i={effect:T,items:v,outrogroups:null,fallback:l};p=!1,A&&(u=G)}function H(r){for(;r!==null&&(r.f&Lr)===0;)r=r.next;return r}function Yr(r,e,f,a,n){var E,D,F,X,J,W,$,Q,Z;var s=(a&wr)!==0,u=e.length,v=r.items,o=H(r.effect.first),d,l=null,g,t=[],p=[],S,T,i,c;if(s)for(c=0;c<u;c+=1)S=e[c],T=n(S,c),i=v.get(T).e,(i.f&b)===0&&((D=(E=i.nodes)==null?void 0:E.a)==null||D.measure(),(g??(g=new Set)).add(i));for(c=0;c<u;c+=1){if(S=e[c],T=n(S,c),i=v.get(T).e,r.outrogroups!==null)for(const N of r.outrogroups)N.pending.delete(i),N.done.delete(i);if((i.f&b)!==0)if(i.f^=b,i===o)k(i,null,f);else{var C=l?l.next:o;i===r.effect.last&&(r.effect.last=i.prev),i.prev&&(i.prev.next=i.next),i.next&&(i.next.prev=i.prev),I(r,l,i),I(r,i,C),k(i,C,f),l=i,t=[],p=[],o=H(l.next);continue}if((i.f&P)!==0&&(ur(i),s&&((X=(F=i.nodes)==null?void 0:F.a)==null||X.unfix(),(g??(g=new Set)).delete(i))),i!==o){if(d!==void 0&&d.has(i)){if(t.length<p.length){var R=p[0],_;l=R.prev;var M=t[0],L=t[t.length-1];for(_=0;_<t.length;_+=1)k(t[_],R,f);for(_=0;_<p.length;_+=1)d.delete(p[_]);I(r,M.prev,L.next),I(r,l,M),I(r,L,R),o=R,l=L,c-=1,t=[],p=[]}else d.delete(i),k(i,o,f),I(r,i.prev,i.next),I(r,i,l===null?r.effect.first:l.next),I(r,l,i),l=i;continue}for(t=[],p=[];o!==null&&o!==i;)(d??(d=new Set)).add(o),p.push(o),o=H(o.next);if(o===null)continue}(i.f&b)===0&&t.push(i),l=i,o=H(i.next)}if(r.outrogroups!==null){for(const N of r.outrogroups)N.pending.size===0&&(B(V(N.done)),(J=r.outrogroups)==null||J.delete(N));r.outrogroups.size===0&&(r.outrogroups=null)}if(o!==null||d!==void 0){var h=[];if(d!==void 0)for(i of d)(i.f&P)===0&&h.push(i);for(;o!==null;)(o.f&P)===0&&o!==r.fallback&&h.push(o),o=H(o.next);var O=h.length;if(O>0){var w=(a&sr)!==0&&u===0?f:null;if(s){for(c=0;c<O;c+=1)($=(W=h[c].nodes)==null?void 0:W.a)==null||$.measure();for(c=0;c<O;c+=1)(Z=(Q=h[c].nodes)==null?void 0:Q.a)==null||Z.fix()}Pr(r,h,w)}}s&&lr(()=>{var N,j;if(g!==void 0)for(i of g)(j=(N=i.nodes)==null?void 0:N.a)==null||j.apply()})}function qr(r,e,f,a,n,s,u,v){var o=(u&Mr)!==0?(u&Or)===0?Cr(f,!1,!1):rr(f):null,d=(u&Rr)!==0?rr(n):null;return{v:o,i:d,e:q(()=>(s(e,o??f,d??n,v),()=>{r.delete(a)}))}}function k(r,e,f){if(r.nodes)for(var a=r.nodes.start,n=r.nodes.end,s=e&&(e.f&b)===0?e.nodes.start:f;a!==null;){var u=Dr(a);if(s.before(a),a===n)return;a=u}}function I(r,e,f){e===null?r.effect.first=f:e.next=f,f===null?r.effect.last=e:f.prev=e}function cr(r){var e,f,a="";if(typeof r=="string"||typeof r=="number")a+=r;else if(typeof r=="object")if(Array.isArray(r)){var n=r.length;for(e=0;e<n;e++)r[e]&&(f=cr(r[e]))&&(a&&(a+=" "),a+=f)}else for(f in r)r[f]&&(a&&(a+=" "),a+=f);return a}function Br(){for(var r,e,f=0,a="",n=arguments.length;f<n;f++)(r=arguments[f])&&(e=cr(r))&&(a&&(a+=" "),a+=e);return a}function xr(r){return typeof r=="object"?Br(r):r??""}const fr=[...`
|
||||
\r\f \v\uFEFF`];function Vr(r,e,f){var a=r==null?"":""+r;if(e&&(a=a?a+" "+e:e),f){for(var n of Object.keys(f))if(f[n])a=a?a+" "+n:n;else if(a.length)for(var s=n.length,u=0;(u=a.indexOf(n,u))>=0;){var v=u+s;(u===0||fr.includes(a[u-1]))&&(v===a.length||fr.includes(a[v]))?a=(u===0?"":a.substring(0,u))+a.substring(v+1):u=v}}return a===""?null:a}function ar(r,e=!1){var f=e?" !important;":";",a="";for(var n of Object.keys(r)){var s=r[n];s!=null&&s!==""&&(a+=" "+n+": "+s+f)}return a}function Y(r){return r[0]!=="-"||r[1]!=="-"?r.toLowerCase():r}function yr(r,e){if(e){var f="",a,n;if(Array.isArray(e)?(a=e[0],n=e[1]):a=e,r){r=String(r).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var s=!1,u=0,v=!1,o=[];a&&o.push(...Object.keys(a).map(Y)),n&&o.push(...Object.keys(n).map(Y));var d=0,l=-1;const T=r.length;for(var g=0;g<T;g++){var t=r[g];if(v?t==="/"&&r[g-1]==="*"&&(v=!1):s?s===t&&(s=!1):t==="/"&&r[g+1]==="*"?v=!0:t==='"'||t==="'"?s=t:t==="("?u++:t===")"&&u--,!v&&s===!1&&u===0){if(t===":"&&l===-1)l=g;else if(t===";"||g===T-1){if(l!==-1){var p=Y(r.substring(d,l).trim());if(!o.includes(p)){t!==";"&&g++;var S=r.substring(d,g).trim();f+=" "+S+";"}}d=g+1,l=-1}}}}return a&&(f+=ar(a)),n&&(f+=ar(n,!0)),f=f.trim(),f===""?null:f}return r==null?null:String(r)}function re(r,e,f,a,n,s){var u=r.__className;if(A||u!==f||u===void 0){var v=Vr(f,a,s);(!A||v!==r.getAttribute("class"))&&(v==null?r.removeAttribute("class"):e?r.className=v:r.setAttribute("class",v)),r.__className=f}else if(s&&n!==s)for(var o in s){var d=!!s[o];(n==null||d!==!!n[o])&&r.classList.toggle(o,d)}return s}const Xr=Symbol("is custom element"),Jr=Symbol("is html"),Wr=tr?"link":"LINK",$r=tr?"progress":"PROGRESS";function ee(r){if(A){var e=!1,f=()=>{if(!e){if(e=!0,r.hasAttribute("value")){var a=r.value;ir(r,"value",null),r.value=a}if(r.hasAttribute("checked")){var n=r.checked;ir(r,"checked",null),r.checked=n}}};r.__on_r=f,lr(f),Kr()}}function fe(r,e){var f=vr(r);f.value===(f.value=e??void 0)||r.value===e&&(e!==0||r.nodeName!==$r)||(r.value=e??"")}function ir(r,e,f,a){var n=vr(r);A&&(n[e]=r.getAttribute(e),e==="src"||e==="srcset"||e==="href"&&r.nodeName===Wr)||n[e]!==(n[e]=f)&&(e==="loading"&&(r[Fr]=f),f==null?r.removeAttribute(e):typeof f!="string"&&Qr(r).includes(e)?r[e]=f:r.setAttribute(e,f))}function vr(r){return r.__attributes??(r.__attributes={[Xr]:r.nodeName.includes("-"),[Jr]:r.namespaceURI===Gr})}var nr=new Map;function Qr(r){var e=r.getAttribute("is")||r.nodeName,f=nr.get(e);if(f)return f;nr.set(e,f=[]);for(var a,n=r,s=Element.prototype;s!==n;){a=Ur(n);for(var u in a)a[u].set&&f.push(u);n=zr(n)}return f}export{ir as a,fe as b,xr as c,mr as e,jr as i,ee as r,re as s,yr as t};
|
||||
Binary file not shown.
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/9-jplUL5.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/9-jplUL5.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{q as T,v as o,w as h,E as b,V as p,W as v,X as A,Y as E,N as R,M as l}from"./CW7md74C.js";import{B as g}from"./DExHDOmW.js";function S(t,u,_=!1){o&&h();var n=new g(t),c=_?b:0;function i(a,r){if(o){const e=p(t);var s;if(e===v?s=0:e===A?s=!1:s=parseInt(e.substring(1)),a!==s){var f=E();R(f),n.anchor=f,l(!1),n.ensure(a,r),l(!0);return}}n.ensure(a,r)}T(()=>{var a=!1;u((r,s=0)=>{a=!0,i(s,r)}),a||i(!1,null)},c)}export{S as i};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/9-jplUL5.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/9-jplUL5.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/9-jplUL5.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/9-jplUL5.js.gz
Normal file
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/BFpewGai.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/BFpewGai.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{b as s,w as g}from"./D90q9c2i.js";const v=200;function $(){const{subscribe:e,set:n,update:t}=g({connected:!1,reconnecting:!1,events:[],lastHeartbeat:null,error:null});let o=null,a=null,d=0;function m(l){const i=l||(window.location.port==="5173"?`ws://${window.location.hostname}:3927/ws`:`ws://${window.location.host}/ws`);if((o==null?void 0:o.readyState)!==WebSocket.OPEN)try{o=new WebSocket(i),o.onopen=()=>{d=0,t(r=>({...r,connected:!0,reconnecting:!1,error:null}))},o.onmessage=r=>{try{const u=JSON.parse(r.data);t(f=>{if(u.type==="Heartbeat")return{...f,lastHeartbeat:u};const h=[u,...f.events].slice(0,v);return{...f,events:h}})}catch(u){console.warn("[vestige] Failed to parse WebSocket message:",u)}},o.onclose=()=>{t(r=>({...r,connected:!1})),p(i)},o.onerror=()=>{t(r=>({...r,error:"WebSocket connection failed"}))}}catch(r){t(u=>({...u,error:String(r)}))}}function p(l){a&&clearTimeout(a),t(r=>({...r,reconnecting:!0}));const i=Math.min(1e3*2**d,3e4);d++,a=setTimeout(()=>m(l),i)}function b(){a&&(clearTimeout(a),a=null),o&&(o.onclose=null,o.onerror=null,o.onmessage=null,o.close()),o=null,n({connected:!1,reconnecting:!1,events:[],lastHeartbeat:null,error:null})}function w(){t(l=>({...l,events:[]}))}function y(l){t(i=>{const r=[l,...i.events].slice(0,v);return{...i,events:r}})}return{subscribe:e,connect:m,disconnect:b,clearEvents:w,injectEvent:y}}const c=$(),S=s(c,e=>e.connected),H=s(c,e=>e.reconnecting),T=s(c,e=>e.events);s(c,e=>e.lastHeartbeat);const M=s(c,e=>{var n,t;return((t=(n=e.lastHeartbeat)==null?void 0:n.data)==null?void 0:t.memory_count)??0}),k=s(c,e=>{var n,t;return((t=(n=e.lastHeartbeat)==null?void 0:n.data)==null?void 0:t.avg_retention)??0}),_=s(c,e=>{var n,t;return((t=(n=e.lastHeartbeat)==null?void 0:n.data)==null?void 0:t.suppressed_count)??0}),W=s(c,e=>{var n,t;return((t=(n=e.lastHeartbeat)==null?void 0:n.data)==null?void 0:t.uptime_secs)??0}),N=s(c,e=>e.events.filter(n=>n.type==="TraceEvent")),P=s(c,e=>{var t;const n=e.events.find(o=>o.type==="TraceEvent");return((t=n==null?void 0:n.data)==null?void 0:t.run_id)??null}),R=s(c,e=>e.events.find(n=>n.type==="TraceEvent")??null),C=s(c,e=>e.events.filter(n=>n.type==="MemoryPrOpened"||n.type==="MemoryPrDecided"));function F(e){if(!Number.isFinite(e)||e<0)return"—";const n=Math.floor(e/86400),t=Math.floor(e%86400/3600),o=Math.floor(e%3600/60),a=Math.floor(e%60);return n>0?t>0?`${n}d ${t}h`:`${n}d`:t>0?o>0?`${t}h ${o}m`:`${t}h`:o>0?a>0?`${o}m ${a}s`:`${o}m`:`${a}s`}export{k as a,M as b,H as c,P as d,T as e,F as f,S as i,R as l,C as m,_ as s,N as t,W as u,c as w};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/BFpewGai.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BFpewGai.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BFpewGai.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BFpewGai.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
import{w as N,g as T}from"./D8mhvFt8.js";import{e as E}from"./BhIgFntf.js";import{E as p}from"./CcUbQ_Wl.js";const y=4,R=5500,F=1500;function x(){const{subscribe:b,update:u}=N([]);let m=1,f=0;const c=new Map,a=new Map,l=new Map;function w(e,s){l.set(e,Date.now());const t=setTimeout(()=>{c.delete(e),l.delete(e),h(e)},s);c.set(e,t)}function g(e){const s=m++,t=Date.now(),o={id:s,createdAt:t,...e};u(n=>{const r=[o,...n];if(r.length>y){for(const i of r.slice(y)){const d=c.get(i.id);d&&clearTimeout(d),c.delete(i.id),a.delete(i.id),l.delete(i.id)}return r.slice(0,y)}return r}),w(s,e.dwellMs)}function h(e){const s=c.get(e);s&&(clearTimeout(s),c.delete(e)),a.delete(e),l.delete(e),u(t=>t.filter(o=>o.id!==e))}function D(e,s){const t=c.get(e);if(!t)return;clearTimeout(t),c.delete(e);const o=l.get(e)??Date.now(),n=Date.now()-o,r=Math.max(200,s-n);a.set(e,{remaining:r})}function C(e){const s=a.get(e);s&&(a.delete(e),w(e,s.remaining))}function S(){for(const e of c.values())clearTimeout(e);c.clear(),a.clear(),l.clear(),u(()=>[])}function _(e){const s=p[e.type]??"#818CF8",t=e.data;switch(e.type){case"DreamCompleted":{const o=Number(t.memories_replayed??0),n=Number(t.connections_found??0),r=Number(t.insights_generated??0),i=Number(t.duration_ms??0),d=[];return d.push(`Replayed ${o} ${o===1?"memory":"memories"}`),n>0&&d.push(`${n} new connection${n===1?"":"s"}`),r>0&&d.push(`${r} insight${r===1?"":"s"}`),{type:e.type,title:"Dream consolidated",body:`${d.join(" · ")} in ${(i/1e3).toFixed(1)}s`,color:s,dwellMs:7e3}}case"ConsolidationCompleted":{const o=Number(t.nodes_processed??0),n=Number(t.decay_applied??0),r=Number(t.embeddings_generated??0),i=Number(t.duration_ms??0),d=[];return n>0&&d.push(`${n} decayed`),r>0&&d.push(`${r} embedded`),{type:e.type,title:"Consolidation swept",body:`${o} node${o===1?"":"s"}${d.length?" · "+d.join(" · "):""} in ${(i/1e3).toFixed(1)}s`,color:s,dwellMs:6e3}}case"ConnectionDiscovered":{const o=Date.now();if(o-f<F)return null;f=o;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:s,dwellMs:4500}}case"MemoryPromoted":{const o=Number(t.new_retention??0);return{type:e.type,title:"Memory promoted",body:`retention ${(o*100).toFixed(0)}%`,color:s,dwellMs:4500}}case"MemoryDemoted":{const o=Number(t.new_retention??0);return{type:e.type,title:"Memory demoted",body:`retention ${(o*100).toFixed(0)}%`,color:s,dwellMs:4500}}case"MemorySuppressed":{const o=Number(t.suppression_count??0),n=Number(t.estimated_cascade??0);return{type:e.type,title:"Forgetting",body:n>0?`suppression #${o} · Rac1 cascade ~${n} neighbors`:`suppression #${o}`,color:s,dwellMs:5500}}case"MemoryUnsuppressed":{const o=Number(t.remaining_count??0);return{type:e.type,title:"Recovered",body:o>0?`${o} suppression${o===1?"":"s"} remain`:"fully unsuppressed",color:s,dwellMs:5e3}}case"Rac1CascadeSwept":{const o=Number(t.seeds??0),n=Number(t.neighbors_affected??0);return{type:e.type,title:"Rac1 cascade",body:`${o} seed${o===1?"":"s"} · ${n} dendritic spine${n===1?"":"s"} pruned`,color:s,dwellMs:6e3}}case"MemoryDeleted":return{type:e.type,title:"Memory deleted",body:String(t.id??"").slice(0,8),color:s,dwellMs:4e3};case"HookVerdictRecorded":{const o=String(t.verdict??"NOTE"),n=String(t.reason??"Sanhedrin receipt updated");return{type:e.type,title:`Sanhedrin ${o}`,body:n,color:s,dwellMs:o==="VETO"?8e3:R}}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 M=null;return E.subscribe(e=>{if(e.length===0)return;const s=[];for(const t of e){if(t===M)break;s.push(t)}if(s.length!==0){M=e[0];for(let t=s.length-1;t>=0;t--){const o=_(s[t]);o&&g(o)}}}),{subscribe:b,dismiss:h,clear:S,pauseDwell:D,resumeDwell:C,push:g}}const $=x();function I(){[{type:"DreamCompleted",title:"Dream consolidated",body:"Replayed 127 memories · 43 new connections · 5 insights in 2.4s",color:p.DreamCompleted,dwellMs:7e3},{type:"ConnectionDiscovered",title:"Bridge discovered",body:"semantic · weight 0.87",color:p.ConnectionDiscovered,dwellMs:4500},{type:"MemorySuppressed",title:"Forgetting",body:"suppression #2 · Rac1 cascade ~8 neighbors",color:p.MemorySuppressed,dwellMs:5500},{type:"ConsolidationCompleted",title:"Consolidation swept",body:"892 nodes · 156 decayed · 48 embedded in 1.1s",color:p.ConsolidationCompleted,dwellMs:6e3}].forEach((u,m)=>{setTimeout(()=>{$.push(u)},m*800)}),T($)}export{I as f,$ as t};
|
||||
import{w as N,g as T}from"./D90q9c2i.js";import{e as E}from"./BFpewGai.js";import{E as p}from"./CcUbQ_Wl.js";const y=4,R=5500,F=1500;function x(){const{subscribe:b,update:u}=N([]);let m=1,f=0;const c=new Map,a=new Map,l=new Map;function w(e,s){l.set(e,Date.now());const t=setTimeout(()=>{c.delete(e),l.delete(e),h(e)},s);c.set(e,t)}function g(e){const s=m++,t=Date.now(),o={id:s,createdAt:t,...e};u(n=>{const r=[o,...n];if(r.length>y){for(const i of r.slice(y)){const d=c.get(i.id);d&&clearTimeout(d),c.delete(i.id),a.delete(i.id),l.delete(i.id)}return r.slice(0,y)}return r}),w(s,e.dwellMs)}function h(e){const s=c.get(e);s&&(clearTimeout(s),c.delete(e)),a.delete(e),l.delete(e),u(t=>t.filter(o=>o.id!==e))}function D(e,s){const t=c.get(e);if(!t)return;clearTimeout(t),c.delete(e);const o=l.get(e)??Date.now(),n=Date.now()-o,r=Math.max(200,s-n);a.set(e,{remaining:r})}function C(e){const s=a.get(e);s&&(a.delete(e),w(e,s.remaining))}function S(){for(const e of c.values())clearTimeout(e);c.clear(),a.clear(),l.clear(),u(()=>[])}function _(e){const s=p[e.type]??"#818CF8",t=e.data;switch(e.type){case"DreamCompleted":{const o=Number(t.memories_replayed??0),n=Number(t.connections_found??0),r=Number(t.insights_generated??0),i=Number(t.duration_ms??0),d=[];return d.push(`Replayed ${o} ${o===1?"memory":"memories"}`),n>0&&d.push(`${n} new connection${n===1?"":"s"}`),r>0&&d.push(`${r} insight${r===1?"":"s"}`),{type:e.type,title:"Dream consolidated",body:`${d.join(" · ")} in ${(i/1e3).toFixed(1)}s`,color:s,dwellMs:7e3}}case"ConsolidationCompleted":{const o=Number(t.nodes_processed??0),n=Number(t.decay_applied??0),r=Number(t.embeddings_generated??0),i=Number(t.duration_ms??0),d=[];return n>0&&d.push(`${n} decayed`),r>0&&d.push(`${r} embedded`),{type:e.type,title:"Consolidation swept",body:`${o} node${o===1?"":"s"}${d.length?" · "+d.join(" · "):""} in ${(i/1e3).toFixed(1)}s`,color:s,dwellMs:6e3}}case"ConnectionDiscovered":{const o=Date.now();if(o-f<F)return null;f=o;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:s,dwellMs:4500}}case"MemoryPromoted":{const o=Number(t.new_retention??0);return{type:e.type,title:"Memory promoted",body:`retention ${(o*100).toFixed(0)}%`,color:s,dwellMs:4500}}case"MemoryDemoted":{const o=Number(t.new_retention??0);return{type:e.type,title:"Memory demoted",body:`retention ${(o*100).toFixed(0)}%`,color:s,dwellMs:4500}}case"MemorySuppressed":{const o=Number(t.suppression_count??0),n=Number(t.estimated_cascade??0);return{type:e.type,title:"Forgetting",body:n>0?`suppression #${o} · Rac1 cascade ~${n} neighbors`:`suppression #${o}`,color:s,dwellMs:5500}}case"MemoryUnsuppressed":{const o=Number(t.remaining_count??0);return{type:e.type,title:"Recovered",body:o>0?`${o} suppression${o===1?"":"s"} remain`:"fully unsuppressed",color:s,dwellMs:5e3}}case"Rac1CascadeSwept":{const o=Number(t.seeds??0),n=Number(t.neighbors_affected??0);return{type:e.type,title:"Rac1 cascade",body:`${o} seed${o===1?"":"s"} · ${n} dendritic spine${n===1?"":"s"} pruned`,color:s,dwellMs:6e3}}case"MemoryDeleted":return{type:e.type,title:"Memory deleted",body:String(t.id??"").slice(0,8),color:s,dwellMs:4e3};case"HookVerdictRecorded":{const o=String(t.verdict??"NOTE"),n=String(t.reason??"Sanhedrin receipt updated");return{type:e.type,title:`Sanhedrin ${o}`,body:n,color:s,dwellMs:o==="VETO"?8e3:R}}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 M=null;return E.subscribe(e=>{if(e.length===0)return;const s=[];for(const t of e){if(t===M)break;s.push(t)}if(s.length!==0){M=e[0];for(let t=s.length-1;t>=0;t--){const o=_(s[t]);o&&g(o)}}}),{subscribe:b,dismiss:h,clear:S,pauseDwell:D,resumeDwell:C,push:g}}const $=x();function I(){[{type:"DreamCompleted",title:"Dream consolidated",body:"Replayed 127 memories · 43 new connections · 5 insights in 2.4s",color:p.DreamCompleted,dwellMs:7e3},{type:"ConnectionDiscovered",title:"Bridge discovered",body:"semantic · weight 0.87",color:p.ConnectionDiscovered,dwellMs:4500},{type:"MemorySuppressed",title:"Forgetting",body:"suppression #2 · Rac1 cascade ~8 neighbors",color:p.MemorySuppressed,dwellMs:5500},{type:"ConsolidationCompleted",title:"Consolidation swept",body:"892 nodes · 156 decayed · 48 embedded in 1.1s",color:p.ConsolidationCompleted,dwellMs:6e3}].forEach((u,m)=>{setTimeout(()=>{$.push(u)},m*800)}),T($)}export{I as f,$ as t};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/BGTfzpXY.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BGTfzpXY.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BGTfzpXY.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BGTfzpXY.js.gz
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{t as b}from"./60_R_Vbt.js";import{G as c}from"./wpu9U-D0.js";function A(i,u={},r,f){for(var a in r){var o=r[a];u[a]!==o&&(r[a]==null?i.style.removeProperty(a):i.style.setProperty(a,o,f))}}function P(i,u,r,f){var a=i.__style;if(c||a!==u){var o=b(u,f);(!c||o!==i.getAttribute("style"))&&(o==null?i.removeAttribute("style"):i.style.cssText=o),i.__style=u}else f&&(Array.isArray(f)?(A(i,r==null?void 0:r[0],f[0]),A(i,r==null?void 0:r[1],f[1],"important")):A(i,r,f));return f}export{P as s};
|
||||
import{t as b}from"./Cc0l8Nd4.js";import{v as c}from"./CW7md74C.js";function A(i,u={},r,f){for(var a in r){var o=r[a];u[a]!==o&&(r[a]==null?i.style.removeProperty(a):i.style.setProperty(a,o,f))}}function P(i,u,r,f){var a=i.__style;if(c||a!==u){var o=b(u,f);(!c||o!==i.getAttribute("style"))&&(o==null?i.removeAttribute("style"):i.style.cssText=o),i.__style=u}else f&&(Array.isArray(f)?(A(i,r==null?void 0:r[0],f[0]),A(i,r==null?void 0:r[1],f[1],"important")):A(i,r,f));return f}export{P as s};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/BNUnVJrY.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BNUnVJrY.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BNUnVJrY.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BNUnVJrY.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
var B=Object.defineProperty;var g=i=>{throw TypeError(i)};var F=(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)=>F(i,typeof e!="symbol"?e+"":e,s),M=(i,e,s)=>e.has(i)||g("Cannot "+s);var t=(i,e,s)=>(M(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),y=(i,e,s,a)=>(M(i,e,"write to private field"),a?a.call(i,s):e.set(i,s),s);import{w as D,Y as C,Z as k,_ as G,D as x,$ as A,G as S,M as Y,a0 as Z,a1 as $}from"./wpu9U-D0.js";var r,n,h,u,p,_,v;class z{constructor(e,s=!0){w(this,"anchor");l(this,r,new Map);l(this,n,new Map);l(this,h,new Map);l(this,u,new Set);l(this,p,!0);l(this,_,()=>{var e=D;if(t(this,r).has(e)){var s=t(this,r).get(e),a=t(this,n).get(s);if(a)C(a),t(this,u).delete(s);else{var c=t(this,h).get(s);c&&(t(this,n).set(s,c.effect),t(this,h).delete(s),c.fragment.lastChild.remove(),this.anchor.before(c.fragment),a=c.effect)}for(const[f,o]of t(this,r)){if(t(this,r).delete(f),f===e)break;const d=t(this,h).get(o);d&&(k(d.effect),t(this,h).delete(o))}for(const[f,o]of t(this,n)){if(f===s||t(this,u).has(f))continue;const d=()=>{if(Array.from(t(this,r).values()).includes(f)){var b=document.createDocumentFragment();Z(o,b),b.append(x()),t(this,h).set(f,{effect:o,fragment:b})}else k(o);t(this,u).delete(f),t(this,n).delete(f)};t(this,p)||!a?(t(this,u).add(f),G(o,d,!1)):d()}}});l(this,v,e=>{t(this,r).delete(e);const s=Array.from(t(this,r).values());for(const[a,c]of t(this,h))s.includes(a)||(k(c.effect),t(this,h).delete(a))});this.anchor=e,y(this,p,s)}ensure(e,s){var a=D,c=$();if(s&&!t(this,n).has(e)&&!t(this,h).has(e))if(c){var f=document.createDocumentFragment(),o=x();f.append(o),t(this,h).set(e,{effect:A(()=>s(o)),fragment:f})}else t(this,n).set(e,A(()=>s(this.anchor)));if(t(this,r).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,h))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=Y),t(this,_).call(this)}}r=new WeakMap,n=new WeakMap,h=new WeakMap,u=new WeakMap,p=new WeakMap,_=new WeakMap,v=new WeakMap;export{z as B};
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
import{b as c,w as g}from"./D8mhvFt8.js";const v=200;function $(){const{subscribe:e,set:n,update:t}=g({connected:!1,reconnecting:!1,events:[],lastHeartbeat:null,error:null});let o=null,s=null,d=0;function m(i){const l=i||(window.location.port==="5173"?`ws://${window.location.hostname}:3927/ws`:`ws://${window.location.host}/ws`);if((o==null?void 0:o.readyState)!==WebSocket.OPEN)try{o=new WebSocket(l),o.onopen=()=>{d=0,t(r=>({...r,connected:!0,reconnecting:!1,error:null}))},o.onmessage=r=>{try{const u=JSON.parse(r.data);t(f=>{if(u.type==="Heartbeat")return{...f,lastHeartbeat:u};const w=[u,...f.events].slice(0,v);return{...f,events:w}})}catch(u){console.warn("[vestige] Failed to parse WebSocket message:",u)}},o.onclose=()=>{t(r=>({...r,connected:!1})),p(l)},o.onerror=()=>{t(r=>({...r,error:"WebSocket connection failed"}))}}catch(r){t(u=>({...u,error:String(r)}))}}function p(i){s&&clearTimeout(s),t(r=>({...r,reconnecting:!0}));const l=Math.min(1e3*2**d,3e4);d++,s=setTimeout(()=>m(i),l)}function b(){s&&clearTimeout(s),o==null||o.close(),o=null,n({connected:!1,reconnecting:!1,events:[],lastHeartbeat:null,error:null})}function y(){t(i=>({...i,events:[]}))}function h(i){t(l=>{const r=[i,...l.events].slice(0,v);return{...l,events:r}})}return{subscribe:e,connect:m,disconnect:b,clearEvents:y,injectEvent:h}}const a=$(),S=c(a,e=>e.connected),H=c(a,e=>e.reconnecting),T=c(a,e=>e.events);c(a,e=>e.lastHeartbeat);const M=c(a,e=>{var n,t;return((t=(n=e.lastHeartbeat)==null?void 0:n.data)==null?void 0:t.memory_count)??0}),k=c(a,e=>{var n,t;return((t=(n=e.lastHeartbeat)==null?void 0:n.data)==null?void 0:t.avg_retention)??0}),_=c(a,e=>{var n,t;return((t=(n=e.lastHeartbeat)==null?void 0:n.data)==null?void 0:t.suppressed_count)??0}),W=c(a,e=>{var n,t;return((t=(n=e.lastHeartbeat)==null?void 0:n.data)==null?void 0:t.uptime_secs)??0}),N=c(a,e=>e.events.filter(n=>n.type==="TraceEvent")),P=c(a,e=>{var t;const n=e.events.find(o=>o.type==="TraceEvent");return((t=n==null?void 0:n.data)==null?void 0:t.run_id)??null}),R=c(a,e=>e.events.find(n=>n.type==="TraceEvent")??null),C=c(a,e=>e.events.filter(n=>n.type==="MemoryPrOpened"||n.type==="MemoryPrDecided"));function F(e){if(!Number.isFinite(e)||e<0)return"—";const n=Math.floor(e/86400),t=Math.floor(e%86400/3600),o=Math.floor(e%3600/60),s=Math.floor(e%60);return n>0?t>0?`${n}d ${t}h`:`${n}d`:t>0?o>0?`${t}h ${o}m`:`${t}h`:o>0?s>0?`${o}m ${s}s`:`${o}m`:`${s}s`}export{k as a,M as b,H as c,P as d,T as e,F as f,S as i,R as l,C as m,_ as s,N as t,W as u,a as w};
|
||||
Binary file not shown.
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/BjbQ7qSx.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/BjbQ7qSx.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{ac as R,ad as U,g as o,B,ae as N,i as A,af as y,ag as M,ah as Y,d as $,ai as h,aj as q,ak as w,al as x,R as j,am as p,an as z,ao as C,a8 as G,ap as Z,aq as F,U as H,ar as J}from"./CW7md74C.js";import{c as K,g as Q}from"./D90q9c2i.js";let v=!1,g=Symbol();function k(e,r,i){const n=i[r]??(i[r]={store:null,source:U(void 0),unsubscribe:R});if(n.store!==e&&!(g in i))if(n.unsubscribe(),n.store=e??null,e==null)n.source.v=void 0,n.unsubscribe=R;else{var u=!0;n.unsubscribe=K(e,t=>{u?n.source.v=t:A(n.source,t)}),u=!1}return e&&g in i?Q(e):o(n.source)}function ee(){const e={};function r(){B(()=>{for(var i in e)e[i].unsubscribe();N(e,g,{enumerable:!1,value:!0})})}return[e,r]}function V(e){var r=v;try{return v=!1,[e(),v]}finally{v=r}}function re(e,r,i,n){var E;var u=!p||(i&z)!==0,t=(i&x)!==0,T=(i&F)!==0,f=n,b=!0,P=()=>(b&&(b=!1,f=T?j(n):n),f),d;if(t){var m=H in e||J in e;d=((E=y(e,r))==null?void 0:E.set)??(m&&r in e?a=>e[r]=a:void 0)}var _,I=!1;t?[_,I]=V(()=>e[r]):_=e[r],_===void 0&&n!==void 0&&(_=P(),d&&(u&&M(),d(_)));var s;if(u?s=()=>{var a=e[r];return a===void 0?P():(b=!0,a)}:s=()=>{var a=e[r];return a!==void 0&&(f=void 0),a===void 0?f:a},u&&(i&Y)===0)return s;if(d){var D=e.$$legacy;return(function(a,c){return arguments.length>0?((!u||!c||D||I)&&d(c?s():a),a):s()})}var S=!1,l=((i&C)!==0?G:Z)(()=>(S=!1,s()));t&&o(l);var L=q;return(function(a,c){if(arguments.length>0){const O=c?o(l):u&&t?$(a):a;return A(l,O),S=!0,f!==void 0&&(f=O),a}return h&&S||(L.f&w)!==0?l.v:o(l)})}export{ee as a,re as p,k as s};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/BjbQ7qSx.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BjbQ7qSx.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/BjbQ7qSx.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/BjbQ7qSx.js.gz
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
import{ab as R,ac as y,g as o,y as N,ad as U,i as A,ae as B,af as M,ag as Y,d as $,ah as h,ai as q,aj as w,ak as x,P as j,al as p,am as z,an as C,a7 as G,ao as Z,ap as F,S as H,aq as J}from"./wpu9U-D0.js";import{c as K,g as Q}from"./D8mhvFt8.js";let v=!1,g=Symbol();function k(e,r,i){const n=i[r]??(i[r]={store:null,source:y(void 0),unsubscribe:R});if(n.store!==e&&!(g in i))if(n.unsubscribe(),n.store=e??null,e==null)n.source.v=void 0,n.unsubscribe=R;else{var u=!0;n.unsubscribe=K(e,t=>{u?n.source.v=t:A(n.source,t)}),u=!1}return e&&g in i?Q(e):o(n.source)}function ee(){const e={};function r(){N(()=>{for(var i in e)e[i].unsubscribe();U(e,g,{enumerable:!1,value:!0})})}return[e,r]}function V(e){var r=v;try{return v=!1,[e(),v]}finally{v=r}}function re(e,r,i,n){var E;var u=!p||(i&z)!==0,t=(i&x)!==0,T=(i&F)!==0,f=n,b=!0,P=()=>(b&&(b=!1,f=T?j(n):n),f),d;if(t){var m=H in e||J in e;d=((E=B(e,r))==null?void 0:E.set)??(m&&r in e?a=>e[r]=a:void 0)}var _,I=!1;t?[_,I]=V(()=>e[r]):_=e[r],_===void 0&&n!==void 0&&(_=P(),d&&(u&&M(),d(_)));var s;if(u?s=()=>{var a=e[r];return a===void 0?P():(b=!0,a)}:s=()=>{var a=e[r];return a!==void 0&&(f=void 0),a===void 0?f:a},u&&(i&Y)===0)return s;if(d){var D=e.$$legacy;return(function(a,c){return arguments.length>0?((!u||!c||D||I)&&d(c?s():a),a):s()})}var S=!1,l=((i&C)!==0?G:Z)(()=>(S=!1,s()));t&&o(l);var L=q;return(function(a,c){if(arguments.length>0){const O=c?o(l):u&&t?$(a):a;return A(l,O),S=!0,f!==void 0&&(f=O),a}return h&&S||(L.f&w)!==0?l.v:o(l)})}export{ee as a,re as p,k as s};
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/C-rZhKee.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/C-rZhKee.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
const i="/api";async function t(e,o){const r=await fetch(`${i}${e}`,{headers:{"Content-Type":"application/json"},...o});if(!r.ok)throw new Error(`API ${r.status}: ${r.statusText}`);return r.json()}const n={memories:{list:e=>{const o=e?"?"+new URLSearchParams(e).toString():"";return t(`/memories${o}`)},get:e=>t(`/memories/${e}`),delete:e=>t(`/memories/${e}`,{method:"DELETE"}),promote:e=>t(`/memories/${e}/promote`,{method:"POST"}),demote:e=>t(`/memories/${e}/demote`,{method:"POST"}),suppress:(e,o)=>t(`/memories/${e}/suppress`,{method:"POST",body:o?JSON.stringify({reason:o}):void 0}),unsuppress:e=>t(`/memories/${e}/unsuppress`,{method:"POST"})},search:(e,o=20)=>t(`/search?q=${encodeURIComponent(e)}&limit=${o}`),stats:()=>t("/stats"),health:()=>t("/health"),timeline:(e=7,o=200)=>t(`/timeline?days=${e}&limit=${o}`),graph:e=>{const o=e?"?"+new URLSearchParams(Object.entries(e).filter(([,r])=>r!==void 0).map(([r,s])=>[r,String(s)])).toString():"";return t(`/graph${o}`)},dream:()=>t("/dream",{method:"POST"}),explore:(e,o="associations",r,s=10)=>t("/explore",{method:"POST",body:JSON.stringify({from_id:e,action:o,to_id:r,limit:s})}),predict:()=>t("/predict",{method:"POST"}),importance:e=>t("/importance",{method:"POST",body:JSON.stringify({content:e})}),consolidate:()=>t("/consolidate",{method:"POST"}),retentionDistribution:()=>t("/retention-distribution"),duplicates:(e=.8,o=20)=>t(`/duplicates?threshold=${e}&limit=${o}`),contradictions:e=>{const o=e?"?"+new URLSearchParams(Object.entries(e).filter(([,r])=>r!==void 0).map(([r,s])=>[r,String(s)])).toString():"";return t(`/contradictions${o}`)},crossProjectPatterns:()=>t("/patterns/cross-project"),memoryAudit:(e,o=100)=>t(`/memories/${encodeURIComponent(e)}/audit?limit=${o}`),intentions:(e="active")=>t(`/intentions?status=${e}`),deepReference:(e,o=20)=>t("/deep_reference",{method:"POST",body:JSON.stringify({query:e,depth:o})}),sanhedrin:{latest:()=>t("/sanhedrin/latest"),telemetry:(e=7)=>t(`/sanhedrin/telemetry?days=${e}`),appeal:(e,o,r,s)=>t("/sanhedrin/appeal",{method:"POST",body:JSON.stringify({reason:e,note:o,claimId:r,receiptId:s})})},traces:{list:(e=50)=>t(`/traces?limit=${e}`),get:e=>t(`/traces/${encodeURIComponent(e)}`),exportUrl:e=>`${i}/traces/${encodeURIComponent(e)}/export`},receipts:{list:(e=50)=>t(`/receipts?limit=${e}`),listForRun:(e,o=50)=>t(`/receipts?run=${encodeURIComponent(e)}&limit=${o}`),get:e=>t(`/receipts/${encodeURIComponent(e)}`)},memoryPrs:{list:(e,o=100)=>{const r=new URLSearchParams;return e&&r.set("status",e),r.set("limit",String(o)),t(`/memory-prs?${r.toString()}`)},get:e=>t(`/memory-prs/${encodeURIComponent(e)}`),act:(e,o)=>t(`/memory-prs/${encodeURIComponent(e)}/${o}`,{method:"POST"}),getMode:()=>t("/memory-prs/mode"),setMode:e=>t("/memory-prs/mode",{method:"POST",body:JSON.stringify({mode:e})})}};export{n as a};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/C-rZhKee.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C-rZhKee.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/C-rZhKee.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C-rZhKee.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
import{v as s,w as v,x as o,y as c,z as b,A as m,B as h,C as y}from"./wpu9U-D0.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{y as s,z as v,A as o,B as c,C as b,D as m,F as h,G as y}from"./CW7md74C.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};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/C4Tpoo1i.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C4Tpoo1i.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/C4Tpoo1i.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C4Tpoo1i.js.gz
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
1
apps/dashboard/build/_app/immutable/chunks/C98jjAli.js
Normal file
1
apps/dashboard/build/_app/immutable/chunks/C98jjAli.js
Normal file
|
|
@ -0,0 +1 @@
|
|||
import{H as y,q as u,I as _,J as o,v as t,K as g,L as i,M as l,N as d,O as p,P as v}from"./CW7md74C.js";function C(n,r){let s=null,E=t;var a;if(t){s=p;for(var e=v(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{C as h};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/C98jjAli.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C98jjAli.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/C98jjAli.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C98jjAli.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
import{a2 as g,a3 as d,o as c,P as m,a4 as i,a5 as b,g as p,a6 as v,a7 as h,a8 as k}from"./wpu9U-D0.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{a3 as g,a4 as d,x as c,R as m,a5 as i,a6 as b,g as p,a7 as v,a8 as h,a9 as k}from"./CW7md74C.js";function y(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{y as i};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/C9BpaXFO.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C9BpaXFO.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/C9BpaXFO.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/C9BpaXFO.js.gz
Normal file
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
import{v as k,w as f,O as m,P as t,Q as _,G as b,C as i}from"./wpu9U-D0.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};
|
||||
import{y as k,z as f,Q as m,R as t,S as _,v as b,G as y}from"./CW7md74C.js";function S(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=y??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 E(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{E as a,S as b};
|
||||
BIN
apps/dashboard/build/_app/immutable/chunks/CFefTDKL.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CFefTDKL.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/CFefTDKL.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CFefTDKL.js.gz
Normal file
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/CRPZuD1T.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CRPZuD1T.js.br
Normal file
Binary file not shown.
BIN
apps/dashboard/build/_app/immutable/chunks/CRPZuD1T.js.gz
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CRPZuD1T.js.gz
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
apps/dashboard/build/_app/immutable/chunks/CW7md74C.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CW7md74C.js.br
Normal file
Binary file not shown.
Binary file not shown.
|
|
@ -1 +0,0 @@
|
|||
const i="/api";async function t(e,o){const r=await fetch(`${i}${e}`,{headers:{"Content-Type":"application/json"},...o});if(!r.ok)throw new Error(`API ${r.status}: ${r.statusText}`);return r.json()}const n={memories:{list:e=>{const o=e?"?"+new URLSearchParams(e).toString():"";return t(`/memories${o}`)},get:e=>t(`/memories/${e}`),delete:e=>t(`/memories/${e}`,{method:"DELETE"}),promote:e=>t(`/memories/${e}/promote`,{method:"POST"}),demote:e=>t(`/memories/${e}/demote`,{method:"POST"}),suppress:(e,o)=>t(`/memories/${e}/suppress`,{method:"POST",body:o?JSON.stringify({reason:o}):void 0}),unsuppress:e=>t(`/memories/${e}/unsuppress`,{method:"POST"})},search:(e,o=20)=>t(`/search?q=${encodeURIComponent(e)}&limit=${o}`),stats:()=>t("/stats"),health:()=>t("/health"),timeline:(e=7,o=200)=>t(`/timeline?days=${e}&limit=${o}`),graph:e=>{const o=e?"?"+new URLSearchParams(Object.entries(e).filter(([,r])=>r!==void 0).map(([r,s])=>[r,String(s)])).toString():"";return t(`/graph${o}`)},dream:()=>t("/dream",{method:"POST"}),explore:(e,o="associations",r,s=10)=>t("/explore",{method:"POST",body:JSON.stringify({from_id:e,action:o,to_id:r,limit:s})}),predict:()=>t("/predict",{method:"POST"}),importance:e=>t("/importance",{method:"POST",body:JSON.stringify({content:e})}),consolidate:()=>t("/consolidate",{method:"POST"}),retentionDistribution:()=>t("/retention-distribution"),intentions:(e="active")=>t(`/intentions?status=${e}`),deepReference:(e,o=20)=>t("/deep_reference",{method:"POST",body:JSON.stringify({query:e,depth:o})}),sanhedrin:{latest:()=>t("/sanhedrin/latest"),telemetry:(e=7)=>t(`/sanhedrin/telemetry?days=${e}`),appeal:(e,o,r,s)=>t("/sanhedrin/appeal",{method:"POST",body:JSON.stringify({reason:e,note:o,claimId:r,receiptId:s})})},traces:{list:(e=50)=>t(`/traces?limit=${e}`),get:e=>t(`/traces/${encodeURIComponent(e)}`),exportUrl:e=>`${i}/traces/${encodeURIComponent(e)}/export`},receipts:{list:(e=50)=>t(`/receipts?limit=${e}`),listForRun:(e,o=50)=>t(`/receipts?run=${encodeURIComponent(e)}&limit=${o}`),get:e=>t(`/receipts/${encodeURIComponent(e)}`)},memoryPrs:{list:(e,o=100)=>{const r=new URLSearchParams;return e&&r.set("status",e),r.set("limit",String(o)),t(`/memory-prs?${r.toString()}`)},get:e=>t(`/memory-prs/${encodeURIComponent(e)}`),act:(e,o)=>t(`/memory-prs/${encodeURIComponent(e)}/${o}`,{method:"POST"}),getMode:()=>t("/memory-prs/mode"),setMode:e=>t("/memory-prs/mode",{method:"POST",body:JSON.stringify({mode:e})})}};export{n as a};
|
||||
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/CaEJGM7b.js.br
Normal file
BIN
apps/dashboard/build/_app/immutable/chunks/CaEJGM7b.js.br
Normal file
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