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
package/dist/memory.js
DELETED
|
@@ -1,522 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Core data model for Hippo memory entries.
|
|
3
|
-
* Based on the strength formula from PLAN.md.
|
|
4
|
-
*/
|
|
5
|
-
import { envLossAversionRatio } from './env.js';
|
|
6
|
-
import { BadRequestError } from './api-errors.js';
|
|
7
|
-
import { randomUUID } from 'crypto';
|
|
8
|
-
import { isDecayAblated, isOutcomeSlowAblated, isRecallBoostAblated, evalNow, } from './ablation.js';
|
|
9
|
-
import { AGENT_MEMORY_TOOLS, toolSourcePrefix } from './agent-memories/tools.js';
|
|
10
|
-
export var Layer;
|
|
11
|
-
(function (Layer) {
|
|
12
|
-
Layer["Buffer"] = "buffer";
|
|
13
|
-
Layer["Episodic"] = "episodic";
|
|
14
|
-
Layer["Semantic"] = "semantic";
|
|
15
|
-
Layer["Trace"] = "trace";
|
|
16
|
-
})(Layer || (Layer = {}));
|
|
17
|
-
/** Tag on a memory whose named file/symbol/script changed after it was stored. */
|
|
18
|
-
export const CHURN_STALE_TAG = 'churn-stale';
|
|
19
|
-
// Emotional multipliers from PLAN.md. Losses weigh ~2x equivalent gains (Lovallo-Kahneman TFAS empirics),
|
|
20
|
-
// so negative is 2.0. `negative` is further scaled per-process by HIPPO_LOSS_AVERSION_RATIO
|
|
21
|
-
// (env var, default 1.0; see getLossAversionRatio + applyLossAversionRatio).
|
|
22
|
-
const EMOTIONAL_MULTIPLIERS = {
|
|
23
|
-
neutral: 1.0,
|
|
24
|
-
positive: 1.0,
|
|
25
|
-
negative: 2.0, // error-tagged
|
|
26
|
-
critical: 2.0,
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Module-level lazy-cached read of HIPPO_LOSS_AVERSION_RATIO.
|
|
30
|
-
*
|
|
31
|
-
* `calculateStrength` is called per-entry inside hot recall loops
|
|
32
|
-
* (api.ts/consolidate.ts/search.ts), so a per-call `process.env` lookup
|
|
33
|
-
* would multiply N entries by M recalls of lookup cost. Lazy module-cache
|
|
34
|
-
* reads the env ONCE on first call and memoizes for the process lifetime.
|
|
35
|
-
* Test isolation via `_resetLossAversionRatioCacheForTests()` below.
|
|
36
|
-
*/
|
|
37
|
-
/**
|
|
38
|
-
* Minimum acceptable ratio. Below this, the negative multiplier
|
|
39
|
-
* (2.0 * ratio) becomes small enough that calculateStrength * decay can fall
|
|
40
|
-
* below `DECAY_THRESHOLD = 0.05` in `src/consolidate.ts:146`, which would
|
|
41
|
-
* permanently delete non-pinned error-tagged memories on the next sleep
|
|
42
|
-
* cycle. 0.5 is chosen as the floor because (a) it recovers the pre-calibration
|
|
43
|
-
* effective multiplier (2.0 * 0.5 = 1.0 + the negative premium, i.e. 1.5x
|
|
44
|
-
* the pre-calibration default), and (b) below this the user is asking for LESS
|
|
45
|
-
* loss aversion than has ever shipped — that's outside the supported
|
|
46
|
-
* tuning range.
|
|
47
|
-
*/
|
|
48
|
-
const LOSS_AVERSION_RATIO_MIN = 0.5;
|
|
49
|
-
/**
|
|
50
|
-
* Validation policy:
|
|
51
|
-
* - Valid: finite numbers >= 0.5.
|
|
52
|
-
* - Invalid (silent fallback to 1.0): empty string, non-numeric,
|
|
53
|
-
* numbers below 0.5 (including 0 and negatives), NaN, +/-Infinity.
|
|
54
|
-
* Silent because opt-in env vars should not crash production recall
|
|
55
|
-
* on a typo.
|
|
56
|
-
*
|
|
57
|
-
* Why the 0.5 floor and not 0:
|
|
58
|
-
* - Rejecting only `0` leaves the same silent data-loss surface for any ratio
|
|
59
|
-
* below ~0.025 (and worse for aged memories, where even ratio=0.25
|
|
60
|
-
* can produce strength < DECAY_THRESHOLD = 0.05 in consolidate.ts).
|
|
61
|
-
* Floor at the pre-calibration equivalent (0.5) so the env var's tuning
|
|
62
|
-
* range never crosses into the deletion regime.
|
|
63
|
-
* - Users wanting LESS loss aversion than the pre-calibration 1.5 multiplier
|
|
64
|
-
* should reconsider the design intent (the calibration was
|
|
65
|
-
* toward MORE loss aversion, not less). If a future use case
|
|
66
|
-
* genuinely needs ratio < 0.5, the right path is a separate
|
|
67
|
-
* `HIPPO_NEGATIVE_MULTIPLIER` env override.
|
|
68
|
-
*/
|
|
69
|
-
let _lossAversionRatioCache;
|
|
70
|
-
function getLossAversionRatio() {
|
|
71
|
-
if (_lossAversionRatioCache !== undefined)
|
|
72
|
-
return _lossAversionRatioCache;
|
|
73
|
-
const raw = envLossAversionRatio();
|
|
74
|
-
if (raw === undefined || raw === '') {
|
|
75
|
-
_lossAversionRatioCache = 1.0;
|
|
76
|
-
return 1.0;
|
|
77
|
-
}
|
|
78
|
-
const parsed = Number(raw);
|
|
79
|
-
// Finite + >= 0.5 floor. Anything below 0.5 silently falls back to 1.0
|
|
80
|
-
// to avoid the consolidation-deletion vector (see JSDoc above).
|
|
81
|
-
if (!Number.isFinite(parsed) || parsed < LOSS_AVERSION_RATIO_MIN) {
|
|
82
|
-
_lossAversionRatioCache = 1.0;
|
|
83
|
-
return 1.0;
|
|
84
|
-
}
|
|
85
|
-
_lossAversionRatioCache = parsed;
|
|
86
|
-
return parsed;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Test-only helper. Tests that mutate `process.env.HIPPO_LOSS_AVERSION_RATIO`
|
|
90
|
-
* MUST call this in BOTH `beforeEach` AND `afterEach`:
|
|
91
|
-
* - beforeEach: clear any stale cache from a previous test before setting
|
|
92
|
-
* the env var for this test.
|
|
93
|
-
* - afterEach: clear the cache so the next test (which may not set the env
|
|
94
|
-
* var) reads the clean default instead of this test's value.
|
|
95
|
-
* See `tests/emotional-multipliers-j5.test.ts` for the canonical pattern.
|
|
96
|
-
*/
|
|
97
|
-
export function _resetLossAversionRatioCacheForTests() {
|
|
98
|
-
_lossAversionRatioCache = undefined;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Apply the loss-aversion ratio scalar to the `negative` multiplier ONLY.
|
|
102
|
-
* Other valences (positive, critical, neutral) pass through unchanged.
|
|
103
|
-
* `critical` is deliberately NOT scaled, so the calibration only touches the
|
|
104
|
-
* specific empirical claim (TFAS 2x losses-vs-gains).
|
|
105
|
-
*/
|
|
106
|
-
function applyLossAversionRatio(valence, baseMultiplier) {
|
|
107
|
-
if (valence !== 'negative')
|
|
108
|
-
return baseMultiplier;
|
|
109
|
-
return baseMultiplier * getLossAversionRatio();
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Compute the reward factor from cumulative outcome counts.
|
|
113
|
-
*
|
|
114
|
-
* reward_ratio = (positive - negative) / (positive + negative + 1)
|
|
115
|
-
* reward_factor = 1 + 0.5 * reward_ratio
|
|
116
|
-
*
|
|
117
|
-
* Range: (0.5, 1.5). Neutral (no outcomes) returns 1.0.
|
|
118
|
-
* Modulates effective half-life: memories with consistent positive outcomes
|
|
119
|
-
* decay slower; consistent negative outcomes decay faster.
|
|
120
|
-
*/
|
|
121
|
-
export function calculateRewardFactor(entry) {
|
|
122
|
-
// EVAL-ONLY ablation (see ablation.ts): the slow outcome channel.
|
|
123
|
-
if (isOutcomeSlowAblated())
|
|
124
|
-
return 1.0;
|
|
125
|
-
const pos = entry.outcome_positive ?? 0;
|
|
126
|
-
const neg = entry.outcome_negative ?? 0;
|
|
127
|
-
if (pos === 0 && neg === 0)
|
|
128
|
-
return 1.0;
|
|
129
|
-
const ratio = (pos - neg) / (pos + neg + 1);
|
|
130
|
-
return 1 + 0.5 * ratio;
|
|
131
|
-
}
|
|
132
|
-
/** Bad marks alone never push a memory under sleep's 0.05 retire line; supersede is the hard correction. */
|
|
133
|
-
const MAX_WRONG_HALVINGS = 3;
|
|
134
|
-
/**
|
|
135
|
-
* Net wrongness: bad outcome marks past good ones, never below zero.
|
|
136
|
-
* Strength halves per unit (capped at 3) and recall stops strengthening
|
|
137
|
-
* the memory, so a correction outranks pinning, error tags and heavy recall.
|
|
138
|
-
*/
|
|
139
|
-
export function netWrong(entry) {
|
|
140
|
-
if (isOutcomeSlowAblated() || isDecayAblated())
|
|
141
|
-
return 0;
|
|
142
|
-
return Math.max(0, (entry.outcome_negative ?? 0) - (entry.outcome_positive ?? 0));
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Calculate current strength at a given time.
|
|
146
|
-
* strength(t) = base_strength * decay * retrieval_boost * emotional_multiplier
|
|
147
|
-
*
|
|
148
|
-
* Decay basis modes:
|
|
149
|
-
* - clock: classic wall-clock decay (daysSince / halfLife)
|
|
150
|
-
* - session: decay by sleep cycles instead of days (sessionsSince / halfLife)
|
|
151
|
-
* - adaptive: wall-clock decay with half-life scaled by session frequency
|
|
152
|
-
*
|
|
153
|
-
* Pinned memories skip time decay; being marked wrong still fades them (netWrong).
|
|
154
|
-
*/
|
|
155
|
-
export function calculateStrength(entry,
|
|
156
|
-
// evalNow(): the real clock unless HIPPO_FAKE_NOW is set (eval-only,
|
|
157
|
-
// simulated-time protocols; see ablation.ts). Explicit `now` always wins.
|
|
158
|
-
now = evalNow(), options = {}) {
|
|
159
|
-
// Being marked wrong outranks every shield: pinning, error tags, heavy recall.
|
|
160
|
-
const wrongPenalty = Math.pow(0.5, Math.min(netWrong(entry), MAX_WRONG_HALVINGS));
|
|
161
|
-
if (entry.pinned)
|
|
162
|
-
return wrongPenalty;
|
|
163
|
-
// EVAL-ONLY ablation (see ablation.ts): anchor decay at CREATION, so clock resets persisted by PRIOR
|
|
164
|
-
// unflagged runs cannot leak strengthening into an ablated arm. Prior-run half_life increments are
|
|
165
|
-
// NOT reconstructed - see the ablation.ts caveat (fresh stores per arm).
|
|
166
|
-
const lastRetrieved = new Date(isRecallBoostAblated() ? entry.created : entry.last_retrieved);
|
|
167
|
-
const daysSince = (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24);
|
|
168
|
-
// Reward-proportional half-life modulation
|
|
169
|
-
const rewardFactor = calculateRewardFactor(entry);
|
|
170
|
-
let effectiveHalfLife = entry.half_life_days * rewardFactor;
|
|
171
|
-
// Guard: zero half-life causes 0/0 = NaN in the exponent
|
|
172
|
-
if (effectiveHalfLife <= 0)
|
|
173
|
-
return 0.0;
|
|
174
|
-
const basis = options.decayBasis ?? 'clock';
|
|
175
|
-
let decayExponent;
|
|
176
|
-
if (basis === 'session') {
|
|
177
|
-
// Decay by session count: each sleep cycle = 1 "day" in the decay formula.
|
|
178
|
-
// Estimate sessions since last retrieval from wall-clock time and avg interval.
|
|
179
|
-
const avgInterval = options.avgSessionIntervalDays ?? 1;
|
|
180
|
-
const sessionsSince = avgInterval > 0 ? Math.max(0, daysSince / avgInterval) : daysSince;
|
|
181
|
-
decayExponent = sessionsSince / effectiveHalfLife;
|
|
182
|
-
}
|
|
183
|
-
else if (basis === 'adaptive') {
|
|
184
|
-
// Scale half-life by session frequency: infrequent agents get longer half-lives
|
|
185
|
-
const avgInterval = options.avgSessionIntervalDays ?? 0;
|
|
186
|
-
if (avgInterval > 1) {
|
|
187
|
-
effectiveHalfLife *= avgInterval;
|
|
188
|
-
}
|
|
189
|
-
decayExponent = daysSince / effectiveHalfLife;
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
// clock: classic wall-clock decay
|
|
193
|
-
decayExponent = daysSince / effectiveHalfLife;
|
|
194
|
-
}
|
|
195
|
-
// EVAL-ONLY ablation (see ablation.ts): decay term := 1. NOTE the [0,1]
|
|
196
|
-
// clamp below then caps retrievalBoost at baseline - see ablation.ts
|
|
197
|
-
// formula note.
|
|
198
|
-
const decay = isDecayAblated() ? 1.0 : Math.pow(0.5, decayExponent);
|
|
199
|
-
// Retrieval boost: 1 + 0.1 * log2(retrieval_count + 1). EVAL-ONLY ablation (see ablation.ts) neutralizes
|
|
200
|
-
// the READ side too, so counts written before the flag cannot leak strengthening into an ablated arm.
|
|
201
|
-
const retrievalBoost = isRecallBoostAblated() || netWrong(entry) > 0
|
|
202
|
-
? 1.0
|
|
203
|
-
: 1 + 0.1 * Math.log2(entry.retrieval_count + 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;
|
|
212
|
-
}
|
|
213
|
-
/** calculateStrength's clock-basis formula as SQL over `memories` columns, flags and multipliers baked in; keep in step.
|
|
214
|
-
* An unparseable date scores NULL here and 0 in JS, so sums agree. */
|
|
215
|
-
export function strengthSql(now) {
|
|
216
|
-
const num = (n) => (Number.isInteger(n) ? n.toFixed(1) : String(n));
|
|
217
|
-
const pos = 'COALESCE(outcome_positive, 0)';
|
|
218
|
-
const neg = 'COALESCE(outcome_negative, 0)';
|
|
219
|
-
const wrong = isOutcomeSlowAblated() || isDecayAblated() ? '0' : `MAX(0, ${neg} - ${pos})`;
|
|
220
|
-
const reward = isOutcomeSlowAblated()
|
|
221
|
-
? '1.0'
|
|
222
|
-
: `(CASE WHEN ${pos} = 0 AND ${neg} = 0 THEN 1.0 ELSE 1.0 + 0.5 * (${pos} - ${neg}) / (${pos} + ${neg} + 1.0) END)`;
|
|
223
|
-
const halfLife = `(COALESCE(half_life_days, 7) * ${reward})`;
|
|
224
|
-
const anchor = isRecallBoostAblated() ? 'created' : 'last_retrieved';
|
|
225
|
-
const nowJulian = num(now.getTime() / 86400000 + 2440587.5);
|
|
226
|
-
const decay = isDecayAblated() ? '1.0' : `pow(0.5, (${nowJulian} - julianday(${anchor})) / ${halfLife})`;
|
|
227
|
-
const boost = isRecallBoostAblated()
|
|
228
|
-
? '1.0'
|
|
229
|
-
: `(CASE WHEN ${wrong} > 0 THEN 1.0 ELSE 1.0 + 0.1 * log2(COALESCE(retrieval_count, 0) + 1) END)`;
|
|
230
|
-
const valences = /* SAFETY: a Record keyed by EmotionalValence */ Object.keys(EMOTIONAL_MULTIPLIERS);
|
|
231
|
-
const emotion = `(CASE COALESCE(emotional_valence, 'neutral') ${valences
|
|
232
|
-
.map((v) => `WHEN '${v}' THEN ${num(applyLossAversionRatio(v, EMOTIONAL_MULTIPLIERS[v]))}`)
|
|
233
|
-
.join(' ')} ELSE 1.0 END)`;
|
|
234
|
-
const penalty = `pow(0.5, MIN(${wrong}, ${MAX_WRONG_HALVINGS}))`;
|
|
235
|
-
return `(CASE WHEN pinned THEN ${penalty} WHEN ${halfLife} <= 0 THEN 0.0
|
|
236
|
-
ELSE MIN(1.0, MAX(0.0, ${decay} * ${boost} * ${emotion})) * ${penalty} END)`;
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Derive half-life based on signals, as per PLAN.md table.
|
|
240
|
-
*/
|
|
241
|
-
export function deriveHalfLife(base, entry) {
|
|
242
|
-
let hl = base;
|
|
243
|
-
// Error-tagged: 2x half-life
|
|
244
|
-
if (entry.tags?.includes('error')) {
|
|
245
|
-
hl *= 2;
|
|
246
|
-
}
|
|
247
|
-
// High schema fit: consolidates faster (1.5x)
|
|
248
|
-
if (entry.schema_fit !== undefined && entry.schema_fit > 0.7) {
|
|
249
|
-
hl *= 1.5;
|
|
250
|
-
}
|
|
251
|
-
// Low schema fit: decay faster (0.5x)
|
|
252
|
-
if (entry.schema_fit !== undefined && entry.schema_fit < 0.3) {
|
|
253
|
-
hl *= 0.5;
|
|
254
|
-
}
|
|
255
|
-
return hl;
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Apply outcome feedback to a memory entry.
|
|
259
|
-
*
|
|
260
|
-
* Increments outcome_positive or outcome_negative counters.
|
|
261
|
-
* The reward factor in calculateStrength() uses these counts to
|
|
262
|
-
* continuously modulate the effective half-life:
|
|
263
|
-
* reward_ratio = (pos - neg) / (pos + neg + 1)
|
|
264
|
-
* reward_factor = 1 + 0.5 * reward_ratio // range (0.5, 1.5)
|
|
265
|
-
* effective_hl = half_life_days * reward_factor
|
|
266
|
-
*
|
|
267
|
-
* No fixed half-life delta. Decay rate adjusts proportionally to
|
|
268
|
-
* cumulative reward signal, inspired by R-STDP in spiking networks.
|
|
269
|
-
*/
|
|
270
|
-
export function applyOutcome(entry, good) {
|
|
271
|
-
const updated = {
|
|
272
|
-
...entry,
|
|
273
|
-
outcome_score: good ? 1 : -1,
|
|
274
|
-
outcome_positive: (entry.outcome_positive ?? 0) + (good ? 1 : 0),
|
|
275
|
-
outcome_negative: (entry.outcome_negative ?? 0) + (good ? 0 : 1),
|
|
276
|
-
};
|
|
277
|
-
updated.strength = calculateStrength(updated);
|
|
278
|
-
return updated;
|
|
279
|
-
}
|
|
280
|
-
/** applyOutcome as a served outcome applies it: a good outcome reconfirms the entry, so its churn-stale tag goes. */
|
|
281
|
-
export function entryAfterOutcome(entry, good) {
|
|
282
|
-
const updated = applyOutcome(entry, good);
|
|
283
|
-
if (!good || !updated.tags.includes(CHURN_STALE_TAG))
|
|
284
|
-
return updated;
|
|
285
|
-
return { ...updated, tags: updated.tags.filter((t) => t !== CHURN_STALE_TAG) };
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Generate a random memory ID using crypto.randomUUID().
|
|
289
|
-
*/
|
|
290
|
-
export function generateId(prefix = 'mem') {
|
|
291
|
-
return `${prefix}_${randomUUID().replace(/-/g, '').slice(0, 12)}`;
|
|
292
|
-
}
|
|
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
|
-
function isAgedOut(entry, now) {
|
|
296
|
-
if (entry.pinned || entry.confidence === 'verified')
|
|
297
|
-
return false;
|
|
298
|
-
const lastRetrieved = new Date(entry.last_retrieved);
|
|
299
|
-
return (now.getTime() - lastRetrieved.getTime()) / (1000 * 60 * 60 * 24) > 30;
|
|
300
|
-
}
|
|
301
|
-
export function confidenceFacets(entry, now = evalNow()) {
|
|
302
|
-
return { tier: entry.confidence, agedOut: isAgedOut(entry, now) };
|
|
303
|
-
}
|
|
304
|
-
// `warn` covers exactly the rows the old collapsed-value rule did: an aged-out row
|
|
305
|
-
// used to read 'stale', so warning on it separately keeps the same set.
|
|
306
|
-
export function confidenceLabel(entry, now = evalNow()) {
|
|
307
|
-
const { tier, agedOut } = confidenceFacets(entry, now);
|
|
308
|
-
return {
|
|
309
|
-
text: agedOut ? `${tier}, aged` : tier,
|
|
310
|
-
warn: agedOut || tier === 'stale' || tier === 'inferred',
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Resolve the effective confidence for a memory entry.
|
|
315
|
-
* If the entry has not been retrieved in 30+ days and is not 'verified',
|
|
316
|
-
* returns 'stale'. Otherwise returns the stored confidence value.
|
|
317
|
-
*/
|
|
318
|
-
export function resolveConfidence(entry, now = evalNow()) {
|
|
319
|
-
return isAgedOut(entry, now) ? 'stale' : entry.confidence;
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* Base half-life for a new memory, in days, before `deriveHalfLife`'s
|
|
323
|
-
* write-time multipliers. 365 because 7 days lost the current fact far more
|
|
324
|
-
* 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).
|
|
326
|
-
*/
|
|
327
|
-
export const DEFAULT_HALF_LIFE_DAYS = 365;
|
|
328
|
-
export const COMPACTION_MEMORY_TAG = 'compaction-memory';
|
|
329
|
-
export const COMPACTION_SOURCE_PREFIX = 'compaction:';
|
|
330
|
-
export const KEEP_PAIRS = AGENT_MEMORY_TOOLS.map((t) => ({ tag: t.tag, sourcePrefix: toolSourcePrefix(t.id) }));
|
|
331
|
-
const sqlText = (s) => `'${s.replace(/'/g, "''")}'`;
|
|
332
|
-
// json_each matches the tag as a whole element; substr, not LIKE, keeps the prefix case-sensitive like startsWith.
|
|
333
|
-
const keepPairSql = (p) => `(COALESCE(superseded_by, '') = '' AND EXISTS (SELECT 1 FROM json_each(CASE WHEN json_valid(tags_json) THEN tags_json ELSE '[]' END) WHERE value = ${sqlText(p.tag)}) AND substr(source, 1, ${p.sourcePrefix.length}) = ${sqlText(p.sourcePrefix)})`;
|
|
334
|
-
// Pinned and kept rows stay (a superseded row is not kept: its successor carries the tag and source); raw rows leave only through archiveRawMemory. The SQL twin guards the DELETE itself.
|
|
335
|
-
export const AUTO_DELETABLE_SQL = `pinned = 0 AND kind != 'raw'${KEEP_PAIRS.map((p) => ` AND NOT ${keepPairSql(p)}`).join('')}`;
|
|
336
|
-
export function isKeptForGood(entry) {
|
|
337
|
-
return !entry.superseded_by && KEEP_PAIRS.some((p) => entry.tags.includes(p.tag) && entry.source.startsWith(p.sourcePrefix));
|
|
338
|
-
}
|
|
339
|
-
export function canAutoDelete(entry) {
|
|
340
|
-
return !entry.pinned && entry.kind !== 'raw' && !isKeptForGood(entry);
|
|
341
|
-
}
|
|
342
|
-
export function createMemory(content, options = {}) {
|
|
343
|
-
const trimmed = content.trim();
|
|
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
|
-
}
|
|
351
|
-
const now = evalNow().toISOString(); // honors HIPPO_FAKE_NOW (eval-only)
|
|
352
|
-
const layer = options.layer ?? Layer.Episodic;
|
|
353
|
-
const tags = options.tags ?? [];
|
|
354
|
-
const emotional_valence = options.emotional_valence ?? inferValence(tags);
|
|
355
|
-
const schema_fit = options.schema_fit ?? 0.5;
|
|
356
|
-
const partial = { tags, schema_fit };
|
|
357
|
-
const half_life_days = deriveHalfLife(options.baseHalfLifeDays ?? DEFAULT_HALF_LIFE_DAYS, partial);
|
|
358
|
-
const entry = {
|
|
359
|
-
id: generateId(layer === Layer.Semantic ? 'sem' : 'mem'),
|
|
360
|
-
created: now,
|
|
361
|
-
last_retrieved: now,
|
|
362
|
-
retrieval_count: 0,
|
|
363
|
-
strength: 1.0,
|
|
364
|
-
half_life_days,
|
|
365
|
-
layer,
|
|
366
|
-
tags,
|
|
367
|
-
emotional_valence,
|
|
368
|
-
schema_fit,
|
|
369
|
-
source: options.source ?? 'cli',
|
|
370
|
-
outcome_score: null,
|
|
371
|
-
outcome_positive: 0,
|
|
372
|
-
outcome_negative: 0,
|
|
373
|
-
conflicts_with: [],
|
|
374
|
-
pinned: options.pinned ?? false,
|
|
375
|
-
confidence: options.confidence ?? 'verified',
|
|
376
|
-
content,
|
|
377
|
-
parents: [],
|
|
378
|
-
starred: false,
|
|
379
|
-
trace_outcome: options.trace_outcome ?? null,
|
|
380
|
-
source_session_id: options.source_session_id ?? null,
|
|
381
|
-
valid_from: options.valid_from ?? now,
|
|
382
|
-
superseded_by: null,
|
|
383
|
-
extracted_from: options.extracted_from ?? null,
|
|
384
|
-
dag_level: options.dag_level ?? 0,
|
|
385
|
-
dag_parent_id: options.dag_parent_id ?? null,
|
|
386
|
-
kind: options.kind ?? 'distilled',
|
|
387
|
-
scope: options.scope ?? null,
|
|
388
|
-
owner: options.owner ?? null,
|
|
389
|
-
artifact_ref: options.artifact_ref ?? null,
|
|
390
|
-
tenantId: options.tenantId ?? 'default',
|
|
391
|
-
};
|
|
392
|
-
// Recalculate strength with the emotional multiplier applied
|
|
393
|
-
entry.strength = calculateStrength(entry);
|
|
394
|
-
return entry;
|
|
395
|
-
}
|
|
396
|
-
/** The row that replaces `old`: a supersede never changes where a memory belongs, so source, scope, session and a stamped origin carry over. */
|
|
397
|
-
export function createSuccessor(old, content, opts) {
|
|
398
|
-
const next = createMemory(content, {
|
|
399
|
-
layer: opts.layer ?? old.layer,
|
|
400
|
-
tags: opts.tags ?? [...old.tags],
|
|
401
|
-
pinned: opts.pinned ?? old.pinned,
|
|
402
|
-
source: old.source,
|
|
403
|
-
confidence: 'verified',
|
|
404
|
-
tenantId: opts.tenantId,
|
|
405
|
-
scope: old.scope,
|
|
406
|
-
source_session_id: old.source_session_id,
|
|
407
|
-
baseHalfLifeDays: opts.baseHalfLifeDays,
|
|
408
|
-
});
|
|
409
|
-
// A legacy null origin has nothing to carry, so the store stamps it from its own location.
|
|
410
|
-
if (typeof old.origin_project === 'string') {
|
|
411
|
-
next.origin_project = old.origin_project;
|
|
412
|
-
}
|
|
413
|
-
return next;
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* Compute how well new content fits existing knowledge patterns.
|
|
417
|
-
* Returns 0..1 where:
|
|
418
|
-
* >0.7 = high fit (consistent with existing knowledge, consolidates faster)
|
|
419
|
-
* 0.3-0.7 = moderate fit
|
|
420
|
-
* <0.3 = novel (doesn't match existing patterns, decays faster if unused)
|
|
421
|
-
*
|
|
422
|
-
* Uses tag overlap (always available) weighted by how common each tag is.
|
|
423
|
-
* Rare shared tags signal stronger schema fit than common ones.
|
|
424
|
-
*/
|
|
425
|
-
export function computeSchemaFit(content, tags, existingEntries) {
|
|
426
|
-
if (existingEntries.length === 0)
|
|
427
|
-
return 0.5; // no schema yet, neutral
|
|
428
|
-
// Build tag frequency map across all existing entries
|
|
429
|
-
const tagFreq = new Map();
|
|
430
|
-
for (const entry of existingEntries) {
|
|
431
|
-
for (const tag of entry.tags) {
|
|
432
|
-
tagFreq.set(tag, (tagFreq.get(tag) ?? 0) + 1);
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
if (tags.length === 0 && tagFreq.size === 0)
|
|
436
|
-
return 0.5;
|
|
437
|
-
// Tag overlap: IDF-weighted Jaccard
|
|
438
|
-
// Shared rare tags matter more than shared common tags
|
|
439
|
-
let weightedOverlap = 0;
|
|
440
|
-
let totalWeight = 0;
|
|
441
|
-
const N = existingEntries.length;
|
|
442
|
-
for (const tag of tags) {
|
|
443
|
-
const freq = tagFreq.get(tag) ?? 0;
|
|
444
|
-
// IDF-weighted: rare shared tags score higher
|
|
445
|
-
const maxIdf = Math.log(N + 1) + 1;
|
|
446
|
-
if (freq > 0) {
|
|
447
|
-
const idf = Math.log(N / freq) + 1;
|
|
448
|
-
weightedOverlap += idf;
|
|
449
|
-
}
|
|
450
|
-
totalWeight += maxIdf;
|
|
451
|
-
}
|
|
452
|
-
// Scale so that matching half the tags at average IDF gives ~0.5
|
|
453
|
-
const tagScore = totalWeight > 0 ? Math.min(1, (weightedOverlap / totalWeight) * 2) : 0;
|
|
454
|
-
// Content overlap: check how many existing entries share significant tokens
|
|
455
|
-
const newTokens = new Set(content.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
|
|
456
|
-
if (newTokens.size === 0)
|
|
457
|
-
return Math.min(1, Math.max(0, tagScore));
|
|
458
|
-
let contentMatches = 0;
|
|
459
|
-
for (const entry of existingEntries) {
|
|
460
|
-
const entryTokens = new Set(entry.content.toLowerCase().replace(/[^\w\s]/g, ' ').split(/\s+/).filter((t) => t.length > 3));
|
|
461
|
-
let shared = 0;
|
|
462
|
-
for (const token of newTokens) {
|
|
463
|
-
if (entryTokens.has(token))
|
|
464
|
-
shared++;
|
|
465
|
-
}
|
|
466
|
-
const overlap = shared / Math.max(newTokens.size, 1);
|
|
467
|
-
if (overlap > 0.2)
|
|
468
|
-
contentMatches++;
|
|
469
|
-
}
|
|
470
|
-
const contentScore = Math.min(1, contentMatches / Math.max(5, N * 0.1));
|
|
471
|
-
// Blend: 60% tag overlap, 40% content overlap
|
|
472
|
-
const fit = 0.6 * tagScore + 0.4 * contentScore;
|
|
473
|
-
return Math.min(1, Math.max(0, fit));
|
|
474
|
-
}
|
|
475
|
-
function inferValence(tags) {
|
|
476
|
-
if (tags.includes('critical'))
|
|
477
|
-
return 'critical';
|
|
478
|
-
if (tags.includes('error'))
|
|
479
|
-
return 'negative';
|
|
480
|
-
if (tags.includes('success') || tags.includes('win'))
|
|
481
|
-
return 'positive';
|
|
482
|
-
return 'neutral';
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* Update retrieval metadata on entries that were returned by a search.
|
|
486
|
-
* Returns the mutated copies (caller must persist to disk).
|
|
487
|
-
*
|
|
488
|
-
* EVAL-ONLY ablation (see ablation.ts): with HIPPO_ABLATE_RECALL_BOOST set,
|
|
489
|
-
* this returns the entries UNMUTATED - neutralizing all three strengthening
|
|
490
|
-
* sub-effects (clock reset, retrieval_count, half-life increment) at the
|
|
491
|
-
* single shared write site. The entries (not an empty array) must be
|
|
492
|
-
* returned because callers derive `last_retrieval_ids` from the return
|
|
493
|
-
* value, and a later `hippo outcome --good/--bad` targets those ids - an
|
|
494
|
-
* empty return would silently co-ablate the outcome channel in the
|
|
495
|
-
* strengthen-off arm. PERSISTENCE is gated separately at
|
|
496
|
-
* each persisting caller (CLI recall, api context, MCP recall/context,
|
|
497
|
-
* consolidation replay): writeEntry on identical rows still refreshes
|
|
498
|
-
* updated_at, rewrites mirrors, and marks DAG parents dirty,
|
|
499
|
-
* so those write loops skip under the flag.
|
|
500
|
-
* The default `now` honors HIPPO_FAKE_NOW (simulated-time protocols).
|
|
501
|
-
*/
|
|
502
|
-
// Confidence is deliberately absent below: it is an epistemic tier, not a
|
|
503
|
-
// recency signal, and a stored 'stale' is always a deliberate mark.
|
|
504
|
-
export function markRetrieved(entries, now = evalNow()) {
|
|
505
|
-
if (isRecallBoostAblated())
|
|
506
|
-
return entries;
|
|
507
|
-
return entries.map((e) => {
|
|
508
|
-
if (e.superseded_by)
|
|
509
|
-
return e;
|
|
510
|
-
const wrong = netWrong(e) > 0;
|
|
511
|
-
const updated = {
|
|
512
|
-
...e,
|
|
513
|
-
retrieval_count: e.retrieval_count + 1,
|
|
514
|
-
last_retrieved: wrong ? e.last_retrieved : now.toISOString(),
|
|
515
|
-
// +2 days half-life per retrieval (PLAN.md); a wrong memory keeps both, since last_retrieved is the decay anchor
|
|
516
|
-
half_life_days: wrong ? e.half_life_days : e.half_life_days + 2,
|
|
517
|
-
};
|
|
518
|
-
updated.strength = calculateStrength(updated, now);
|
|
519
|
-
return updated;
|
|
520
|
-
});
|
|
521
|
-
}
|
|
522
|
-
//# sourceMappingURL=memory.js.map
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* --owner format validation.
|
|
3
|
-
*
|
|
4
|
-
* Documented MEMORY_ENVELOPE.md contract: owner = `user:<id>` | `agent:<id>`
|
|
5
|
-
* with id ∈ `[A-Za-z0-9_-]+`.
|
|
6
|
-
*
|
|
7
|
-
* Default: WARN-ONLY (log + accept) to preserve back-compat with existing
|
|
8
|
-
* scripted callers passing legacy owner strings. Set `HIPPO_STRICT_OWNER=1`
|
|
9
|
-
* to reject + exit. Strict mode will become the default once real auth replaces
|
|
10
|
-
* the stub (see `TODOS.md` for the migration path).
|
|
11
|
-
*/
|
|
12
|
-
export declare const OWNER_RE: RegExp;
|
|
13
|
-
export declare const OWNER_CONTRACT_HINT = "Must match ^(user|agent):[A-Za-z0-9_-]+$ (e.g. user:alice, agent:capture-bot).";
|
|
14
|
-
export interface OwnerValidation {
|
|
15
|
-
ok: boolean;
|
|
16
|
-
/** The owner string as the caller should now use it. undefined when no owner was supplied. */
|
|
17
|
-
value: string | undefined;
|
|
18
|
-
/** Human-readable message (warn or error). Empty when ok = true. */
|
|
19
|
-
message: string;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Pure validator. Returns `{ ok, value, message }`. Does NOT print or
|
|
23
|
-
* `process.exit`. The CLI wrapper below handles side effects so this is
|
|
24
|
-
* unit-testable.
|
|
25
|
-
*
|
|
26
|
-
* Behaviour:
|
|
27
|
-
* - owner undefined → ok=true, value=undefined, no message.
|
|
28
|
-
* - owner matches OWNER_RE → ok=true, value=owner.
|
|
29
|
-
* - owner doesn't match + strict=false → ok=true, value=owner (accept),
|
|
30
|
-
* message contains the warning text.
|
|
31
|
-
* - owner doesn't match + strict=true → ok=false, value=owner (echoed),
|
|
32
|
-
* message contains the error text.
|
|
33
|
-
*/
|
|
34
|
-
export declare function validateOwner(owner: string | null | undefined, opts?: {
|
|
35
|
-
strict?: boolean;
|
|
36
|
-
}): OwnerValidation;
|
|
37
|
-
/**
|
|
38
|
-
* Returns true when strict-owner enforcement is enabled via env var.
|
|
39
|
-
* Centralised here so any future bump to default-strict is one edit.
|
|
40
|
-
*/
|
|
41
|
-
export declare function isStrictOwnerEnv(env?: NodeJS.ProcessEnv): boolean;
|
|
42
|
-
//# sourceMappingURL=owner-validation.d.ts.map
|
package/dist/owner-validation.js
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* --owner format validation.
|
|
3
|
-
*
|
|
4
|
-
* Documented MEMORY_ENVELOPE.md contract: owner = `user:<id>` | `agent:<id>`
|
|
5
|
-
* with id ∈ `[A-Za-z0-9_-]+`.
|
|
6
|
-
*
|
|
7
|
-
* Default: WARN-ONLY (log + accept) to preserve back-compat with existing
|
|
8
|
-
* scripted callers passing legacy owner strings. Set `HIPPO_STRICT_OWNER=1`
|
|
9
|
-
* to reject + exit. Strict mode will become the default once real auth replaces
|
|
10
|
-
* the stub (see `TODOS.md` for the migration path).
|
|
11
|
-
*/
|
|
12
|
-
import { processEnv } from './env.js';
|
|
13
|
-
export const OWNER_RE = /^(user|agent):[A-Za-z0-9_-]+$/;
|
|
14
|
-
export const OWNER_CONTRACT_HINT = 'Must match ^(user|agent):[A-Za-z0-9_-]+$ (e.g. user:alice, agent:capture-bot).';
|
|
15
|
-
/**
|
|
16
|
-
* Pure validator. Returns `{ ok, value, message }`. Does NOT print or
|
|
17
|
-
* `process.exit`. The CLI wrapper below handles side effects so this is
|
|
18
|
-
* unit-testable.
|
|
19
|
-
*
|
|
20
|
-
* Behaviour:
|
|
21
|
-
* - owner undefined → ok=true, value=undefined, no message.
|
|
22
|
-
* - owner matches OWNER_RE → ok=true, value=owner.
|
|
23
|
-
* - owner doesn't match + strict=false → ok=true, value=owner (accept),
|
|
24
|
-
* message contains the warning text.
|
|
25
|
-
* - owner doesn't match + strict=true → ok=false, value=owner (echoed),
|
|
26
|
-
* message contains the error text.
|
|
27
|
-
*/
|
|
28
|
-
export function validateOwner(owner, opts = {}) {
|
|
29
|
-
if (owner === undefined || owner === null || owner === '') {
|
|
30
|
-
return { ok: true, value: undefined, message: '' };
|
|
31
|
-
}
|
|
32
|
-
if (OWNER_RE.test(owner)) {
|
|
33
|
-
return { ok: true, value: owner, message: '' };
|
|
34
|
-
}
|
|
35
|
-
if (opts.strict) {
|
|
36
|
-
return {
|
|
37
|
-
ok: false,
|
|
38
|
-
value: owner,
|
|
39
|
-
message: `Invalid --owner "${owner}". ${OWNER_CONTRACT_HINT}`,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
ok: true,
|
|
44
|
-
value: owner,
|
|
45
|
-
message: `[warn] --owner "${owner}" does not match the contract. ${OWNER_CONTRACT_HINT} ` +
|
|
46
|
-
`Accepting for back-compat; set HIPPO_STRICT_OWNER=1 to reject.`,
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Returns true when strict-owner enforcement is enabled via env var.
|
|
51
|
-
* Centralised here so any future bump to default-strict is one edit.
|
|
52
|
-
*/
|
|
53
|
-
export function isStrictOwnerEnv(env = processEnv()) {
|
|
54
|
-
return env.HIPPO_STRICT_OWNER === '1';
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=owner-validation.js.map
|
package/dist/path-context.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Extract meaningful path segments from a directory path.
|
|
3
|
-
* Returns tags like ['path:src', 'path:api', 'path:my-project'].
|
|
4
|
-
* Filters out noise (node_modules, .git, Users, home dirs, drive letters).
|
|
5
|
-
*/
|
|
6
|
-
export declare function extractPathTags(dirPath: string): string[];
|
|
7
|
-
/**
|
|
8
|
-
* Compute path overlap score between two sets of path tags.
|
|
9
|
-
* Returns 0..1 where 1 = perfect match.
|
|
10
|
-
* Normalizes by the MORE SPECIFIC side (the larger of the two tag sets),
|
|
11
|
-
* so a memory carrying only a bare/generic path tag can no longer score a
|
|
12
|
-
* full 1.0 against a deeply-nested cwd just because its own tiny tag set
|
|
13
|
-
* is fully contained in the query's — genericity is no longer rewarded.
|
|
14
|
-
*/
|
|
15
|
-
export declare function pathOverlapScore(memoryPathTags: string[], currentPathTags: string[]): number;
|
|
16
|
-
/** Weight applied to path overlap score when computing the recall boost multiplier. */
|
|
17
|
-
export declare const PATH_BOOST_WEIGHT = 0.3;
|
|
18
|
-
/**
|
|
19
|
-
* Multiplier applied to a composite recall score for path locality.
|
|
20
|
-
* Filters the memory's tags to path:* itself so call sites cannot drift.
|
|
21
|
-
* Returns 1.0..1.3.
|
|
22
|
-
*/
|
|
23
|
-
export declare function pathBoostMultiplier(memoryTags: string[], currentPathTags: string[]): number;
|
|
24
|
-
//# sourceMappingURL=path-context.d.ts.map
|