hippo-memory 1.69.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/** Typed judgment over capture candidates via TypeSafe's Jev (System One).
|
|
2
2
|
* Regex picks WHAT is a candidate; it cannot say what is worth keeping, so
|
|
3
3
|
* every captured memory currently lands on a flat schema_fit of 0.5. */
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { log } from './log.js';
|
|
4
|
+
import { fetchWithRetry } from '../util/http-retry.js';
|
|
5
|
+
import { errorMessage, log } from '../util/log.js';
|
|
7
6
|
const ENDPOINT = 'https://api.typesafe.ai/v1/systemone';
|
|
8
7
|
const DEFAULT_MODEL = 'jev-1.13.0';
|
|
9
8
|
const MAX_CONCURRENCY = 8;
|
|
@@ -36,10 +35,6 @@ const QUESTIONS = {
|
|
|
36
35
|
};
|
|
37
36
|
const KINDS = ['error', 'decision', 'convention', 'preference', 'trivia'];
|
|
38
37
|
const VALENCES = ['critical', 'negative', 'positive', 'neutral'];
|
|
39
|
-
/** Absent key means hippo keeps its pre-Jev behaviour and makes no HTTP call. */
|
|
40
|
-
export function judgmentApiKey() {
|
|
41
|
-
return envTypesafeApiKey();
|
|
42
|
-
}
|
|
43
38
|
function oneOf(value, allowed) {
|
|
44
39
|
return allowed.find((option) => option === value) ?? null;
|
|
45
40
|
}
|
|
@@ -68,7 +63,7 @@ async function post(content, opts) {
|
|
|
68
63
|
}, { timeoutMs: JUDGE_TIMEOUT_MS, fetchFn: opts.fetcher });
|
|
69
64
|
}
|
|
70
65
|
catch (err) {
|
|
71
|
-
log.debug(`judge: request failed: ${
|
|
66
|
+
log.debug(`judge: request failed: ${errorMessage(err)}`);
|
|
72
67
|
return null;
|
|
73
68
|
}
|
|
74
69
|
return res.ok ? res : null;
|
|
@@ -90,7 +85,7 @@ export async function judge(content, opts) {
|
|
|
90
85
|
data = await res.json();
|
|
91
86
|
}
|
|
92
87
|
catch (err) {
|
|
93
|
-
log.debug(`judge: unreadable response: ${
|
|
88
|
+
log.debug(`judge: unreadable response: ${errorMessage(err)}`);
|
|
94
89
|
return null;
|
|
95
90
|
}
|
|
96
91
|
const durable = data.answers?.durable?.noul;
|
|
@@ -226,9 +226,8 @@ export default function register(api) {
|
|
|
226
226
|
async execute(_id, params) {
|
|
227
227
|
const cfg = getConfig(api);
|
|
228
228
|
const budget = params.budget ?? cfg.budget ?? 1500;
|
|
229
|
-
const framing = cfg.framing ?? 'observe';
|
|
230
229
|
const hippoCwd = resolveHippoCwdFromContext(api, ctx, cfg.root);
|
|
231
|
-
const result = runHippo(['recall', params.query, '--budget', String(budget)
|
|
230
|
+
const result = runHippo(['recall', params.query, '--budget', String(budget)], hippoCwd);
|
|
232
231
|
return { content: [{ type: 'text', text: result || 'No relevant memories found.' }] };
|
|
233
232
|
},
|
|
234
233
|
}));
|
package/dist/graph/delta.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { EntityType, RelationType, SourceObjectRef } from '../store/graph-rows.js';
|
|
2
3
|
/** What names an object-derived entity across rebuilds; v38 has no UNIQUE on it, so the diff keeps one row per key. */
|
|
3
4
|
export interface NaturalKey {
|
|
4
5
|
readonly entityType: EntityType;
|
|
@@ -38,7 +39,7 @@ export type GraphOp = {
|
|
|
38
39
|
};
|
|
39
40
|
export declare function entityKey(k: NaturalKey): string;
|
|
40
41
|
/** Ops that turn the stored graph into `desired`, in apply order; reads only, and keeps the lowest id per natural key. */
|
|
41
|
-
export declare function graphDelta(db:
|
|
42
|
+
export declare function graphDelta(db: DatabaseSyncLike, tenantId: string, desired: DesiredGraph): GraphOp[];
|
|
42
43
|
/** graphDelta on its own connection and outside any write lock; the apply re-checks each op against what changed since. */
|
|
43
44
|
export declare function readGraphDelta(hippoRoot: string, tenantId: string, desired: DesiredGraph): GraphOp[];
|
|
44
45
|
//# sourceMappingURL=delta.d.ts.map
|
package/dist/graph/delta.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
1
|
+
import { loadStoredGraph, storedGraphOn } from '../store/graph-reads.js';
|
|
3
2
|
const keyText = (entityType, objectType, objectId) => `${entityType}|${objectType}:${objectId}`;
|
|
4
3
|
export function entityKey(k) {
|
|
5
4
|
return keyText(k.entityType, k.sourceObject.type, k.sourceObject.id);
|
|
@@ -15,17 +14,12 @@ function provenanceOf(memoryId, kinds) {
|
|
|
15
14
|
const kind = memoryId === null ? undefined : kinds.get(memoryId);
|
|
16
15
|
return kind === undefined ? '|distilled' : `${memoryId}|${kind}`;
|
|
17
16
|
}
|
|
18
|
-
function
|
|
17
|
+
function memoryIdsOf(desired) {
|
|
19
18
|
const ids = new Set();
|
|
20
19
|
for (const row of [...desired.entities, ...desired.relations])
|
|
21
20
|
if (row.memoryId !== null)
|
|
22
21
|
ids.add(row.memoryId);
|
|
23
|
-
|
|
24
|
-
return new Map();
|
|
25
|
-
// SAFETY: the SELECT names exactly the two columns of the row type.
|
|
26
|
-
const rows = db.prepare(`SELECT id, kind FROM memories WHERE id IN (SELECT value FROM json_each(?))`)
|
|
27
|
-
.all(JSON.stringify([...ids]));
|
|
28
|
-
return new Map(rows.map((r) => [r.id, r.kind]));
|
|
22
|
+
return [...ids];
|
|
29
23
|
}
|
|
30
24
|
function firstByKey(rows, keyOf) {
|
|
31
25
|
const out = new Map();
|
|
@@ -86,24 +80,16 @@ function diffRelations(stored, desired, keptKeyById, kinds) {
|
|
|
86
80
|
inserts.push({ op: 'insertRelation', relation });
|
|
87
81
|
return [...deletes, ...inserts];
|
|
88
82
|
}
|
|
83
|
+
function deltaOf(stored, desired) {
|
|
84
|
+
const entityDelta = diffEntities(stored.entities, desired.entities, stored.kinds);
|
|
85
|
+
return [...entityDelta.ops, ...diffRelations(stored.relations, desired.relations, entityDelta.keptKeyById, stored.kinds)];
|
|
86
|
+
}
|
|
89
87
|
/** Ops that turn the stored graph into `desired`, in apply order; reads only, and keeps the lowest id per natural key. */
|
|
90
88
|
export function graphDelta(db, tenantId, desired) {
|
|
91
|
-
|
|
92
|
-
// SAFETY: the SELECT names exactly the columns of StoredEntity.
|
|
93
|
-
const entities = db.prepare(`SELECT id, entity_type, name, memory_id, source_kind, source_object_type, source_object_id FROM entities WHERE tenant_id = ? ORDER BY id`).all(tenantId);
|
|
94
|
-
// SAFETY: the SELECT names exactly the columns of StoredRelation.
|
|
95
|
-
const relations = db.prepare(`SELECT id, from_entity_id, to_entity_id, rel_type, memory_id, source_kind, source_object_type, source_object_id FROM relations WHERE tenant_id = ? ORDER BY id`).all(tenantId);
|
|
96
|
-
const entityDelta = diffEntities(entities, desired.entities, kinds);
|
|
97
|
-
return [...entityDelta.ops, ...diffRelations(relations, desired.relations, entityDelta.keptKeyById, kinds)];
|
|
89
|
+
return deltaOf(storedGraphOn(db, tenantId, memoryIdsOf(desired)), desired);
|
|
98
90
|
}
|
|
99
91
|
/** graphDelta on its own connection and outside any write lock; the apply re-checks each op against what changed since. */
|
|
100
92
|
export function readGraphDelta(hippoRoot, tenantId, desired) {
|
|
101
|
-
|
|
102
|
-
try {
|
|
103
|
-
return graphDelta(db, tenantId, desired);
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
closeHippoDb(db);
|
|
107
|
-
}
|
|
93
|
+
return deltaOf(loadStoredGraph(hippoRoot, tenantId, memoryIdsOf(desired)), desired);
|
|
108
94
|
}
|
|
109
95
|
//# sourceMappingURL=delta.js.map
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* entities + `supersedes` relations from decisions /
|
|
8
8
|
* policies / customer_notes / project_briefs (the four object types whose kind maps to the
|
|
9
9
|
* `entity_type` enum), then write only their difference from the stored rows. All writes go
|
|
10
|
-
* through the src/graph
|
|
10
|
+
* through the src/store/graph-writes.ts consolidated-source guard; this module issues no raw SQL.
|
|
11
11
|
*
|
|
12
12
|
* Pass 3 adds the
|
|
13
13
|
* first CROSS-OBJECT relations: a deterministic NAME-MATCH heuristic that emits a
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
* skill/incident/process entities (not in the entity_type enum - needs a migration); the
|
|
20
20
|
* `hippo sleep` enqueue-hook.
|
|
21
21
|
*/
|
|
22
|
-
import { type EntityType } from '
|
|
23
|
-
import { type DesiredGraph } from './
|
|
24
|
-
import { type WriteBudget } from '
|
|
22
|
+
import { type EntityType } from '../store/graph-rows.js';
|
|
23
|
+
import { type DesiredGraph } from './delta.js';
|
|
24
|
+
import { type WriteBudget } from '../util/write-budget.js';
|
|
25
25
|
/** Per-type load cap (the loaders default to 100). A type whose active or superseded
|
|
26
26
|
* set exceeds this is truncated; `ExtractResult.truncated` records it so the
|
|
27
27
|
* incompleteness is observable rather than silent. */
|
|
@@ -62,7 +62,7 @@ export interface ExtractRow {
|
|
|
62
62
|
/** The successor's object id (Y) when this row (X) is superseded; null otherwise. */
|
|
63
63
|
supersededBy: number | null;
|
|
64
64
|
}
|
|
65
|
-
/** One object type's loaded
|
|
65
|
+
/** One object type's rows, loaded and normalised. */
|
|
66
66
|
export interface LoadedType {
|
|
67
67
|
entityType: EntityType;
|
|
68
68
|
rows: ExtractRow[];
|
|
@@ -85,4 +85,4 @@ export declare function extractGraph(hippoRoot: string, tenantId: string): Extra
|
|
|
85
85
|
/** extractGraph for sleep: diffs outside the lock, then applies in transactions of about `budget.holdMs` with a pause
|
|
86
86
|
* between them. A run stopped between chunks leaves a mixed graph that the next run's diff finishes. */
|
|
87
87
|
export declare function extractGraphChunked(hippoRoot: string, tenantId: string, budget?: WriteBudget): Promise<ExtractResult>;
|
|
88
|
-
//# sourceMappingURL=
|
|
88
|
+
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* entities + `supersedes` relations from decisions /
|
|
8
8
|
* policies / customer_notes / project_briefs (the four object types whose kind maps to the
|
|
9
9
|
* `entity_type` enum), then write only their difference from the stored rows. All writes go
|
|
10
|
-
* through the src/graph
|
|
10
|
+
* through the src/store/graph-writes.ts consolidated-source guard; this module issues no raw SQL.
|
|
11
11
|
*
|
|
12
12
|
* Pass 3 adds the
|
|
13
13
|
* first CROSS-OBJECT relations: a deterministic NAME-MATCH heuristic that emits a
|
|
@@ -19,17 +19,18 @@
|
|
|
19
19
|
* skill/incident/process entities (not in the entity_type enum - needs a migration); the
|
|
20
20
|
* `hippo sleep` enqueue-hook.
|
|
21
21
|
*/
|
|
22
|
-
import { applyGraphOps
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
22
|
+
import { applyGraphOps } from './write.js';
|
|
23
|
+
import { runGraphRebuildTransaction } from '../store/graph-writes.js';
|
|
24
|
+
import { MAX_ENTITY_NAME_LEN } from '../store/graph-rows.js';
|
|
25
|
+
import { graphDelta, readGraphDelta } from './delta.js';
|
|
26
|
+
import { WRITE_BUDGET } from '../util/write-budget.js';
|
|
27
|
+
import { SLEEP_DB_WAIT_MS } from '../db/index.js';
|
|
28
|
+
import { loadDecisions } from '../objects/decisions.js';
|
|
29
|
+
import { loadPolicies } from '../objects/policies.js';
|
|
30
|
+
import { loadCustomerNotes } from '../objects/customer-notes.js';
|
|
31
|
+
import { loadProjectBriefs } from '../objects/project-briefs.js';
|
|
32
|
+
import { assertTenantId } from '../store/tenant.js';
|
|
33
|
+
import { escapeRegex } from '../util/escape.js';
|
|
33
34
|
/** Per-type load cap (the loaders default to 100). A type whose active or superseded
|
|
34
35
|
* set exceeds this is truncated; `ExtractResult.truncated` records it so the
|
|
35
36
|
* incompleteness is observable rather than silent. */
|
|
@@ -72,51 +73,35 @@ function pairKey(a, b) {
|
|
|
72
73
|
return a < b ? `${a}:${b}` : `${b}:${a}`;
|
|
73
74
|
}
|
|
74
75
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
76
|
+
* Close over one loader's row type so the table below holds uniform functions without erasing it.
|
|
77
|
+
* Loads ACTIVE + SUPERSEDED rows (excluding `closed` = retired) in one call per status, so
|
|
78
|
+
* MAX_EXTRACT_PER_TYPE is a per-status budget; `hitCap` is set when either load is full.
|
|
78
79
|
*/
|
|
79
|
-
function
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (loaded.length === MAX_EXTRACT_PER_TYPE)
|
|
91
|
-
hitCap = true;
|
|
92
|
-
for (const r of loaded) {
|
|
93
|
-
// SAFETY: loadFn is always one of loadDecisions/loadPolicies/loadCustomerNotes/
|
|
94
|
-
// loadProjectBriefs (wired in GRAPH_SOURCES); every one of their row
|
|
95
|
-
// types declares id: number, memoryId: string | null, supersededBy: number | null.
|
|
96
|
-
// `any` here is the deliberate type-erasure boundary (see eslint-disable above)
|
|
97
|
-
// that lets one loop handle all four object row shapes.
|
|
98
|
-
rows.push({
|
|
99
|
-
entityType,
|
|
100
|
-
e2Id: r.id,
|
|
101
|
-
name: nameOf(r),
|
|
102
|
-
searchText: textOf(r),
|
|
103
|
-
memoryId: (r.memoryId ?? null),
|
|
104
|
-
supersededBy: (r.supersededBy ?? null),
|
|
105
|
-
});
|
|
80
|
+
function source(entityType, load, nameOf, textOf) {
|
|
81
|
+
return (hippoRoot, tenantId) => {
|
|
82
|
+
const rows = [];
|
|
83
|
+
let hitCap = false;
|
|
84
|
+
for (const status of ['active', 'superseded']) {
|
|
85
|
+
const loaded = load(hippoRoot, tenantId, { status, limit: MAX_EXTRACT_PER_TYPE });
|
|
86
|
+
if (loaded.length === MAX_EXTRACT_PER_TYPE)
|
|
87
|
+
hitCap = true;
|
|
88
|
+
for (const r of loaded) {
|
|
89
|
+
rows.push({ entityType, e2Id: r.id, name: nameOf(r), searchText: textOf(r), memoryId: r.memoryId, supersededBy: r.supersededBy });
|
|
90
|
+
}
|
|
106
91
|
}
|
|
107
|
-
|
|
108
|
-
|
|
92
|
+
return { entityType, rows, hitCap };
|
|
93
|
+
};
|
|
109
94
|
}
|
|
110
95
|
const GRAPH_SOURCES = [
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
96
|
+
source('decision', loadDecisions, (r) => r.decisionText, (r) => [r.decisionText, r.context].filter(Boolean).join(' ')),
|
|
97
|
+
source('policy', loadPolicies, (r) => r.policyName, (r) => [r.policyName, r.policyText].filter(Boolean).join(' ')),
|
|
98
|
+
source('customer', loadCustomerNotes, (r) => r.customer, (r) => [r.customer, r.note].filter(Boolean).join(' ')),
|
|
99
|
+
source('project', loadProjectBriefs, (r) => r.repo, (r) => [r.repo, r.summary].filter(Boolean).join(' ')),
|
|
115
100
|
];
|
|
116
101
|
/** Every source type's rows, each read on its own connection; callers load before any write lock is taken. */
|
|
117
102
|
export function loadGraphSources(hippoRoot, tenantId) {
|
|
118
103
|
assertTenantId('loadGraphSources', tenantId);
|
|
119
|
-
return GRAPH_SOURCES.map((
|
|
104
|
+
return GRAPH_SOURCES.map((load) => load(hippoRoot, tenantId));
|
|
120
105
|
}
|
|
121
106
|
/** The tenant's graph as a pure function of its loaded objects; the write side diffs it against what is stored. */
|
|
122
107
|
export function deriveGraph(loaded) {
|
|
@@ -261,7 +246,7 @@ export function extractGraph(hippoRoot, tenantId) {
|
|
|
261
246
|
// Loaded first: opening a second connection under the rebuild's BEGIN IMMEDIATE dead-locks ('database is locked').
|
|
262
247
|
const derived = deriveGraph(loadGraphSources(hippoRoot, tenantId));
|
|
263
248
|
// Diffed and applied under one lock, so two concurrent rebuilds serialize instead of both inserting a missing row.
|
|
264
|
-
const skipped = runGraphRebuildTransaction(hippoRoot, tenantId, (txDb) => applyGraphOps(txDb, hippoRoot, tenantId, graphDelta(txDb, tenantId, derived), 0,
|
|
249
|
+
const skipped = runGraphRebuildTransaction(hippoRoot, tenantId, (txDb) => applyGraphOps(txDb, hippoRoot, tenantId, graphDelta(txDb, tenantId, derived), { from: 0, holdMs: Infinity }).skipped);
|
|
265
250
|
return resultOf(derived, skipped);
|
|
266
251
|
}
|
|
267
252
|
/** extractGraph for sleep: diffs outside the lock, then applies in transactions of about `budget.holdMs` with a pause
|
|
@@ -278,11 +263,11 @@ export async function extractGraphChunked(hippoRoot, tenantId, budget = WRITE_BU
|
|
|
278
263
|
await budget.pause(committedAt);
|
|
279
264
|
const from = next;
|
|
280
265
|
// Sleep's wait, not a server request's 250 ms: each chunk is a fresh BEGIN IMMEDIATE a hook's write could otherwise fail.
|
|
281
|
-
const chunk = runGraphRebuildTransaction(hippoRoot, tenantId, (txDb) => applyGraphOps(txDb, hippoRoot, tenantId, ops, from,
|
|
266
|
+
const chunk = runGraphRebuildTransaction(hippoRoot, tenantId, (txDb) => applyGraphOps(txDb, hippoRoot, tenantId, ops, { from, holdMs: budget.holdMs, clock: budget.clock }), { busyWaitMs: SLEEP_DB_WAIT_MS });
|
|
282
267
|
committedAt = budget.clock();
|
|
283
268
|
next = chunk.next;
|
|
284
269
|
skipped += chunk.skipped;
|
|
285
270
|
}
|
|
286
271
|
return resultOf(derived, skipped);
|
|
287
272
|
}
|
|
288
|
-
//# sourceMappingURL=
|
|
273
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ResultCost, type SearchResult } from '
|
|
1
|
+
import { type ResultCost, type SearchResult } from '../core/search-types.js';
|
|
2
2
|
/** Hard cap on `--hops` (a higher value just walks more of a finite graph; this bounds
|
|
3
3
|
* worst-case work and keeps the flag honest). */
|
|
4
4
|
export declare const MAX_HOPS = 3;
|
|
@@ -52,4 +52,4 @@ export interface GraphExpandOpts {
|
|
|
52
52
|
* graph is empty, no seed maps to an entity, or nothing new survives the filters/budget.
|
|
53
53
|
*/
|
|
54
54
|
export declare function graphExpandRecall(baseResults: SearchResult[], opts: GraphExpandOpts): SearchResult[];
|
|
55
|
-
//# sourceMappingURL=
|
|
55
|
+
//# sourceMappingURL=recall.d.ts.map
|
|
@@ -35,12 +35,12 @@
|
|
|
35
35
|
* No graph writes (only SELECTs via graph.ts read helpers + store reads), so the
|
|
36
36
|
* check-graph-writes lint permits this module living outside graph.ts.
|
|
37
37
|
*/
|
|
38
|
-
import { loadEntriesByIds } from '
|
|
39
|
-
import { DEFAULT_RECALL_BUDGET } from '
|
|
40
|
-
import { estimateTokens } from '
|
|
41
|
-
import { compareEntryIdentity } from '
|
|
42
|
-
import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from '
|
|
43
|
-
import { passesCliRecallScopeFilter, passesScopeFilterForRecall } from '
|
|
38
|
+
import { loadEntriesByIds } from '../store/entry-reads.js';
|
|
39
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
40
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
41
|
+
import { compareEntryIdentity, compareScoresDesc } from '../core/compare.js';
|
|
42
|
+
import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from '../store/graph-reads.js';
|
|
43
|
+
import { passesCliRecallScopeFilter, passesScopeFilterForRecall } from '../store/recall-scope.js';
|
|
44
44
|
/** Hard cap on `--hops` (a higher value just walks more of a finite graph; this bounds
|
|
45
45
|
* worst-case work and keeps the flag honest). */
|
|
46
46
|
export const MAX_HOPS = 3;
|
|
@@ -142,7 +142,8 @@ function passesRecallFilters(mem, via, successorValidFrom, opts) {
|
|
|
142
142
|
}
|
|
143
143
|
/** Traverse one store's graph from its seeds into `hitsByOrigin`. Pure reads; mutates `seenMemoryIds`
|
|
144
144
|
* and `seenContent` so a memory, or a share/promote copy of it, surfaces at most once across stores. */
|
|
145
|
-
function produceHitsForRoot(root, baseResults,
|
|
145
|
+
function produceHitsForRoot(root, baseResults, accumulators, opts) {
|
|
146
|
+
const { baseScoreByMemId, seenMemoryIds, seenContent, hitsByOrigin } = accumulators;
|
|
146
147
|
const { hops, maxNeighbors, tenantId, asOfDate } = opts;
|
|
147
148
|
// Seeds = graph entities (in THIS store) whose source memory is a base result.
|
|
148
149
|
const seedEntities = loadEntitiesByMemoryId(root, tenantId, baseResults.map((r) => r.entry.id));
|
|
@@ -151,22 +152,9 @@ function produceHitsForRoot(root, baseResults, baseScoreByMemId, seenMemoryIds,
|
|
|
151
152
|
const { reached, originMemByEntityId } = walkRelations(root, tenantId, seedEntities, hops, maxNeighbors);
|
|
152
153
|
if (reached.size === 0)
|
|
153
154
|
return;
|
|
154
|
-
// Reached entities -> source memory ids -> load DIRECTLY by id (chunked), not lexical.
|
|
155
|
-
// A mirror-less reached entity (memoryId === null) has no memory to load: drop its null
|
|
156
|
-
// id BEFORE it reaches loadByIdsChunked / the Set<string> (it cannot be recall-surfaced;
|
|
157
|
-
// it stays in entities/relations for graph extract / visualization).
|
|
158
155
|
const reachedEntities = loadEntitiesByIds(root, tenantId, [...reached.keys()]);
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
.filter((id) => id !== null && !seenMemoryIds.has(id)))];
|
|
162
|
-
const loadedById = new Map(loadByIdsChunked(root, tenantId, needLoad).map((m) => [m.id, m]));
|
|
163
|
-
// For the bi-temporal as-of rule on a superseded reached row we need its successor's
|
|
164
|
-
// valid_from. Batch-load the successors referenced by the loaded rows.
|
|
165
|
-
let successorValidFrom = new Map();
|
|
166
|
-
if (asOfDate) {
|
|
167
|
-
const succIds = [...new Set([...loadedById.values()].map((m) => m.superseded_by).filter((id) => !!id))];
|
|
168
|
-
successorValidFrom = new Map(loadByIdsChunked(root, tenantId, succIds).map((m) => [m.id, m.valid_from]));
|
|
169
|
-
}
|
|
156
|
+
const loadedById = loadReachedMemories(root, tenantId, reachedEntities, seenMemoryIds);
|
|
157
|
+
const successorValidFrom = loadSuccessorValidFrom(root, tenantId, loadedById, asOfDate);
|
|
170
158
|
for (const ent of reachedEntities) {
|
|
171
159
|
if (ent.memoryId === null)
|
|
172
160
|
continue; // mirror-less node: not recall-surfaced
|
|
@@ -184,18 +172,39 @@ function produceHitsForRoot(root, baseResults, baseScoreByMemId, seenMemoryIds,
|
|
|
184
172
|
const originScore = baseScoreByMemId.get(origin) ?? baseResults[baseResults.length - 1].score;
|
|
185
173
|
seenMemoryIds.add(mem.id);
|
|
186
174
|
seenContent.add(mem.content);
|
|
187
|
-
const hit =
|
|
188
|
-
entry: mem,
|
|
189
|
-
score: originScore * (1 - HOP_DISCOUNT * via.hops),
|
|
190
|
-
bm25: 0, cosine: 0,
|
|
191
|
-
tokens: estimateTokens(mem.content),
|
|
192
|
-
graphVia: via,
|
|
193
|
-
};
|
|
175
|
+
const hit = buildGraphHit(mem, via, originScore);
|
|
194
176
|
if (!hitsByOrigin.has(origin))
|
|
195
177
|
hitsByOrigin.set(origin, []);
|
|
196
178
|
hitsByOrigin.get(origin).push(hit);
|
|
197
179
|
}
|
|
198
180
|
}
|
|
181
|
+
function buildGraphHit(mem, via, originScore) {
|
|
182
|
+
return {
|
|
183
|
+
entry: mem,
|
|
184
|
+
score: originScore * (1 - HOP_DISCOUNT * via.hops),
|
|
185
|
+
bm25: 0, cosine: 0,
|
|
186
|
+
tokens: estimateTokens(mem.content),
|
|
187
|
+
graphVia: via,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
// Reached entities -> source memory ids -> load DIRECTLY by id (chunked), not lexical.
|
|
191
|
+
// A mirror-less reached entity (memoryId === null) has no memory to load: drop its null
|
|
192
|
+
// id BEFORE it reaches loadByIdsChunked / the Set<string> (it cannot be recall-surfaced;
|
|
193
|
+
// it stays in entities/relations for graph extract / visualization).
|
|
194
|
+
function loadReachedMemories(root, tenantId, reachedEntities, seenMemoryIds) {
|
|
195
|
+
const needLoad = [...new Set(reachedEntities
|
|
196
|
+
.map((e) => e.memoryId)
|
|
197
|
+
.filter((id) => id !== null && !seenMemoryIds.has(id)))];
|
|
198
|
+
return new Map(loadByIdsChunked(root, tenantId, needLoad).map((m) => [m.id, m]));
|
|
199
|
+
}
|
|
200
|
+
// For the bi-temporal as-of rule on a superseded reached row we need its successor's
|
|
201
|
+
// valid_from. Batch-load the successors referenced by the loaded rows.
|
|
202
|
+
function loadSuccessorValidFrom(root, tenantId, loadedById, asOfDate) {
|
|
203
|
+
if (!asOfDate)
|
|
204
|
+
return new Map();
|
|
205
|
+
const succIds = [...new Set([...loadedById.values()].map((m) => m.superseded_by).filter((id) => !!id))];
|
|
206
|
+
return new Map(loadByIdsChunked(root, tenantId, succIds).map((m) => [m.id, m.valid_from]));
|
|
207
|
+
}
|
|
199
208
|
/**
|
|
200
209
|
* Augment `baseResults` with memories reached by walking the graph `hops` edges out from
|
|
201
210
|
* the seed results' entities (across the local AND global stores). Each graph hit is
|
|
@@ -211,10 +220,8 @@ export function graphExpandRecall(baseResults, opts) {
|
|
|
211
220
|
if (hops <= 0 || baseResults.length === 0)
|
|
212
221
|
return baseResults;
|
|
213
222
|
const maxNeighbors = opts.maxNeighbors ?? DEFAULT_MAX_NEIGHBORS;
|
|
214
|
-
const budget = opts.budget ?? DEFAULT_RECALL_BUDGET;
|
|
215
223
|
const includeSuperseded = opts.includeSuperseded ?? false;
|
|
216
224
|
const asOfDate = opts.asOf ? new Date(opts.asOf) : null;
|
|
217
|
-
const minResults = opts.minResults ?? 1;
|
|
218
225
|
const recallScope = opts.recallScope ?? {};
|
|
219
226
|
const baseScoreByMemId = new Map(baseResults.map((r) => [r.entry.id, r.score]));
|
|
220
227
|
const seenMemoryIds = new Set(baseResults.map((r) => r.entry.id));
|
|
@@ -223,12 +230,18 @@ export function graphExpandRecall(baseResults, opts) {
|
|
|
223
230
|
// Expand against each distinct store the seeds may live in (local + global).
|
|
224
231
|
const roots = globalRoot && globalRoot !== hippoRoot ? [hippoRoot, globalRoot] : [hippoRoot];
|
|
225
232
|
for (const root of roots) {
|
|
226
|
-
produceHitsForRoot(root, baseResults, baseScoreByMemId, seenMemoryIds, seenContent, hitsByOrigin, {
|
|
233
|
+
produceHitsForRoot(root, baseResults, { baseScoreByMemId, seenMemoryIds, seenContent, hitsByOrigin }, {
|
|
227
234
|
hops, maxNeighbors, tenantId, includeSuperseded, asOfDate, recallScope,
|
|
228
235
|
});
|
|
229
236
|
}
|
|
230
237
|
if (hitsByOrigin.size === 0)
|
|
231
238
|
return baseResults;
|
|
239
|
+
sortHitsWithinOrigin(hitsByOrigin);
|
|
240
|
+
const allHits = [...hitsByOrigin.values()].flat();
|
|
241
|
+
const keep = selectWithinBudget(baseResults, allHits, opts);
|
|
242
|
+
return mergeKeptHits(baseResults, hitsByOrigin, keep);
|
|
243
|
+
}
|
|
244
|
+
function sortHitsWithinOrigin(hitsByOrigin) {
|
|
232
245
|
// Closer hops first within each origin group, then by inherited score.
|
|
233
246
|
// Hops asc and score desc are both true primary keys (unchanged);
|
|
234
247
|
// compareEntryIdentity is only the TAIL for a same-hop, same-score tie.
|
|
@@ -237,11 +250,14 @@ export function graphExpandRecall(baseResults, opts) {
|
|
|
237
250
|
const byHops = a.graphVia.hops - b.graphVia.hops;
|
|
238
251
|
if (byHops !== 0)
|
|
239
252
|
return byHops;
|
|
240
|
-
const byScore =
|
|
253
|
+
const byScore = compareScoresDesc(a.score, b.score);
|
|
241
254
|
return byScore !== 0 ? byScore : compareEntryIdentity(a.entry, b.entry);
|
|
242
255
|
});
|
|
243
256
|
}
|
|
244
|
-
|
|
257
|
+
}
|
|
258
|
+
function selectWithinBudget(baseResults, allHits, opts) {
|
|
259
|
+
const budget = opts.budget ?? DEFAULT_RECALL_BUDGET;
|
|
260
|
+
const minResults = opts.minResults ?? 1;
|
|
245
261
|
// Budget SELECTION by score (not by position): a high-value graph hit (it inherits its
|
|
246
262
|
// origin seed's relevance) must be able to win a token slot over a low-score lexical
|
|
247
263
|
// distractor — otherwise a tight --budget keeps the noise and drops the memory --hops
|
|
@@ -259,13 +275,16 @@ export function graphExpandRecall(baseResults, opts) {
|
|
|
259
275
|
let usedTokens = [...keep].reduce((s, r) => s + price(r), 0);
|
|
260
276
|
// PLAIN stable score sort on purpose: both input lists are already deterministically
|
|
261
277
|
// ordered, and a base-vs-graph-hit tie keeps the BASE result first (the concat order).
|
|
262
|
-
for (const r of [...baseResults.slice(protectedCount), ...allHits].sort((a, b) =>
|
|
278
|
+
for (const r of [...baseResults.slice(protectedCount), ...allHits].sort((a, b) => compareScoresDesc(a.score, b.score))) {
|
|
263
279
|
const tokens = price(r);
|
|
264
280
|
if (usedTokens + tokens > budget)
|
|
265
281
|
continue;
|
|
266
282
|
usedTokens += tokens;
|
|
267
283
|
keep.add(r);
|
|
268
284
|
}
|
|
285
|
+
return keep;
|
|
286
|
+
}
|
|
287
|
+
function mergeKeptHits(baseResults, hitsByOrigin, keep) {
|
|
269
288
|
// DISPLAY order: base order preserved (it may be MMR-diversified); each kept new hit
|
|
270
289
|
// placed directly after the seed it descends from. Hits emit ONLY under a kept seed.
|
|
271
290
|
const merged = [];
|
|
@@ -283,4 +302,4 @@ export function graphExpandRecall(baseResults, opts) {
|
|
|
283
302
|
}
|
|
284
303
|
return emittedHit ? merged : baseResults; // nothing new survived budget -> original base
|
|
285
304
|
}
|
|
286
|
-
//# sourceMappingURL=
|
|
305
|
+
//# sourceMappingURL=recall.js.map
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* absolute magnitude is washed out by fusion. Do not tune the scale expecting a
|
|
24
24
|
* fused-score effect — only the induced order matters.
|
|
25
25
|
*/
|
|
26
|
-
import type { MemoryEntry } from '
|
|
26
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
27
27
|
/** Default hops expanded from each seed (MVP; hard cap MAX_HOPS=3 reused from graph-recall). */
|
|
28
28
|
export declare const DEFAULT_GRAPH_HOPS = 2;
|
|
29
29
|
/** Default per-hop multiplicative decay applied to the seed strength. */
|
|
@@ -67,4 +67,4 @@ export declare function selectGraphSeeds(bm25Ranked: ReadonlyArray<number>, cosi
|
|
|
67
67
|
* entity, or nothing reached is in-pool — the caller then skips the 3rd fusion list.
|
|
68
68
|
*/
|
|
69
69
|
export declare function graphRankStream(entries: ReadonlyArray<MemoryEntry>, seeds: ReadonlyArray<GraphSeed>, opts: GraphStreamOpts): number[];
|
|
70
|
-
//# sourceMappingURL=
|
|
70
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from '
|
|
2
|
-
import { MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from './
|
|
1
|
+
import { loadEntitiesByMemoryId, loadEntitiesByIds, loadNeighborRelations } from '../store/graph-reads.js';
|
|
2
|
+
import { MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from './recall.js';
|
|
3
3
|
/** Default hops expanded from each seed (MVP; hard cap MAX_HOPS=3 reused from graph-recall). */
|
|
4
4
|
export const DEFAULT_GRAPH_HOPS = 2;
|
|
5
5
|
/** Default per-hop multiplicative decay applied to the seed strength. */
|
|
@@ -63,7 +63,8 @@ function bestStrengthAtDepth(rels, frontierSet, visited, frontierStrength, origi
|
|
|
63
63
|
return bestStrengthThisDepth;
|
|
64
64
|
}
|
|
65
65
|
/** BFS from the seed entities: entityId -> best originSeedStrength x decay^depth over every reached entity. */
|
|
66
|
-
function reachedEntityScores(root, tenantId, seedIds, originStrength,
|
|
66
|
+
function reachedEntityScores(root, tenantId, seedIds, originStrength, options) {
|
|
67
|
+
const { hops, decay, maxNeighbors } = options;
|
|
67
68
|
const visited = new Set(seedIds); // seeds never re-reached
|
|
68
69
|
const reachedScore = new Map(); // entityId -> best score
|
|
69
70
|
let frontier = seedIds;
|
|
@@ -104,7 +105,8 @@ function reachedEntityScores(root, tenantId, seedIds, originStrength, hops, deca
|
|
|
104
105
|
* carried UNCHANGED along each BFS path; the per-hop decay is applied as decay^depth so
|
|
105
106
|
* a neighbour's score = originSeedStrength x decay^(graph distance).
|
|
106
107
|
*/
|
|
107
|
-
function accumulateForRoot(root, seeds, entries,
|
|
108
|
+
function accumulateForRoot(root, seeds, entries, options) {
|
|
109
|
+
const { memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId } = options;
|
|
108
110
|
if (seeds.length === 0)
|
|
109
111
|
return;
|
|
110
112
|
// The strongest seed strength per source memory id (a memId could appear once, but
|
|
@@ -127,7 +129,7 @@ function accumulateForRoot(root, seeds, entries, memIdToIndex, graphScore, hops,
|
|
|
127
129
|
const st = strengthByMemId.get(e.memoryId) ?? 0;
|
|
128
130
|
originStrength.set(e.id, Math.max(originStrength.get(e.id) ?? 0, st));
|
|
129
131
|
}
|
|
130
|
-
const reachedScore = reachedEntityScores(root, tenantId, seedEntities.map((e) => e.id), originStrength, hops, decay, maxNeighbors);
|
|
132
|
+
const reachedScore = reachedEntityScores(root, tenantId, seedEntities.map((e) => e.id), originStrength, { hops, decay, maxNeighbors });
|
|
131
133
|
if (reachedScore.size === 0)
|
|
132
134
|
return;
|
|
133
135
|
// Reached entity ids -> source memory ids -> in-pool entry indices.
|
|
@@ -166,7 +168,7 @@ export function graphRankStream(entries, seeds, opts) {
|
|
|
166
168
|
? [opts.hippoRoot, opts.globalRoot]
|
|
167
169
|
: [opts.hippoRoot];
|
|
168
170
|
for (const root of roots) {
|
|
169
|
-
accumulateForRoot(root, seeds, entries, memIdToIndex, graphScore, hops, decay, maxNeighbors, opts.tenantId);
|
|
171
|
+
accumulateForRoot(root, seeds, entries, { memIdToIndex, graphScore, hops, decay, maxNeighbors, tenantId: opts.tenantId });
|
|
170
172
|
}
|
|
171
173
|
// Seed-exclusion guard: graphScore is keyed by entryIndex
|
|
172
174
|
// GLOBALLY across roots, but each root's BFS visited-set is per-root, so a memory that
|
|
@@ -182,4 +184,4 @@ export function graphRankStream(entries, seeds, opts) {
|
|
|
182
184
|
return d !== 0 ? d : a - b; // score desc, then index asc (deterministic)
|
|
183
185
|
});
|
|
184
186
|
}
|
|
185
|
-
//# sourceMappingURL=
|
|
187
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* Graph observability and visualization, READ-ONLY over the entity/relation
|
|
3
3
|
* graph.
|
|
4
4
|
*
|
|
5
|
-
* This module only READS the graph (
|
|
5
|
+
* This module only READS the graph (through the store's graph reads) and renders
|
|
6
6
|
* view-models; it issues no INSERT/UPDATE/DELETE, so `scripts/check-graph-writes.mjs`
|
|
7
7
|
* stays green. Used by the CLI (`hippo graph show` / `hippo graph view`) and the
|
|
8
8
|
* HTTP `GET /v1/graph` route, which all build the same `GraphModel`.
|
|
9
9
|
*/
|
|
10
|
-
import
|
|
10
|
+
import type { GraphRows } from '../store/port.js';
|
|
11
|
+
import type { EntityType, RelationType } from '../store/graph-rows.js';
|
|
11
12
|
export interface GraphNode {
|
|
12
13
|
id: number;
|
|
13
14
|
type: EntityType;
|
|
@@ -38,6 +39,8 @@ export declare function buildGraphModel(hippoRoot: string, tenantId: string, opt
|
|
|
38
39
|
limit?: number;
|
|
39
40
|
canRead?: (scope: string | null) => boolean;
|
|
40
41
|
}): GraphModel;
|
|
42
|
+
/** The reply model of the rows a store read: an edge with an endpoint outside the node set is dropped. */
|
|
43
|
+
export declare function graphModelOf({ entities, relations, truncated }: GraphRows): GraphModel;
|
|
41
44
|
/**
|
|
42
45
|
* Deterministic Fruchterman-Reingold-style force layout. Seeded circular init +
|
|
43
46
|
* fixed iterations, NO `Math.random`, so the same model always yields the same
|
|
@@ -70,4 +73,4 @@ export declare function renderGraphHtml(model: GraphModel): string;
|
|
|
70
73
|
* `text` field (Obsidian renders/sanitizes them).
|
|
71
74
|
*/
|
|
72
75
|
export declare function renderGraphCanvas(model: GraphModel): string;
|
|
73
|
-
//# sourceMappingURL=
|
|
76
|
+
//# sourceMappingURL=view.d.ts.map
|