hippo-memory 1.69.0 → 1.70.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 +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- 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/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- 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} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- 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 +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -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/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- 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 +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- 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 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- 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 +1 -1
- package/dist/capture/command.js +54 -41
- 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 +4 -1
- package/dist/capture/compact.js +40 -22
- 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} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- 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} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- 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.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- 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.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- 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} +5 -5
- 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} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -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 +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- 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/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- 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} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- 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 +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- 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} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- 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 +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- 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 +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- 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 +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -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/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- 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 -1
- package/dist/search/boosts.js +34 -13
- 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/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -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} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- 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/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- 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 +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- 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 +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- 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 +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- 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/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- 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 +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- 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 +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- 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 +59 -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 +28 -0
- package/dist/store/sqlite/executor.js +286 -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 +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -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 +26 -0
- package/dist/store/sqlite/store.js +295 -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 +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- 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} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- 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 +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- 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 +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- 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} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- 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 +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- 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/api.d.ts +0 -26
- package/dist/api.js +0 -29
- 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/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- 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/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /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/{recall-history.d.ts → api/recall-history.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/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +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/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +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/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +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/{salience.d.ts → core/salience.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.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +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/{secret-detect.d.ts → util/secret-detect.d.ts} +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/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.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
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Core data model for Hippo memory entries.
|
|
3
3
|
* Based on the strength formula from PLAN.md.
|
|
4
4
|
*/
|
|
5
|
+
export declare const DEFAULT_SCHEMA_FIT = 0.5;
|
|
6
|
+
export declare const FALLBACK_HALF_LIFE_DAYS = 7;
|
|
5
7
|
export declare enum Layer {
|
|
6
8
|
Buffer = "buffer",
|
|
7
9
|
Episodic = "episodic",
|
|
@@ -122,7 +124,7 @@ export declare const CHURN_STALE_TAG = "churn-stale";
|
|
|
122
124
|
* the env var for this test.
|
|
123
125
|
* - afterEach: clear the cache so the next test (which may not set the env
|
|
124
126
|
* var) reads the clean default instead of this test's value.
|
|
125
|
-
* See `tests/emotional-multipliers
|
|
127
|
+
* See `tests/emotional-multipliers.test.ts` for the pattern.
|
|
126
128
|
*/
|
|
127
129
|
export declare function _resetLossAversionRatioCacheForTests(): void;
|
|
128
130
|
/**
|
|
@@ -172,9 +174,6 @@ export declare function calculateStrength(entry: StrengthInputs, now?: Date, opt
|
|
|
172
174
|
/** calculateStrength's clock-basis formula as SQL over `memories` columns, flags and multipliers baked in; keep in step.
|
|
173
175
|
* An unparseable date scores NULL here and 0 in JS, so sums agree. */
|
|
174
176
|
export declare function strengthSql(now: Date): string;
|
|
175
|
-
/**
|
|
176
|
-
* Derive half-life based on signals, as per PLAN.md table.
|
|
177
|
-
*/
|
|
178
177
|
export declare function deriveHalfLife(base: number, entry: Partial<MemoryEntry>): number;
|
|
179
178
|
/**
|
|
180
179
|
* Apply outcome feedback to a memory entry.
|
|
@@ -196,11 +195,14 @@ export declare function entryAfterOutcome(entry: MemoryEntry, good: boolean): Me
|
|
|
196
195
|
* Generate a random memory ID using crypto.randomUUID().
|
|
197
196
|
*/
|
|
198
197
|
export declare function generateId(prefix?: string): string;
|
|
198
|
+
/** What the confidence facets read, so a caller can derive them from a row it loaded only in part. */
|
|
199
|
+
export type ConfidenceInputs = Pick<MemoryEntry, 'pinned' | 'confidence' | 'last_retrieved'>;
|
|
199
200
|
export interface ConfidenceFacets {
|
|
200
201
|
tier: ConfidenceLevel;
|
|
201
202
|
agedOut: boolean;
|
|
202
203
|
}
|
|
203
204
|
export declare function confidenceFacets(entry: MemoryEntry, now?: Date): ConfidenceFacets;
|
|
205
|
+
export declare function facetsOf(entry: ConfidenceInputs, now: Date): ConfidenceFacets;
|
|
204
206
|
export declare function confidenceLabel(entry: MemoryEntry, now?: Date): {
|
|
205
207
|
text: string;
|
|
206
208
|
warn: boolean;
|
|
@@ -215,7 +217,7 @@ export declare function resolveConfidence(entry: MemoryEntry, now?: Date): Confi
|
|
|
215
217
|
* Base half-life for a new memory, in days, before `deriveHalfLife`'s
|
|
216
218
|
* write-time multipliers. 365 because 7 days lost the current fact far more
|
|
217
219
|
* often, and 730 days or no decay did no better. `hippo sleep` moves memories still
|
|
218
|
-
* on an older base (src/half-life-migration.ts).
|
|
220
|
+
* on an older base (src/consolidate/half-life-migration.ts).
|
|
219
221
|
*/
|
|
220
222
|
export declare const DEFAULT_HALF_LIFE_DAYS = 365;
|
|
221
223
|
export declare const COMPACTION_MEMORY_TAG = "compaction-memory";
|
|
@@ -272,6 +274,16 @@ export declare function createSuccessor(old: MemoryEntry, content: string, opts:
|
|
|
272
274
|
* Rare shared tags signal stronger schema fit than common ones.
|
|
273
275
|
*/
|
|
274
276
|
export declare function computeSchemaFit(content: string, tags: string[], existingEntries: MemoryEntry[]): number;
|
|
277
|
+
/** What schema fit reads from a set of memories, so a store can answer without loading its rows. */
|
|
278
|
+
export interface SchemaFitSource {
|
|
279
|
+
readonly rows: number;
|
|
280
|
+
/** How many times each tag appears across the set. */
|
|
281
|
+
readonly tagCounts: ReadonlyMap<string, number>;
|
|
282
|
+
/** Each memory's text; the walk stops once more matches cannot move the score. */
|
|
283
|
+
readonly contents: Iterable<string>;
|
|
284
|
+
}
|
|
285
|
+
/** computeSchemaFit against `source`, for a caller that holds counts and texts but no rows. */
|
|
286
|
+
export declare function schemaFitFrom(content: string, tags: readonly string[], source: SchemaFitSource): number;
|
|
275
287
|
/**
|
|
276
288
|
* Update retrieval metadata on entries that were returned by a search.
|
|
277
289
|
* Returns the mutated copies (caller must persist to disk).
|
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
* Core data model for Hippo memory entries.
|
|
3
3
|
* Based on the strength formula from PLAN.md.
|
|
4
4
|
*/
|
|
5
|
-
import { envLossAversionRatio } from '
|
|
5
|
+
import { envLossAversionRatio } from '../util/env.js';
|
|
6
6
|
import { BadRequestError } from './api-errors.js';
|
|
7
7
|
import { randomUUID } from 'crypto';
|
|
8
8
|
import { isDecayAblated, isOutcomeSlowAblated, isRecallBoostAblated, evalNow, } from './ablation.js';
|
|
9
|
-
import { AGENT_MEMORY_TOOLS, toolSourcePrefix } from './agent-
|
|
9
|
+
import { AGENT_MEMORY_TOOLS, toolSourcePrefix } from './agent-memory-tools.js';
|
|
10
|
+
import { DAY_MS } from '../util/time.js';
|
|
11
|
+
import { ID_SUFFIX_CHARS } from '../util/token-text.js';
|
|
12
|
+
export const DEFAULT_SCHEMA_FIT = 0.5;
|
|
13
|
+
export const FALLBACK_HALF_LIFE_DAYS = 7;
|
|
10
14
|
export var Layer;
|
|
11
15
|
(function (Layer) {
|
|
12
16
|
Layer["Buffer"] = "buffer";
|
|
@@ -92,7 +96,7 @@ function getLossAversionRatio() {
|
|
|
92
96
|
* the env var for this test.
|
|
93
97
|
* - afterEach: clear the cache so the next test (which may not set the env
|
|
94
98
|
* var) reads the clean default instead of this test's value.
|
|
95
|
-
* See `tests/emotional-multipliers
|
|
99
|
+
* See `tests/emotional-multipliers.test.ts` for the pattern.
|
|
96
100
|
*/
|
|
97
101
|
export function _resetLossAversionRatioCacheForTests() {
|
|
98
102
|
_lossAversionRatioCache = undefined;
|
|
@@ -127,10 +131,16 @@ export function calculateRewardFactor(entry) {
|
|
|
127
131
|
if (pos === 0 && neg === 0)
|
|
128
132
|
return 1.0;
|
|
129
133
|
const ratio = (pos - neg) / (pos + neg + 1);
|
|
130
|
-
return 1 +
|
|
134
|
+
return 1 + REWARD_SLOPE * ratio;
|
|
131
135
|
}
|
|
132
136
|
/** Bad marks alone never push a memory under sleep's 0.05 retire line; supersede is the hard correction. */
|
|
133
137
|
const MAX_WRONG_HALVINGS = 3;
|
|
138
|
+
// Shared by calculateStrength and strengthSql so the two cannot drift.
|
|
139
|
+
const DECAY_BASE = 0.5;
|
|
140
|
+
const REWARD_SLOPE = 0.5;
|
|
141
|
+
const RETRIEVAL_BOOST_SLOPE = 0.1;
|
|
142
|
+
const SQL_DEFAULT_HALF_LIFE_DAYS = 7;
|
|
143
|
+
const UNIX_EPOCH_JULIAN_DAY = 2440587.5;
|
|
134
144
|
/**
|
|
135
145
|
* Net wrongness: bad outcome marks past good ones, never below zero.
|
|
136
146
|
* Strength halves per unit (capped at 3) and recall stops strengthening
|
|
@@ -157,58 +167,62 @@ export function calculateStrength(entry,
|
|
|
157
167
|
// simulated-time protocols; see ablation.ts). Explicit `now` always wins.
|
|
158
168
|
now = evalNow(), options = {}) {
|
|
159
169
|
// Being marked wrong outranks every shield: pinning, error tags, heavy recall.
|
|
160
|
-
const wrongPenalty = Math.pow(
|
|
170
|
+
const wrongPenalty = Math.pow(DECAY_BASE, Math.min(netWrong(entry), MAX_WRONG_HALVINGS));
|
|
161
171
|
if (entry.pinned)
|
|
162
172
|
return wrongPenalty;
|
|
163
173
|
// EVAL-ONLY ablation (see ablation.ts): anchor decay at CREATION, so clock resets persisted by PRIOR
|
|
164
174
|
// unflagged runs cannot leak strengthening into an ablated arm. Prior-run half_life increments are
|
|
165
175
|
// NOT reconstructed - see the ablation.ts caveat (fresh stores per arm).
|
|
166
176
|
const lastRetrieved = new Date(isRecallBoostAblated() ? entry.created : entry.last_retrieved);
|
|
167
|
-
const daysSince = (now.getTime() - lastRetrieved.getTime()) /
|
|
177
|
+
const daysSince = (now.getTime() - lastRetrieved.getTime()) / DAY_MS;
|
|
168
178
|
// Reward-proportional half-life modulation
|
|
169
179
|
const rewardFactor = calculateRewardFactor(entry);
|
|
170
|
-
|
|
180
|
+
const effectiveHalfLife = entry.half_life_days * rewardFactor;
|
|
171
181
|
// Guard: zero half-life causes 0/0 = NaN in the exponent
|
|
172
182
|
if (effectiveHalfLife <= 0)
|
|
173
183
|
return 0.0;
|
|
184
|
+
const decayExponent = decayExponentFor(options, daysSince, effectiveHalfLife);
|
|
185
|
+
// EVAL-ONLY ablation (see ablation.ts): decay term := 1. NOTE the [0,1]
|
|
186
|
+
// clamp below then caps retrievalBoost at baseline - see ablation.ts
|
|
187
|
+
// formula note.
|
|
188
|
+
const decay = isDecayAblated() ? 1.0 : Math.pow(DECAY_BASE, decayExponent);
|
|
189
|
+
const retrievalBoost = retrievalBoostFor(entry);
|
|
190
|
+
// Emotional multiplier. HIPPO_LOSS_AVERSION_RATIO scales the negative one ONLY; the lazy
|
|
191
|
+
// module cache makes this one lookup + one multiply, not a per-call process.env read.
|
|
192
|
+
const baseMultiplier = EMOTIONAL_MULTIPLIERS[entry.emotional_valence] ?? 1.0;
|
|
193
|
+
const emotionalMultiplier = applyLossAversionRatio(entry.emotional_valence, baseMultiplier);
|
|
194
|
+
const raw = decay * retrievalBoost * emotionalMultiplier;
|
|
195
|
+
// Clamp to [0, 1] with NaN guard
|
|
196
|
+
const clamped = Math.min(1.0, Math.max(0.0, raw));
|
|
197
|
+
return Number.isFinite(clamped) ? clamped * wrongPenalty : 0.0;
|
|
198
|
+
}
|
|
199
|
+
function decayExponentFor(options, daysSince, halfLifeDays) {
|
|
200
|
+
let effectiveHalfLife = halfLifeDays;
|
|
174
201
|
const basis = options.decayBasis ?? 'clock';
|
|
175
|
-
let decayExponent;
|
|
176
202
|
if (basis === 'session') {
|
|
177
203
|
// Decay by session count: each sleep cycle = 1 "day" in the decay formula.
|
|
178
204
|
// Estimate sessions since last retrieval from wall-clock time and avg interval.
|
|
179
205
|
const avgInterval = options.avgSessionIntervalDays ?? 1;
|
|
180
206
|
const sessionsSince = avgInterval > 0 ? Math.max(0, daysSince / avgInterval) : daysSince;
|
|
181
|
-
|
|
207
|
+
return sessionsSince / effectiveHalfLife;
|
|
182
208
|
}
|
|
183
|
-
|
|
209
|
+
if (basis === 'adaptive') {
|
|
184
210
|
// Scale half-life by session frequency: infrequent agents get longer half-lives
|
|
185
211
|
const avgInterval = options.avgSessionIntervalDays ?? 0;
|
|
186
212
|
if (avgInterval > 1) {
|
|
187
213
|
effectiveHalfLife *= avgInterval;
|
|
188
214
|
}
|
|
189
|
-
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
// clock: classic wall-clock decay
|
|
193
|
-
decayExponent = daysSince / effectiveHalfLife;
|
|
215
|
+
return daysSince / effectiveHalfLife;
|
|
194
216
|
}
|
|
195
|
-
//
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
217
|
+
// clock: classic wall-clock decay
|
|
218
|
+
return daysSince / effectiveHalfLife;
|
|
219
|
+
}
|
|
220
|
+
// Retrieval boost: 1 + 0.1 * log2(retrieval_count + 1). EVAL-ONLY ablation (see ablation.ts) neutralizes
|
|
221
|
+
// the READ side too, so counts written before the flag cannot leak strengthening into an ablated arm.
|
|
222
|
+
function retrievalBoostFor(entry) {
|
|
223
|
+
return isRecallBoostAblated() || netWrong(entry) > 0
|
|
202
224
|
? 1.0
|
|
203
|
-
: 1 +
|
|
204
|
-
// Emotional multiplier. HIPPO_LOSS_AVERSION_RATIO scales the negative one ONLY; the lazy
|
|
205
|
-
// module cache makes this one lookup + one multiply, not a per-call process.env read.
|
|
206
|
-
const baseMultiplier = EMOTIONAL_MULTIPLIERS[entry.emotional_valence] ?? 1.0;
|
|
207
|
-
const emotionalMultiplier = applyLossAversionRatio(entry.emotional_valence, baseMultiplier);
|
|
208
|
-
const raw = decay * retrievalBoost * emotionalMultiplier;
|
|
209
|
-
// Clamp to [0, 1] with NaN guard
|
|
210
|
-
const clamped = Math.min(1.0, Math.max(0.0, raw));
|
|
211
|
-
return Number.isFinite(clamped) ? clamped * wrongPenalty : 0.0;
|
|
225
|
+
: 1 + RETRIEVAL_BOOST_SLOPE * Math.log2(entry.retrieval_count + 1);
|
|
212
226
|
}
|
|
213
227
|
/** calculateStrength's clock-basis formula as SQL over `memories` columns, flags and multipliers baked in; keep in step.
|
|
214
228
|
* An unparseable date scores NULL here and 0 in JS, so sums agree. */
|
|
@@ -219,25 +233,34 @@ export function strengthSql(now) {
|
|
|
219
233
|
const wrong = isOutcomeSlowAblated() || isDecayAblated() ? '0' : `MAX(0, ${neg} - ${pos})`;
|
|
220
234
|
const reward = isOutcomeSlowAblated()
|
|
221
235
|
? '1.0'
|
|
222
|
-
: `(CASE WHEN ${pos} = 0 AND ${neg} = 0 THEN 1.0 ELSE 1.0 +
|
|
223
|
-
const halfLife = `(COALESCE(half_life_days,
|
|
236
|
+
: `(CASE WHEN ${pos} = 0 AND ${neg} = 0 THEN 1.0 ELSE 1.0 + ${REWARD_SLOPE} * (${pos} - ${neg}) / (${pos} + ${neg} + 1.0) END)`;
|
|
237
|
+
const halfLife = `(COALESCE(half_life_days, ${SQL_DEFAULT_HALF_LIFE_DAYS}) * ${reward})`;
|
|
224
238
|
const anchor = isRecallBoostAblated() ? 'created' : 'last_retrieved';
|
|
225
|
-
const nowJulian = num(now.getTime() /
|
|
226
|
-
const decay = isDecayAblated() ? '1.0' : `pow(
|
|
239
|
+
const nowJulian = num(now.getTime() / DAY_MS + UNIX_EPOCH_JULIAN_DAY);
|
|
240
|
+
const decay = isDecayAblated() ? '1.0' : `pow(${DECAY_BASE}, (${nowJulian} - julianday(${anchor})) / ${halfLife})`;
|
|
227
241
|
const boost = isRecallBoostAblated()
|
|
228
242
|
? '1.0'
|
|
229
|
-
: `(CASE WHEN ${wrong} > 0 THEN 1.0 ELSE 1.0 +
|
|
243
|
+
: `(CASE WHEN ${wrong} > 0 THEN 1.0 ELSE 1.0 + ${RETRIEVAL_BOOST_SLOPE} * log2(COALESCE(retrieval_count, 0) + 1) END)`;
|
|
230
244
|
const valences = /* SAFETY: a Record keyed by EmotionalValence */ Object.keys(EMOTIONAL_MULTIPLIERS);
|
|
231
245
|
const emotion = `(CASE COALESCE(emotional_valence, 'neutral') ${valences
|
|
232
246
|
.map((v) => `WHEN '${v}' THEN ${num(applyLossAversionRatio(v, EMOTIONAL_MULTIPLIERS[v]))}`)
|
|
233
247
|
.join(' ')} ELSE 1.0 END)`;
|
|
234
|
-
const penalty = `pow(
|
|
248
|
+
const penalty = `pow(${DECAY_BASE}, MIN(${wrong}, ${MAX_WRONG_HALVINGS}))`;
|
|
235
249
|
return `(CASE WHEN pinned THEN ${penalty} WHEN ${halfLife} <= 0 THEN 0.0
|
|
236
250
|
ELSE MIN(1.0, MAX(0.0, ${decay} * ${boost} * ${emotion})) * ${penalty} END)`;
|
|
237
251
|
}
|
|
238
252
|
/**
|
|
239
253
|
* Derive half-life based on signals, as per PLAN.md table.
|
|
240
254
|
*/
|
|
255
|
+
const HIGH_SCHEMA_FIT = 0.7;
|
|
256
|
+
const HIGH_FIT_HALF_LIFE_FACTOR = 1.5;
|
|
257
|
+
const LOW_SCHEMA_FIT = 0.3;
|
|
258
|
+
const LOW_FIT_HALF_LIFE_FACTOR = 0.5;
|
|
259
|
+
// Schema fit blends tag coverage and content similarity; a content match needs this share of shared tokens.
|
|
260
|
+
const TAG_FIT_WEIGHT = 0.6;
|
|
261
|
+
const CONTENT_FIT_WEIGHT = 0.4;
|
|
262
|
+
const CONTENT_TOKEN_SHARE_MIN = 0.2;
|
|
263
|
+
const CONTENT_ENOUGH_FRACTION = 0.1;
|
|
241
264
|
export function deriveHalfLife(base, entry) {
|
|
242
265
|
let hl = base;
|
|
243
266
|
// Error-tagged: 2x half-life
|
|
@@ -245,12 +268,12 @@ export function deriveHalfLife(base, entry) {
|
|
|
245
268
|
hl *= 2;
|
|
246
269
|
}
|
|
247
270
|
// High schema fit: consolidates faster (1.5x)
|
|
248
|
-
if (entry.schema_fit !== undefined && entry.schema_fit >
|
|
249
|
-
hl *=
|
|
271
|
+
if (entry.schema_fit !== undefined && entry.schema_fit > HIGH_SCHEMA_FIT) {
|
|
272
|
+
hl *= HIGH_FIT_HALF_LIFE_FACTOR;
|
|
250
273
|
}
|
|
251
274
|
// Low schema fit: decay faster (0.5x)
|
|
252
|
-
if (entry.schema_fit !== undefined && entry.schema_fit <
|
|
253
|
-
hl *=
|
|
275
|
+
if (entry.schema_fit !== undefined && entry.schema_fit < LOW_SCHEMA_FIT) {
|
|
276
|
+
hl *= LOW_FIT_HALF_LIFE_FACTOR;
|
|
254
277
|
}
|
|
255
278
|
return hl;
|
|
256
279
|
}
|
|
@@ -288,17 +311,18 @@ export function entryAfterOutcome(entry, good) {
|
|
|
288
311
|
* Generate a random memory ID using crypto.randomUUID().
|
|
289
312
|
*/
|
|
290
313
|
export function generateId(prefix = 'mem') {
|
|
291
|
-
return `${prefix}_${randomUUID().replace(/-/g, '').slice(0,
|
|
314
|
+
return `${prefix}_${randomUUID().replace(/-/g, '').slice(0, ID_SUFFIX_CHARS)}`;
|
|
292
315
|
}
|
|
293
|
-
// Pinned and verified are exempt from ageing by policy, so this reads "aged out
|
|
294
|
-
// for trust purposes", not "old". The 30-day threshold lives here and nowhere else.
|
|
295
316
|
function isAgedOut(entry, now) {
|
|
296
317
|
if (entry.pinned || entry.confidence === 'verified')
|
|
297
318
|
return false;
|
|
298
319
|
const lastRetrieved = new Date(entry.last_retrieved);
|
|
299
|
-
return (now.getTime() - lastRetrieved.getTime()) /
|
|
320
|
+
return (now.getTime() - lastRetrieved.getTime()) / DAY_MS > 30;
|
|
300
321
|
}
|
|
301
322
|
export function confidenceFacets(entry, now = evalNow()) {
|
|
323
|
+
return facetsOf(entry, now);
|
|
324
|
+
}
|
|
325
|
+
export function facetsOf(entry, now) {
|
|
302
326
|
return { tier: entry.confidence, agedOut: isAgedOut(entry, now) };
|
|
303
327
|
}
|
|
304
328
|
// `warn` covers exactly the rows the old collapsed-value rule did: an aged-out row
|
|
@@ -322,7 +346,7 @@ export function resolveConfidence(entry, now = evalNow()) {
|
|
|
322
346
|
* Base half-life for a new memory, in days, before `deriveHalfLife`'s
|
|
323
347
|
* write-time multipliers. 365 because 7 days lost the current fact far more
|
|
324
348
|
* often, and 730 days or no decay did no better. `hippo sleep` moves memories still
|
|
325
|
-
* on an older base (src/half-life-migration.ts).
|
|
349
|
+
* on an older base (src/consolidate/half-life-migration.ts).
|
|
326
350
|
*/
|
|
327
351
|
export const DEFAULT_HALF_LIFE_DAYS = 365;
|
|
328
352
|
export const COMPACTION_MEMORY_TAG = 'compaction-memory';
|
|
@@ -340,21 +364,13 @@ export function canAutoDelete(entry) {
|
|
|
340
364
|
return !entry.pinned && entry.kind !== 'raw' && !isKeptForGood(entry);
|
|
341
365
|
}
|
|
342
366
|
export function createMemory(content, options = {}) {
|
|
343
|
-
|
|
344
|
-
if (trimmed.length < 3) {
|
|
345
|
-
throw new BadRequestError(`Memory content too short (${trimmed.length} chars, minimum 3): "${trimmed}"`);
|
|
346
|
-
}
|
|
347
|
-
const validOutcomes = ['success', 'failure', 'partial', null];
|
|
348
|
-
if (options.trace_outcome !== undefined && !validOutcomes.includes(options.trace_outcome)) {
|
|
349
|
-
throw new BadRequestError(`Invalid trace_outcome: ${options.trace_outcome}. Must be 'success', 'failure', 'partial', or null.`);
|
|
350
|
-
}
|
|
367
|
+
assertValidMemoryInput(content, options);
|
|
351
368
|
const now = evalNow().toISOString(); // honors HIPPO_FAKE_NOW (eval-only)
|
|
352
369
|
const layer = options.layer ?? Layer.Episodic;
|
|
353
370
|
const tags = options.tags ?? [];
|
|
354
371
|
const emotional_valence = options.emotional_valence ?? inferValence(tags);
|
|
355
|
-
const schema_fit = options.schema_fit ??
|
|
356
|
-
const
|
|
357
|
-
const half_life_days = deriveHalfLife(options.baseHalfLifeDays ?? DEFAULT_HALF_LIFE_DAYS, partial);
|
|
372
|
+
const schema_fit = options.schema_fit ?? DEFAULT_SCHEMA_FIT;
|
|
373
|
+
const half_life_days = deriveHalfLife(options.baseHalfLifeDays ?? DEFAULT_HALF_LIFE_DAYS, { tags, schema_fit });
|
|
358
374
|
const entry = {
|
|
359
375
|
id: generateId(layer === Layer.Semantic ? 'sem' : 'mem'),
|
|
360
376
|
created: now,
|
|
@@ -393,6 +409,16 @@ export function createMemory(content, options = {}) {
|
|
|
393
409
|
entry.strength = calculateStrength(entry);
|
|
394
410
|
return entry;
|
|
395
411
|
}
|
|
412
|
+
function assertValidMemoryInput(content, options) {
|
|
413
|
+
const trimmed = content.trim();
|
|
414
|
+
if (trimmed.length < 3) {
|
|
415
|
+
throw new BadRequestError(`Memory content too short (${trimmed.length} chars, minimum 3): "${trimmed}"`);
|
|
416
|
+
}
|
|
417
|
+
const validOutcomes = ['success', 'failure', 'partial', null];
|
|
418
|
+
if (options.trace_outcome !== undefined && !validOutcomes.includes(options.trace_outcome)) {
|
|
419
|
+
throw new BadRequestError(`Invalid trace_outcome: ${options.trace_outcome}. Must be 'success', 'failure', 'partial', or null.`);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
396
422
|
/** The row that replaces `old`: a supersede never changes where a memory belongs, so source, scope, session and a stamped origin carry over. */
|
|
397
423
|
export function createSuccessor(old, content, opts) {
|
|
398
424
|
const next = createMemory(content, {
|
|
@@ -423,53 +449,55 @@ export function createSuccessor(old, content, opts) {
|
|
|
423
449
|
* Rare shared tags signal stronger schema fit than common ones.
|
|
424
450
|
*/
|
|
425
451
|
export function computeSchemaFit(content, tags, existingEntries) {
|
|
426
|
-
|
|
427
|
-
return 0.5; // no schema yet, neutral
|
|
428
|
-
// Build tag frequency map across all existing entries
|
|
429
|
-
const tagFreq = new Map();
|
|
452
|
+
const tagCounts = new Map();
|
|
430
453
|
for (const entry of existingEntries) {
|
|
431
454
|
for (const tag of entry.tags) {
|
|
432
|
-
|
|
455
|
+
tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);
|
|
433
456
|
}
|
|
434
457
|
}
|
|
458
|
+
return schemaFitFrom(content, tags, { rows: existingEntries.length, tagCounts, contents: existingEntries.map((e) => e.content) });
|
|
459
|
+
}
|
|
460
|
+
function significantTokens(text) {
|
|
461
|
+
return new Set(text.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
|
|
462
|
+
}
|
|
463
|
+
/** computeSchemaFit against `source`, for a caller that holds counts and texts but no rows. */
|
|
464
|
+
export function schemaFitFrom(content, tags, source) {
|
|
465
|
+
const N = source.rows;
|
|
466
|
+
if (N === 0)
|
|
467
|
+
return 0.5; // no schema yet, neutral
|
|
468
|
+
const tagFreq = source.tagCounts;
|
|
435
469
|
if (tags.length === 0 && tagFreq.size === 0)
|
|
436
470
|
return 0.5;
|
|
437
|
-
// Tag overlap
|
|
438
|
-
// Shared rare tags matter more than shared common tags
|
|
471
|
+
// Tag overlap, weighted so a shared rare tag counts for more than a shared common one.
|
|
439
472
|
let weightedOverlap = 0;
|
|
440
473
|
let totalWeight = 0;
|
|
441
|
-
const
|
|
474
|
+
const maxIdf = Math.log(N + 1) + 1;
|
|
442
475
|
for (const tag of tags) {
|
|
443
476
|
const freq = tagFreq.get(tag) ?? 0;
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
if (freq > 0) {
|
|
447
|
-
const idf = Math.log(N / freq) + 1;
|
|
448
|
-
weightedOverlap += idf;
|
|
449
|
-
}
|
|
477
|
+
if (freq > 0)
|
|
478
|
+
weightedOverlap += Math.log(N / freq) + 1;
|
|
450
479
|
totalWeight += maxIdf;
|
|
451
480
|
}
|
|
452
|
-
//
|
|
481
|
+
// Scaled so that matching half the tags at average weight gives about 0.5.
|
|
453
482
|
const tagScore = totalWeight > 0 ? Math.min(1, (weightedOverlap / totalWeight) * 2) : 0;
|
|
454
|
-
|
|
455
|
-
const newTokens = new Set(content.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
|
|
483
|
+
const newTokens = significantTokens(content);
|
|
456
484
|
if (newTokens.size === 0)
|
|
457
485
|
return Math.min(1, Math.max(0, tagScore));
|
|
486
|
+
// The content score is capped at 1, which this many matching memories reach.
|
|
487
|
+
const enough = Math.max(5, N * CONTENT_ENOUGH_FRACTION);
|
|
458
488
|
let contentMatches = 0;
|
|
459
|
-
for (const
|
|
460
|
-
const entryTokens =
|
|
489
|
+
for (const text of source.contents) {
|
|
490
|
+
const entryTokens = significantTokens(text);
|
|
461
491
|
let shared = 0;
|
|
462
492
|
for (const token of newTokens) {
|
|
463
493
|
if (entryTokens.has(token))
|
|
464
494
|
shared++;
|
|
465
495
|
}
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
contentMatches++;
|
|
496
|
+
if (shared / newTokens.size > CONTENT_TOKEN_SHARE_MIN && ++contentMatches >= enough)
|
|
497
|
+
break;
|
|
469
498
|
}
|
|
470
|
-
const contentScore = Math.min(1, contentMatches /
|
|
471
|
-
|
|
472
|
-
const fit = 0.6 * tagScore + 0.4 * contentScore;
|
|
499
|
+
const contentScore = Math.min(1, contentMatches / enough);
|
|
500
|
+
const fit = TAG_FIT_WEIGHT * tagScore + CONTENT_FIT_WEIGHT * contentScore;
|
|
473
501
|
return Math.min(1, Math.max(0, fit));
|
|
474
502
|
}
|
|
475
503
|
function inferValence(tags) {
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* conflict repulsion, and drag (consolidation). Nearby high-scoring memories
|
|
10
10
|
* amplify each other via constructive interference.
|
|
11
11
|
*/
|
|
12
|
-
import type
|
|
12
|
+
import { type EmotionalValence } from './memory.js';
|
|
13
13
|
import type { PhysicsConfig } from './physics-config.js';
|
|
14
14
|
export interface PhysicsParticle {
|
|
15
15
|
memoryId: string;
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* amplify each other via constructive interference.
|
|
11
11
|
*/
|
|
12
12
|
import { isRecallBoostAblated } from './ablation.js';
|
|
13
|
+
import { FALLBACK_HALF_LIFE_DAYS } from './memory.js';
|
|
13
14
|
import { comparePhysicsResultsBy } from './compare.js';
|
|
14
15
|
// ---------------------------------------------------------------------------
|
|
15
16
|
// Vector math (hot path — kept inline for performance)
|
|
@@ -183,7 +184,7 @@ function computeNetForce(i, particles, ctx) {
|
|
|
183
184
|
}
|
|
184
185
|
}
|
|
185
186
|
// Drag
|
|
186
|
-
const fd = dragForce(pi, ctx.config.drag, ctx.halfLives.get(pi.memoryId) ??
|
|
187
|
+
const fd = dragForce(pi, ctx.config.drag, ctx.halfLives.get(pi.memoryId) ?? FALLBACK_HALF_LIFE_DAYS);
|
|
187
188
|
net = vecAdd(net, fd);
|
|
188
189
|
return net;
|
|
189
190
|
}
|
|
@@ -41,11 +41,6 @@ export interface ResolveProjectIdentityOpts {
|
|
|
41
41
|
}
|
|
42
42
|
/** Clear the per-process identity cache and the remote switch it read (test seam). */
|
|
43
43
|
export declare function clearProjectIdentityCache(): void;
|
|
44
|
-
/**
|
|
45
|
-
* Canonicalize a path via realpath, falling back to path.resolve when the
|
|
46
|
-
* path does not exist or realpath fails (mirrors importers.ts).
|
|
47
|
-
*/
|
|
48
|
-
export declare function realpathOrResolve(p: string): string;
|
|
49
44
|
/**
|
|
50
45
|
* Resolve the project identity for a working directory.
|
|
51
46
|
* Defaults to process.cwd(). Results are cached per resolved input path.
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { envHippoHome, envXdgDataHome } from '
|
|
1
|
+
import { envHippoHome, envXdgDataHome } from '../util/env.js';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as os from 'os';
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import { BadRequestError } from './api-errors.js';
|
|
6
6
|
import { isSharedStore, loadConfig } from './config.js';
|
|
7
|
-
import { MAX_ID_LEN } from '
|
|
8
|
-
import { log } from '
|
|
7
|
+
import { MAX_ID_LEN } from '../util/http-util.js';
|
|
8
|
+
import { errorMessage, log } from '../util/log.js';
|
|
9
9
|
import { originRemoteId, projectFileId } from './project-remote.js';
|
|
10
|
+
import { realpathOrResolve } from '../util/real-path.js';
|
|
10
11
|
const MAX_WALK_DEPTH = 64;
|
|
11
12
|
const identityCache = new Map();
|
|
12
13
|
let remoteSwitch = null;
|
|
@@ -30,19 +31,6 @@ function namesAt(root, legacyName) {
|
|
|
30
31
|
const aliases = [...new Set([fileId, remoteId, legacyName])].filter((n) => n !== null && n !== name);
|
|
31
32
|
return aliases.length > 0 ? { name, aliases } : { name };
|
|
32
33
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Canonicalize a path via realpath, falling back to path.resolve when the
|
|
35
|
-
* path does not exist or realpath fails (mirrors importers.ts).
|
|
36
|
-
*/
|
|
37
|
-
export function realpathOrResolve(p) {
|
|
38
|
-
try {
|
|
39
|
-
return fs.realpathSync.native(p);
|
|
40
|
-
}
|
|
41
|
-
catch (err) {
|
|
42
|
-
log.debug(`project identity: realpath fell back to resolve for ${p}: ${err instanceof Error ? err.message : String(err)}`);
|
|
43
|
-
return path.resolve(p);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
34
|
/** Compare two canonical paths, case-insensitively on Windows. */
|
|
47
35
|
function samePath(a, b) {
|
|
48
36
|
if (process.platform === 'win32')
|
|
@@ -68,7 +56,7 @@ function isDirectoryAt(p) {
|
|
|
68
56
|
return fs.statSync(p).isDirectory();
|
|
69
57
|
}
|
|
70
58
|
catch (err) {
|
|
71
|
-
log.debug(`project identity: no marker at ${p}: ${
|
|
59
|
+
log.debug(`project identity: no marker at ${p}: ${errorMessage(err)}`);
|
|
72
60
|
return false;
|
|
73
61
|
}
|
|
74
62
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
4
|
import { isObjectLike, isStringValue } from './capture-contract.js';
|
|
5
|
-
import { log } from '
|
|
5
|
+
import { errorMessage, log } from '../util/log.js';
|
|
6
6
|
/** The config file git reads for a checkout: `.git/config`, a linked worktree's `<commondir>/config`, a submodule's `<gitdir>/config`. */
|
|
7
7
|
export function gitConfigPath(gitRoot) {
|
|
8
8
|
const marker = path.join(gitRoot, '.git');
|
|
@@ -19,7 +19,7 @@ export function gitConfigPath(gitRoot) {
|
|
|
19
19
|
return path.join(path.resolve(linkDir, fs.readFileSync(commondir, 'utf8').trim()), 'config');
|
|
20
20
|
}
|
|
21
21
|
catch (err) {
|
|
22
|
-
log.debug(`project remote: no git config for ${gitRoot}: ${
|
|
22
|
+
log.debug(`project remote: no git config for ${gitRoot}: ${errorMessage(err)}`);
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -111,7 +111,7 @@ export function originRemoteId(gitRoot) {
|
|
|
111
111
|
return url === null ? null : normaliseRemote(url);
|
|
112
112
|
}
|
|
113
113
|
catch (err) {
|
|
114
|
-
log.debug(`project remote: ${file} not read: ${
|
|
114
|
+
log.debug(`project remote: ${file} not read: ${errorMessage(err)}`);
|
|
115
115
|
return null;
|
|
116
116
|
}
|
|
117
117
|
}
|
|
@@ -131,7 +131,7 @@ export function projectFileId(root) {
|
|
|
131
131
|
log.warn(`${file}: "id" must be a non-empty string with no colon, slash or spaces; using the remote or folder name instead`);
|
|
132
132
|
}
|
|
133
133
|
catch (err) {
|
|
134
|
-
log.warn(`${file} not read: ${
|
|
134
|
+
log.warn(`${file} not read: ${errorMessage(err)}; using the remote or folder name instead`);
|
|
135
135
|
}
|
|
136
136
|
return null;
|
|
137
137
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Recall gated on the hook prompt, not the five newest memories (pure, no I/O). */
|
|
2
|
-
import { tokenize } from '
|
|
2
|
+
import { tokenize } from '../util/tokenize.js';
|
|
3
3
|
import { STOP_WORDS } from './memory-quality.js';
|
|
4
4
|
// Latency bound, not tuned: fixed in the prereg regardless of gate config.
|
|
5
5
|
export const PROMPT_RECALL_MAX_CHARS = 4000;
|
|
@@ -5,8 +5,17 @@
|
|
|
5
5
|
* Inspired by the biological salience network (anterior insula + dACC):
|
|
6
6
|
* not everything that enters working memory deserves long-term storage.
|
|
7
7
|
*/
|
|
8
|
-
import { textOverlap } from '
|
|
9
|
-
import { duplicateKey, heldTextKeys } from '
|
|
8
|
+
import { textOverlap } from '../util/tokenize.js';
|
|
9
|
+
import { duplicateKey, heldTextKeys } from '../util/same-text.js';
|
|
10
|
+
// Each store or skip reason carries a score; a novel memory adds bonuses for structure and length.
|
|
11
|
+
const REPEAT_ERROR_SCORE = 0.3;
|
|
12
|
+
const ERROR_DESPITE_OVERLAP_SCORE = 0.7;
|
|
13
|
+
const NEAR_DUPLICATE_SCORE = 0.5;
|
|
14
|
+
const DUPLICATE_SCORE = 0.1;
|
|
15
|
+
const NOVEL_ERROR_SCORE = 0.9;
|
|
16
|
+
const NOVEL_BASE_SCORE = 0.5;
|
|
17
|
+
const STRUCTURED_TAGS_BONUS = 0.15;
|
|
18
|
+
const LENGTH_BONUS = 0.1;
|
|
10
19
|
const DEFAULTS = {
|
|
11
20
|
recentWindow: 20,
|
|
12
21
|
overlapThreshold: 0.6,
|
|
@@ -33,34 +42,40 @@ export function computeSalience(content, tags, recentMemories, options = {}) {
|
|
|
33
42
|
return {
|
|
34
43
|
decision: 'start_weak',
|
|
35
44
|
reason: `repeat_error (${recentErrors} recent errors, overlap ${(duplicateMatch.overlap * 100).toFixed(0)}% with ${duplicateMatch.matchId})`,
|
|
36
|
-
score:
|
|
45
|
+
score: REPEAT_ERROR_SCORE,
|
|
37
46
|
};
|
|
38
47
|
}
|
|
39
|
-
return { decision: 'store', reason: 'error_despite_overlap', score:
|
|
48
|
+
return { decision: 'store', reason: 'error_despite_overlap', score: ERROR_DESPITE_OVERLAP_SCORE };
|
|
40
49
|
}
|
|
41
|
-
|
|
42
|
-
const key = duplicateKey(trimmed);
|
|
43
|
-
const same = window.find((m) => heldTextKeys(m).includes(key));
|
|
44
|
-
if (!same) {
|
|
45
|
-
return {
|
|
46
|
-
decision: 'store',
|
|
47
|
-
reason: `near_duplicate (${(duplicateMatch.overlap * 100).toFixed(0)}% overlap with ${duplicateMatch.matchId})`,
|
|
48
|
-
score: 0.5,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
return { decision: 'skip', reason: `duplicate (same text as ${same.id})`, score: 0.1 };
|
|
50
|
+
return judgeOverlappingNonError(trimmed, window, duplicateMatch);
|
|
52
51
|
}
|
|
53
52
|
if (isError) {
|
|
54
|
-
return { decision: 'store', reason: 'error_novel', score:
|
|
53
|
+
return { decision: 'store', reason: 'error_novel', score: NOVEL_ERROR_SCORE };
|
|
54
|
+
}
|
|
55
|
+
return scoreNovel(trimmed, tags);
|
|
56
|
+
}
|
|
57
|
+
function judgeOverlappingNonError(trimmed, window, duplicateMatch) {
|
|
58
|
+
// A near-duplicate may be a changed value (port 8080 then 8081), so only the same text is skipped.
|
|
59
|
+
const key = duplicateKey(trimmed);
|
|
60
|
+
const same = window.find((m) => heldTextKeys(m).includes(key));
|
|
61
|
+
if (!same) {
|
|
62
|
+
return {
|
|
63
|
+
decision: 'store',
|
|
64
|
+
reason: `near_duplicate (${(duplicateMatch.overlap * 100).toFixed(0)}% overlap with ${duplicateMatch.matchId})`,
|
|
65
|
+
score: NEAR_DUPLICATE_SCORE,
|
|
66
|
+
};
|
|
55
67
|
}
|
|
68
|
+
return { decision: 'skip', reason: `duplicate (same text as ${same.id})`, score: DUPLICATE_SCORE };
|
|
69
|
+
}
|
|
70
|
+
function scoreNovel(trimmed, tags) {
|
|
56
71
|
const hasStructuredTags = tags.some(t => t.startsWith('speaker:') || t.startsWith('topic:') || t.startsWith('scope:'));
|
|
57
|
-
let score =
|
|
72
|
+
let score = NOVEL_BASE_SCORE;
|
|
58
73
|
if (hasStructuredTags)
|
|
59
|
-
score +=
|
|
74
|
+
score += STRUCTURED_TAGS_BONUS;
|
|
60
75
|
if (trimmed.length > 100)
|
|
61
|
-
score +=
|
|
76
|
+
score += LENGTH_BONUS;
|
|
62
77
|
if (trimmed.length > 300)
|
|
63
|
-
score +=
|
|
78
|
+
score += LENGTH_BONUS;
|
|
64
79
|
return { decision: 'store', reason: 'novel', score: Math.min(score, 1.0) };
|
|
65
80
|
}
|
|
66
81
|
function findBestOverlap(content, memories) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MemoryEntry } from '
|
|
1
|
+
import type { MemoryEntry } from './memory.js';
|
|
2
2
|
export declare const DEFAULT_RECALL_BUDGET = 4000;
|
|
3
3
|
export declare const DEFAULT_LOCAL_BUMP = 1.2;
|
|
4
4
|
/** One score mutation applied after candidate generation; allocated only under `recall --why` or `RecallOpts.explain`. */
|
|
@@ -90,4 +90,4 @@ export interface ScoreBreakdown {
|
|
|
90
90
|
/** 1.05 if a summary was rebuilt within 7 days; 1.0 otherwise. */
|
|
91
91
|
summaryFreshnessBoost?: number;
|
|
92
92
|
}
|
|
93
|
-
//# sourceMappingURL=types.d.ts.map
|
|
93
|
+
//# sourceMappingURL=search-types.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MemoryEntry } from './memory.js';
|
|
2
|
+
export declare const SESSION_DIGEST_TAG = "session-digest";
|
|
3
|
+
/** Facts extracted from a digest and DAG summaries over one inherit its tag, but they are not the digest itself. */
|
|
4
|
+
export declare function isSessionDigestRow(entry: Pick<MemoryEntry, 'source' | 'tags' | 'extracted_from'>): boolean;
|
|
5
|
+
//# sourceMappingURL=session-digest-row.d.ts.map
|