hippo-memory 1.70.0 → 1.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +49 -40
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +24 -53
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +24 -60
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +11 -63
- package/dist/store/summaries.js +37 -148
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- package/extensions/openclaw-plugin/index.ts +1 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* - Cost: price provider usage over four buckets (uncached input, cache
|
|
5
|
-
* write, cache read, output). Raw token counts overstate savings when most
|
|
6
|
-
* input is already cache reads, so every dollar claim goes through here.
|
|
7
|
-
* - Uncertainty: paired bootstrap over tasks, cluster bootstrap (tasks that
|
|
8
|
-
* share a repository are not independent), and a paired ratio bootstrap for
|
|
9
|
-
* dollars per resolved task.
|
|
10
|
-
*
|
|
11
|
-
* Deterministic: every resampling function takes a seed, so a published
|
|
12
|
-
* result can be reproduced exactly.
|
|
13
|
-
*/
|
|
1
|
+
/** Statistics and cost accounting for the token-efficiency evals: cost is priced over four buckets (uncached input, cache write, cache read, output).
|
|
2
|
+
* Uncertainty uses paired, cluster (same-repository tasks are not independent) and paired-ratio bootstraps; every resampler takes a seed. */
|
|
14
3
|
/** Token usage for one model call or one whole task, split by how it is billed. */
|
|
15
4
|
export interface Usage {
|
|
16
5
|
/** Input tokens billed at the base input price (not read from or written to a cache). */
|
|
@@ -22,11 +11,7 @@ export interface Usage {
|
|
|
22
11
|
/** Output tokens, including any reasoning tokens the provider bills as output. */
|
|
23
12
|
outputTokens: number;
|
|
24
13
|
}
|
|
25
|
-
/**
|
|
26
|
-
* Prices in dollars per million tokens. Take them from the provider's
|
|
27
|
-
* current price page for the exact model; this module has no built-in
|
|
28
|
-
* prices because they change.
|
|
29
|
-
*/
|
|
14
|
+
/** Prices in dollars per million tokens, taken from the provider's current price page for the exact model; this module has no built-in prices. */
|
|
30
15
|
export interface Prices {
|
|
31
16
|
inputPerMTok: number;
|
|
32
17
|
cacheWritePerMTok: number;
|
|
@@ -37,12 +22,8 @@ export interface Prices {
|
|
|
37
22
|
export declare function addUsage(...usages: Usage[]): Usage;
|
|
38
23
|
/** Dollar cost of `usage` at `prices`. */
|
|
39
24
|
export declare function priceUsage(usage: Usage, prices: Prices): number;
|
|
40
|
-
/**
|
|
41
|
-
*
|
|
42
|
-
* cost in "uncached-equivalent tokens" when no dollar prices are given.
|
|
43
|
-
* Defaults follow Anthropic's published ratios (5-minute cache write 1.25x,
|
|
44
|
-
* cache read 0.1x); pass the ratios for another provider when needed.
|
|
45
|
-
*/
|
|
25
|
+
/** Relative cache-bucket prices against the base input price, for cost in "uncached-equivalent tokens" when no dollar prices are given.
|
|
26
|
+
* Defaults follow Anthropic's ratios (5-minute cache write 1.25x, cache read 0.1x); pass another provider's ratios when needed. */
|
|
46
27
|
export interface CacheRatios {
|
|
47
28
|
write: number;
|
|
48
29
|
read: number;
|
|
@@ -51,10 +32,8 @@ export interface CacheRatios {
|
|
|
51
32
|
export declare const DEFAULT_CACHE_RATIOS: Readonly<CacheRatios>;
|
|
52
33
|
/** Input cost of `usage` in uncached-equivalent tokens (output excluded). */
|
|
53
34
|
export declare function uncachedEquivalentInput(usage: Usage, ratios?: CacheRatios): number;
|
|
54
|
-
/**
|
|
55
|
-
*
|
|
56
|
-
* same stream, on every platform.
|
|
57
|
-
*/
|
|
35
|
+
/** Mulberry32: a small seeded PRNG returning floats in [0, 1). Same seed,
|
|
36
|
+
* same stream, on every platform. */
|
|
58
37
|
export declare function seededRandom(seed: number): () => number;
|
|
59
38
|
/** A point estimate with a percentile bootstrap confidence interval. */
|
|
60
39
|
export interface Estimate {
|
|
@@ -73,17 +52,9 @@ export interface BootstrapOpts {
|
|
|
73
52
|
/** PRNG seed. Default 1. */
|
|
74
53
|
seed?: number;
|
|
75
54
|
}
|
|
76
|
-
/**
|
|
77
|
-
* Paired bootstrap for the mean of per-task differences (treatment minus
|
|
78
|
-
* control on the same task). An interval that excludes zero is the bar for
|
|
79
|
-
* calling a difference real.
|
|
80
|
-
*/
|
|
55
|
+
/** Paired bootstrap for the mean of per-task differences (treatment minus control, same task); an interval excluding zero is the bar for a real difference. */
|
|
81
56
|
export declare function pairedBootstrap(diffs: number[], opts?: BootstrapOpts): Estimate;
|
|
82
|
-
/**
|
|
83
|
-
* Cluster bootstrap for the mean of per-task differences: resamples whole
|
|
84
|
-
* clusters (for example all tasks from one repository), because tasks in a
|
|
85
|
-
* cluster share causes and are not independent draws.
|
|
86
|
-
*/
|
|
57
|
+
/** Cluster bootstrap for the mean of per-task differences: resamples whole clusters (e.g. one repository), because tasks in a cluster are not independent. */
|
|
87
58
|
export declare function clusteredPairedBootstrap(diffsByCluster: ReadonlyMap<string, number[]>, opts?: BootstrapOpts): Estimate;
|
|
88
59
|
/** One task's outcome in one arm, for {@link costPerResolvedDelta}. */
|
|
89
60
|
export interface ArmOutcome {
|
|
@@ -101,23 +72,14 @@ export interface CostPerResolvedDelta {
|
|
|
101
72
|
/** (treatment minus control) / control, with its interval. Negative is a saving. */
|
|
102
73
|
relative: Estimate;
|
|
103
74
|
}
|
|
104
|
-
/**
|
|
105
|
-
*
|
|
106
|
-
* bootstrap over tasks (a task is resampled with both of its arm outcomes).
|
|
107
|
-
* `control[i]` and `treatment[i]` must be the same task. Resamples in which
|
|
108
|
-
* an arm resolves nothing are dropped; `iterations` reports how many were
|
|
109
|
-
* kept.
|
|
110
|
-
*/
|
|
75
|
+
/** Cost per resolved task in two arms on the same tasks, with a paired bootstrap (`control[i]` and `treatment[i]` must be the same task).
|
|
76
|
+
* Resamples in which an arm resolves nothing are dropped; `iterations` reports how many were kept. */
|
|
111
77
|
export declare function costPerResolvedDelta(control: ArmOutcome[], treatment: ArmOutcome[], opts?: BootstrapOpts): CostPerResolvedDelta;
|
|
112
|
-
/**
|
|
113
|
-
*
|
|
114
|
-
* NaN when no task has k runs (not measured, which is not the same as 0).
|
|
115
|
-
*/
|
|
78
|
+
/** pass@k: share of tasks with at least one success in their first k runs.
|
|
79
|
+
* NaN when no task has k runs (not measured, which is not the same as 0). */
|
|
116
80
|
export declare function passAtK(runsByTask: boolean[][], k: number): number;
|
|
117
|
-
/**
|
|
118
|
-
*
|
|
119
|
-
* NaN when no task has k runs.
|
|
120
|
-
*/
|
|
81
|
+
/** pass^k: share of tasks whose first k runs all succeed (consistency).
|
|
82
|
+
* NaN when no task has k runs. */
|
|
121
83
|
export declare function passHatK(runsByTask: boolean[][], k: number): number;
|
|
122
84
|
/** All units of one family (tasks by seeds), resampled as one block so seeds stay together. */
|
|
123
85
|
export type Family<T> = readonly T[];
|
package/dist/eval/eval-stats.js
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* - Cost: price provider usage over four buckets (uncached input, cache
|
|
5
|
-
* write, cache read, output). Raw token counts overstate savings when most
|
|
6
|
-
* input is already cache reads, so every dollar claim goes through here.
|
|
7
|
-
* - Uncertainty: paired bootstrap over tasks, cluster bootstrap (tasks that
|
|
8
|
-
* share a repository are not independent), and a paired ratio bootstrap for
|
|
9
|
-
* dollars per resolved task.
|
|
10
|
-
*
|
|
11
|
-
* Deterministic: every resampling function takes a seed, so a published
|
|
12
|
-
* result can be reproduced exactly.
|
|
13
|
-
*/
|
|
1
|
+
/** Statistics and cost accounting for the token-efficiency evals: cost is priced over four buckets (uncached input, cache write, cache read, output).
|
|
2
|
+
* Uncertainty uses paired, cluster (same-repository tasks are not independent) and paired-ratio bootstraps; every resampler takes a seed. */
|
|
14
3
|
const DEFAULT_ITERATIONS = 5000;
|
|
15
4
|
const DEFAULT_TWO_LEVEL_ITERATIONS = 10_000;
|
|
16
5
|
const DEFAULT_ALPHA = 0.05;
|
|
@@ -38,10 +27,8 @@ export const DEFAULT_CACHE_RATIOS = { write: 1.25, read: 0.1 };
|
|
|
38
27
|
export function uncachedEquivalentInput(usage, ratios = DEFAULT_CACHE_RATIOS) {
|
|
39
28
|
return usage.inputTokens + usage.cacheWriteTokens * ratios.write + usage.cacheReadTokens * ratios.read;
|
|
40
29
|
}
|
|
41
|
-
/**
|
|
42
|
-
*
|
|
43
|
-
* same stream, on every platform.
|
|
44
|
-
*/
|
|
30
|
+
/** Mulberry32: a small seeded PRNG returning floats in [0, 1). Same seed,
|
|
31
|
+
* same stream, on every platform. */
|
|
45
32
|
export function seededRandom(seed) {
|
|
46
33
|
let a = seed >>> 0;
|
|
47
34
|
return () => {
|
|
@@ -61,11 +48,7 @@ function percentileInterval(samples, alpha) {
|
|
|
61
48
|
function mean(xs) {
|
|
62
49
|
return xs.length === 0 ? 0 : xs.reduce((s, x) => s + x, 0) / xs.length;
|
|
63
50
|
}
|
|
64
|
-
/**
|
|
65
|
-
* Paired bootstrap for the mean of per-task differences (treatment minus
|
|
66
|
-
* control on the same task). An interval that excludes zero is the bar for
|
|
67
|
-
* calling a difference real.
|
|
68
|
-
*/
|
|
51
|
+
/** Paired bootstrap for the mean of per-task differences (treatment minus control, same task); an interval excluding zero is the bar for a real difference. */
|
|
69
52
|
export function pairedBootstrap(diffs, opts = {}) {
|
|
70
53
|
const iterations = opts.iterations ?? DEFAULT_ITERATIONS;
|
|
71
54
|
const alpha = opts.alpha ?? DEFAULT_ALPHA;
|
|
@@ -82,11 +65,7 @@ export function pairedBootstrap(diffs, opts = {}) {
|
|
|
82
65
|
}
|
|
83
66
|
return { estimate: mean(diffs), ...percentileInterval(samples, alpha), iterations };
|
|
84
67
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Cluster bootstrap for the mean of per-task differences: resamples whole
|
|
87
|
-
* clusters (for example all tasks from one repository), because tasks in a
|
|
88
|
-
* cluster share causes and are not independent draws.
|
|
89
|
-
*/
|
|
68
|
+
/** Cluster bootstrap for the mean of per-task differences: resamples whole clusters (e.g. one repository), because tasks in a cluster are not independent. */
|
|
90
69
|
export function clusteredPairedBootstrap(diffsByCluster, opts = {}) {
|
|
91
70
|
const iterations = opts.iterations ?? DEFAULT_ITERATIONS;
|
|
92
71
|
const alpha = opts.alpha ?? DEFAULT_ALPHA;
|
|
@@ -115,13 +94,8 @@ function costPerResolved(outcomes) {
|
|
|
115
94
|
const cost = outcomes.reduce((s, o) => s + o.cost, 0);
|
|
116
95
|
return resolved === 0 ? Number.POSITIVE_INFINITY : cost / resolved;
|
|
117
96
|
}
|
|
118
|
-
/**
|
|
119
|
-
*
|
|
120
|
-
* bootstrap over tasks (a task is resampled with both of its arm outcomes).
|
|
121
|
-
* `control[i]` and `treatment[i]` must be the same task. Resamples in which
|
|
122
|
-
* an arm resolves nothing are dropped; `iterations` reports how many were
|
|
123
|
-
* kept.
|
|
124
|
-
*/
|
|
97
|
+
/** Cost per resolved task in two arms on the same tasks, with a paired bootstrap (`control[i]` and `treatment[i]` must be the same task).
|
|
98
|
+
* Resamples in which an arm resolves nothing are dropped; `iterations` reports how many were kept. */
|
|
125
99
|
export function costPerResolvedDelta(control, treatment, opts = {}) {
|
|
126
100
|
if (control.length !== treatment.length) {
|
|
127
101
|
throw new Error('control and treatment must list the same tasks in the same order');
|
|
@@ -166,20 +140,16 @@ export function costPerResolvedDelta(control, treatment, opts = {}) {
|
|
|
166
140
|
},
|
|
167
141
|
};
|
|
168
142
|
}
|
|
169
|
-
/**
|
|
170
|
-
*
|
|
171
|
-
* NaN when no task has k runs (not measured, which is not the same as 0).
|
|
172
|
-
*/
|
|
143
|
+
/** pass@k: share of tasks with at least one success in their first k runs.
|
|
144
|
+
* NaN when no task has k runs (not measured, which is not the same as 0). */
|
|
173
145
|
export function passAtK(runsByTask, k) {
|
|
174
146
|
const eligible = runsByTask.filter((r) => r.length >= k);
|
|
175
147
|
if (eligible.length === 0)
|
|
176
148
|
return Number.NaN;
|
|
177
149
|
return eligible.filter((r) => r.slice(0, k).some(Boolean)).length / eligible.length;
|
|
178
150
|
}
|
|
179
|
-
/**
|
|
180
|
-
*
|
|
181
|
-
* NaN when no task has k runs.
|
|
182
|
-
*/
|
|
151
|
+
/** pass^k: share of tasks whose first k runs all succeed (consistency).
|
|
152
|
+
* NaN when no task has k runs. */
|
|
183
153
|
export function passHatK(runsByTask, k) {
|
|
184
154
|
const eligible = runsByTask.filter((r) => r.length >= k);
|
|
185
155
|
if (eligible.length === 0)
|
|
@@ -1,16 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Creates a synthetic memory corpus with known ground truth, runs searches
|
|
5
|
-
* per feature category, and reports per-feature metrics with regression
|
|
6
|
-
* detection against a saved baseline.
|
|
7
|
-
*
|
|
8
|
-
* Design goals:
|
|
9
|
-
* - Zero API calls (no LLM judge, no embeddings)
|
|
10
|
-
* - Deterministic (fixed timestamps, content, IDs)
|
|
11
|
-
* - Fast (<60s for full suite)
|
|
12
|
-
* - Per-feature breakdown so you see exactly what a change helped/hurt
|
|
13
|
-
*/
|
|
1
|
+
/** Self-contained feature eval suite: a synthetic corpus with known ground truth, per-feature metrics and regression detection against a saved baseline.
|
|
2
|
+
* Zero API calls (no LLM judge, no embeddings), deterministic (fixed timestamps, content, IDs) and fast. */
|
|
14
3
|
import { type MemoryEntry } from '../core/memory.js';
|
|
15
4
|
export type FeatureCategory = 'direct-recall' | 'extraction-preference' | 'dag-drilldown' | 'temporal' | 'noise-resistance' | 'multi-hop';
|
|
16
5
|
export interface FeatureTestCase {
|
package/dist/eval/eval-suite.js
CHANGED
|
@@ -1,24 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Creates a synthetic memory corpus with known ground truth, runs searches
|
|
5
|
-
* per feature category, and reports per-feature metrics with regression
|
|
6
|
-
* detection against a saved baseline.
|
|
7
|
-
*
|
|
8
|
-
* Design goals:
|
|
9
|
-
* - Zero API calls (no LLM judge, no embeddings)
|
|
10
|
-
* - Deterministic (fixed timestamps, content, IDs)
|
|
11
|
-
* - Fast (<60s for full suite)
|
|
12
|
-
* - Per-feature breakdown so you see exactly what a change helped/hurt
|
|
13
|
-
*/
|
|
1
|
+
/** Self-contained feature eval suite: a synthetic corpus with known ground truth, per-feature metrics and regression detection against a saved baseline.
|
|
2
|
+
* Zero API calls (no LLM judge, no embeddings), deterministic (fixed timestamps, content, IDs) and fast. */
|
|
14
3
|
import { createMemory, Layer } from '../core/memory.js';
|
|
15
4
|
import { search } from '../search/bm25-search.js';
|
|
16
5
|
import { multihopSearch } from '../search/multihop.js';
|
|
17
6
|
import { mrr, recallAtK, ndcgAtK } from './eval.js';
|
|
18
7
|
import { DAY_MS } from '../util/time.js';
|
|
19
|
-
|
|
20
|
-
// Synthetic corpus — deterministic, no API calls
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
8
|
+
import { pct } from '../util/format.js';
|
|
22
9
|
const BASE_DATE = new Date('2026-01-15T10:00:00Z');
|
|
23
10
|
function dateOffset(days) {
|
|
24
11
|
const d = new Date(BASE_DATE.getTime() + days * DAY_MS);
|
|
@@ -40,28 +27,62 @@ function mem(id, content, opts = {}) {
|
|
|
40
27
|
}
|
|
41
28
|
/** Direct recall: basic keyword matching. */
|
|
42
29
|
function addDirectRecall(entries, cases) {
|
|
43
|
-
entries.push(mem('dr-1', 'The PostgreSQL database migration failed because the users table had a NOT NULL constraint on the email column', {
|
|
44
|
-
|
|
30
|
+
entries.push(mem('dr-1', 'The PostgreSQL database migration failed because the users table had a NOT NULL constraint on the email column', {
|
|
31
|
+
created: dateOffset(1), tags: ['topic:database']
|
|
32
|
+
}), mem('dr-2', 'React component rendering performance improved by 40% after memoizing the expensive computation in useMemo', {
|
|
33
|
+
created: dateOffset(2), tags: ['topic:frontend']
|
|
34
|
+
}), mem('dr-3', 'The API rate limiter should use a sliding window algorithm instead of fixed window to prevent burst traffic', {
|
|
35
|
+
created: dateOffset(3), tags: ['topic:api']
|
|
36
|
+
}), mem('dr-4', 'Docker container memory limits need to be set to 512MB for the worker service to prevent OOM kills', {
|
|
37
|
+
created: dateOffset(4), tags: ['topic:devops']
|
|
38
|
+
}), mem('dr-5', 'The JWT token expiration was set to 24 hours but should be reduced to 1 hour for security compliance', {
|
|
39
|
+
created: dateOffset(5), tags: ['topic:security']
|
|
40
|
+
}), mem('dr-6', 'Webpack bundle size grew to 2.3MB because lodash was imported as a whole instead of cherry-picking', {
|
|
41
|
+
created: dateOffset(6), tags: ['topic:frontend']
|
|
42
|
+
}), mem('dr-7', 'The Redis cache TTL for user sessions should match the JWT expiration to prevent stale sessions', {
|
|
43
|
+
created: dateOffset(7), tags: ['topic:caching']
|
|
44
|
+
}), mem('dr-8', 'GraphQL resolver for nested comments has N+1 query problem solved by DataLoader batching', { created: dateOffset(8), tags: ['topic:api'] }));
|
|
45
|
+
cases.push({
|
|
46
|
+
id: 'dr-q1', category: 'direct-recall', query: 'PostgreSQL migration NOT NULL constraint', expectedIds: ['dr-1'],
|
|
47
|
+
description: 'exact keyword match on DB migration'
|
|
48
|
+
}, {
|
|
49
|
+
id: 'dr-q2', category: 'direct-recall', query: 'React useMemo performance memoizing', expectedIds: ['dr-2'],
|
|
50
|
+
description: 'React performance optimization'
|
|
51
|
+
}, { id: 'dr-q3', category: 'direct-recall', query: 'sliding window rate limiter API', expectedIds: ['dr-3'], description: 'API rate limiting approach' }, { id: 'dr-q4', category: 'direct-recall', query: 'Docker OOM memory limits worker', expectedIds: ['dr-4'], description: 'Docker memory config' }, { id: 'dr-q5', category: 'direct-recall', query: 'JWT token expiration security', expectedIds: ['dr-5'], description: 'JWT security setting' }, { id: 'dr-q6', category: 'direct-recall', query: 'webpack bundle size lodash', expectedIds: ['dr-6'], description: 'bundle size issue' }, { id: 'dr-q7', category: 'direct-recall', query: 'Redis cache TTL session expiration', expectedIds: ['dr-7'], description: 'cache TTL config' }, { id: 'dr-q8', category: 'direct-recall', query: 'GraphQL N+1 DataLoader batching', expectedIds: ['dr-8'], description: 'GraphQL N+1 fix' });
|
|
45
52
|
}
|
|
46
53
|
/** Extraction preference: extracted facts should rank above raw source. */
|
|
47
54
|
function addExtractionPreference(entries, cases) {
|
|
48
|
-
entries.push(mem('ep-src-1', 'speaker:Alice: So we had this big meeting yesterday about the deployment pipeline and Bob mentioned that the staging environment is
|
|
55
|
+
entries.push(mem('ep-src-1', 'speaker:Alice: So we had this big meeting yesterday about the deployment pipeline and Bob mentioned that the staging environment is ' +
|
|
56
|
+
'using Kubernetes 1.28 and we should upgrade to 1.30 before the end of Q2 because of the security patches', {
|
|
49
57
|
created: dateOffset(10), tags: ['speaker:Alice', 'topic:infrastructure', 'session:meeting-1'],
|
|
50
58
|
}), mem('ep-ext-1', 'The staging environment runs Kubernetes 1.28 and needs to be upgraded to 1.30 before end of Q2 for security patches', {
|
|
51
59
|
created: dateOffset(10), layer: Layer.Semantic, tags: ['speaker:Alice', 'topic:infrastructure', 'extracted'],
|
|
52
60
|
extracted_from: 'ep-src-1',
|
|
53
|
-
}), mem('ep-src-2', 'speaker:Bob: Yeah and the thing about the monitoring is that we switched from Datadog to Grafana last month and the alerting rules
|
|
61
|
+
}), mem('ep-src-2', 'speaker:Bob: Yeah and the thing about the monitoring is that we switched from Datadog to Grafana last month and the alerting rules ' +
|
|
62
|
+
'still need to be migrated, Carol was supposed to handle that but she has been busy with the frontend rewrite', {
|
|
54
63
|
created: dateOffset(11), tags: ['speaker:Bob', 'topic:monitoring', 'session:meeting-1'],
|
|
55
|
-
}), mem('ep-ext-2', 'The team switched from Datadog to Grafana last month but alerting rules have not been migrated yet. Carol is responsible but blocked
|
|
64
|
+
}), mem('ep-ext-2', 'The team switched from Datadog to Grafana last month but alerting rules have not been migrated yet. Carol is responsible but blocked ' +
|
|
65
|
+
'by the frontend rewrite.', {
|
|
56
66
|
created: dateOffset(11), layer: Layer.Semantic, tags: ['speaker:Bob', 'topic:monitoring', 'extracted'],
|
|
57
67
|
extracted_from: 'ep-src-2',
|
|
58
|
-
}), mem('ep-src-3', 'speaker:Carol: The login page redesign is almost done, I just need to wire up the OAuth2 PKCE flow with the new identity provider and
|
|
68
|
+
}), mem('ep-src-3', 'speaker:Carol: The login page redesign is almost done, I just need to wire up the OAuth2 PKCE flow with the new identity provider and ' +
|
|
69
|
+
'write the integration tests', {
|
|
59
70
|
created: dateOffset(12), tags: ['speaker:Carol', 'topic:auth', 'session:meeting-2'],
|
|
60
|
-
}), mem('ep-ext-3', 'Carol is nearly done with the login page redesign. Remaining work: wire up OAuth2 PKCE flow with the new identity provider and write
|
|
71
|
+
}), mem('ep-ext-3', 'Carol is nearly done with the login page redesign. Remaining work: wire up OAuth2 PKCE flow with the new identity provider and write ' +
|
|
72
|
+
'integration tests.', {
|
|
61
73
|
created: dateOffset(12), layer: Layer.Semantic, tags: ['speaker:Carol', 'topic:auth', 'extracted'],
|
|
62
74
|
extracted_from: 'ep-src-3',
|
|
63
75
|
}));
|
|
64
|
-
cases.push({
|
|
76
|
+
cases.push({
|
|
77
|
+
id: 'ep-q1', category: 'extraction-preference', query: 'Kubernetes upgrade staging environment', expectedIds: ['ep-ext-1'],
|
|
78
|
+
description: 'extracted fact about K8s upgrade should rank above raw utterance'
|
|
79
|
+
}, {
|
|
80
|
+
id: 'ep-q2', category: 'extraction-preference', query: 'Datadog Grafana alerting migration', expectedIds: ['ep-ext-2'],
|
|
81
|
+
description: 'extracted fact about monitoring switch'
|
|
82
|
+
}, {
|
|
83
|
+
id: 'ep-q3', category: 'extraction-preference', query: 'OAuth2 PKCE login page redesign', expectedIds: ['ep-ext-3'],
|
|
84
|
+
description: 'extracted fact about auth work'
|
|
85
|
+
});
|
|
65
86
|
}
|
|
66
87
|
/** Dag drill-down: summary nodes should surface children. */
|
|
67
88
|
function addDagDrilldown(entries, cases) {
|
|
@@ -74,7 +95,8 @@ function addDagDrilldown(entries, cases) {
|
|
|
74
95
|
}), mem('dag-child-3', 'Batch API endpoint /reports/generate takes 8 seconds because it runs synchronously instead of using a job queue', {
|
|
75
96
|
created: dateOffset(15), layer: Layer.Semantic, tags: ['topic:api-performance', 'extracted'],
|
|
76
97
|
dag_level: 1,
|
|
77
|
-
}), mem('dag-summary-1', 'API performance issues: /users degraded to 300ms (permissions check), /orders spiked to 500ms (missing index), /reports takes 8s
|
|
98
|
+
}), mem('dag-summary-1', 'API performance issues: /users degraded to 300ms (permissions check), /orders spiked to 500ms (missing index), /reports takes 8s ' +
|
|
99
|
+
'(needs job queue)', {
|
|
78
100
|
created: dateOffset(16), layer: Layer.Semantic, tags: ['topic:api-performance'],
|
|
79
101
|
dag_level: 2, dag_parent_id: undefined,
|
|
80
102
|
}));
|
|
@@ -82,12 +104,30 @@ function addDagDrilldown(entries, cases) {
|
|
|
82
104
|
for (const child of [entries.find(e => e.id === 'dag-child-1'), entries.find(e => e.id === 'dag-child-2'), entries.find(e => e.id === 'dag-child-3')]) {
|
|
83
105
|
child.dag_parent_id = 'dag-summary-1';
|
|
84
106
|
}
|
|
85
|
-
cases.push({
|
|
107
|
+
cases.push({
|
|
108
|
+
id: 'dag-q1', category: 'dag-drilldown', query: 'API performance problems latency',
|
|
109
|
+
expectedIds: ['dag-child-1', 'dag-child-2', 'dag-child-3', 'dag-summary-1'], description: 'summary should drill down to all children'
|
|
110
|
+
}, {
|
|
111
|
+
id: 'dag-q2', category: 'dag-drilldown', query: 'endpoint response time degradation',
|
|
112
|
+
expectedIds: ['dag-child-1', 'dag-child-2', 'dag-summary-1'], description: 'query matching summary should surface relevant children'
|
|
113
|
+
});
|
|
86
114
|
}
|
|
87
115
|
/** Temporal: recency/oldest cues should affect ranking. */
|
|
88
116
|
function addTemporal(entries, cases) {
|
|
89
117
|
entries.push(mem('tmp-1', 'The team decided to use TypeScript for the new service', { created: dateOffset(-30), tags: ['topic:architecture'] }), mem('tmp-2', 'The team evaluated Rust as an alternative language for the service', { created: dateOffset(-20), tags: ['topic:architecture'] }), mem('tmp-3', 'The team added Go as a candidate language for the service rewrite', { created: dateOffset(-10), tags: ['topic:architecture'] }), mem('tmp-4', 'The team finalized the language choice as Go for the service rewrite', { created: dateOffset(-1), tags: ['topic:architecture'] }));
|
|
90
|
-
cases.push({
|
|
118
|
+
cases.push({
|
|
119
|
+
id: 'tmp-q1', category: 'temporal', query: 'what did the team recently decide about the service language', expectedIds: ['tmp-4'],
|
|
120
|
+
description: 'recent cue should boost newest entry'
|
|
121
|
+
}, {
|
|
122
|
+
id: 'tmp-q2', category: 'temporal', query: 'what was the first language choice for the service', expectedIds: ['tmp-1'],
|
|
123
|
+
description: 'oldest cue should boost earliest entry'
|
|
124
|
+
}, {
|
|
125
|
+
id: 'tmp-q3', category: 'temporal', query: 'latest update on the service rewrite language', expectedIds: ['tmp-4'],
|
|
126
|
+
description: 'latest should boost most recent'
|
|
127
|
+
}, {
|
|
128
|
+
id: 'tmp-q4', category: 'temporal', query: 'original architecture decision for the service', expectedIds: ['tmp-1'],
|
|
129
|
+
description: 'original should boost earliest'
|
|
130
|
+
});
|
|
91
131
|
}
|
|
92
132
|
/** Noise resistance: relevant memories found despite noise. */
|
|
93
133
|
function addNoiseResistance(entries, cases) {
|
|
@@ -117,7 +157,18 @@ function addNoiseResistance(entries, cases) {
|
|
|
117
157
|
}), mem('nr-2', 'The S3 bucket policy was misconfigured allowing public read access to customer data uploads', {
|
|
118
158
|
created: dateOffset(21), tags: ['topic:security', 'topic:s3'],
|
|
119
159
|
}));
|
|
120
|
-
cases.push({
|
|
160
|
+
cases.push({
|
|
161
|
+
id: 'nr-q1', category: 'noise-resistance', query: 'database connection pool exhausted max connections', expectedIds: ['nr-1'],
|
|
162
|
+
description: 'find DB issue despite 30 noise entries'
|
|
163
|
+
}, {
|
|
164
|
+
id: 'nr-q2', category: 'noise-resistance', query: 'S3 bucket public access security misconfiguration', expectedIds: ['nr-2'],
|
|
165
|
+
description: 'find S3 issue despite noise'
|
|
166
|
+
}, {
|
|
167
|
+
id: 'nr-q3', category: 'noise-resistance', query: 'PostgreSQL migration constraint', expectedIds: ['dr-1'],
|
|
168
|
+
description: 'find earlier DB entry despite noise'
|
|
169
|
+
}, {
|
|
170
|
+
id: 'nr-q4', category: 'noise-resistance', query: 'JWT token security expiration', expectedIds: ['dr-5'], description: 'find security entry despite noise'
|
|
171
|
+
});
|
|
121
172
|
}
|
|
122
173
|
/** Multi-hop: entity chaining across sessions. */
|
|
123
174
|
function addMultiHop(entries, cases) {
|
|
@@ -127,10 +178,17 @@ function addMultiHop(entries, cases) {
|
|
|
127
178
|
created: dateOffset(26), tags: ['speaker:Bob', 'topic:payments'],
|
|
128
179
|
}), mem('mh-3', 'speaker:Alice fixed the Stripe webhook by switching to the production secret key. Payment confirmations now arrive within 2 seconds.', {
|
|
129
180
|
created: dateOffset(27), tags: ['speaker:Alice', 'topic:payments'],
|
|
130
|
-
}), mem('mh-4', 'speaker:Carol reported that the billing dashboard shows incorrect revenue numbers because it reads from the payments_raw table instead of
|
|
181
|
+
}), mem('mh-4', 'speaker:Carol reported that the billing dashboard shows incorrect revenue numbers because it reads from the payments_raw table instead of ' +
|
|
182
|
+
'payments_reconciled.', {
|
|
131
183
|
created: dateOffset(28), tags: ['speaker:Carol', 'topic:billing'],
|
|
132
184
|
}));
|
|
133
|
-
cases.push({
|
|
185
|
+
cases.push({
|
|
186
|
+
id: 'mh-q1', category: 'multi-hop', query: 'Who fixed the Stripe webhook bug and what was the root cause?',
|
|
187
|
+
expectedIds: ['mh-1', 'mh-2', 'mh-3'], description: 'chain Alice -> Stripe -> Bob -> fix'
|
|
188
|
+
}, {
|
|
189
|
+
id: 'mh-q2', category: 'multi-hop', query: 'What are all the payment-related issues the team discussed?',
|
|
190
|
+
expectedIds: ['mh-1', 'mh-2', 'mh-3', 'mh-4'], description: 'find all payment topics across speakers'
|
|
191
|
+
});
|
|
134
192
|
}
|
|
135
193
|
export function buildSyntheticCorpus() {
|
|
136
194
|
const entries = [];
|
|
@@ -197,9 +255,6 @@ export async function runFeatureEval(version) {
|
|
|
197
255
|
durationMs: Date.now() - start,
|
|
198
256
|
};
|
|
199
257
|
}
|
|
200
|
-
// ---------------------------------------------------------------------------
|
|
201
|
-
// Regression detection
|
|
202
|
-
// ---------------------------------------------------------------------------
|
|
203
258
|
const REGRESSION_THRESHOLD = 0.05;
|
|
204
259
|
export function detectRegressions(baseline, current) {
|
|
205
260
|
const regressions = [];
|
|
@@ -227,11 +282,7 @@ export function detectRegressions(baseline, current) {
|
|
|
227
282
|
};
|
|
228
283
|
}
|
|
229
284
|
export function resultToBaseline(result) {
|
|
230
|
-
// SAFETY: every FeatureCategory key
|
|
231
|
-
// below (one iteration per entry in result.features), before this object
|
|
232
|
-
// is read anywhere; result.features is built from every category in
|
|
233
|
-
// buildSyntheticCorpus's cases (runFeatureEval derives `categories` the
|
|
234
|
-
// same way), so no FeatureCategory key is left unset.
|
|
285
|
+
// SAFETY: the loop below sets every FeatureCategory key from result.features, which holds every category in buildSyntheticCorpus's cases.
|
|
235
286
|
const features = {};
|
|
236
287
|
for (const f of result.features) {
|
|
237
288
|
features[f.category] = { mrr: f.mrr, recallAt5: f.recallAt5, ndcgAt5: f.ndcgAt5 };
|
|
@@ -243,12 +294,6 @@ export function resultToBaseline(result) {
|
|
|
243
294
|
overall: result.overall,
|
|
244
295
|
};
|
|
245
296
|
}
|
|
246
|
-
// ---------------------------------------------------------------------------
|
|
247
|
-
// Formatters
|
|
248
|
-
// ---------------------------------------------------------------------------
|
|
249
|
-
function pct(n) {
|
|
250
|
-
return (n * 100).toFixed(1) + '%';
|
|
251
|
-
}
|
|
252
297
|
function pad(s, w) {
|
|
253
298
|
return s.padEnd(w);
|
|
254
299
|
}
|
|
@@ -275,7 +320,8 @@ export function formatResult(result, baseline) {
|
|
|
275
320
|
vsBaseline = deltaStr(delta);
|
|
276
321
|
verdict = delta < -REGRESSION_THRESHOLD ? 'REGRESS' : 'PASS';
|
|
277
322
|
}
|
|
278
|
-
|
|
323
|
+
const cells = [pad(feat.category, 24), pad(pct(feat.mrr), 8), pad(pct(feat.recallAt5), 8), pad(pct(feat.ndcgAt5), 8), pad(vsBaseline, 12), verdict];
|
|
324
|
+
lines.push(cells.join(' | '));
|
|
279
325
|
}
|
|
280
326
|
lines.push('');
|
|
281
327
|
lines.push(`Overall: MRR ${pct(result.overall.mrr)} | R@5 ${pct(result.overall.recallAt5)} | NDCG@5 ${pct(result.overall.ndcgAt5)}`);
|
package/dist/eval/eval.d.ts
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Given a corpus of (query, expected_memory_ids) cases, run recall against
|
|
5
|
-
* the store and report ranking-quality metrics: MRR, Recall@K, NDCG@K.
|
|
6
|
-
*
|
|
7
|
-
* The goal is to make recall quality measurable so MMR lambda, embedding
|
|
8
|
-
* weights, and future scoring tweaks can be tuned against evidence instead
|
|
9
|
-
* of intuition.
|
|
10
|
-
*/
|
|
1
|
+
/** Recall eval harness: runs recall over (query, expected_memory_ids) cases and reports MRR, Recall@K and NDCG@K.
|
|
2
|
+
* It exists so MMR lambda, embedding weights and scoring tweaks are tuned against evidence instead of intuition. */
|
|
11
3
|
import type { MemoryEntry } from '../core/memory.js';
|
|
12
4
|
export interface EvalCase {
|
|
13
5
|
/** Free-form ID for humans to reference the case. */
|
|
@@ -58,10 +50,8 @@ export interface RunEvalOptions {
|
|
|
58
50
|
export declare function mrr(returned: string[], expected: string[]): number;
|
|
59
51
|
/** Recall@K — fraction of expected items found in the top-K. */
|
|
60
52
|
export declare function recallAtK(returned: string[], expected: string[], k: number): number;
|
|
61
|
-
/**
|
|
62
|
-
*
|
|
63
|
-
* gain_i = 1 if returned[i] ∈ expected else 0. discount = log2(i + 2).
|
|
64
|
-
*/
|
|
53
|
+
/** Normalized Discounted Cumulative Gain at K with binary relevance.
|
|
54
|
+
* gain_i = 1 if returned[i] ∈ expected else 0. discount = log2(i + 2). */
|
|
65
55
|
export declare function ndcgAtK(returned: string[], expected: string[], k: number): number;
|
|
66
56
|
export declare function runEval(cases: EvalCase[], entries: MemoryEntry[], options?: RunEvalOptions): Promise<EvalSummary>;
|
|
67
57
|
export interface EvalDelta {
|
|
@@ -88,16 +78,8 @@ export interface EvalComparison {
|
|
|
88
78
|
onlyInBaseline: string[];
|
|
89
79
|
onlyInCurrent: string[];
|
|
90
80
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Compute pairwise deltas between a baseline and a current eval summary.
|
|
93
|
-
* Cases are matched by EvalCase.id; any mismatch is surfaced in the onlyIn
|
|
94
|
-
* arrays so the caller knows the corpora diverged.
|
|
95
|
-
*/
|
|
81
|
+
/** Compute pairwise deltas between a baseline and a current eval summary, matching cases by EvalCase.id; mismatches land in the onlyIn arrays. */
|
|
96
82
|
export declare function compareSummaries(baseline: EvalSummary, current: EvalSummary): EvalComparison;
|
|
97
|
-
/**
|
|
98
|
-
* For each memory, take its first 8 content words as a trivial query and
|
|
99
|
-
* expect that memory back. Useful as a smoke test: if recall can't find a
|
|
100
|
-
* memory by its own opening words, something is broken.
|
|
101
|
-
*/
|
|
83
|
+
/** For each memory, use its first 8 content words as a trivial query and expect that memory back: a smoke test for recall. */
|
|
102
84
|
export declare function bootstrapCorpus(entries: MemoryEntry[], maxCases?: number): EvalCase[];
|
|
103
85
|
//# sourceMappingURL=eval.d.ts.map
|
package/dist/eval/eval.js
CHANGED
|
@@ -1,22 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Given a corpus of (query, expected_memory_ids) cases, run recall against
|
|
5
|
-
* the store and report ranking-quality metrics: MRR, Recall@K, NDCG@K.
|
|
6
|
-
*
|
|
7
|
-
* The goal is to make recall quality measurable so MMR lambda, embedding
|
|
8
|
-
* weights, and future scoring tweaks can be tuned against evidence instead
|
|
9
|
-
* of intuition.
|
|
10
|
-
*/
|
|
1
|
+
/** Recall eval harness: runs recall over (query, expected_memory_ids) cases and reports MRR, Recall@K and NDCG@K.
|
|
2
|
+
* It exists so MMR lambda, embedding weights and scoring tweaks are tuned against evidence instead of intuition. */
|
|
11
3
|
import { hybridSearch } from '../search/hybrid.js';
|
|
12
|
-
import { searchBothHybrid } from '../sharing/
|
|
13
|
-
import { isInitialized } from '../
|
|
4
|
+
import { searchBothHybrid } from '../sharing/search-both.js';
|
|
5
|
+
import { isInitialized } from '../core/project-identity.js';
|
|
14
6
|
// Generous so metrics are not truncated.
|
|
15
7
|
const DEFAULT_EVAL_BUDGET = 100_000;
|
|
16
8
|
const QUERY_WORDS = 8;
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
// Metrics — pure functions. K is inclusive of position K.
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
9
|
/** Mean Reciprocal Rank for a single ranking given expected ids. */
|
|
21
10
|
export function mrr(returned, expected) {
|
|
22
11
|
if (expected.length === 0)
|
|
@@ -41,10 +30,8 @@ export function recallAtK(returned, expected, k) {
|
|
|
41
30
|
}
|
|
42
31
|
return hits / expected.length;
|
|
43
32
|
}
|
|
44
|
-
/**
|
|
45
|
-
*
|
|
46
|
-
* gain_i = 1 if returned[i] ∈ expected else 0. discount = log2(i + 2).
|
|
47
|
-
*/
|
|
33
|
+
/** Normalized Discounted Cumulative Gain at K with binary relevance.
|
|
34
|
+
* gain_i = 1 if returned[i] ∈ expected else 0. discount = log2(i + 2). */
|
|
48
35
|
export function ndcgAtK(returned, expected, k) {
|
|
49
36
|
if (expected.length === 0)
|
|
50
37
|
return 0;
|
|
@@ -63,9 +50,6 @@ export function ndcgAtK(returned, expected, k) {
|
|
|
63
50
|
}
|
|
64
51
|
return idcg === 0 ? 0 : dcg / idcg;
|
|
65
52
|
}
|
|
66
|
-
// ---------------------------------------------------------------------------
|
|
67
|
-
// Runner
|
|
68
|
-
// ---------------------------------------------------------------------------
|
|
69
53
|
export async function runEval(cases, entries, options = {}) {
|
|
70
54
|
const start = Date.now();
|
|
71
55
|
const results = [];
|
|
@@ -117,11 +101,7 @@ function rankForCase(query, entries, options, useBothStores) {
|
|
|
117
101
|
mmrLambda: options.mmrLambda,
|
|
118
102
|
});
|
|
119
103
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Compute pairwise deltas between a baseline and a current eval summary.
|
|
122
|
-
* Cases are matched by EvalCase.id; any mismatch is surfaced in the onlyIn
|
|
123
|
-
* arrays so the caller knows the corpora diverged.
|
|
124
|
-
*/
|
|
104
|
+
/** Compute pairwise deltas between a baseline and a current eval summary, matching cases by EvalCase.id; mismatches land in the onlyIn arrays. */
|
|
125
105
|
export function compareSummaries(baseline, current) {
|
|
126
106
|
const aggregate = {
|
|
127
107
|
mrr: current.meanMrr - baseline.meanMrr,
|
|
@@ -165,14 +145,7 @@ export function compareSummaries(baseline, current) {
|
|
|
165
145
|
onlyInCurrent: [...curById.keys()].filter((id) => !baseById.has(id)),
|
|
166
146
|
};
|
|
167
147
|
}
|
|
168
|
-
|
|
169
|
-
// Bootstrap — generate a synthetic corpus from current memories
|
|
170
|
-
// ---------------------------------------------------------------------------
|
|
171
|
-
/**
|
|
172
|
-
* For each memory, take its first 8 content words as a trivial query and
|
|
173
|
-
* expect that memory back. Useful as a smoke test: if recall can't find a
|
|
174
|
-
* memory by its own opening words, something is broken.
|
|
175
|
-
*/
|
|
148
|
+
/** For each memory, use its first 8 content words as a trivial query and expect that memory back: a smoke test for recall. */
|
|
176
149
|
export function bootstrapCorpus(entries, maxCases = 50) {
|
|
177
150
|
const cases = [];
|
|
178
151
|
for (const e of entries) {
|
package/dist/eval/judgment.d.ts
CHANGED
|
@@ -20,9 +20,6 @@ export interface JudgeOptions {
|
|
|
20
20
|
/** Bounded parallelism for `judgeAll`. */
|
|
21
21
|
concurrency?: number;
|
|
22
22
|
}
|
|
23
|
-
/** `null` on any failure, so a Jev outage degrades capture to today's
|
|
24
|
-
* behaviour instead of blocking the write. */
|
|
25
|
-
export declare function judge(content: string, opts: JudgeOptions): Promise<Judgment | null>;
|
|
26
23
|
/** Judge many candidates under a bounded concurrency pool, order preserved. */
|
|
27
24
|
export declare function judgeAll(contents: readonly string[], opts: JudgeOptions): Promise<(Judgment | null)[]>;
|
|
28
25
|
//# sourceMappingURL=judgment.d.ts.map
|