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/store/mirrors.js
CHANGED
|
@@ -1,36 +1,35 @@
|
|
|
1
|
+
import { DEFAULT_TENANT_ID } from '../util/env.js';
|
|
1
2
|
import * as fs from 'fs';
|
|
2
3
|
import * as path from 'path';
|
|
3
|
-
import { Layer } from '../memory.js';
|
|
4
|
-
import { dumpFrontmatter } from '
|
|
5
|
-
import { getMeta } from '../db.js';
|
|
6
|
-
import {
|
|
4
|
+
import { Layer } from '../core/memory.js';
|
|
5
|
+
import { dumpFrontmatter } from './yaml.js';
|
|
6
|
+
import { getMeta } from '../db/index.js';
|
|
7
|
+
import { oncePerStore } from '../db/connect.js';
|
|
8
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
7
9
|
import { parseJsonArray, INDEX_VERSION, parseLastTraceId, MEMORY_SELECT_COLUMNS, rowToEntry, rowToMemoryConflict, } from './rows.js';
|
|
8
10
|
import { serializeEntry } from './markdown.js';
|
|
11
|
+
const SCORE_DECIMALS = 3;
|
|
9
12
|
export function layerDir(root, layer) {
|
|
10
13
|
return path.join(root, layer);
|
|
11
14
|
}
|
|
15
|
+
// Owner-only wherever a mirror folder is made, at open or by a writer that finds it gone.
|
|
16
|
+
const MIRROR_FOLDER = { recursive: true, mode: 0o700 };
|
|
17
|
+
/** Makes the mirror folders on a store's first open in this process; a writer makes its own folder if one goes missing later. */
|
|
12
18
|
export function ensureMirrorDirectories(hippoRoot) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
path.join(hippoRoot, 'conflicts'),
|
|
19
|
-
];
|
|
20
|
-
for (const dir of dirs) {
|
|
21
|
-
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
22
|
-
}
|
|
19
|
+
oncePerStore(hippoRoot, 'mirror-folders', () => {
|
|
20
|
+
for (const sub of ['buffer', 'episodic', 'semantic', 'conflicts']) {
|
|
21
|
+
fs.mkdirSync(path.join(hippoRoot, sub), MIRROR_FOLDER);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
23
24
|
}
|
|
24
|
-
// Tenant-scoped mirror
|
|
25
|
-
//
|
|
26
|
-
// on-disk back-compat; multi-tenant deployments get a `.<tenantId>` suffix
|
|
27
|
-
// so tenant B saving cannot overwrite tenant A's mirror file.
|
|
25
|
+
// Tenant-scoped mirror paths: the 'default' tenant keeps the original `active-task.md` / `recent-session.md` names;
|
|
26
|
+
// other tenants get a `.<tenantId>` suffix so one cannot overwrite another's mirror.
|
|
28
27
|
function activeTaskMirrorPath(hippoRoot, tenantId) {
|
|
29
|
-
const file = tenantId ===
|
|
28
|
+
const file = tenantId === DEFAULT_TENANT_ID ? 'active-task.md' : `active-task.${tenantId}.md`;
|
|
30
29
|
return path.join(hippoRoot, 'buffer', file);
|
|
31
30
|
}
|
|
32
31
|
function recentSessionMirrorPath(hippoRoot, tenantId) {
|
|
33
|
-
const file = tenantId ===
|
|
32
|
+
const file = tenantId === DEFAULT_TENANT_ID ? 'recent-session.md' : `recent-session.${tenantId}.md`;
|
|
34
33
|
return path.join(hippoRoot, 'buffer', file);
|
|
35
34
|
}
|
|
36
35
|
export function writeActiveTaskMirror(hippoRoot, tenantId, snapshot) {
|
|
@@ -61,7 +60,7 @@ export function writeActiveTaskMirror(hippoRoot, tenantId, snapshot) {
|
|
|
61
60
|
if (snapshot.session_id) {
|
|
62
61
|
body.push(`## Session`, snapshot.session_id, '');
|
|
63
62
|
}
|
|
64
|
-
fs.mkdirSync(path.dirname(filePath),
|
|
63
|
+
fs.mkdirSync(path.dirname(filePath), MIRROR_FOLDER);
|
|
65
64
|
fs.writeFileSync(filePath, `${fm}\n\n${body.join('\n')}`, 'utf8');
|
|
66
65
|
}
|
|
67
66
|
export function removeActiveTaskMirror(hippoRoot, tenantId) {
|
|
@@ -99,12 +98,12 @@ export function writeRecentSessionMirror(hippoRoot, tenantId, events) {
|
|
|
99
98
|
lines.push(`- [${event.created_at}] (${event.event_type}) ${event.content}`);
|
|
100
99
|
}
|
|
101
100
|
lines.push('');
|
|
102
|
-
fs.mkdirSync(path.dirname(filePath),
|
|
101
|
+
fs.mkdirSync(path.dirname(filePath), MIRROR_FOLDER);
|
|
103
102
|
fs.writeFileSync(filePath, `${fm}\n\n${lines.join('\n')}`, 'utf8');
|
|
104
103
|
}
|
|
105
104
|
function writeConflictMirrors(hippoRoot, conflicts) {
|
|
106
105
|
const conflictDir = path.join(hippoRoot, 'conflicts');
|
|
107
|
-
fs.mkdirSync(conflictDir,
|
|
106
|
+
fs.mkdirSync(conflictDir, MIRROR_FOLDER);
|
|
108
107
|
const keep = new Set();
|
|
109
108
|
for (const conflict of conflicts) {
|
|
110
109
|
const filename = `conflict_${conflict.id}.md`;
|
|
@@ -125,7 +124,7 @@ function writeConflictMirrors(hippoRoot, conflicts) {
|
|
|
125
124
|
`- Memory A: ${conflict.memory_a_id}`,
|
|
126
125
|
`- Memory B: ${conflict.memory_b_id}`,
|
|
127
126
|
`- Reason: ${conflict.reason}`,
|
|
128
|
-
`- Score: ${conflict.score.toFixed(
|
|
127
|
+
`- Score: ${conflict.score.toFixed(SCORE_DECIMALS)}`,
|
|
129
128
|
`- Status: ${conflict.status}`,
|
|
130
129
|
'',
|
|
131
130
|
].join('\n');
|
|
@@ -142,7 +141,7 @@ function writeConflictMirrors(hippoRoot, conflicts) {
|
|
|
142
141
|
export function writeMarkdownMirror(hippoRoot, entry) {
|
|
143
142
|
removeEntryMirrors(hippoRoot, entry.id);
|
|
144
143
|
const dir = layerDir(hippoRoot, entry.layer);
|
|
145
|
-
fs.mkdirSync(dir,
|
|
144
|
+
fs.mkdirSync(dir, MIRROR_FOLDER);
|
|
146
145
|
fs.writeFileSync(path.join(dir, `${entry.id}.md`), serializeEntry(entry), 'utf8');
|
|
147
146
|
}
|
|
148
147
|
// Every layer, Trace included: `writeMarkdownMirror` writes any layer, and a stale trace mirror
|
|
@@ -155,22 +154,15 @@ export function removeEntryMirrors(hippoRoot, id) {
|
|
|
155
154
|
}
|
|
156
155
|
}
|
|
157
156
|
}
|
|
158
|
-
/**
|
|
159
|
-
|
|
160
|
-
* with no reaper to retry it can name the stuck file.
|
|
161
|
-
*/
|
|
162
|
-
export function getExistingEntryMirrorPaths(hippoRoot, id) {
|
|
157
|
+
/** Mirror paths for `id` still on disk, walked like `removeEntryMirrors`, so a failed purge with no reaper to retry it can name the stuck file. */
|
|
158
|
+
function getExistingEntryMirrorPaths(hippoRoot, id) {
|
|
163
159
|
// Layer list kept in lockstep with removeEntryMirrors.
|
|
164
160
|
return [Layer.Buffer, Layer.Episodic, Layer.Semantic, Layer.Trace]
|
|
165
161
|
.map((layer) => path.join(layerDir(hippoRoot, layer), `${id}.md`))
|
|
166
162
|
.filter((file) => fs.existsSync(file));
|
|
167
163
|
}
|
|
168
|
-
/**
|
|
169
|
-
*
|
|
170
|
-
* scans `raw_archive`, so a non-raw id's second failure logs the leftover path(s) to delete by hand.
|
|
171
|
-
*
|
|
172
|
-
* Returns true if the mirror ended up purged (first or second attempt).
|
|
173
|
-
*/
|
|
164
|
+
/** Best-effort mirror purge: retries the unlink once (most failures are transient locks); the reaper only scans `raw_archive`,
|
|
165
|
+
* so a non-raw id's second failure logs the leftover path(s) to delete by hand. Returns true if the mirror ended up purged. */
|
|
174
166
|
export function purgeMirrorBestEffort(hippoRoot, id, isRaw, logPrefix) {
|
|
175
167
|
try {
|
|
176
168
|
removeEntryMirrors(hippoRoot, id);
|
|
@@ -182,15 +174,15 @@ export function purgeMirrorBestEffort(hippoRoot, id, isRaw, logPrefix) {
|
|
|
182
174
|
return true;
|
|
183
175
|
}
|
|
184
176
|
catch (secondErr) {
|
|
185
|
-
const msg =
|
|
177
|
+
const msg = errorMessage(secondErr);
|
|
186
178
|
if (isRaw) {
|
|
187
|
-
log.error(`${logPrefix}: mirror cleanup failed for ${id} (will retry via reaper on next open): ${msg}
|
|
179
|
+
log.error(`${logPrefix}: mirror cleanup failed for ${id} (will retry via reaper on next open): ${msg}`, errorFields(secondErr));
|
|
188
180
|
}
|
|
189
181
|
else {
|
|
190
182
|
const leftover = getExistingEntryMirrorPaths(hippoRoot, id);
|
|
191
183
|
const pathsNote = leftover.length > 0 ? leftover.join(', ') : `${id}.md (path unresolved)`;
|
|
192
184
|
log.error(`${logPrefix}: mirror cleanup failed for ${id} - no automatic retry exists for this file, ` +
|
|
193
|
-
`delete it manually: ${pathsNote} (${msg})
|
|
185
|
+
`delete it manually: ${pathsNote} (${msg})`, errorFields(secondErr));
|
|
194
186
|
}
|
|
195
187
|
return false;
|
|
196
188
|
}
|
|
@@ -211,21 +203,22 @@ export function buildIndexFromDb(db) {
|
|
|
211
203
|
file: path.join(layer, `${row.id}.md`),
|
|
212
204
|
layer,
|
|
213
205
|
strength: Number(row.strength ?? 0),
|
|
214
|
-
tags: parseJsonArray(row.tags_json),
|
|
206
|
+
tags: parseJsonArray(row.tags_json, { table: 'memories', id: row.id, column: 'tags_json' }),
|
|
215
207
|
created: row.created,
|
|
216
208
|
last_retrieved: row.last_retrieved,
|
|
217
209
|
pinned: Boolean(row.pinned),
|
|
218
210
|
};
|
|
219
211
|
}
|
|
220
|
-
|
|
221
|
-
|
|
212
|
+
return { version: INDEX_VERSION, entries, ...readLastRecall(db) };
|
|
213
|
+
}
|
|
214
|
+
/** The last recall's ids and its trace, the two meta keys saveIndex writes together. */
|
|
215
|
+
export function readLastRecall(db) {
|
|
216
|
+
// Read both lockstep keys in ONE statement: two autocommit SELECTs could straddle a concurrent saveIndex and return a mismatched pair.
|
|
222
217
|
// SAFETY: lockstepRows' shape matches the key/value columns named above.
|
|
223
218
|
const lockstepRows = db.prepare(`SELECT key, value FROM meta WHERE key IN ('last_retrieval_ids', 'last_trace_id')`).all();
|
|
224
219
|
const lockstep = new Map(lockstepRows.map((r) => [r.key, r.value]));
|
|
225
220
|
return {
|
|
226
|
-
|
|
227
|
-
entries,
|
|
228
|
-
last_retrieval_ids: parseJsonArray(lockstep.get('last_retrieval_ids') ?? '[]'),
|
|
221
|
+
last_retrieval_ids: parseJsonArray(lockstep.get('last_retrieval_ids') ?? '[]', { table: 'meta', id: 'last_retrieval_ids', column: 'value' }),
|
|
229
222
|
last_trace_id: parseLastTraceId(lockstep.get('last_trace_id') ?? ''),
|
|
230
223
|
};
|
|
231
224
|
}
|
|
@@ -250,7 +243,19 @@ export function writeIndexMirror(hippoRoot, index) {
|
|
|
250
243
|
mirrorBestEffort('index.json', () => fs.writeFileSync(path.join(hippoRoot, 'index.json'), JSON.stringify(index, null, 2), 'utf8'));
|
|
251
244
|
}
|
|
252
245
|
export function writeStatsMirror(hippoRoot, stats) {
|
|
253
|
-
mirrorBestEffort('stats.json', () =>
|
|
246
|
+
mirrorBestEffort('stats.json', () => overwriteInPlace(path.join(hippoRoot, 'stats.json'), JSON.stringify(stats, null, 2)));
|
|
247
|
+
}
|
|
248
|
+
// A truncate waits for the file's last write to reach the disk, so a file rewritten on every recall keeps its blocks.
|
|
249
|
+
function overwriteInPlace(file, text) {
|
|
250
|
+
const bytes = Buffer.from(text, 'utf8');
|
|
251
|
+
const fd = fs.openSync(file, fs.constants.O_WRONLY | fs.constants.O_CREAT, 0o666);
|
|
252
|
+
try {
|
|
253
|
+
fs.writeSync(fd, bytes, 0, bytes.length, 0);
|
|
254
|
+
fs.ftruncateSync(fd, bytes.length);
|
|
255
|
+
}
|
|
256
|
+
finally {
|
|
257
|
+
fs.closeSync(fd);
|
|
258
|
+
}
|
|
254
259
|
}
|
|
255
260
|
/** Mirrors are derived from SQLite and written after COMMIT, so a failed write warns instead of failing a committed change. */
|
|
256
261
|
export function mirrorBestEffort(what, write) {
|
|
@@ -258,7 +263,7 @@ export function mirrorBestEffort(what, write) {
|
|
|
258
263
|
write();
|
|
259
264
|
}
|
|
260
265
|
catch (err) {
|
|
261
|
-
log.warn(`${what} not refreshed (${
|
|
266
|
+
log.warn(`${what} not refreshed (${errorMessage(err)}); the database write succeeded`);
|
|
262
267
|
}
|
|
263
268
|
}
|
|
264
269
|
export function syncMirrorFiles(hippoRoot, db) {
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
export type DecisionStatus = 'active' | 'superseded' | 'closed';
|
|
2
|
+
export interface Decision {
|
|
3
|
+
id: number;
|
|
4
|
+
memoryId: string | null;
|
|
5
|
+
tenantId: string;
|
|
6
|
+
decisionText: string;
|
|
7
|
+
context: string | null;
|
|
8
|
+
status: DecisionStatus;
|
|
9
|
+
/** Successor decision id; set only when status === 'superseded'. */
|
|
10
|
+
supersededBy: number | null;
|
|
11
|
+
supersededAt: string | null;
|
|
12
|
+
closedAt: string | null;
|
|
13
|
+
createdAt: string;
|
|
14
|
+
}
|
|
15
|
+
export type IncidentStatus = 'open' | 'resolved' | 'closed';
|
|
16
|
+
export interface Incident {
|
|
17
|
+
id: number;
|
|
18
|
+
memoryId: string | null;
|
|
19
|
+
tenantId: string;
|
|
20
|
+
incidentText: string;
|
|
21
|
+
context: string | null;
|
|
22
|
+
status: IncidentStatus;
|
|
23
|
+
/** Set only when status === 'resolved'. */
|
|
24
|
+
resolutionText: string | null;
|
|
25
|
+
resolvedAt: string | null;
|
|
26
|
+
closedAt: string | null;
|
|
27
|
+
/** Linked receipts: memory ids that are this incident's evidence. */
|
|
28
|
+
linkedMemoryIds: string[];
|
|
29
|
+
createdAt: string;
|
|
30
|
+
}
|
|
31
|
+
export type ProcessStatus = 'active' | 'superseded' | 'closed';
|
|
32
|
+
export interface Process {
|
|
33
|
+
id: number;
|
|
34
|
+
memoryId: string | null;
|
|
35
|
+
tenantId: string;
|
|
36
|
+
processName: string;
|
|
37
|
+
description: string | null;
|
|
38
|
+
/** Ordered step list (the process body). Stored as a JSON array of strings. */
|
|
39
|
+
steps: string[];
|
|
40
|
+
/** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
|
|
41
|
+
version: number;
|
|
42
|
+
status: ProcessStatus;
|
|
43
|
+
/** Successor process id; set only when status === 'superseded'. */
|
|
44
|
+
supersededBy: number | null;
|
|
45
|
+
supersededAt: string | null;
|
|
46
|
+
/** The per-version delta note; set on a successor row only (NULL on a v1). */
|
|
47
|
+
changeSummary: string | null;
|
|
48
|
+
closedAt: string | null;
|
|
49
|
+
createdAt: string;
|
|
50
|
+
}
|
|
51
|
+
export type PolicyStatus = 'active' | 'superseded' | 'closed';
|
|
52
|
+
export interface Policy {
|
|
53
|
+
id: number;
|
|
54
|
+
memoryId: string | null;
|
|
55
|
+
tenantId: string;
|
|
56
|
+
policyName: string;
|
|
57
|
+
policyText: string;
|
|
58
|
+
/** ISO-8601 datetime as `toISOString` gives it; when the policy takes effect. Always set. */
|
|
59
|
+
validFrom: string;
|
|
60
|
+
/** ISO-8601 datetime as `toISOString` gives it; when it expires. null = open-ended. */
|
|
61
|
+
validTo: string | null;
|
|
62
|
+
/** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
|
|
63
|
+
version: number;
|
|
64
|
+
status: PolicyStatus;
|
|
65
|
+
supersededBy: number | null;
|
|
66
|
+
supersededAt: string | null;
|
|
67
|
+
/** The per-version delta note; set on a successor row only (NULL on a v1). */
|
|
68
|
+
changeSummary: string | null;
|
|
69
|
+
closedAt: string | null;
|
|
70
|
+
createdAt: string;
|
|
71
|
+
}
|
|
72
|
+
export type SkillStatus = 'active' | 'superseded' | 'closed';
|
|
73
|
+
export interface Skill {
|
|
74
|
+
id: number;
|
|
75
|
+
memoryId: string | null;
|
|
76
|
+
tenantId: string;
|
|
77
|
+
skillName: string;
|
|
78
|
+
instructions: string;
|
|
79
|
+
/** Optional "when to apply"; stored in the trigger_text column. */
|
|
80
|
+
trigger: string | null;
|
|
81
|
+
/** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
|
|
82
|
+
version: number;
|
|
83
|
+
status: SkillStatus;
|
|
84
|
+
supersededBy: number | null;
|
|
85
|
+
supersededAt: string | null;
|
|
86
|
+
/** The per-version delta note; set on a successor row only (NULL on a v1). */
|
|
87
|
+
changeSummary: string | null;
|
|
88
|
+
closedAt: string | null;
|
|
89
|
+
createdAt: string;
|
|
90
|
+
}
|
|
91
|
+
export type BriefStatus = 'active' | 'superseded' | 'closed';
|
|
92
|
+
export interface ProjectBrief {
|
|
93
|
+
id: number;
|
|
94
|
+
memoryId: string | null;
|
|
95
|
+
tenantId: string;
|
|
96
|
+
/** The repo identifier this brief is scoped to (e.g. `hippo`). */
|
|
97
|
+
repo: string;
|
|
98
|
+
/** The brief body. */
|
|
99
|
+
summary: string;
|
|
100
|
+
/** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
|
|
101
|
+
version: number;
|
|
102
|
+
status: BriefStatus;
|
|
103
|
+
supersededBy: number | null;
|
|
104
|
+
supersededAt: string | null;
|
|
105
|
+
/** The per-version delta note; set on a successor row only (NULL on a v1). */
|
|
106
|
+
changeSummary: string | null;
|
|
107
|
+
closedAt: string | null;
|
|
108
|
+
createdAt: string;
|
|
109
|
+
}
|
|
110
|
+
export type NoteStatus = 'active' | 'superseded' | 'closed';
|
|
111
|
+
export interface CustomerNote {
|
|
112
|
+
id: number;
|
|
113
|
+
memoryId: string | null;
|
|
114
|
+
tenantId: string;
|
|
115
|
+
/** The account/customer entity this note is scoped to (free-form identifier). */
|
|
116
|
+
customer: string;
|
|
117
|
+
/** The note body. */
|
|
118
|
+
note: string;
|
|
119
|
+
/** Server-derived: 1 on a fresh create, predecessor.version + 1 on supersede. */
|
|
120
|
+
version: number;
|
|
121
|
+
status: NoteStatus;
|
|
122
|
+
supersededBy: number | null;
|
|
123
|
+
supersededAt: string | null;
|
|
124
|
+
/** The per-version delta note; set on a successor row only (NULL on a v1). */
|
|
125
|
+
changeSummary: string | null;
|
|
126
|
+
closedAt: string | null;
|
|
127
|
+
createdAt: string;
|
|
128
|
+
}
|
|
129
|
+
/** Each kind is named by the `source` its mirror memory carries. */
|
|
130
|
+
export interface ObjectByKind {
|
|
131
|
+
decision: Decision;
|
|
132
|
+
incident: Incident;
|
|
133
|
+
process: Process;
|
|
134
|
+
policy: Policy;
|
|
135
|
+
skill: Skill;
|
|
136
|
+
project_brief: ProjectBrief;
|
|
137
|
+
customer_note: CustomerNote;
|
|
138
|
+
}
|
|
139
|
+
export type ObjectKind = keyof ObjectByKind;
|
|
140
|
+
/** What one save stores, per kind the shared save writes; core has checked and resolved every value. */
|
|
141
|
+
export interface ObjectFields {
|
|
142
|
+
decision: {
|
|
143
|
+
readonly decisionText: string;
|
|
144
|
+
readonly context: string | undefined;
|
|
145
|
+
};
|
|
146
|
+
process: {
|
|
147
|
+
readonly processName: string;
|
|
148
|
+
readonly description: string | undefined;
|
|
149
|
+
readonly steps: readonly string[];
|
|
150
|
+
};
|
|
151
|
+
policy: {
|
|
152
|
+
readonly policyName: string;
|
|
153
|
+
readonly policyText: string;
|
|
154
|
+
readonly validFrom: string;
|
|
155
|
+
readonly validTo: string | null;
|
|
156
|
+
};
|
|
157
|
+
skill: {
|
|
158
|
+
readonly name: string;
|
|
159
|
+
readonly instructions: string;
|
|
160
|
+
readonly trigger: string | null;
|
|
161
|
+
};
|
|
162
|
+
/** `receiptCount` is set only when a refresh wrote this version. */
|
|
163
|
+
project_brief: {
|
|
164
|
+
readonly repo: string;
|
|
165
|
+
readonly summary: string;
|
|
166
|
+
readonly receiptCount: number | undefined;
|
|
167
|
+
};
|
|
168
|
+
customer_note: {
|
|
169
|
+
readonly customer: string;
|
|
170
|
+
readonly note: string;
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/** The kinds whose rows are active until a successor supersedes them; an incident is opened and resolved instead. */
|
|
174
|
+
export type SavableKind = keyof ObjectFields;
|
|
175
|
+
/** What opening an incident stores; core has checked the text, and the store checks each linked id. */
|
|
176
|
+
export interface IncidentFields {
|
|
177
|
+
readonly incidentText: string;
|
|
178
|
+
readonly context: string | undefined;
|
|
179
|
+
/** The memories that are the incident's evidence, in the order the caller gave them. */
|
|
180
|
+
readonly linkedMemoryIds: readonly string[];
|
|
181
|
+
}
|
|
182
|
+
/** One memory a brief refresh cites. */
|
|
183
|
+
export interface BriefReceipt {
|
|
184
|
+
id: string;
|
|
185
|
+
created: string;
|
|
186
|
+
source: string;
|
|
187
|
+
content: string;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=object-types.d.ts.map
|
package/dist/store/open.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type MemoryEntry } from '../memory.js';
|
|
2
|
-
import { type DatabaseSyncLike } from '../db.js';
|
|
3
|
-
import { type ResolveProjectIdentityOpts } from '../project-identity.js';
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
3
|
+
import { type ResolveProjectIdentityOpts } from '../core/project-identity.js';
|
|
4
4
|
/** Nearest ancestor store like git; the strict join is the fallback so `hippo init` still creates `<cwd>/.hippo`. */
|
|
5
5
|
export declare function getHippoRoot(cwd?: string, opts?: ResolveProjectIdentityOpts): string;
|
|
6
6
|
export declare function isInitialized(hippoRoot: string): boolean;
|
|
@@ -11,9 +11,11 @@ export declare function openStore(hippoRoot: string, opts?: {
|
|
|
11
11
|
}): DatabaseSyncLike;
|
|
12
12
|
/** One call on a handle of its own, closed after; pass openStore where the call also sets up mirror folders and legacy rows. */
|
|
13
13
|
export declare function onHandle<T>(hippoRoot: string, fn: (db: DatabaseSyncLike) => T, open?: (hippoRoot: string) => DatabaseSyncLike): T;
|
|
14
|
-
/** `meta` key holding the default half-life base a store's memories are on (src/half-life-migration.ts). */
|
|
14
|
+
/** `meta` key holding the default half-life base a store's memories are on (src/consolidate/half-life-migration.ts). */
|
|
15
15
|
export declare const HALF_LIFE_BASE_META_KEY = "default_half_life_base";
|
|
16
16
|
/** `meta` key set once no memory of a decision, incident or other object sits on the old flat 90 days. */
|
|
17
17
|
export declare const TYPED_HALF_LIFE_META_KEY = "typed_half_life_on_default";
|
|
18
|
+
/** The flat half-life the decision, incident and other object writers gave their memories before they took the default. */
|
|
19
|
+
export declare const LEGACY_TYPED_HALF_LIFE = 90;
|
|
18
20
|
export declare function loadLegacyEntriesFromMarkdown(hippoRoot: string): MemoryEntry[];
|
|
19
21
|
//# sourceMappingURL=open.d.ts.map
|
package/dist/store/open.js
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
// Opens the SQLite store, the source of truth; Markdown and JSON files are human-readable mirrors of it.
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
|
-
import { DEFAULT_HALF_LIFE_DAYS, Layer } from '../memory.js';
|
|
5
|
-
import { closeHippoDb, openHippoDb, getMeta, setMeta } from '../db.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
4
|
+
import { DEFAULT_HALF_LIFE_DAYS, Layer } from '../core/memory.js';
|
|
5
|
+
import { closeHippoDb, currentRequestStores, openHippoDb, getMeta, setMeta, withWriteScope } from '../db/index.js';
|
|
6
|
+
import { openHippoDbWithFacts } from '../db/open.js';
|
|
7
|
+
import { findHippoStoreDir } from '../core/project-identity.js';
|
|
8
|
+
import { realpathOrResolve } from '../util/real-path.js';
|
|
9
|
+
import { RejectedValueError } from './rejection.js';
|
|
10
|
+
import { errorMessage, log } from '../util/log.js';
|
|
10
11
|
import { audit } from './audit-event.js';
|
|
11
12
|
import { deserializeEntry } from './markdown.js';
|
|
12
13
|
import { stampOriginProjectForImport, upsertEntryRow } from './entry-row.js';
|
|
13
14
|
import { ensureMirrorDirectories, syncMirrorFiles, layerDir } from './mirrors.js';
|
|
15
|
+
import { isJsonObject } from '../util/json.js';
|
|
14
16
|
/** Nearest ancestor store like git; the strict join is the fallback so `hippo init` still creates `<cwd>/.hippo`. */
|
|
15
17
|
export function getHippoRoot(cwd = process.cwd(), opts) {
|
|
16
18
|
return findHippoStoreDir(cwd, opts) ?? path.join(realpathOrResolve(cwd), '.hippo');
|
|
@@ -26,9 +28,15 @@ export function initStore(hippoRoot) {
|
|
|
26
28
|
/** One open connection with init done on it, for callers who used to pay for `initStore` + a second `openHippoDb`. */
|
|
27
29
|
export function openStore(hippoRoot, opts) {
|
|
28
30
|
// Open first: a folder marked for another store must refuse before any mirror folder appears.
|
|
29
|
-
const db =
|
|
31
|
+
const { db, facts } = openHippoDbWithFacts(hippoRoot, opts);
|
|
32
|
+
// A store worker's reader: its writer ran the steps below before this thread was sent a job, and this connection cannot write them.
|
|
33
|
+
if (currentRequestStores()?.setupDoneFor === hippoRoot)
|
|
34
|
+
return db;
|
|
30
35
|
try {
|
|
31
36
|
ensureMirrorDirectories(hippoRoot);
|
|
37
|
+
// Both steps act only on a store with no memory row, which the open's own probe has just ruled out.
|
|
38
|
+
if (facts?.hasMemories)
|
|
39
|
+
return db;
|
|
32
40
|
const bootstrapped = bootstrapLegacyStore(db, hippoRoot);
|
|
33
41
|
if (bootstrapped) {
|
|
34
42
|
syncMirrorFiles(hippoRoot, db);
|
|
@@ -56,16 +64,14 @@ export function onHandle(hippoRoot, fn, open = openHippoDb) {
|
|
|
56
64
|
closeHippoDb(db);
|
|
57
65
|
}
|
|
58
66
|
}
|
|
59
|
-
/** `meta` key holding the default half-life base a store's memories are on (src/half-life-migration.ts). */
|
|
67
|
+
/** `meta` key holding the default half-life base a store's memories are on (src/consolidate/half-life-migration.ts). */
|
|
60
68
|
export const HALF_LIFE_BASE_META_KEY = 'default_half_life_base';
|
|
61
69
|
/** `meta` key set once no memory of a decision, incident or other object sits on the old flat 90 days. */
|
|
62
70
|
export const TYPED_HALF_LIFE_META_KEY = 'typed_half_life_on_default';
|
|
63
|
-
/**
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
*
|
|
67
|
-
* 7-day base until sleep migrates it.
|
|
68
|
-
*/
|
|
71
|
+
/** The flat half-life the decision, incident and other object writers gave their memories before they took the default. */
|
|
72
|
+
export const LEGACY_TYPED_HALF_LIFE = 90;
|
|
73
|
+
/** A store with no memories starts on the current default half-life base so `hippo sleep` never migrates it; one that holds memories but no recorded base
|
|
74
|
+
* predates the record and keeps the legacy 7-day base until sleep migrates it. */
|
|
69
75
|
function recordHalfLifeBaseForNewStore(db) {
|
|
70
76
|
if (getMeta(db, HALF_LIFE_BASE_META_KEY, '') !== '')
|
|
71
77
|
return;
|
|
@@ -85,21 +91,12 @@ function bootstrapLegacyStore(db, hippoRoot) {
|
|
|
85
91
|
const legacyEntries = loadLegacyEntriesFromMarkdown(hippoRoot);
|
|
86
92
|
if (legacyEntries.length === 0)
|
|
87
93
|
return false;
|
|
88
|
-
db
|
|
89
|
-
try {
|
|
94
|
+
withWriteScope(db, 'bootstrap_legacy_store', () => {
|
|
90
95
|
importLegacyEntries(db, hippoRoot, legacyEntries);
|
|
91
96
|
importLegacyIndexAndStats(db, hippoRoot);
|
|
92
97
|
// Stamp completion even when every row was rejected; see the gate above.
|
|
93
98
|
setMeta(db, 'legacy_bootstrap_completed', '1');
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
try {
|
|
98
|
-
db.exec('ROLLBACK');
|
|
99
|
-
}
|
|
100
|
-
catch { /* already rolled back; keep the original error */ }
|
|
101
|
-
throw error;
|
|
102
|
-
}
|
|
99
|
+
});
|
|
103
100
|
return true;
|
|
104
101
|
}
|
|
105
102
|
function importLegacyEntries(db, hippoRoot, legacyEntries) {
|
|
@@ -116,7 +113,7 @@ function importLegacyEntries(db, hippoRoot, legacyEntries) {
|
|
|
116
113
|
catch (err) {
|
|
117
114
|
if (err instanceof RejectedValueError) {
|
|
118
115
|
rejectedCount++;
|
|
119
|
-
audit(db, 'reject_refusal', err.entryId, { digest: err.digest, reason: err.reason }, 'cli', err.tenantId);
|
|
116
|
+
audit(db, 'reject_refusal', { targetId: err.entryId, metadata: { digest: err.digest, reason: err.reason }, actor: 'cli', tenantId: err.tenantId });
|
|
120
117
|
continue;
|
|
121
118
|
}
|
|
122
119
|
throw err;
|
|
@@ -140,7 +137,7 @@ function importLegacyIndexAndStats(db, hippoRoot) {
|
|
|
140
137
|
const runs = Array.isArray(legacyStats.consolidation_runs) ? legacyStats.consolidation_runs : [];
|
|
141
138
|
const insertRun = db.prepare(`INSERT INTO consolidation_runs(timestamp, decayed, merged, removed) VALUES (?, ?, ?, ?)`);
|
|
142
139
|
for (const run of runs) {
|
|
143
|
-
if (!
|
|
140
|
+
if (!isJsonObject(run))
|
|
144
141
|
continue;
|
|
145
142
|
const row = run;
|
|
146
143
|
insertRun.run(String(row.timestamp ?? new Date().toISOString()), Number(row.decayed ?? 0), Number(row.merged ?? 0), Number(row.removed ?? 0));
|
|
@@ -169,13 +166,12 @@ function loadLegacyIndexFile(hippoRoot) {
|
|
|
169
166
|
return { version: 1, entries: {}, last_retrieval_ids: [], last_trace_id: null };
|
|
170
167
|
}
|
|
171
168
|
try {
|
|
172
|
-
// SAFETY: index.json is only
|
|
173
|
-
//
|
|
174
|
-
// that violates the shape falls through to the catch block's fallback.
|
|
169
|
+
// SAFETY: index.json is only written by writeIndexMirror below, which serializes a HippoIndex;
|
|
170
|
+
// a hand-edited file that violates the shape falls through to the catch block's fallback.
|
|
175
171
|
return JSON.parse(fs.readFileSync(indexPath, 'utf8'));
|
|
176
172
|
}
|
|
177
173
|
catch (err) {
|
|
178
|
-
log.debug(`store: unreadable index.json read as empty: ${
|
|
174
|
+
log.debug(`store: unreadable index.json read as empty: ${errorMessage(err)}`);
|
|
179
175
|
return { version: 1, entries: {}, last_retrieval_ids: [], last_trace_id: null };
|
|
180
176
|
}
|
|
181
177
|
}
|
|
@@ -190,14 +186,12 @@ function loadLegacyStatsFile(hippoRoot) {
|
|
|
190
186
|
};
|
|
191
187
|
}
|
|
192
188
|
try {
|
|
193
|
-
// SAFETY: stats.json is only
|
|
194
|
-
//
|
|
195
|
-
// guard every read with `?? 0` / `Array.isArray`, tolerating a
|
|
196
|
-
// hand-edited or corrupted file even if this optimistic cast is wrong.
|
|
189
|
+
// SAFETY: stats.json is only written by writeStatsMirror below with exactly these four fields; callers also guard every read with `?? 0` / `Array.isArray`,
|
|
190
|
+
// so a hand-edited file is tolerated even if this cast is wrong.
|
|
197
191
|
return JSON.parse(fs.readFileSync(statsPath, 'utf8'));
|
|
198
192
|
}
|
|
199
193
|
catch (err) {
|
|
200
|
-
log.debug(`store: unreadable stats.json read as zero: ${
|
|
194
|
+
log.debug(`store: unreadable stats.json read as zero: ${errorMessage(err)}`);
|
|
201
195
|
return {
|
|
202
196
|
total_remembered: 0,
|
|
203
197
|
total_recalled: 0,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type PredictionBaserate } from './predictions.js';
|
|
2
|
+
export interface ClassResolution {
|
|
3
|
+
classTag: string | null;
|
|
4
|
+
/** True when >=2 classes tied at the best overlap score AND best >= 1. Caller emits `recall_autodebias_hint_tiebreak` and returns a null hint
|
|
5
|
+
* (silent: an alphabetical tiebreak would show the wrong class half the time). */
|
|
6
|
+
tiebreak: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** The prediction class a forward claim resolves to, and that class's closed-prediction stats when one resolved. */
|
|
9
|
+
export interface PlanningFallacyEvidence extends ClassResolution {
|
|
10
|
+
readonly baserate: PredictionBaserate | null;
|
|
11
|
+
}
|
|
12
|
+
/** Resolves a claim's tokens to one class and reads its baserate, writing no audit row. */
|
|
13
|
+
export declare function planningFallacyEvidenceAt(hippoRoot: string, tenantId: string, classQueryTokens: readonly string[]): PlanningFallacyEvidence;
|
|
14
|
+
//# sourceMappingURL=planning-fallacy-evidence.d.ts.map
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { onHandle } from './open.js';
|
|
2
|
+
import { computePredictionBaserate } from './predictions.js';
|
|
3
|
+
/** Resolve a query-token set to a unique best-matching class_tag for the tenant: lower-cased token overlap, best score >= 1 AND above the 2nd-best.
|
|
4
|
+
* TENANT-GLOBAL by design, not scope-filtered (base rates need the full sample): class_tag NAMES can cross scopes; use opaque names or HIPPO_AUTODEBIAS=off. */
|
|
5
|
+
function resolveClassFromTokens(hippoRoot, tenantId, queryTokens) {
|
|
6
|
+
if (queryTokens.length === 0)
|
|
7
|
+
return { classTag: null, tiebreak: false };
|
|
8
|
+
return onHandle(hippoRoot, (db) => {
|
|
9
|
+
// SAFETY: rows' shape matches the single `class_tag` column named in the SELECT above.
|
|
10
|
+
const rows = db.prepare(`SELECT DISTINCT class_tag FROM predictions WHERE tenant_id = ?`).all(tenantId);
|
|
11
|
+
const querySet = new Set(queryTokens);
|
|
12
|
+
let bestScore = 0;
|
|
13
|
+
let bestClass = null;
|
|
14
|
+
let secondBest = 0;
|
|
15
|
+
for (const { class_tag } of rows) {
|
|
16
|
+
const classTokens = class_tag
|
|
17
|
+
.toLowerCase()
|
|
18
|
+
.split(/[-_\s]+/)
|
|
19
|
+
.filter((t) => t.length >= 3);
|
|
20
|
+
let score = 0;
|
|
21
|
+
for (const t of classTokens)
|
|
22
|
+
if (querySet.has(t))
|
|
23
|
+
score++;
|
|
24
|
+
if (score > bestScore) {
|
|
25
|
+
secondBest = bestScore;
|
|
26
|
+
bestScore = score;
|
|
27
|
+
bestClass = class_tag;
|
|
28
|
+
}
|
|
29
|
+
else if (score === bestScore && score > 0) {
|
|
30
|
+
// Tie at current best: bump secondBest, do NOT update bestClass (an alphabetical tiebreak would pick the wrong class on ambiguous queries; stay silent
|
|
31
|
+
// on tie).
|
|
32
|
+
secondBest = score;
|
|
33
|
+
}
|
|
34
|
+
else if (score > secondBest) {
|
|
35
|
+
secondBest = score;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (bestScore < 1)
|
|
39
|
+
return { classTag: null, tiebreak: false };
|
|
40
|
+
if (bestScore === secondBest)
|
|
41
|
+
return { classTag: null, tiebreak: true };
|
|
42
|
+
return { classTag: bestClass, tiebreak: false };
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/** Resolves a claim's tokens to one class and reads its baserate, writing no audit row. */
|
|
46
|
+
export function planningFallacyEvidenceAt(hippoRoot, tenantId, classQueryTokens) {
|
|
47
|
+
const resolution = resolveClassFromTokens(hippoRoot, tenantId, classQueryTokens);
|
|
48
|
+
// emitAudit=false: the recall_autodebias_hint row carries n_closed and mean_ratio, so predict_baserate stays off.
|
|
49
|
+
const baserate = resolution.classTag ? computePredictionBaserate(hippoRoot, tenantId, resolution.classTag, 'recall', false) : null;
|
|
50
|
+
return { ...resolution, baserate };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=planning-fallacy-evidence.js.map
|