hippo-memory 1.69.0 → 1.71.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 +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- 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 +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- 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 +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- 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/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- 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 +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- 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 +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- 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 +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → 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 +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- 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/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Trace-layer helpers. A trace is a `MemoryEntry` with `layer === 'trace'`: ordered agent actions and their outcome, stored as markdown in `content`
|
|
2
|
+
* (`renderTraceContent` formats it). */
|
|
3
|
+
export interface TraceStep {
|
|
4
|
+
action: string;
|
|
5
|
+
observation: string;
|
|
6
|
+
timestamp?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface TraceRecord {
|
|
9
|
+
task: string;
|
|
10
|
+
steps: TraceStep[];
|
|
11
|
+
outcome: 'success' | 'failure' | 'partial';
|
|
12
|
+
}
|
|
13
|
+
/** Render a trace record as agent-readable markdown: `Task:`, `Outcome:`, then numbered `Steps:` with each observation on an arrow line (omitted if empty). */
|
|
14
|
+
export declare function renderTraceContent(rec: TraceRecord): string;
|
|
15
|
+
/**
|
|
16
|
+
* Parse a JSON string into an array of TraceStep. Throws on invalid shape.
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseSteps(json: string): TraceStep[];
|
|
19
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -1,22 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* markdown in `content`; `renderTraceContent` is the canonical formatter.
|
|
7
|
-
*/
|
|
8
|
-
import { isJsonString } from './json.js';
|
|
9
|
-
/**
|
|
10
|
-
* Render a trace record as agent-readable markdown.
|
|
11
|
-
*
|
|
12
|
-
* Format:
|
|
13
|
-
* Task: <task>
|
|
14
|
-
* Outcome: <outcome>
|
|
15
|
-
* Steps:
|
|
16
|
-
* 1. <action>
|
|
17
|
-
* → <observation> (omitted if observation is empty)
|
|
18
|
-
* 2. ...
|
|
19
|
-
*/
|
|
1
|
+
/** Trace-layer helpers. A trace is a `MemoryEntry` with `layer === 'trace'`: ordered agent actions and their outcome, stored as markdown in `content`
|
|
2
|
+
* (`renderTraceContent` formats it). */
|
|
3
|
+
import { isJsonString, isJsonObject } from '../util/json.js';
|
|
4
|
+
import { errorMessage } from '../util/log.js';
|
|
5
|
+
/** Render a trace record as agent-readable markdown: `Task:`, `Outcome:`, then numbered `Steps:` with each observation on an arrow line (omitted if empty). */
|
|
20
6
|
export function renderTraceContent(rec) {
|
|
21
7
|
const lines = [];
|
|
22
8
|
lines.push(`Task: ${rec.task}`);
|
|
@@ -30,9 +16,6 @@ export function renderTraceContent(rec) {
|
|
|
30
16
|
});
|
|
31
17
|
return lines.join('\n');
|
|
32
18
|
}
|
|
33
|
-
function isJsonRecord(value) {
|
|
34
|
-
return value !== null && !Array.isArray(value) && typeof value === 'object';
|
|
35
|
-
}
|
|
36
19
|
/**
|
|
37
20
|
* Parse a JSON string into an array of TraceStep. Throws on invalid shape.
|
|
38
21
|
*/
|
|
@@ -42,13 +25,13 @@ export function parseSteps(json) {
|
|
|
42
25
|
parsed = JSON.parse(json);
|
|
43
26
|
}
|
|
44
27
|
catch (err) {
|
|
45
|
-
throw new Error(`Invalid trace steps JSON: ${err
|
|
28
|
+
throw new Error(`Invalid trace steps JSON: ${errorMessage(err)}`, { cause: err });
|
|
46
29
|
}
|
|
47
30
|
if (!Array.isArray(parsed)) {
|
|
48
31
|
throw new Error('trace steps must be an array');
|
|
49
32
|
}
|
|
50
33
|
return parsed.map((s, i) => {
|
|
51
|
-
if (!
|
|
34
|
+
if (!isJsonObject(s)) {
|
|
52
35
|
throw new Error(`trace step ${i}: not an object`);
|
|
53
36
|
}
|
|
54
37
|
const action = s.action;
|
|
@@ -1,30 +1,25 @@
|
|
|
1
|
-
import { isRecallBoostAblated } from '../ablation.js';
|
|
2
|
-
import { Layer, createMemory, markRetrieved } from '../memory.js';
|
|
1
|
+
import { isRecallBoostAblated } from '../core/ablation.js';
|
|
2
|
+
import { Layer, createMemory, markRetrieved } from '../core/memory.js';
|
|
3
3
|
import { findPromotableSessions, traceExistsForSession, listSessionEvents } from '../store/sessions.js';
|
|
4
|
-
import { rejectionDigest
|
|
5
|
-
import { sampleForReplay } from '
|
|
6
|
-
import { renderTraceContent } from '
|
|
7
|
-
import { resolveTenantId } from '../tenant.js';
|
|
8
|
-
import {
|
|
9
|
-
import { commonDerivationScope } from '../recall-scope.js';
|
|
10
|
-
import { log } from '../log.js';
|
|
4
|
+
import { rejectionDigest } from '../store/rejection.js';
|
|
5
|
+
import { sampleForReplay } from './replay.js';
|
|
6
|
+
import { renderTraceContent } from './trace.js';
|
|
7
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
8
|
+
import { reportAuditWriteFailure } from '../store/audit.js';
|
|
9
|
+
import { commonDerivationScope } from '../store/recall-scope.js';
|
|
10
|
+
import { log } from '../util/log.js';
|
|
11
11
|
import { REPLAY_COUNT_DEFAULT } from './run.js';
|
|
12
|
-
import { isJsonString } from '../json.js';
|
|
13
|
-
|
|
14
|
-
// 1.4. Auto-promote complete sessions to traces
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
// For each session within the configured window that has a `session_complete`
|
|
18
|
-
// event and no existing trace (idempotency via the source_session_id column),
|
|
19
|
-
// render the action sequence as markdown and persist a Layer.Trace memory.
|
|
20
|
-
// Traces inherit decay, search, replay, and physics from the base MemoryEntry.
|
|
12
|
+
import { isJsonString } from '../util/json.js';
|
|
13
|
+
import { DAY_MS } from '../util/time.js';
|
|
14
|
+
// 1.4. Auto-promote complete sessions to traces: each session in the window with a `session_complete` event and no trace (idempotent via source_session_id)
|
|
15
|
+
// is rendered as markdown and persisted as a Layer.Trace memory, which inherits decay, search, replay and physics.
|
|
21
16
|
export function promoteSessionTraces(run) {
|
|
22
17
|
const { result } = run;
|
|
23
18
|
if (run.dryRun || run.config.autoTraceCapture === false)
|
|
24
19
|
return;
|
|
25
20
|
let tracesSkippedRejected = 0;
|
|
26
21
|
const windowDays = run.config.autoTraceWindowDays ?? 7;
|
|
27
|
-
const sinceMs = run.now.getTime() - windowDays *
|
|
22
|
+
const sinceMs = run.now.getTime() - windowDays * DAY_MS;
|
|
28
23
|
// Auto-trace runs single-tenant (the env-resolved tenant); consolidating
|
|
29
24
|
// every tenant needs a per-tenant loop layered on top of this.
|
|
30
25
|
const consolidationTenant = resolveTenantId({});
|
|
@@ -66,23 +61,13 @@ function sessionTrace(run, consolidationTenant, sessionId) {
|
|
|
66
61
|
run.result.details.push(` ⏭ skipped session ${sessionId}: events span mixed scopes`);
|
|
67
62
|
return null;
|
|
68
63
|
}
|
|
69
|
-
const
|
|
70
|
-
if (!
|
|
71
|
-
return null; // defence-in-depth; findPromotableSessions filters already.
|
|
72
|
-
const outcomeRaw = completeEvent.content;
|
|
73
|
-
if (outcomeRaw !== 'success' && outcomeRaw !== 'failure' && outcomeRaw !== 'partial') {
|
|
74
|
-
// Malformed terminal event — skip rather than crash the whole sleep.
|
|
64
|
+
const ending = sessionEnding(events);
|
|
65
|
+
if (!ending)
|
|
75
66
|
return null;
|
|
76
|
-
}
|
|
77
|
-
const outcome = outcomeRaw;
|
|
67
|
+
const { outcome, summary } = ending;
|
|
78
68
|
const steps = events
|
|
79
69
|
.filter((e) => e.event_type !== 'session_complete')
|
|
80
70
|
.map((e) => ({ action: e.content, observation: '' }));
|
|
81
|
-
// SAFETY: session event metadata is a free-form Record<string, unknown>
|
|
82
|
-
// bag; summary is optional and is only trusted once isJsonString below
|
|
83
|
-
// confirms it is actually a string.
|
|
84
|
-
const summaryValue = completeEvent.metadata.summary;
|
|
85
|
-
const summary = isJsonString(summaryValue) ? summaryValue : '(untitled)';
|
|
86
71
|
const trace = createMemory(renderTraceContent({ task: summary, steps, outcome }), {
|
|
87
72
|
layer: Layer.Trace,
|
|
88
73
|
trace_outcome: outcome,
|
|
@@ -97,18 +82,32 @@ function sessionTrace(run, consolidationTenant, sessionId) {
|
|
|
97
82
|
});
|
|
98
83
|
return { trace, outcome };
|
|
99
84
|
}
|
|
85
|
+
/** The outcome and title a session's terminal event carries, or null when it has none or the event is malformed. */
|
|
86
|
+
function sessionEnding(events) {
|
|
87
|
+
const completeEvent = events.find((e) => e.event_type === 'session_complete');
|
|
88
|
+
if (!completeEvent)
|
|
89
|
+
return null; // defence-in-depth; findPromotableSessions filters already.
|
|
90
|
+
const outcomeRaw = completeEvent.content;
|
|
91
|
+
if (outcomeRaw !== 'success' && outcomeRaw !== 'failure' && outcomeRaw !== 'partial') {
|
|
92
|
+
// Malformed terminal event — skip rather than crash the whole sleep.
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
// SAFETY: session event metadata is a free-form Record<string, unknown>
|
|
96
|
+
// bag; summary is optional and is only trusted once isJsonString below
|
|
97
|
+
// confirms it is actually a string.
|
|
98
|
+
const summaryValue = completeEvent.metadata.summary;
|
|
99
|
+
const summary = isJsonString(summaryValue) ? summaryValue : '(untitled)';
|
|
100
|
+
return { outcome: outcomeRaw, summary };
|
|
101
|
+
}
|
|
100
102
|
// traceExistsForSession only sees live rows, so a removed rejected trace would regenerate every
|
|
101
103
|
// sleep; check the tombstone under the entry's own stamped tenantId, never a guessed one.
|
|
102
104
|
function traceRejected(run, trace, sessionId) {
|
|
103
|
-
const consolidateDb = run.getConsolidateDb();
|
|
104
|
-
if (!consolidateDb)
|
|
105
|
-
return false;
|
|
106
105
|
const traceDigest = rejectionDigest(trace.content);
|
|
107
|
-
const tombstone =
|
|
106
|
+
const tombstone = run.tombstones.find(trace.tenantId, traceDigest);
|
|
108
107
|
if (!tombstone)
|
|
109
108
|
return false;
|
|
110
109
|
try {
|
|
111
|
-
|
|
110
|
+
run.tombstones.audit({
|
|
112
111
|
tenantId: trace.tenantId,
|
|
113
112
|
actor: 'sleep',
|
|
114
113
|
op: 'reject_refusal',
|
|
@@ -124,23 +123,13 @@ function traceRejected(run, trace, sessionId) {
|
|
|
124
123
|
}
|
|
125
124
|
return true;
|
|
126
125
|
}
|
|
127
|
-
//
|
|
128
|
-
//
|
|
129
|
-
// -------------------------------------------------------------------------
|
|
130
|
-
//
|
|
131
|
-
// Biologically-inspired counterpart to hippocampal replay during slow-wave
|
|
132
|
-
// sleep: sample N memories weighted by outcome + valence + under-rehearsal
|
|
133
|
-
// + idle time, then apply the same retrieval-strengthening `markRetrieved`
|
|
134
|
-
// applies to real queries. Distinct from decay (removal), physics (motion),
|
|
135
|
-
// and merge (compression) — this is the "rehearse the important stuff so
|
|
136
|
-
// it doesn't fade" pass.
|
|
126
|
+
// 1.5. Replay pass: rehearse high-value survivors by sampling N memories weighted by outcome, valence, under-rehearsal and idle time,
|
|
127
|
+
// then applying the `markRetrieved` strengthening, so important memories don't fade.
|
|
137
128
|
export function replayPass(run) {
|
|
138
129
|
const { survivors, now } = run;
|
|
139
130
|
const replayCount = run.config.replay?.count ?? REPLAY_COUNT_DEFAULT;
|
|
140
|
-
// EVAL-ONLY ablation (see ablation.ts): replay rehearsal
|
|
141
|
-
//
|
|
142
|
-
// silences the whole pass - markRetrieved would return unmutated entries
|
|
143
|
-
// and persisting them anyway would still refresh updated_at / mirrors.
|
|
131
|
+
// EVAL-ONLY ablation (see ablation.ts): replay rehearsal is recall strengthening, so the strengthen-off arm silences the whole pass;
|
|
132
|
+
// persisting unmutated entries anyway would still refresh updated_at and mirrors.
|
|
144
133
|
if (!(replayCount > 0 && survivors.length > 0 && !isRecallBoostAblated()))
|
|
145
134
|
return;
|
|
146
135
|
const seed = Math.floor(now.getTime() / 1000) & 0xffffffff;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** EVAL-ONLY ablation switches (HIPPO_ABLATE_*, HIPPO_EVAL_RECENCY_DAYS, HIPPO_FAKE_NOW): each cuts ONE mechanism (outcome also replayPriority bias).
|
|
2
|
+
* Not a production surface. Env is read once per process; tests that mutate these vars MUST call _resetAblationCacheForTests() in beforeEach AND afterEach. See
|
|
3
|
+
* docs/ARCHITECTURE.md#srccoreablationts. */
|
|
4
|
+
export declare function isDecayAblated(): boolean;
|
|
5
|
+
export declare function isRecallBoostAblated(): boolean;
|
|
6
|
+
export declare function isOutcomeSlowAblated(): boolean;
|
|
7
|
+
export declare function isOutcomeFastAblated(): boolean;
|
|
8
|
+
export declare function isRecencyAblated(): boolean;
|
|
9
|
+
/** HIPPO_EVAL_RECENCY_DAYS when it is a positive number, else null (callers keep their default). */
|
|
10
|
+
export declare function evalRecencyScaleDays(): number | null;
|
|
11
|
+
/** The default `now` for lifecycle computations: HIPPO_FAKE_NOW when set and parseable, else the real clock; an explicit `now` parameter always wins. */
|
|
12
|
+
export declare function evalNow(): Date;
|
|
13
|
+
/** Test-only. See module JSDoc: call in BOTH beforeEach AND afterEach. */
|
|
14
|
+
export declare function _resetAblationCacheForTests(): void;
|
|
15
|
+
//# sourceMappingURL=ablation.d.ts.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** EVAL-ONLY ablation switches (HIPPO_ABLATE_*, HIPPO_EVAL_RECENCY_DAYS, HIPPO_FAKE_NOW): each cuts ONE mechanism (outcome also replayPriority bias).
|
|
2
|
+
* Not a production surface. Env is read once per process; tests that mutate these vars MUST call _resetAblationCacheForTests() in beforeEach AND afterEach. See
|
|
3
|
+
* docs/ARCHITECTURE.md#srccoreablationts. */
|
|
4
|
+
import { envAblateDecay, envAblateOutcome, envAblateOutcomeFast, envAblateOutcomeSlow, envAblateRecallBoost, envAblateRecency, envEvalRecencyDays, envFakeNowMs, } from '../util/env.js';
|
|
5
|
+
let _cache;
|
|
6
|
+
function readFlags() {
|
|
7
|
+
if (_cache !== undefined)
|
|
8
|
+
return _cache;
|
|
9
|
+
const outcomeBoth = envAblateOutcome();
|
|
10
|
+
_cache = {
|
|
11
|
+
decay: envAblateDecay(),
|
|
12
|
+
recallBoost: envAblateRecallBoost(),
|
|
13
|
+
outcomeSlow: outcomeBoth || envAblateOutcomeSlow(),
|
|
14
|
+
outcomeFast: outcomeBoth || envAblateOutcomeFast(),
|
|
15
|
+
recency: envAblateRecency(),
|
|
16
|
+
recencyDays: envEvalRecencyDays(),
|
|
17
|
+
fakeNowMs: envFakeNowMs(),
|
|
18
|
+
};
|
|
19
|
+
return _cache;
|
|
20
|
+
}
|
|
21
|
+
export function isDecayAblated() {
|
|
22
|
+
return readFlags().decay;
|
|
23
|
+
}
|
|
24
|
+
export function isRecallBoostAblated() {
|
|
25
|
+
return readFlags().recallBoost;
|
|
26
|
+
}
|
|
27
|
+
export function isOutcomeSlowAblated() {
|
|
28
|
+
return readFlags().outcomeSlow;
|
|
29
|
+
}
|
|
30
|
+
export function isOutcomeFastAblated() {
|
|
31
|
+
return readFlags().outcomeFast;
|
|
32
|
+
}
|
|
33
|
+
export function isRecencyAblated() {
|
|
34
|
+
return readFlags().recency;
|
|
35
|
+
}
|
|
36
|
+
/** HIPPO_EVAL_RECENCY_DAYS when it is a positive number, else null (callers keep their default). */
|
|
37
|
+
export function evalRecencyScaleDays() {
|
|
38
|
+
return readFlags().recencyDays;
|
|
39
|
+
}
|
|
40
|
+
/** The default `now` for lifecycle computations: HIPPO_FAKE_NOW when set and parseable, else the real clock; an explicit `now` parameter always wins. */
|
|
41
|
+
export function evalNow() {
|
|
42
|
+
const ms = readFlags().fakeNowMs;
|
|
43
|
+
return ms === null ? new Date() : new Date(ms);
|
|
44
|
+
}
|
|
45
|
+
/** Test-only. See module JSDoc: call in BOTH beforeEach AND afterEach. */
|
|
46
|
+
export function _resetAblationCacheForTests() {
|
|
47
|
+
_cache = undefined;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=ablation.js.map
|
|
@@ -30,4 +30,4 @@ export declare const AGENT_MEMORY_SOURCE_PREFIX = "agent-memory:";
|
|
|
30
30
|
export declare function toolSourcePrefix(id: ToolId): string;
|
|
31
31
|
export declare const AGENT_MEMORY_TAGS: readonly string[];
|
|
32
32
|
export declare function isToolId(value: string): value is ToolId;
|
|
33
|
-
//# sourceMappingURL=tools.d.ts.map
|
|
33
|
+
//# sourceMappingURL=agent-memory-tools.d.ts.map
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ambient state vector — a compact representation of the agent's memory
|
|
3
|
-
* landscape, computed in O(N) from the current corpus.
|
|
4
|
-
*
|
|
5
|
-
* Inspired by the biological ambient neural state: a continuous background
|
|
6
|
-
* representation that tells the agent "where it is" in knowledge-space
|
|
7
|
-
* without retrieving specific memories.
|
|
8
|
-
*/
|
|
1
|
+
/** Ambient state vector: a compact O(N) summary of the corpus telling the agent "where it is" in knowledge-space without retrieving specific memories. */
|
|
9
2
|
import type { MemoryEntry } from './memory.js';
|
|
10
3
|
export interface AmbientState {
|
|
11
4
|
tagEntropy: number;
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Ambient state vector — a compact representation of the agent's memory
|
|
3
|
-
* landscape, computed in O(N) from the current corpus.
|
|
4
|
-
*
|
|
5
|
-
* Inspired by the biological ambient neural state: a continuous background
|
|
6
|
-
* representation that tells the agent "where it is" in knowledge-space
|
|
7
|
-
* without retrieving specific memories.
|
|
8
|
-
*/
|
|
1
|
+
/** Ambient state vector: a compact O(N) summary of the corpus telling the agent "where it is" in knowledge-space without retrieving specific memories. */
|
|
9
2
|
import { evalNow } from './ablation.js';
|
|
10
3
|
import { Layer } from './memory.js';
|
|
11
4
|
import { calculateStrength } from './memory.js';
|
|
5
|
+
import { DAY_MS } from '../util/time.js';
|
|
6
|
+
const STATE_DECIMALS = 3;
|
|
12
7
|
/** The tallies of two disjoint row sets taken together. */
|
|
13
8
|
export function addAmbientTallies(a, b) {
|
|
14
9
|
const tagCounts = new Map(a.tagCounts);
|
|
@@ -36,7 +31,7 @@ export function isErrorTagged(tags) {
|
|
|
36
31
|
/** Tallies over loaded entries; superseded rows count toward the total only, as they always have here. */
|
|
37
32
|
export function tallyAmbientEntries(entries, now) {
|
|
38
33
|
const currentTime = now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only)
|
|
39
|
-
const sevenDaysAgo = currentTime.getTime() - 7 *
|
|
34
|
+
const sevenDaysAgo = currentTime.getTime() - 7 * DAY_MS;
|
|
40
35
|
const t = {
|
|
41
36
|
total: entries.length, strengthSum: 0, fresh: 0, negative: 0, highSchemaFit: 0, errors: 0,
|
|
42
37
|
semantic: 0, episodic: 0, conflicts: 0, extracted: 0, maxDagLevel: 0, tagCounts: new Map(),
|
|
@@ -154,15 +149,15 @@ export function renderAmbientSummary(state) {
|
|
|
154
149
|
export function formatAmbientVector(state) {
|
|
155
150
|
const lines = [];
|
|
156
151
|
lines.push('Ambient State Vector:');
|
|
157
|
-
lines.push(` tag_entropy: ${state.tagEntropy.toFixed(
|
|
158
|
-
lines.push(` avg_strength: ${state.avgStrength.toFixed(
|
|
159
|
-
lines.push(` recency_freshness: ${state.recencyFreshness.toFixed(
|
|
160
|
-
lines.push(` emotional_skew: ${state.emotionalSkew.toFixed(
|
|
161
|
-
lines.push(` schema_fit_ratio: ${state.schemaFitRatio.toFixed(
|
|
162
|
-
lines.push(` error_density: ${state.errorDensity.toFixed(
|
|
163
|
-
lines.push(` consolidation_ratio: ${state.consolidationRatio.toFixed(
|
|
164
|
-
lines.push(` conflict_intensity: ${state.conflictIntensity.toFixed(
|
|
165
|
-
lines.push(` extraction_coverage: ${state.extractionCoverage.toFixed(
|
|
152
|
+
lines.push(` tag_entropy: ${state.tagEntropy.toFixed(STATE_DECIMALS)}`);
|
|
153
|
+
lines.push(` avg_strength: ${state.avgStrength.toFixed(STATE_DECIMALS)}`);
|
|
154
|
+
lines.push(` recency_freshness: ${state.recencyFreshness.toFixed(STATE_DECIMALS)}`);
|
|
155
|
+
lines.push(` emotional_skew: ${state.emotionalSkew.toFixed(STATE_DECIMALS)}`);
|
|
156
|
+
lines.push(` schema_fit_ratio: ${state.schemaFitRatio.toFixed(STATE_DECIMALS)}`);
|
|
157
|
+
lines.push(` error_density: ${state.errorDensity.toFixed(STATE_DECIMALS)}`);
|
|
158
|
+
lines.push(` consolidation_ratio: ${state.consolidationRatio.toFixed(STATE_DECIMALS)}`);
|
|
159
|
+
lines.push(` conflict_intensity: ${state.conflictIntensity.toFixed(STATE_DECIMALS)}`);
|
|
160
|
+
lines.push(` extraction_coverage: ${state.extractionCoverage.toFixed(STATE_DECIMALS)}`);
|
|
166
161
|
lines.push(` dag_depth: ${state.dagDepth}`);
|
|
167
162
|
lines.push(` total_memories: ${state.totalMemories}`);
|
|
168
163
|
return lines.join('\n');
|
|
@@ -13,13 +13,20 @@ export interface CaptureInput {
|
|
|
13
13
|
readonly trigger: string | null;
|
|
14
14
|
}
|
|
15
15
|
/** The outcome of reading a payload: usable input, a payload hippo refuses, or no payload at all. */
|
|
16
|
-
export type CaptureReceipt = {
|
|
16
|
+
export type CaptureReceipt<I extends CaptureInput = CaptureInput> = {
|
|
17
17
|
readonly status: 'received';
|
|
18
|
-
readonly input:
|
|
18
|
+
readonly input: I;
|
|
19
19
|
} | {
|
|
20
20
|
readonly status: 'skipped' | 'unavailable';
|
|
21
21
|
readonly reason: string;
|
|
22
22
|
};
|
|
23
|
+
/** What a PostCompact payload adds: it always names a session, and carries the summary Claude Code wrote. */
|
|
24
|
+
export interface PostCompactInput extends CaptureInput {
|
|
25
|
+
readonly event: 'post-compact';
|
|
26
|
+
readonly sessionId: string;
|
|
27
|
+
/** null when Claude Code sent none; the transcript fills the record later. */
|
|
28
|
+
readonly compactSummary: string | null;
|
|
29
|
+
}
|
|
23
30
|
/** Working state saved before the host drops context, so the session can resume; it is not a lesson. */
|
|
24
31
|
export interface Checkpoint {
|
|
25
32
|
readonly runtime: string;
|
|
@@ -44,8 +51,14 @@ export declare function isStringValue<T>(value: T): value is T & string;
|
|
|
44
51
|
export declare function isObjectLike<T>(value: T): value is T & object;
|
|
45
52
|
/** The hook runtimes a `--runtime` flag names; absent means Claude Code. */
|
|
46
53
|
export type HookRuntime = 'claude-code' | 'copilot';
|
|
47
|
-
/** Reads a Claude Code PreCompact payload, or a Copilot one after stdin.ts mapped
|
|
54
|
+
/** Reads a Claude Code PreCompact payload, or a Copilot one after stdin.ts mapped
|
|
55
|
+
* it to the same snake_case keys; only an empty stdin counts as a manual run. */
|
|
48
56
|
export declare function readClaudeCodePreCompact(stdinText: string | undefined, timedOut: boolean, runtime?: HookRuntime): CaptureReceipt;
|
|
49
57
|
/** Reads VS Code's per-reply Stop payload. Pass the raw stdin: stdin.ts would give a Copilot CLI agentStop the same snake_case keys. */
|
|
50
58
|
export declare function readVscodeStop(stdinText: string | undefined, timedOut: boolean): CaptureReceipt;
|
|
59
|
+
/** Reads a Claude Code PostCompact payload; it must name a session, but needs no transcript_path. */
|
|
60
|
+
export declare function readClaudeCodePostCompact(stdinText: string | undefined, timedOut: boolean): CaptureReceipt<PostCompactInput>;
|
|
61
|
+
/** Reads a Claude Code SessionEnd payload, or a Copilot one after stdin.ts mapped
|
|
62
|
+
* it to the same snake_case keys; only an empty stdin counts as a manual run. */
|
|
63
|
+
export declare function readSessionEnd(stdinText: string | undefined, timedOut: boolean, runtime?: HookRuntime): CaptureReceipt;
|
|
51
64
|
//# sourceMappingURL=capture-contract.d.ts.map
|
|
@@ -8,7 +8,8 @@ export function isStringValue(value) {
|
|
|
8
8
|
export function isObjectLike(value) {
|
|
9
9
|
return value !== null && value instanceof Object;
|
|
10
10
|
}
|
|
11
|
-
/** Reads a Claude Code PreCompact payload, or a Copilot one after stdin.ts mapped
|
|
11
|
+
/** Reads a Claude Code PreCompact payload, or a Copilot one after stdin.ts mapped
|
|
12
|
+
* it to the same snake_case keys; only an empty stdin counts as a manual run. */
|
|
12
13
|
export function readClaudeCodePreCompact(stdinText, timedOut, runtime = 'claude-code') {
|
|
13
14
|
const empty = !stdinText || stdinText.trim() === '';
|
|
14
15
|
if (timedOut && empty) {
|
|
@@ -82,4 +83,69 @@ export function readVscodeStop(stdinText, timedOut) {
|
|
|
82
83
|
},
|
|
83
84
|
};
|
|
84
85
|
}
|
|
86
|
+
/** Reads a Claude Code PostCompact payload; it must name a session, but needs no transcript_path. */
|
|
87
|
+
export function readClaudeCodePostCompact(stdinText, timedOut) {
|
|
88
|
+
const empty = !stdinText || stdinText.trim() === '';
|
|
89
|
+
if (timedOut && empty) {
|
|
90
|
+
return { status: 'unavailable', reason: 'no PostCompact payload arrived before the stdin wait window closed' };
|
|
91
|
+
}
|
|
92
|
+
let payload;
|
|
93
|
+
try {
|
|
94
|
+
payload = empty ? undefined : JSON.parse(stdinText.trim());
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Non-JSON stdin leaves payload undefined, which the shape check rejects.
|
|
98
|
+
}
|
|
99
|
+
if (!isObjectLike(payload) || !('session_id' in payload) || !isStringValue(payload.session_id) || payload.session_id === '') {
|
|
100
|
+
return { status: 'skipped', reason: 'no PostCompact payload naming a session' };
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
status: 'received',
|
|
104
|
+
input: {
|
|
105
|
+
runtime: 'claude-code',
|
|
106
|
+
event: 'post-compact',
|
|
107
|
+
manual: false,
|
|
108
|
+
sessionId: payload.session_id,
|
|
109
|
+
cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
|
|
110
|
+
transcriptPath: 'transcript_path' in payload && isStringValue(payload.transcript_path) ? payload.transcript_path : null,
|
|
111
|
+
trigger: 'trigger' in payload && isStringValue(payload.trigger) ? payload.trigger : null,
|
|
112
|
+
compactSummary: 'compact_summary' in payload && isStringValue(payload.compact_summary) ? payload.compact_summary : null,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/** Reads a Claude Code SessionEnd payload, or a Copilot one after stdin.ts mapped
|
|
117
|
+
* it to the same snake_case keys; only an empty stdin counts as a manual run. */
|
|
118
|
+
export function readSessionEnd(stdinText, timedOut, runtime = 'claude-code') {
|
|
119
|
+
const empty = !stdinText || stdinText.trim() === '';
|
|
120
|
+
if (timedOut && empty) {
|
|
121
|
+
return { status: 'unavailable', reason: 'no SessionEnd payload arrived before the stdin wait window closed' };
|
|
122
|
+
}
|
|
123
|
+
const base = { runtime, event: 'session-end' };
|
|
124
|
+
if (empty) {
|
|
125
|
+
return { status: 'received', input: { ...base, manual: true, sessionId: null, cwd: null, transcriptPath: null, trigger: null } };
|
|
126
|
+
}
|
|
127
|
+
let payload;
|
|
128
|
+
try {
|
|
129
|
+
payload = JSON.parse(stdinText.trim());
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Non-JSON stdin leaves payload undefined, which the shape check rejects.
|
|
133
|
+
}
|
|
134
|
+
// Explicit array check: this reader has no required key to reject an array for it.
|
|
135
|
+
if (!isObjectLike(payload) || Array.isArray(payload)) {
|
|
136
|
+
return { status: 'skipped', reason: 'malformed SessionEnd payload (not a JSON object)' };
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
status: 'received',
|
|
140
|
+
input: {
|
|
141
|
+
...base,
|
|
142
|
+
manual: false,
|
|
143
|
+
sessionId: 'session_id' in payload && isStringValue(payload.session_id) && payload.session_id !== '' ? payload.session_id : null,
|
|
144
|
+
cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
|
|
145
|
+
transcriptPath: 'transcript_path' in payload && isStringValue(payload.transcript_path) && payload.transcript_path !== '' ? payload.transcript_path : null,
|
|
146
|
+
// Both hosts name a session end's trigger `reason`.
|
|
147
|
+
trigger: 'reason' in payload && isStringValue(payload.reason) ? payload.reason : null,
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
85
151
|
//# sourceMappingURL=capture-contract.js.map
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
export type CardStatus = 'backlog' | 'ready' | 'running' | 'blocked' | 'review' | 'done' | 'shelved';
|
|
3
3
|
/** Narrows a raw string, such as a CLI flag value, to a CardStatus. */
|
|
4
4
|
export declare function isCardStatus(v: string): v is CardStatus;
|
|
5
|
-
/** A card row; leaseUntil and heartbeatAt are null unless the card is running, and
|
|
5
|
+
/** A card row; leaseUntil and heartbeatAt are null unless the card is running, and
|
|
6
|
+
* a card claimed under 1.40.0 runs with both null until a heartbeat sets them. */
|
|
6
7
|
export interface Card {
|
|
7
8
|
id: string;
|
|
8
9
|
title: string;
|
|
@@ -44,4 +45,6 @@ export type CardTransitions = {
|
|
|
44
45
|
export declare const CARD_TRANSITIONS: CardTransitions;
|
|
45
46
|
/** How long a claim or a heartbeat keeps a running card's lease before reclaimExpiredCards may return it to ready. */
|
|
46
47
|
export declare const CARD_LEASE_MS: number;
|
|
48
|
+
/** Throws on any move CARD_TRANSITIONS does not allow, before a status write touches the row. */
|
|
49
|
+
export declare function assertCardTransition(from: readonly CardStatus[], to: CardStatus): void;
|
|
47
50
|
//# sourceMappingURL=card.d.ts.map
|
|
@@ -16,4 +16,12 @@ export const CARD_TRANSITIONS = {
|
|
|
16
16
|
// SHORTCUT: one fixed lease for every claim; add a per-claim lease when the W3 dispatcher heartbeats on a timer.
|
|
17
17
|
/** How long a claim or a heartbeat keeps a running card's lease before reclaimExpiredCards may return it to ready. */
|
|
18
18
|
export const CARD_LEASE_MS = 4 * 60 * 60 * 1000;
|
|
19
|
+
/** Throws on any move CARD_TRANSITIONS does not allow, before a status write touches the row. */
|
|
20
|
+
export function assertCardTransition(from, to) {
|
|
21
|
+
for (const status of from) {
|
|
22
|
+
if (!CARD_TRANSITIONS[status].includes(to)) {
|
|
23
|
+
throw new Error(`illegal card transition: ${status} -> ${to}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
19
27
|
//# sourceMappingURL=card.js.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Deterministic tie-break comparators for recall ranking. A true LEAF module: it imports from no sort-site module (search, physics, api, cli, goals,
|
|
2
|
+
* graph-recall, multihop, rerankers), taking structural param types instead, because even a type-only import back would recreate the search <-> physics ESM
|
|
3
|
+
* cycle this module exists to avoid. */
|
|
4
|
+
/** Minimal shape for a deterministic tie-break across fresh ingests into different stores;
|
|
5
|
+
* the metadata keys are optional so `{ content, id }` callers still fit. */
|
|
6
|
+
export interface EntryIdentity {
|
|
7
|
+
content: string;
|
|
8
|
+
id: string;
|
|
9
|
+
layer?: string;
|
|
10
|
+
tags?: readonly string[];
|
|
11
|
+
source?: string;
|
|
12
|
+
}
|
|
13
|
+
/** Order: content, layer rank (semantic first, keeping the promotion), tag count desc, sorted tags, source, id; plain `<`/`>`, never `localeCompare`.
|
|
14
|
+
* `content` is the cross-ingest-stable key; `id` is random per instance, so it is only the terminal key. Metadata keys are computed only on a content tie. */
|
|
15
|
+
export declare function compareEntryIdentity(a: EntryIdentity, b: EntryIdentity): number;
|
|
16
|
+
/** Minimal shape for score-primary sort sites (SearchResult and friends
|
|
17
|
+
* that carry `{ score, entry: { content, id } }`). */
|
|
18
|
+
export interface ScoredEntryLike {
|
|
19
|
+
score: number;
|
|
20
|
+
entry: EntryIdentity;
|
|
21
|
+
}
|
|
22
|
+
/** score descending, then `compareEntryIdentity`: the shared ordering for every score-primary recall sort site, which delegate here (via an arrow when the
|
|
23
|
+
* score field is not named `score`) so the tiebreak cannot drift between call sites. */
|
|
24
|
+
export declare function compareScoredResults(a: ScoredEntryLike, b: ScoredEntryLike): number;
|
|
25
|
+
/** Larger first, NaN after every number, 0 for equal scores. Not a subtraction: two infinities, or any NaN, subtract to NaN, which a sort reads as a tie. */
|
|
26
|
+
export declare function compareScoresDesc(a: number, b: number): number;
|
|
27
|
+
/** Score-desc then tie-key comparator for the physics layer (no `entry`/`content` in scope): the default memoryId key is per-instance determinism only.
|
|
28
|
+
* Cross-ingest stability needs `tieKeyOf` (content), since the baseScore tie order picks the cluster_top_k set. A factory, as two fields sort in turn. */
|
|
29
|
+
export declare function comparePhysicsResultsBy<T extends {
|
|
30
|
+
memoryId: string;
|
|
31
|
+
}>(scoreOf: (r: T) => number, tieKeyOf?: (r: T) => string): (a: T, b: T) => number;
|
|
32
|
+
//# sourceMappingURL=compare.d.ts.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/** Deterministic tie-break comparators for recall ranking. A true LEAF module: it imports from no sort-site module (search, physics, api, cli, goals,
|
|
2
|
+
* graph-recall, multihop, rerankers), taking structural param types instead, because even a type-only import back would recreate the search <-> physics ESM
|
|
3
|
+
* cycle this module exists to avoid. */
|
|
4
|
+
/** Order: content, layer rank (semantic first, keeping the promotion), tag count desc, sorted tags, source, id; plain `<`/`>`, never `localeCompare`.
|
|
5
|
+
* `content` is the cross-ingest-stable key; `id` is random per instance, so it is only the terminal key. Metadata keys are computed only on a content tie. */
|
|
6
|
+
export function compareEntryIdentity(a, b) {
|
|
7
|
+
return (compareStrings(a.content, b.content) ||
|
|
8
|
+
layerRank(a.layer) - layerRank(b.layer) ||
|
|
9
|
+
compareStrings(a.layer ?? '', b.layer ?? '') ||
|
|
10
|
+
compareTags(a.tags, b.tags) ||
|
|
11
|
+
compareStrings(a.source ?? '', b.source ?? '') ||
|
|
12
|
+
compareStrings(a.id, b.id));
|
|
13
|
+
}
|
|
14
|
+
const LAYER_RANK = new Map([
|
|
15
|
+
['semantic', 0],
|
|
16
|
+
['episodic', 1],
|
|
17
|
+
['trace', 2],
|
|
18
|
+
['buffer', 3],
|
|
19
|
+
]);
|
|
20
|
+
function layerRank(layer) {
|
|
21
|
+
return LAYER_RANK.get(layer ?? '') ?? LAYER_RANK.size;
|
|
22
|
+
}
|
|
23
|
+
function compareStrings(a, b) {
|
|
24
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
25
|
+
}
|
|
26
|
+
function compareTags(a, b) {
|
|
27
|
+
const ua = [...new Set(a ?? [])].sort();
|
|
28
|
+
const ub = [...new Set(b ?? [])].sort();
|
|
29
|
+
if (ua.length !== ub.length)
|
|
30
|
+
return ub.length - ua.length;
|
|
31
|
+
// element-wise, not a joined string: a separator inside a tag would collide
|
|
32
|
+
for (let i = 0; i < ua.length; i++) {
|
|
33
|
+
const c = compareStrings(ua[i], ub[i]);
|
|
34
|
+
if (c !== 0)
|
|
35
|
+
return c;
|
|
36
|
+
}
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
/** score descending, then `compareEntryIdentity`: the shared ordering for every score-primary recall sort site, which delegate here (via an arrow when the
|
|
40
|
+
* score field is not named `score`) so the tiebreak cannot drift between call sites. */
|
|
41
|
+
export function compareScoredResults(a, b) {
|
|
42
|
+
return compareScoresDesc(a.score, b.score) || compareEntryIdentity(a.entry, b.entry);
|
|
43
|
+
}
|
|
44
|
+
/** Larger first, NaN after every number, 0 for equal scores. Not a subtraction: two infinities, or any NaN, subtract to NaN, which a sort reads as a tie. */
|
|
45
|
+
export function compareScoresDesc(a, b) {
|
|
46
|
+
if (a > b)
|
|
47
|
+
return -1;
|
|
48
|
+
if (a < b)
|
|
49
|
+
return 1;
|
|
50
|
+
return Number(Number.isNaN(a)) - Number(Number.isNaN(b));
|
|
51
|
+
}
|
|
52
|
+
/** Score-desc then tie-key comparator for the physics layer (no `entry`/`content` in scope): the default memoryId key is per-instance determinism only.
|
|
53
|
+
* Cross-ingest stability needs `tieKeyOf` (content), since the baseScore tie order picks the cluster_top_k set. A factory, as two fields sort in turn. */
|
|
54
|
+
export function comparePhysicsResultsBy(scoreOf, tieKeyOf) {
|
|
55
|
+
return (a, b) => {
|
|
56
|
+
const d = compareScoresDesc(scoreOf(a), scoreOf(b));
|
|
57
|
+
if (d !== 0)
|
|
58
|
+
return d;
|
|
59
|
+
const ai = tieKeyOf ? tieKeyOf(a) : a.memoryId;
|
|
60
|
+
const bi = tieKeyOf ? tieKeyOf(b) : b.memoryId;
|
|
61
|
+
if (ai < bi)
|
|
62
|
+
return -1;
|
|
63
|
+
if (ai > bi)
|
|
64
|
+
return 1;
|
|
65
|
+
// Tie-key collision (e.g. duplicate content): fall through to memoryId
|
|
66
|
+
// so the comparator still yields a total order within one store.
|
|
67
|
+
return a.memoryId < b.memoryId ? -1 : a.memoryId > b.memoryId ? 1 : 0;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=compare.js.map
|