hippo-memory 1.68.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +4 -13
- package/dist/api/forget.js +13 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +9 -46
- package/dist/api/outcome.js +15 -57
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +7 -18
- package/dist/api/promote.js +30 -152
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +12 -13
- package/dist/api/remember.js +38 -27
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +59 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +8 -3
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -82
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -48
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -90
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/core/capture-contract.js +149 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +65 -63
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +21 -20
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +3 -2
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +41 -50
- package/dist/server.js +26 -560
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +12 -6
- package/dist/store/audit-event.js +6 -5
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +6 -3
- package/dist/store/handoffs.js +70 -31
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +8 -4
- package/dist/store/open.js +34 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- 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/sqlite/entry-writes-group.js +170 -0
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +17 -2
- package/dist/{env.js → util/env.js} +22 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/capture-contract.js +0 -49
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -30,4 +30,9 @@ export declare const RAREST_TERM_COUNT = 8;
|
|
|
30
30
|
/** Terms sorted by ascending FTS doc count (rarest first), zero-count terms dropped, ties by term.
|
|
31
31
|
* Pure: `docCount` (an FTS lookup in the caller) does the only I/O. */
|
|
32
32
|
export declare function rarestPromptTerms(terms: Iterable<string>, docCount: (term: string) => number, maxTerms?: number): string[];
|
|
33
|
+
/** The pieces FTS5's unicode61 tokenizer indexes a term as, so `journal_mode` is `journal` and `mode`. */
|
|
34
|
+
export declare function ftsTermParts(term: string): string[];
|
|
35
|
+
/** The rarest terms as a space-joined FTS query, given each part's document count; a term counts as its rarest part,
|
|
36
|
+
* an upper bound on rows holding the whole term, and a term with no parts counts 0, so it is dropped. */
|
|
37
|
+
export declare function rarestFtsQuery(terms: readonly string[], docCount: (part: string) => number, maxTerms?: number): string;
|
|
33
38
|
//# sourceMappingURL=prompt-recall.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** Recall gated on the hook prompt, not the five newest memories (pure, no I/O). */
|
|
2
|
-
import { tokenize } from '
|
|
2
|
+
import { tokenize } from '../util/tokenize.js';
|
|
3
3
|
import { STOP_WORDS } from './memory-quality.js';
|
|
4
4
|
// Latency bound, not tuned: fixed in the prereg regardless of gate config.
|
|
5
5
|
export const PROMPT_RECALL_MAX_CHARS = 4000;
|
|
@@ -64,4 +64,17 @@ export function rarestPromptTerms(terms, docCount, maxTerms = RAREST_TERM_COUNT)
|
|
|
64
64
|
.slice(0, maxTerms)
|
|
65
65
|
.map((x) => x.t);
|
|
66
66
|
}
|
|
67
|
+
/** The pieces FTS5's unicode61 tokenizer indexes a term as, so `journal_mode` is `journal` and `mode`. */
|
|
68
|
+
export function ftsTermParts(term) {
|
|
69
|
+
return term.split(/[^\p{L}\p{N}]+/u).filter(Boolean);
|
|
70
|
+
}
|
|
71
|
+
/** The rarest terms as a space-joined FTS query, given each part's document count; a term counts as its rarest part,
|
|
72
|
+
* an upper bound on rows holding the whole term, and a term with no parts counts 0, so it is dropped. */
|
|
73
|
+
export function rarestFtsQuery(terms, docCount, maxTerms = RAREST_TERM_COUNT) {
|
|
74
|
+
const termCount = (t) => {
|
|
75
|
+
const parts = ftsTermParts(t);
|
|
76
|
+
return parts.length === 0 ? 0 : Math.min(...parts.map(docCount));
|
|
77
|
+
};
|
|
78
|
+
return rarestPromptTerms(terms, termCount, maxTerms).join(' ');
|
|
79
|
+
}
|
|
67
80
|
//# sourceMappingURL=prompt-recall.js.map
|
|
@@ -5,8 +5,17 @@
|
|
|
5
5
|
* Inspired by the biological salience network (anterior insula + dACC):
|
|
6
6
|
* not everything that enters working memory deserves long-term storage.
|
|
7
7
|
*/
|
|
8
|
-
import { textOverlap } from '
|
|
9
|
-
import { duplicateKey, heldTextKeys } from '
|
|
8
|
+
import { textOverlap } from '../util/tokenize.js';
|
|
9
|
+
import { duplicateKey, heldTextKeys } from '../util/same-text.js';
|
|
10
|
+
// Each store or skip reason carries a score; a novel memory adds bonuses for structure and length.
|
|
11
|
+
const REPEAT_ERROR_SCORE = 0.3;
|
|
12
|
+
const ERROR_DESPITE_OVERLAP_SCORE = 0.7;
|
|
13
|
+
const NEAR_DUPLICATE_SCORE = 0.5;
|
|
14
|
+
const DUPLICATE_SCORE = 0.1;
|
|
15
|
+
const NOVEL_ERROR_SCORE = 0.9;
|
|
16
|
+
const NOVEL_BASE_SCORE = 0.5;
|
|
17
|
+
const STRUCTURED_TAGS_BONUS = 0.15;
|
|
18
|
+
const LENGTH_BONUS = 0.1;
|
|
10
19
|
const DEFAULTS = {
|
|
11
20
|
recentWindow: 20,
|
|
12
21
|
overlapThreshold: 0.6,
|
|
@@ -33,34 +42,40 @@ export function computeSalience(content, tags, recentMemories, options = {}) {
|
|
|
33
42
|
return {
|
|
34
43
|
decision: 'start_weak',
|
|
35
44
|
reason: `repeat_error (${recentErrors} recent errors, overlap ${(duplicateMatch.overlap * 100).toFixed(0)}% with ${duplicateMatch.matchId})`,
|
|
36
|
-
score:
|
|
45
|
+
score: REPEAT_ERROR_SCORE,
|
|
37
46
|
};
|
|
38
47
|
}
|
|
39
|
-
return { decision: 'store', reason: 'error_despite_overlap', score:
|
|
48
|
+
return { decision: 'store', reason: 'error_despite_overlap', score: ERROR_DESPITE_OVERLAP_SCORE };
|
|
40
49
|
}
|
|
41
|
-
|
|
42
|
-
const key = duplicateKey(trimmed);
|
|
43
|
-
const same = window.find((m) => heldTextKeys(m).includes(key));
|
|
44
|
-
if (!same) {
|
|
45
|
-
return {
|
|
46
|
-
decision: 'store',
|
|
47
|
-
reason: `near_duplicate (${(duplicateMatch.overlap * 100).toFixed(0)}% overlap with ${duplicateMatch.matchId})`,
|
|
48
|
-
score: 0.5,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
return { decision: 'skip', reason: `duplicate (same text as ${same.id})`, score: 0.1 };
|
|
50
|
+
return judgeOverlappingNonError(trimmed, window, duplicateMatch);
|
|
52
51
|
}
|
|
53
52
|
if (isError) {
|
|
54
|
-
return { decision: 'store', reason: 'error_novel', score:
|
|
53
|
+
return { decision: 'store', reason: 'error_novel', score: NOVEL_ERROR_SCORE };
|
|
54
|
+
}
|
|
55
|
+
return scoreNovel(trimmed, tags);
|
|
56
|
+
}
|
|
57
|
+
function judgeOverlappingNonError(trimmed, window, duplicateMatch) {
|
|
58
|
+
// A near-duplicate may be a changed value (port 8080 then 8081), so only the same text is skipped.
|
|
59
|
+
const key = duplicateKey(trimmed);
|
|
60
|
+
const same = window.find((m) => heldTextKeys(m).includes(key));
|
|
61
|
+
if (!same) {
|
|
62
|
+
return {
|
|
63
|
+
decision: 'store',
|
|
64
|
+
reason: `near_duplicate (${(duplicateMatch.overlap * 100).toFixed(0)}% overlap with ${duplicateMatch.matchId})`,
|
|
65
|
+
score: NEAR_DUPLICATE_SCORE,
|
|
66
|
+
};
|
|
55
67
|
}
|
|
68
|
+
return { decision: 'skip', reason: `duplicate (same text as ${same.id})`, score: DUPLICATE_SCORE };
|
|
69
|
+
}
|
|
70
|
+
function scoreNovel(trimmed, tags) {
|
|
56
71
|
const hasStructuredTags = tags.some(t => t.startsWith('speaker:') || t.startsWith('topic:') || t.startsWith('scope:'));
|
|
57
|
-
let score =
|
|
72
|
+
let score = NOVEL_BASE_SCORE;
|
|
58
73
|
if (hasStructuredTags)
|
|
59
|
-
score +=
|
|
74
|
+
score += STRUCTURED_TAGS_BONUS;
|
|
60
75
|
if (trimmed.length > 100)
|
|
61
|
-
score +=
|
|
76
|
+
score += LENGTH_BONUS;
|
|
62
77
|
if (trimmed.length > 300)
|
|
63
|
-
score +=
|
|
78
|
+
score += LENGTH_BONUS;
|
|
64
79
|
return { decision: 'store', reason: 'novel', score: Math.min(score, 1.0) };
|
|
65
80
|
}
|
|
66
81
|
function findBestOverlap(content, memories) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MemoryEntry } from '
|
|
1
|
+
import type { MemoryEntry } from './memory.js';
|
|
2
2
|
export declare const DEFAULT_RECALL_BUDGET = 4000;
|
|
3
3
|
export declare const DEFAULT_LOCAL_BUMP = 1.2;
|
|
4
4
|
/** One score mutation applied after candidate generation; allocated only under `recall --why` or `RecallOpts.explain`. */
|
|
@@ -90,4 +90,4 @@ export interface ScoreBreakdown {
|
|
|
90
90
|
/** 1.05 if a summary was rebuilt within 7 days; 1.0 otherwise. */
|
|
91
91
|
summaryFreshnessBoost?: number;
|
|
92
92
|
}
|
|
93
|
-
//# sourceMappingURL=types.d.ts.map
|
|
93
|
+
//# sourceMappingURL=search-types.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MemoryEntry } from './memory.js';
|
|
2
|
+
export declare const SESSION_DIGEST_TAG = "session-digest";
|
|
3
|
+
/** Facts extracted from a digest and DAG summaries over one inherit its tag, but they are not the digest itself. */
|
|
4
|
+
export declare function isSessionDigestRow(entry: Pick<MemoryEntry, 'source' | 'tags' | 'extracted_from'>): boolean;
|
|
5
|
+
//# sourceMappingURL=session-digest-row.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export const SESSION_DIGEST_TAG = 'session-digest';
|
|
2
|
+
/** Facts extracted from a digest and DAG summaries over one inherit its tag, but they are not the digest itself. */
|
|
3
|
+
export function isSessionDigestRow(entry) {
|
|
4
|
+
return entry.source === SESSION_DIGEST_TAG && entry.tags.includes(SESSION_DIGEST_TAG) && !entry.extracted_from;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=session-digest-row.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MemoryEntry } from '
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import { type ActionBody } from './dashboard-params.js';
|
|
3
3
|
/** What an action hands the router: a status, a JSON body, and whether the store changed. */
|
|
4
4
|
export interface ActionResult {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// The four dashboard writes, each a thin call into an existing store or api function; the router owns HTTP and the cache.
|
|
2
|
-
import * as api from '
|
|
3
|
-
import { NotFoundError } from '
|
|
4
|
-
import { listTouchableConflicts, resolveConflict } from '
|
|
5
|
-
import { readEntry } from '
|
|
6
|
-
import { writeEntry } from '
|
|
2
|
+
import * as api from '../api/index.js';
|
|
3
|
+
import { NotFoundError } from '../core/api-errors.js';
|
|
4
|
+
import { listTouchableConflicts, resolveConflict } from '../store/conflicts.js';
|
|
5
|
+
import { readEntry } from '../store/entry-reads.js';
|
|
6
|
+
import { writeEntry } from '../store/entry-writes.js';
|
|
7
7
|
import { ParamError, parseMemoryId } from './dashboard-params.js';
|
|
8
8
|
import { isLiveMemory } from './dashboard-snapshot.js';
|
|
9
9
|
const ACTOR = 'dashboard';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type MemoryEntry } from '
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
2
|
import { type Snapshot } from './dashboard-snapshot.js';
|
|
3
3
|
import type { MemoryQuery } from './dashboard-params.js';
|
|
4
4
|
import type { MemoryDetail, MemoryPage, Overview, ProjectDetail, SearchResult } from './dashboard-types.js';
|
|
@@ -10,6 +10,11 @@ export declare function buildProjectDetail(snap: Snapshot, key: string): Project
|
|
|
10
10
|
export declare function buildMemoryPage(snap: Snapshot, key: string, query: MemoryQuery): MemoryPage | null;
|
|
11
11
|
/** Substring search over content and tags across every project; it reads the snapshot and never touches recall. */
|
|
12
12
|
export declare function buildSearch(snap: Snapshot, text: string): SearchResult;
|
|
13
|
+
export interface MemoryDetailOptions {
|
|
14
|
+
readonly snapshotId: number;
|
|
15
|
+
readonly nowMs: number;
|
|
16
|
+
readonly embedded: boolean;
|
|
17
|
+
}
|
|
13
18
|
/** Full detail read fresh from the store, never from the snapshot, so the drawer is current inside the coalescing window. */
|
|
14
|
-
export declare function buildMemoryDetail(hippoRoot: string, tenantId: string, entry: MemoryEntry,
|
|
19
|
+
export declare function buildMemoryDetail(hippoRoot: string, tenantId: string, entry: MemoryEntry, options: MemoryDetailOptions): MemoryDetail;
|
|
15
20
|
//# sourceMappingURL=dashboard-queries.d.ts.map
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Read models over a snapshot: overview, project, memory page, search, and the fresh single-memory detail.
|
|
2
|
-
import { calculateStrength } from '
|
|
3
|
-
import {
|
|
4
|
-
import { readEntry } from './store/entry-reads.js';
|
|
2
|
+
import { calculateStrength } from '../core/memory.js';
|
|
3
|
+
import { loadOpenConflictsOf } from '../store/conflicts.js';
|
|
5
4
|
import { BANDS, DAY_MS, LAYERS, isLiveMemory, memoryFacts, projectIdentity, } from './dashboard-snapshot.js';
|
|
6
5
|
const SERIES_DAYS = 90;
|
|
7
6
|
/** The server words each delta for this range; the client re-slices the series for 7d and 90d. */
|
|
@@ -297,12 +296,8 @@ export function buildSearch(snap, text) {
|
|
|
297
296
|
}
|
|
298
297
|
function openConflictsOf(hippoRoot, tenantId, entry, nowMs) {
|
|
299
298
|
const out = [];
|
|
300
|
-
for (const c of
|
|
301
|
-
if (
|
|
302
|
-
continue;
|
|
303
|
-
const otherId = c.memory_a_id === entry.id ? c.memory_b_id : c.memory_a_id;
|
|
304
|
-
const other = readEntry(hippoRoot, otherId, tenantId);
|
|
305
|
-
if (!other || !isLiveMemory(other))
|
|
299
|
+
for (const { conflict: c, other } of loadOpenConflictsOf(hippoRoot, tenantId, entry.id)) {
|
|
300
|
+
if (!isLiveMemory(other))
|
|
306
301
|
continue;
|
|
307
302
|
out.push({
|
|
308
303
|
id: c.id,
|
|
@@ -319,7 +314,8 @@ function openConflictsOf(hippoRoot, tenantId, entry, nowMs) {
|
|
|
319
314
|
return out;
|
|
320
315
|
}
|
|
321
316
|
/** Full detail read fresh from the store, never from the snapshot, so the drawer is current inside the coalescing window. */
|
|
322
|
-
export function buildMemoryDetail(hippoRoot, tenantId, entry,
|
|
317
|
+
export function buildMemoryDetail(hippoRoot, tenantId, entry, options) {
|
|
318
|
+
const { snapshotId, nowMs, embedded } = options;
|
|
323
319
|
const f = memoryFacts(entry, nowMs);
|
|
324
320
|
const project = projectIdentity(entry.origin_project);
|
|
325
321
|
return {
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { Layer as MemoryLayer, type MemoryEntry } from '
|
|
2
|
-
import type
|
|
1
|
+
import { Layer as MemoryLayer, type ConfidenceInputs, type MemoryEntry, type StrengthInputs } from '../core/memory.js';
|
|
2
|
+
import { type DashboardRow, type ExcludedCounts } from '../store/dashboard-reads.js';
|
|
3
|
+
import type { MemoryConflict } from '../store/rows.js';
|
|
3
4
|
import type { Band, ChipCounts, Layer, Overview, ProjectKind, ProjectSummary, ScatterGrid, ScatterPoints } from './dashboard-types.js';
|
|
4
|
-
|
|
5
|
+
import { DAY_MS } from '../util/time.js';
|
|
6
|
+
export { DAY_MS };
|
|
5
7
|
export declare const LAYERS: readonly Layer[];
|
|
6
8
|
export declare const BANDS: readonly Band[];
|
|
7
|
-
/** An outside commit rebuilds the snapshot at most this often. */
|
|
8
|
-
export declare const COALESCE_MS = 10000;
|
|
9
|
-
/** Projected strengths track the clock, so the snapshot is rebuilt at least this often. */
|
|
10
|
-
export declare const TTL_MS: number;
|
|
11
9
|
/** The one predicate for "shown on the dashboard": not superseded, not archived, not quarantined. */
|
|
12
10
|
export declare function isLiveMemory(entry: Pick<MemoryEntry, 'superseded_by' | 'kind' | 'scope'>): boolean;
|
|
13
11
|
/** Wire key, display name and kind of a project. */
|
|
@@ -34,7 +32,7 @@ export interface MemoryFacts {
|
|
|
34
32
|
wrong: boolean;
|
|
35
33
|
}
|
|
36
34
|
/** Strength now and at +7d and +30d, band, age and the confidence split for one entry at `nowMs`. */
|
|
37
|
-
export declare function memoryFacts(entry: MemoryEntry, nowMs: number): MemoryFacts;
|
|
35
|
+
export declare function memoryFacts(entry: StrengthInputs & ConfidenceInputs & Pick<MemoryEntry, 'layer'>, nowMs: number): MemoryFacts;
|
|
38
36
|
/** One live memory as the snapshot holds it: numbers and short strings only, never the full entry. */
|
|
39
37
|
export interface Fact {
|
|
40
38
|
id: string;
|
|
@@ -116,7 +114,9 @@ export interface SnapshotInput {
|
|
|
116
114
|
id: number;
|
|
117
115
|
tenantId: string;
|
|
118
116
|
nowMs: number;
|
|
119
|
-
entries: readonly
|
|
117
|
+
entries: readonly DashboardRow[];
|
|
118
|
+
/** Rows counted out before `entries` was read; any entry here that is not live adds to them. */
|
|
119
|
+
excluded?: ExcludedCounts;
|
|
120
120
|
openConflicts: readonly Pick<MemoryConflict, 'memory_a_id' | 'memory_b_id'>[];
|
|
121
121
|
embeddedIds: ReadonlySet<string> | null;
|
|
122
122
|
}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
// The dashboard's read model: one in-memory snapshot of a tenant's live memories, grouped by origin project.
|
|
2
2
|
// Pure build functions plus one cache; the queries over it live in dashboard-queries.ts.
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
import { storedVectorIds } from './vector-store.js';
|
|
10
|
-
export const DAY_MS = 86_400_000;
|
|
3
|
+
import { calculateStrength, facetsOf, netWrong, Layer as MemoryLayer } from '../core/memory.js';
|
|
4
|
+
import { isQuarantineScope } from '../trust/quarantine.js';
|
|
5
|
+
import { listMemoryConflicts } from '../store/conflicts.js';
|
|
6
|
+
import { DashboardConnection, loadDashboardRows } from '../store/dashboard-reads.js';
|
|
7
|
+
import { DAY_MS } from '../util/time.js';
|
|
8
|
+
export { DAY_MS };
|
|
11
9
|
export const LAYERS = ['buffer', 'episodic', 'semantic', 'trace'];
|
|
12
10
|
// Wire order of `Band`, and the order the mockup sorts bands in.
|
|
13
11
|
export const BANDS = ['pinned', 'strong', 'fading', 'atRisk'];
|
|
@@ -18,9 +16,9 @@ const BAND_AT_RISK = 3;
|
|
|
18
16
|
const CONFIDENCE_ORDER = ['verified', 'observed', 'inferred', 'stale'];
|
|
19
17
|
const HEAD_CHARS = 240;
|
|
20
18
|
/** An outside commit rebuilds the snapshot at most this often. */
|
|
21
|
-
|
|
19
|
+
const COALESCE_MS = 10_000;
|
|
22
20
|
/** Projected strengths track the clock, so the snapshot is rebuilt at least this often. */
|
|
23
|
-
|
|
21
|
+
const TTL_MS = 5 * 60_000;
|
|
24
22
|
/** The one predicate for "shown on the dashboard": not superseded, not archived, not quarantined. */
|
|
25
23
|
export function isLiveMemory(entry) {
|
|
26
24
|
return !entry.superseded_by && (entry.kind === 'raw' || entry.kind === 'distilled') && !isQuarantineScope(entry.scope);
|
|
@@ -52,7 +50,7 @@ export function memoryFacts(entry, nowMs) {
|
|
|
52
50
|
const strength = calculateStrength(entry, now);
|
|
53
51
|
const strength7d = calculateStrength(entry, new Date(nowMs + 7 * DAY_MS));
|
|
54
52
|
const strength30d = calculateStrength(entry, new Date(nowMs + 30 * DAY_MS));
|
|
55
|
-
const facets =
|
|
53
|
+
const facets = facetsOf(entry, now);
|
|
56
54
|
const band = entry.pinned ? BAND_PINNED : strength30d < 0.2 ? BAND_AT_RISK : strength >= 0.5 ? BAND_STRONG : BAND_FADING;
|
|
57
55
|
return {
|
|
58
56
|
strength,
|
|
@@ -144,30 +142,42 @@ function toFact(entry, f, project, embedded, createdMs) {
|
|
|
144
142
|
createdMs,
|
|
145
143
|
};
|
|
146
144
|
}
|
|
145
|
+
function tallyExcluded(entry, excluded) {
|
|
146
|
+
if (isQuarantineScope(entry.scope))
|
|
147
|
+
excluded.quarantined++;
|
|
148
|
+
else if (entry.superseded_by || entry.kind === 'superseded')
|
|
149
|
+
excluded.superseded++;
|
|
150
|
+
else if (entry.kind === 'archived')
|
|
151
|
+
excluded.archived++;
|
|
152
|
+
}
|
|
153
|
+
function draftIndexFor(identity, projectIndex, drafts) {
|
|
154
|
+
let p = projectIndex.get(identity.key);
|
|
155
|
+
if (p === undefined) {
|
|
156
|
+
p = drafts.length;
|
|
157
|
+
projectIndex.set(identity.key, p);
|
|
158
|
+
drafts.push(newDraft(identity));
|
|
159
|
+
}
|
|
160
|
+
return p;
|
|
161
|
+
}
|
|
162
|
+
function finishProject(d) {
|
|
163
|
+
d.summary.atRisk = d.summary.bands.atRisk;
|
|
164
|
+
d.summary.share = d.summary.live > 0 ? d.summary.atRisk / d.summary.live : 0;
|
|
165
|
+
d.summary.lastRetrievedDays = d.summary.live > 0 ? round1(d.lastDays) : null;
|
|
166
|
+
return { summary: d.summary, members: Int32Array.from(d.members), firstCreatedMs: d.firstCreatedMs };
|
|
167
|
+
}
|
|
147
168
|
/** Builds the snapshot from already-loaded rows; it touches no store, so tests can feed it directly. */
|
|
148
169
|
export function buildSnapshot(input) {
|
|
149
170
|
const { entries, embeddedIds, nowMs } = input;
|
|
150
|
-
const excluded = { superseded: 0, archived: 0, quarantined: 0 };
|
|
171
|
+
const excluded = { superseded: 0, archived: 0, quarantined: 0, ...input.excluded };
|
|
151
172
|
const facts = [];
|
|
152
173
|
const projectIndex = new Map();
|
|
153
174
|
const drafts = [];
|
|
154
175
|
for (const entry of entries) {
|
|
155
176
|
if (!isLiveMemory(entry)) {
|
|
156
|
-
|
|
157
|
-
excluded.quarantined++;
|
|
158
|
-
else if (entry.superseded_by || entry.kind === 'superseded')
|
|
159
|
-
excluded.superseded++;
|
|
160
|
-
else if (entry.kind === 'archived')
|
|
161
|
-
excluded.archived++;
|
|
177
|
+
tallyExcluded(entry, excluded);
|
|
162
178
|
continue;
|
|
163
179
|
}
|
|
164
|
-
const
|
|
165
|
-
let p = projectIndex.get(identity.key);
|
|
166
|
-
if (p === undefined) {
|
|
167
|
-
p = drafts.length;
|
|
168
|
-
projectIndex.set(identity.key, p);
|
|
169
|
-
drafts.push(newDraft(identity));
|
|
170
|
-
}
|
|
180
|
+
const p = draftIndexFor(projectIdentity(entry.origin_project), projectIndex, drafts);
|
|
171
181
|
const f = memoryFacts(entry, nowMs);
|
|
172
182
|
const embedded = embeddedIds !== null && embeddedIds.has(entry.id);
|
|
173
183
|
const parsedCreated = Date.parse(entry.created);
|
|
@@ -187,12 +197,7 @@ export function buildSnapshot(input) {
|
|
|
187
197
|
facts.push(toFact(entry, f, p, embedded, Number.isFinite(parsedCreated) ? parsedCreated : nowMs));
|
|
188
198
|
}
|
|
189
199
|
const openConflicts = countOpenConflicts(facts, drafts.map((d) => d.summary), input.openConflicts);
|
|
190
|
-
const projects = drafts.map(
|
|
191
|
-
d.summary.atRisk = d.summary.bands.atRisk;
|
|
192
|
-
d.summary.share = d.summary.live > 0 ? d.summary.atRisk / d.summary.live : 0;
|
|
193
|
-
d.summary.lastRetrievedDays = d.summary.live > 0 ? round1(d.lastDays) : null;
|
|
194
|
-
return { summary: d.summary, members: Int32Array.from(d.members), firstCreatedMs: d.firstCreatedMs };
|
|
195
|
-
});
|
|
200
|
+
const projects = drafts.map(finishProject);
|
|
196
201
|
const embeddedTotal = projects.reduce((sum, p) => sum + p.summary.embedded, 0);
|
|
197
202
|
return {
|
|
198
203
|
id: input.id,
|
|
@@ -227,82 +232,74 @@ function countOpenConflicts(facts, summaries, conflicts) {
|
|
|
227
232
|
}
|
|
228
233
|
return total;
|
|
229
234
|
}
|
|
235
|
+
function cacheStillServes(hit, want, wallMs) {
|
|
236
|
+
const age = wallMs - hit.builtAtMs;
|
|
237
|
+
return hit.snapshot.tenantId === want.tenantId
|
|
238
|
+
&& (hit.dataVersion !== null || want.dataVersion === null)
|
|
239
|
+
&& age < TTL_MS
|
|
240
|
+
&& (hit.dataVersion === want.dataVersion || age < COALESCE_MS);
|
|
241
|
+
}
|
|
230
242
|
// Keeps ids rising between two services created in the same millisecond of one process.
|
|
231
243
|
let highestIssuedId = 0;
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
244
|
+
class SnapshotCacheService {
|
|
245
|
+
hippoRoot;
|
|
246
|
+
now;
|
|
247
|
+
cacheClock;
|
|
248
|
+
connection;
|
|
249
|
+
cached = null;
|
|
236
250
|
// Wall clock, not `now`, so ids keep rising across server restarts and a client holding an old tab never sees a lower one.
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
251
|
+
lastId = Math.max(Date.now(), highestIssuedId);
|
|
252
|
+
lastEmbeddedIds;
|
|
253
|
+
constructor(hippoRoot, now, cacheClock) {
|
|
254
|
+
this.hippoRoot = hippoRoot;
|
|
255
|
+
this.now = now;
|
|
256
|
+
this.cacheClock = cacheClock;
|
|
257
|
+
this.connection = new DashboardConnection(hippoRoot);
|
|
258
|
+
}
|
|
259
|
+
build(tenantId, dv, nowMs) {
|
|
260
|
+
const rows = dv === null ? null : loadDashboardRows(this.hippoRoot, tenantId);
|
|
261
|
+
const openConflicts = dv === null ? [] : listMemoryConflicts(this.hippoRoot, 'open', tenantId);
|
|
262
|
+
this.lastId += 1;
|
|
263
|
+
highestIssuedId = Math.max(highestIssuedId, this.lastId);
|
|
264
|
+
// After loadDashboardRows, whose writable open has run any pending migration and legacy embeddings.json import.
|
|
265
|
+
this.lastEmbeddedIds = this.connection.embeddedIds();
|
|
266
|
+
return buildSnapshot({ id: this.lastId, tenantId, nowMs, entries: rows?.live ?? [], excluded: rows?.excluded, openConflicts, embeddedIds: this.lastEmbeddedIds });
|
|
267
|
+
}
|
|
268
|
+
get(tenantId, fresh = false) {
|
|
269
|
+
const nowMs = this.now();
|
|
270
|
+
// A frozen eval clock (HIPPO_FAKE_NOW) would never age the cache, so reuse is timed on its own clock.
|
|
271
|
+
const wallMs = this.cacheClock();
|
|
272
|
+
// Read before the build, so a commit that lands during it shows on the next read.
|
|
273
|
+
const dv = this.connection.dataVersion();
|
|
274
|
+
const hit = this.cached;
|
|
275
|
+
if (hit !== null && !fresh) {
|
|
276
|
+
if (cacheStillServes(hit, { tenantId, dataVersion: dv }, wallMs))
|
|
277
|
+
return hit.snapshot;
|
|
244
278
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
return
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
const wallMs = cacheClock();
|
|
271
|
-
// Read before the build, so a commit that lands during it shows on the next read.
|
|
272
|
-
const dv = dataVersion();
|
|
273
|
-
const hit = cached;
|
|
274
|
-
if (hit !== null && !fresh) {
|
|
275
|
-
const age = wallMs - hit.builtAtMs;
|
|
276
|
-
const reusable = hit.snapshot.tenantId === tenantId
|
|
277
|
-
&& (hit.dataVersion !== null || dv === null)
|
|
278
|
-
&& age < TTL_MS
|
|
279
|
-
&& (hit.dataVersion === dv || age < COALESCE_MS);
|
|
280
|
-
if (reusable)
|
|
281
|
-
return hit.snapshot;
|
|
282
|
-
}
|
|
283
|
-
const snapshot = build(tenantId, dv, nowMs);
|
|
284
|
-
cached = { snapshot, dataVersion: dv, builtAtMs: wallMs };
|
|
285
|
-
return snapshot;
|
|
286
|
-
},
|
|
287
|
-
invalidate() {
|
|
288
|
-
cached = null;
|
|
289
|
-
},
|
|
290
|
-
currentId() {
|
|
291
|
-
return lastId;
|
|
292
|
-
},
|
|
293
|
-
embeddedIds() {
|
|
294
|
-
if (lastEmbeddedIds !== undefined)
|
|
295
|
-
return lastEmbeddedIds;
|
|
296
|
-
dataVersion();
|
|
297
|
-
return readEmbeddedIds();
|
|
298
|
-
},
|
|
299
|
-
close() {
|
|
300
|
-
if (db !== null)
|
|
301
|
-
closeHippoDb(db);
|
|
302
|
-
db = null;
|
|
303
|
-
cached = null;
|
|
304
|
-
lastEmbeddedIds = undefined;
|
|
305
|
-
},
|
|
306
|
-
};
|
|
279
|
+
const snapshot = this.build(tenantId, dv, nowMs);
|
|
280
|
+
this.cached = { snapshot, dataVersion: dv, builtAtMs: wallMs };
|
|
281
|
+
return snapshot;
|
|
282
|
+
}
|
|
283
|
+
invalidate() {
|
|
284
|
+
this.cached = null;
|
|
285
|
+
}
|
|
286
|
+
currentId() {
|
|
287
|
+
return this.lastId;
|
|
288
|
+
}
|
|
289
|
+
embeddedIds() {
|
|
290
|
+
if (this.lastEmbeddedIds !== undefined)
|
|
291
|
+
return this.lastEmbeddedIds;
|
|
292
|
+
this.connection.dataVersion();
|
|
293
|
+
return this.connection.embeddedIds();
|
|
294
|
+
}
|
|
295
|
+
close() {
|
|
296
|
+
this.connection.close();
|
|
297
|
+
this.cached = null;
|
|
298
|
+
this.lastEmbeddedIds = undefined;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/** Holds one read-only connection for its commit signal (`PRAGMA data_version`) and the snapshot cache; `now` dates the strength projections, `cacheClock` ages the cache. */
|
|
302
|
+
export function createSnapshotService(hippoRoot, now, cacheClock = Date.now) {
|
|
303
|
+
return new SnapshotCacheService(hippoRoot, now, cacheClock);
|
|
307
304
|
}
|
|
308
305
|
//# sourceMappingURL=dashboard-snapshot.js.map
|