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
package/dist/doctor.js
CHANGED
|
@@ -7,18 +7,21 @@
|
|
|
7
7
|
import * as fs from 'node:fs';
|
|
8
8
|
import * as os from 'node:os';
|
|
9
9
|
import * as path from 'node:path';
|
|
10
|
-
import { findHippoStoreDir } from './project-identity.js';
|
|
11
|
-
import { getGlobalRoot } from './shared.js';
|
|
10
|
+
import { findHippoStoreDir } from './core/project-identity.js';
|
|
11
|
+
import { getGlobalRoot } from './sharing/shared.js';
|
|
12
12
|
import { isInitialized } from './store/open.js';
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
13
|
+
import { readStoreHealth } from './store/diagnostics.js';
|
|
14
|
+
import { loadConfig } from './core/config.js';
|
|
15
|
+
import { openHippoDbReadOnly, closeHippoDb, getCurrentSchemaVersion, IncompatibleBinaryError } from './db/index.js';
|
|
16
|
+
import { REPLAY_AFTER_MS, TRANSCRIPT_FILL_WINDOW_MS } from './capture/compaction-record.js';
|
|
17
|
+
import { SPOOL_DIR, spoolCounts } from './capture/compaction-spool.js';
|
|
18
|
+
import { isEmbeddingAvailable } from './store/embeddings/local.js';
|
|
19
|
+
import { CODEX_TRUST_LINE, claudeConfigDir, codexHomeDir, isCodexPresent } from './hooks/shared.js';
|
|
20
|
+
import { planProjectRepair } from './sharing/project-merge.js';
|
|
21
|
+
import { resolveTenantId } from './store/tenant.js';
|
|
22
|
+
import { errorMessage, log } from './util/log.js';
|
|
23
|
+
import { readJsonFile, isJsonObjectLiteral } from './util/json.js';
|
|
24
|
+
import { DAY_MS } from './util/time.js';
|
|
22
25
|
/** Minimum Node.js version hippo supports (package.json engines). */
|
|
23
26
|
export const MIN_NODE = '22.16.0';
|
|
24
27
|
function versionAtLeast(actual, min) {
|
|
@@ -46,7 +49,7 @@ function codexCheck(home) {
|
|
|
46
49
|
const file = path.join(codexHomeDir(home), 'hooks.json');
|
|
47
50
|
const parsed = readJson(file);
|
|
48
51
|
// Codex drops every hook in a hooks.json it cannot parse, hippo's included.
|
|
49
|
-
if (fs.existsSync(file) && !
|
|
52
|
+
if (fs.existsSync(file) && !isJsonObjectLiteral(parsed)) {
|
|
50
53
|
return { id: 'codex', status: 'warn', detail: "Codex's hooks.json is not a JSON object, so Codex runs no hook from it", fix: 'repair hooks.json, then run: hippo hook install codex' };
|
|
51
54
|
}
|
|
52
55
|
const text = JSON.stringify(parsed ?? '');
|
|
@@ -67,40 +70,30 @@ function codexCheck(home) {
|
|
|
67
70
|
// Migration 46 creates failure_log; a read-only open no longer creates it on an older store.
|
|
68
71
|
const FAILURE_LOG_SCHEMA = 46;
|
|
69
72
|
/** The failed-tool-call count over the last 7 days, or why it could not be read. */
|
|
70
|
-
function failuresCheck(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const row = db.prepare(`SELECT COUNT(*) AS n FROM failure_log WHERE ts >= ?`).get(since);
|
|
74
|
-
return { id: 'failures', status: 'info', detail: `${Number(row?.n ?? 0)} failed tool calls logged in 7 days (hippo failures for detail)` };
|
|
73
|
+
function failuresCheck(failures, schemaVersion) {
|
|
74
|
+
if (failures.ok) {
|
|
75
|
+
return { id: 'failures', status: 'info', detail: `${failures.value} failed tool calls logged in 7 days (hippo failures for detail)` };
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (!message.includes('no such table')) {
|
|
79
|
-
return { id: 'failures', status: 'warn', detail: `cannot read the failure log: ${message}` };
|
|
80
|
-
}
|
|
81
|
-
return schemaVersion < FAILURE_LOG_SCHEMA
|
|
82
|
-
? { id: 'failures', status: 'info', detail: 'no failure log yet (hippo creates it on the next write)' }
|
|
83
|
-
: { id: 'failures', status: 'warn', detail: 'the failure_log table is missing, so failed tool calls are not being logged' };
|
|
77
|
+
if (!failures.message.includes('no such table')) {
|
|
78
|
+
return { id: 'failures', status: 'warn', detail: `cannot read the failure log: ${failures.message}` };
|
|
84
79
|
}
|
|
80
|
+
return schemaVersion < FAILURE_LOG_SCHEMA
|
|
81
|
+
? { id: 'failures', status: 'info', detail: 'no failure log yet (hippo creates it on the next write)' }
|
|
82
|
+
: { id: 'failures', status: 'warn', detail: 'the failure_log table is missing, so failed tool calls are not being logged' };
|
|
85
83
|
}
|
|
86
84
|
/** How long ago the store last slept (consolidated), or why that history could not be read. */
|
|
87
|
-
function sleepCheck(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
catch (err) {
|
|
101
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
102
|
-
return { id: 'sleep', status: 'info', detail: `sleep history unavailable (${message})` };
|
|
103
|
-
}
|
|
85
|
+
function sleepCheck(lastSleep, now) {
|
|
86
|
+
if (!lastSleep.ok)
|
|
87
|
+
return { id: 'sleep', status: 'info', detail: `sleep history unavailable (${lastSleep.message})` };
|
|
88
|
+
const last = lastSleep.value;
|
|
89
|
+
const when = last !== undefined ? Date.parse(last) : Number.NaN;
|
|
90
|
+
if (Number.isNaN(when)) {
|
|
91
|
+
return { id: 'sleep', status: 'warn', detail: 'hippo has never slept (consolidated) in this store', fix: 'hippo sleep (the session-end hook runs it automatically)' };
|
|
92
|
+
}
|
|
93
|
+
const days = Math.floor((now.getTime() - when) / DAY_MS);
|
|
94
|
+
return days > 7
|
|
95
|
+
? { id: 'sleep', status: 'warn', detail: `last sleep ${days} days ago`, fix: 'hippo sleep, and check the session-end hook is installed' }
|
|
96
|
+
: { id: 'sleep', status: 'pass', detail: `last sleep ${days === 0 ? 'today' : `${days} day${days === 1 ? '' : 's'} ago`}` };
|
|
104
97
|
}
|
|
105
98
|
/** Spool counts in their own try, so a spool that cannot be read never hides the database counts. */
|
|
106
99
|
function readSpool(store, now) {
|
|
@@ -108,44 +101,32 @@ function readSpool(store, now) {
|
|
|
108
101
|
return { counts: spoolCounts(store, now, REPLAY_AFTER_MS), unread: '' };
|
|
109
102
|
}
|
|
110
103
|
catch (err) {
|
|
111
|
-
return { counts: { waiting: 0, stale: 0, bad: 0 }, unread: `; spool not read: ${
|
|
104
|
+
return { counts: { waiting: 0, stale: 0, bad: 0 }, unread: `; spool not read: ${errorMessage(err)}` };
|
|
112
105
|
}
|
|
113
106
|
}
|
|
114
107
|
/** Compaction records the PostCompact hook left unfinished and spool files a replay has not finished, which `hippo sleep` replays. */
|
|
115
|
-
function compactionsCheck(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
try {
|
|
119
|
-
// SAFETY: COUNT aggregate row.
|
|
120
|
-
const row = db.prepare(`SELECT COUNT(*) AS total,
|
|
121
|
-
COUNT(CASE WHEN status = 'summarised' AND summarised_at < ? THEN 1 END) AS summarised,
|
|
122
|
-
COUNT(CASE WHEN status = 'started' AND started_at < ? AND started_at > ? AND transcript_path IS NOT NULL THEN 1 END) AS started
|
|
123
|
-
FROM compactions`).get(stuckBefore, stuckBefore, transcriptFloor);
|
|
124
|
-
const total = Number(row?.total ?? 0);
|
|
125
|
-
const summarised = Number(row?.summarised ?? 0);
|
|
126
|
-
const started = Number(row?.started ?? 0);
|
|
127
|
-
const stuck = summarised + started;
|
|
128
|
-
const { counts: spool, unread } = readSpool(store, now);
|
|
129
|
-
const spooled = spool.waiting + spool.stale + spool.bad > 0;
|
|
130
|
-
const recorded = `${total} compaction${total === 1 ? '' : 's'} recorded, none stuck`;
|
|
131
|
-
if (stuck === 0 && !spooled && unread === '')
|
|
132
|
-
return { id: 'compactions', status: 'pass', detail: recorded };
|
|
133
|
-
const fix = [
|
|
134
|
-
stuck + spool.waiting + spool.stale > 0 ? 'hippo sleep (replays them)' : '',
|
|
135
|
-
spool.bad > 0 ? `open the .bad files in ${path.join(store, SPOOL_DIR)}, save what you still need with hippo remember, then delete them` : '',
|
|
136
|
-
].filter((s) => s !== '');
|
|
137
|
-
const unfinished = stuck === 0
|
|
138
|
-
? `${recorded} in the store`
|
|
139
|
-
: `${stuck} compaction${stuck === 1 ? '' : 's'} unfinished after 10 minutes (${summarised} with a summary whose memories are not saved yet, ${started} with no summary yet)`;
|
|
140
|
-
const note = spooled ? `; spool: ${spool.waiting} waiting, ${spool.stale} left by a replay that stopped, ${spool.bad} .bad` : '';
|
|
141
|
-
return { id: 'compactions', status: 'warn', detail: `${unfinished}${note}${unread}`, fix: fix.join('; ') };
|
|
142
|
-
}
|
|
143
|
-
catch (err) {
|
|
144
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
145
|
-
return message.includes('no such table')
|
|
108
|
+
function compactionsCheck(compactions, store, now) {
|
|
109
|
+
if (!compactions.ok) {
|
|
110
|
+
return compactions.message.includes('no such table')
|
|
146
111
|
? { id: 'compactions', status: 'info', detail: 'no compaction records yet (hippo creates them on the next write)' }
|
|
147
|
-
: { id: 'compactions', status: 'warn', detail: `cannot read the compaction records: ${message}` };
|
|
148
|
-
}
|
|
112
|
+
: { id: 'compactions', status: 'warn', detail: `cannot read the compaction records: ${compactions.message}` };
|
|
113
|
+
}
|
|
114
|
+
const { total, summarised, started } = compactions.value;
|
|
115
|
+
const stuck = summarised + started;
|
|
116
|
+
const { counts: spool, unread } = readSpool(store, now);
|
|
117
|
+
const spooled = spool.waiting + spool.stale + spool.bad > 0;
|
|
118
|
+
const recorded = `${total} compaction${total === 1 ? '' : 's'} recorded, none stuck`;
|
|
119
|
+
if (stuck === 0 && !spooled && unread === '')
|
|
120
|
+
return { id: 'compactions', status: 'pass', detail: recorded };
|
|
121
|
+
const fix = [
|
|
122
|
+
stuck + spool.waiting + spool.stale > 0 ? 'hippo sleep (replays them)' : '',
|
|
123
|
+
spool.bad > 0 ? `open the .bad files in ${path.join(store, SPOOL_DIR)}, save what you still need with hippo remember, then delete them` : '',
|
|
124
|
+
].filter((s) => s !== '');
|
|
125
|
+
const unfinished = stuck === 0
|
|
126
|
+
? `${recorded} in the store`
|
|
127
|
+
: `${stuck} compaction${stuck === 1 ? '' : 's'} unfinished after 10 minutes (${summarised} with a summary whose memories are not saved yet, ${started} with no summary yet)`;
|
|
128
|
+
const note = spooled ? `; spool: ${spool.waiting} waiting, ${spool.stale} left by a replay that stopped, ${spool.bad} .bad` : '';
|
|
129
|
+
return { id: 'compactions', status: 'warn', detail: `${unfinished}${note}${unread}`, fix: fix.join('; ') };
|
|
149
130
|
}
|
|
150
131
|
/** Old project tags in the global store, counted by the repair's own plan so a truly user-global merge never warns. */
|
|
151
132
|
function projectsCheck(globalRoot) {
|
|
@@ -164,7 +145,7 @@ function projectsCheck(globalRoot) {
|
|
|
164
145
|
: { id: 'projects', status: 'warn', detail: `global store: ${found.join('; ')}`, fix: 'hippo projects repair --global (dry run; add --apply to write)' };
|
|
165
146
|
}
|
|
166
147
|
catch (err) {
|
|
167
|
-
return { id: 'projects', status: 'info', detail: `project tags not checked (${
|
|
148
|
+
return { id: 'projects', status: 'info', detail: `project tags not checked (${errorMessage(err)})` };
|
|
168
149
|
}
|
|
169
150
|
finally {
|
|
170
151
|
if (db !== null)
|
|
@@ -197,9 +178,7 @@ function schemaCheck(have, want) {
|
|
|
197
178
|
? { id: 'schema', status: 'fail', detail: `database schema v${have} is newer than this hippo (v${want})`, fix: 'npm install -g hippo-memory@latest' }
|
|
198
179
|
: { id: 'schema', status: 'info', detail: `database schema v${have}; hippo migrates it to v${want} on the next write` };
|
|
199
180
|
}
|
|
200
|
-
function memoriesCheck(
|
|
201
|
-
const memories = countTableRows(db, 'memories');
|
|
202
|
-
const dormant = countTableRows(db, 'dormant_memories');
|
|
181
|
+
function memoriesCheck(memories, dormant) {
|
|
203
182
|
const memoryCheck = { id: 'memories', status: 'info', detail: `${memories ?? '?'} memories${dormant !== null ? `, ${dormant} dormant` : ''}` };
|
|
204
183
|
if (memories === 0) {
|
|
205
184
|
memoryCheck.status = 'warn';
|
|
@@ -208,70 +187,60 @@ function memoriesCheck(db) {
|
|
|
208
187
|
return memoryCheck;
|
|
209
188
|
}
|
|
210
189
|
/** Whether the full-text index still matches `memories`; opening a current store no longer checks, so doctor reports and sleep repairs. */
|
|
211
|
-
function ftsCheck(
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
return {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
catch (err) {
|
|
226
|
-
return { id: 'fts', status: 'warn', detail: `cannot read the full-text index: ${err instanceof Error ? err.message : String(err)}` };
|
|
227
|
-
}
|
|
190
|
+
function ftsCheck(fts) {
|
|
191
|
+
if (!fts.ok)
|
|
192
|
+
return { id: 'fts', status: 'warn', detail: `cannot read the full-text index: ${fts.message}` };
|
|
193
|
+
const counts = fts.value;
|
|
194
|
+
if (counts === null)
|
|
195
|
+
return { id: 'fts', status: 'info', detail: 'no full-text index; search uses slower LIKE matching' };
|
|
196
|
+
if (counts.memories === counts.fts)
|
|
197
|
+
return { id: 'fts', status: 'pass', detail: `full-text index in sync (${counts.fts} rows)` };
|
|
198
|
+
return {
|
|
199
|
+
id: 'fts',
|
|
200
|
+
status: 'warn',
|
|
201
|
+
detail: `full-text index out of sync: ${counts.fts} indexed rows for ${counts.memories} memories, so search can miss memories or match removed ones`,
|
|
202
|
+
fix: 'hippo sleep (re-syncs the index)',
|
|
203
|
+
};
|
|
228
204
|
}
|
|
229
|
-
function tokensCheck(
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
const row = db.prepare(`SELECT COUNT(CASE WHEN event = 'inject' THEN 1 END) AS n,
|
|
233
|
-
COALESCE(SUM(CASE WHEN event = 'inject' THEN tokens END), 0) AS t,
|
|
234
|
-
COALESCE(SUM(CASE WHEN event = 'reread' THEN tokens END), 0) AS r
|
|
235
|
-
FROM token_ledger WHERE ts >= ?`).get(since);
|
|
236
|
-
return {
|
|
237
|
-
id: 'tokens',
|
|
238
|
-
status: 'info',
|
|
239
|
-
detail: `${Number(row?.n ?? 0)} memory blocks sent to agents in 7 days, about ${Number(row?.t ?? 0)} tokens sent and ${Number(row?.r ?? 0)} re-read by later model calls (hippo tokens for detail)`,
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
catch {
|
|
205
|
+
function tokensCheck(tokens) {
|
|
206
|
+
if (!tokens.ok) {
|
|
207
|
+
log.debug(`doctor: token ledger not read: ${tokens.message}`);
|
|
243
208
|
return { id: 'tokens', status: 'info', detail: 'no token ledger yet (created on the next write)' };
|
|
244
209
|
}
|
|
210
|
+
const tally = tokens.value;
|
|
211
|
+
return {
|
|
212
|
+
id: 'tokens',
|
|
213
|
+
status: 'info',
|
|
214
|
+
detail: `${tally.injected} memory blocks sent to agents in 7 days, about ${tally.tokensSent} tokens sent and ${tally.tokensReread} re-read by later model calls (hippo tokens for detail)`,
|
|
215
|
+
};
|
|
245
216
|
}
|
|
246
|
-
/** Checks that read the store's database; a
|
|
217
|
+
/** Checks that read the store's database; a store that cannot be opened becomes one failed schema check. */
|
|
247
218
|
function databaseChecks(store, now) {
|
|
248
|
-
|
|
249
|
-
let db = null;
|
|
219
|
+
let health;
|
|
250
220
|
try {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
checks.push(ftsCheck(db));
|
|
256
|
-
const since = new Date(now.getTime() - 7 * 86_400_000).toISOString();
|
|
257
|
-
checks.push(tokensCheck(db, since));
|
|
258
|
-
checks.push(failuresCheck(db, since, have));
|
|
259
|
-
checks.push(sleepCheck(db, now));
|
|
260
|
-
checks.push(compactionsCheck(db, store, now));
|
|
261
|
-
}
|
|
262
|
-
catch (err) {
|
|
263
|
-
checks.push({
|
|
264
|
-
id: 'schema',
|
|
265
|
-
status: 'fail',
|
|
266
|
-
detail: `cannot open the database: ${err instanceof Error ? err.message : String(err)}`,
|
|
267
|
-
fix: err instanceof IncompatibleBinaryError ? 'npm install -g hippo-memory@latest' : 'check file permissions on the .hippo folder',
|
|
221
|
+
health = readStoreHealth(store, {
|
|
222
|
+
since: new Date(now.getTime() - 7 * DAY_MS).toISOString(),
|
|
223
|
+
stuckBefore: new Date(now.getTime() - REPLAY_AFTER_MS).toISOString(),
|
|
224
|
+
transcriptFloor: new Date(now.getTime() - TRANSCRIPT_FILL_WINDOW_MS).toISOString(),
|
|
268
225
|
});
|
|
269
226
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
227
|
+
catch (err) {
|
|
228
|
+
return [{
|
|
229
|
+
id: 'schema',
|
|
230
|
+
status: 'fail',
|
|
231
|
+
detail: `cannot open the database: ${errorMessage(err)}`,
|
|
232
|
+
fix: err instanceof IncompatibleBinaryError ? 'npm install -g hippo-memory@latest' : 'check file permissions on the .hippo folder',
|
|
233
|
+
}];
|
|
234
|
+
}
|
|
235
|
+
return [
|
|
236
|
+
schemaCheck(health.schemaVersion, getCurrentSchemaVersion()),
|
|
237
|
+
memoriesCheck(health.memories, health.dormant),
|
|
238
|
+
ftsCheck(health.fts),
|
|
239
|
+
tokensCheck(health.tokens),
|
|
240
|
+
failuresCheck(health.failures, health.schemaVersion),
|
|
241
|
+
sleepCheck(health.lastSleep, now),
|
|
242
|
+
compactionsCheck(health.compactions, store, now),
|
|
243
|
+
];
|
|
275
244
|
}
|
|
276
245
|
// Each hook and what it does, so a partial install says what is missing.
|
|
277
246
|
const CLAUDE_CODE_HOOKS = [
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { installJsonHooks, resolveJsonHookPaths, uninstallJsonHooks, writeSettingsFile, type InstallResult, type JsonHookPaths } from '../hooks/json-hooks.js';
|
|
2
|
-
export { readJsonFile } from '../json.js';
|
|
2
|
+
export { readJsonFile } from '../util/json.js';
|
|
3
3
|
//# sourceMappingURL=json-hooks.d.ts.map
|
package/dist/entry/json-hooks.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// The hippo-memory/json-hooks subpath: only what the changelog publishes, so the module's other exports stay internal.
|
|
2
2
|
export { installJsonHooks, resolveJsonHookPaths, uninstallJsonHooks, writeSettingsFile } from '../hooks/json-hooks.js';
|
|
3
|
-
export { readJsonFile } from '../json.js';
|
|
3
|
+
export { readJsonFile } from '../util/json.js';
|
|
4
4
|
//# sourceMappingURL=json-hooks.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { MAX_PROJECT_ALIASES, MCP_PROJECT_SCOPED_HEADER, resolveProjectIdentity, type ProjectIdentity, type ResolveProjectIdentityOpts } from '../project-identity.js';
|
|
1
|
+
export { MAX_PROJECT_ALIASES, MCP_PROJECT_SCOPED_HEADER, resolveProjectIdentity, type ProjectIdentity, type ResolveProjectIdentityOpts } from '../core/project-identity.js';
|
|
2
2
|
//# sourceMappingURL=project-identity.d.ts.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// The hippo-memory/project-identity subpath: only what the changelog publishes, so the module's other exports stay internal.
|
|
2
|
-
export { MAX_PROJECT_ALIASES, MCP_PROJECT_SCOPED_HEADER, resolveProjectIdentity } from '../project-identity.js';
|
|
2
|
+
export { MAX_PROJECT_ALIASES, MCP_PROJECT_SCOPED_HEADER, resolveProjectIdentity } from '../core/project-identity.js';
|
|
3
3
|
//# sourceMappingURL=project-identity.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { collectSessionTurns, sessionTail, type SessionTurn } from '../capture/transcript.js';
|
|
2
|
-
export { scrubForSharing } from '../share-scrub.js';
|
|
2
|
+
export { scrubForSharing } from '../capture/share-scrub.js';
|
|
3
3
|
export { transcriptWorkingState, WORKING_STATE_CAPS } from '../capture/working-state.js';
|
|
4
4
|
export { lessonFromFailure, failureReport, type FailureReport } from '../capture/failure-reading.js';
|
|
5
|
-
export { collectHandoffEvidence } from '../handoff-evidence.js';
|
|
6
|
-
export { compactSummaryBody, parseCompactionItems, COMPACTION_ITEM_MAX_CHARS, COMPACTION_ITEM_ROW_CAP } from '../compaction-items.js';
|
|
5
|
+
export { collectHandoffEvidence } from '../capture/handoff-evidence.js';
|
|
6
|
+
export { compactSummaryBody, parseCompactionItems, COMPACTION_ITEM_MAX_CHARS, COMPACTION_ITEM_ROW_CAP } from '../capture/compaction-items.js';
|
|
7
7
|
//# sourceMappingURL=session-text.d.ts.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// The hippo-memory/session-text subpath: what a hook reads from a session (turns, working state, failures, git state, compaction items) and the sharing scrub, with no store, database or server in its imports.
|
|
2
2
|
export { collectSessionTurns, sessionTail } from '../capture/transcript.js';
|
|
3
|
-
export { scrubForSharing } from '../share-scrub.js';
|
|
3
|
+
export { scrubForSharing } from '../capture/share-scrub.js';
|
|
4
4
|
export { transcriptWorkingState, WORKING_STATE_CAPS } from '../capture/working-state.js';
|
|
5
5
|
export { lessonFromFailure, failureReport } from '../capture/failure-reading.js';
|
|
6
|
-
export { collectHandoffEvidence } from '../handoff-evidence.js';
|
|
7
|
-
export { compactSummaryBody, parseCompactionItems, COMPACTION_ITEM_MAX_CHARS, COMPACTION_ITEM_ROW_CAP } from '../compaction-items.js';
|
|
6
|
+
export { collectHandoffEvidence } from '../capture/handoff-evidence.js';
|
|
7
|
+
export { compactSummaryBody, parseCompactionItems, COMPACTION_ITEM_MAX_CHARS, COMPACTION_ITEM_ROW_CAP } from '../capture/compaction-items.js';
|
|
8
8
|
//# sourceMappingURL=session-text.js.map
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
* Deterministic: every resampling function takes a seed, so a published
|
|
12
12
|
* result can be reproduced exactly.
|
|
13
13
|
*/
|
|
14
|
+
const DEFAULT_ITERATIONS = 5000;
|
|
15
|
+
const DEFAULT_TWO_LEVEL_ITERATIONS = 10_000;
|
|
16
|
+
const DEFAULT_ALPHA = 0.05;
|
|
14
17
|
/** Sum several usages bucket by bucket. */
|
|
15
18
|
export function addUsage(...usages) {
|
|
16
19
|
const total = { inputTokens: 0, cacheWriteTokens: 0, cacheReadTokens: 0, outputTokens: 0 };
|
|
@@ -64,8 +67,8 @@ function mean(xs) {
|
|
|
64
67
|
* calling a difference real.
|
|
65
68
|
*/
|
|
66
69
|
export function pairedBootstrap(diffs, opts = {}) {
|
|
67
|
-
const iterations = opts.iterations ??
|
|
68
|
-
const alpha = opts.alpha ??
|
|
70
|
+
const iterations = opts.iterations ?? DEFAULT_ITERATIONS;
|
|
71
|
+
const alpha = opts.alpha ?? DEFAULT_ALPHA;
|
|
69
72
|
if (diffs.length === 0)
|
|
70
73
|
return { estimate: 0, low: 0, high: 0, iterations: 0 };
|
|
71
74
|
const rand = seededRandom(opts.seed ?? 1);
|
|
@@ -85,8 +88,8 @@ export function pairedBootstrap(diffs, opts = {}) {
|
|
|
85
88
|
* cluster share causes and are not independent draws.
|
|
86
89
|
*/
|
|
87
90
|
export function clusteredPairedBootstrap(diffsByCluster, opts = {}) {
|
|
88
|
-
const iterations = opts.iterations ??
|
|
89
|
-
const alpha = opts.alpha ??
|
|
91
|
+
const iterations = opts.iterations ?? DEFAULT_ITERATIONS;
|
|
92
|
+
const alpha = opts.alpha ?? DEFAULT_ALPHA;
|
|
90
93
|
const clusters = [...diffsByCluster.values()].filter((c) => c.length > 0);
|
|
91
94
|
const all = clusters.flat();
|
|
92
95
|
if (all.length === 0)
|
|
@@ -123,8 +126,8 @@ export function costPerResolvedDelta(control, treatment, opts = {}) {
|
|
|
123
126
|
if (control.length !== treatment.length) {
|
|
124
127
|
throw new Error('control and treatment must list the same tasks in the same order');
|
|
125
128
|
}
|
|
126
|
-
const iterations = opts.iterations ??
|
|
127
|
-
const alpha = opts.alpha ??
|
|
129
|
+
const iterations = opts.iterations ?? DEFAULT_ITERATIONS;
|
|
130
|
+
const alpha = opts.alpha ?? DEFAULT_ALPHA;
|
|
128
131
|
const c = costPerResolved(control);
|
|
129
132
|
const t = costPerResolved(treatment);
|
|
130
133
|
const rand = seededRandom(opts.seed ?? 1);
|
|
@@ -213,7 +216,7 @@ function twoSidedP(samples, nullValue) {
|
|
|
213
216
|
/** Resamples repositories, then families inside each; only the repository draw carries a shared-store fault.
|
|
214
217
|
* The statistic never uses the PRNG, so a second call on one seed draws the same resamples. */
|
|
215
218
|
export function twoLevelBootstrap(repos, statistic, opts = {}) {
|
|
216
|
-
const requested = opts.iterations ??
|
|
219
|
+
const requested = opts.iterations ?? DEFAULT_TWO_LEVEL_ITERATIONS;
|
|
217
220
|
if (!Number.isInteger(requested) || requested <= 0) {
|
|
218
221
|
throw new RangeError(`iterations must be a positive integer, got ${requested}`);
|
|
219
222
|
}
|
|
@@ -233,7 +236,7 @@ export function twoLevelBootstrap(repos, statistic, opts = {}) {
|
|
|
233
236
|
return notANumber(nullValue, dropped);
|
|
234
237
|
const estimate = statistic(kept.flatMap((r) => r.flat()));
|
|
235
238
|
const p = kept.length < 2 ? Number.NaN : twoSidedP(samples, nullValue);
|
|
236
|
-
const interval = percentileInterval(samples, opts.alpha ??
|
|
239
|
+
const interval = percentileInterval(samples, opts.alpha ?? DEFAULT_ALPHA);
|
|
237
240
|
return { estimate, ...interval, p, iterations: samples.length, dropped, nullValue };
|
|
238
241
|
}
|
|
239
242
|
/** Holm step-down in input order; the family size is `ps.length`, as preregistered.
|
|
@@ -263,7 +266,7 @@ export function verdict(e, adjustedP, spec) {
|
|
|
263
266
|
return inconclusive;
|
|
264
267
|
const nullValue = e.nullValue;
|
|
265
268
|
const lowerIsHelpful = spec.helpful === 'lower';
|
|
266
|
-
if (adjustedP < (spec.alpha ??
|
|
269
|
+
if (adjustedP < (spec.alpha ?? DEFAULT_ALPHA)) {
|
|
267
270
|
const helpfulSide = lowerIsHelpful ? e.estimate < nullValue : e.estimate > nullValue;
|
|
268
271
|
const harmfulSide = lowerIsHelpful ? e.estimate > nullValue : e.estimate < nullValue;
|
|
269
272
|
if (harmfulSide)
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* - Fast (<60s for full suite)
|
|
12
12
|
* - Per-feature breakdown so you see exactly what a change helped/hurt
|
|
13
13
|
*/
|
|
14
|
-
import { type MemoryEntry } from '
|
|
14
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
15
15
|
export type FeatureCategory = 'direct-recall' | 'extraction-preference' | 'dag-drilldown' | 'temporal' | 'noise-resistance' | 'multi-hop';
|
|
16
16
|
export interface FeatureTestCase {
|
|
17
17
|
id: string;
|
|
@@ -11,16 +11,17 @@
|
|
|
11
11
|
* - Fast (<60s for full suite)
|
|
12
12
|
* - Per-feature breakdown so you see exactly what a change helped/hurt
|
|
13
13
|
*/
|
|
14
|
-
import { createMemory, Layer } from '
|
|
15
|
-
import { search } from '
|
|
16
|
-
import { multihopSearch } from '
|
|
14
|
+
import { createMemory, Layer } from '../core/memory.js';
|
|
15
|
+
import { search } from '../search/bm25-search.js';
|
|
16
|
+
import { multihopSearch } from '../search/multihop.js';
|
|
17
17
|
import { mrr, recallAtK, ndcgAtK } from './eval.js';
|
|
18
|
+
import { DAY_MS } from '../util/time.js';
|
|
18
19
|
// ---------------------------------------------------------------------------
|
|
19
20
|
// Synthetic corpus — deterministic, no API calls
|
|
20
21
|
// ---------------------------------------------------------------------------
|
|
21
22
|
const BASE_DATE = new Date('2026-01-15T10:00:00Z');
|
|
22
23
|
function dateOffset(days) {
|
|
23
|
-
const d = new Date(BASE_DATE.getTime() + days *
|
|
24
|
+
const d = new Date(BASE_DATE.getTime() + days * DAY_MS);
|
|
24
25
|
return d.toISOString();
|
|
25
26
|
}
|
|
26
27
|
function mem(id, content, opts = {}) {
|
|
@@ -142,9 +143,25 @@ export function buildSyntheticCorpus() {
|
|
|
142
143
|
addMultiHop(entries, cases);
|
|
143
144
|
return { entries, cases };
|
|
144
145
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
/** Each category's mean scores, in the order the corpus first names the category. */
|
|
147
|
+
function featureAverages(cases, caseResults) {
|
|
148
|
+
const categories = [...new Set(cases.map(c => c.category))];
|
|
149
|
+
return categories.map(cat => {
|
|
150
|
+
const catCases = caseResults.filter(r => r.case.category === cat);
|
|
151
|
+
const n = catCases.length;
|
|
152
|
+
const avgMrr = catCases.reduce((s, r) => s + r.mrrVal, 0) / n;
|
|
153
|
+
const avgR5 = catCases.reduce((s, r) => s + r.r5, 0) / n;
|
|
154
|
+
const avgNdcg5 = catCases.reduce((s, r) => s + r.ndcg5, 0) / n;
|
|
155
|
+
return {
|
|
156
|
+
category: cat,
|
|
157
|
+
cases: n,
|
|
158
|
+
mrr: avgMrr,
|
|
159
|
+
recallAt5: avgR5,
|
|
160
|
+
ndcgAt5: avgNdcg5,
|
|
161
|
+
passed: true,
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
}
|
|
148
165
|
export async function runFeatureEval(version) {
|
|
149
166
|
const start = Date.now();
|
|
150
167
|
const { entries, cases } = buildSyntheticCorpus();
|
|
@@ -166,22 +183,7 @@ export async function runFeatureEval(version) {
|
|
|
166
183
|
ndcg5: ndcgAtK(returnedIds, c.expectedIds, 5),
|
|
167
184
|
});
|
|
168
185
|
}
|
|
169
|
-
const
|
|
170
|
-
const features = categories.map(cat => {
|
|
171
|
-
const catCases = caseResults.filter(r => r.case.category === cat);
|
|
172
|
-
const n = catCases.length;
|
|
173
|
-
const avgMrr = catCases.reduce((s, r) => s + r.mrrVal, 0) / n;
|
|
174
|
-
const avgR5 = catCases.reduce((s, r) => s + r.r5, 0) / n;
|
|
175
|
-
const avgNdcg5 = catCases.reduce((s, r) => s + r.ndcg5, 0) / n;
|
|
176
|
-
return {
|
|
177
|
-
category: cat,
|
|
178
|
-
cases: n,
|
|
179
|
-
mrr: avgMrr,
|
|
180
|
-
recallAt5: avgR5,
|
|
181
|
-
ndcgAt5: avgNdcg5,
|
|
182
|
-
passed: true,
|
|
183
|
-
};
|
|
184
|
-
});
|
|
186
|
+
const features = featureAverages(cases, caseResults);
|
|
185
187
|
const totalCases = caseResults.length;
|
|
186
188
|
const overallMrr = caseResults.reduce((s, r) => s + r.mrrVal, 0) / totalCases;
|
|
187
189
|
const overallR5 = caseResults.reduce((s, r) => s + r.r5, 0) / totalCases;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* weights, and future scoring tweaks can be tuned against evidence instead
|
|
9
9
|
* of intuition.
|
|
10
10
|
*/
|
|
11
|
-
import type { MemoryEntry } from '
|
|
11
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
12
12
|
export interface EvalCase {
|
|
13
13
|
/** Free-form ID for humans to reference the case. */
|
|
14
14
|
id: string;
|
|
@@ -8,9 +8,12 @@
|
|
|
8
8
|
* weights, and future scoring tweaks can be tuned against evidence instead
|
|
9
9
|
* of intuition.
|
|
10
10
|
*/
|
|
11
|
-
import { hybridSearch } from '
|
|
12
|
-
import { searchBothHybrid } from '
|
|
13
|
-
import { isInitialized } from '
|
|
11
|
+
import { hybridSearch } from '../search/hybrid.js';
|
|
12
|
+
import { searchBothHybrid } from '../sharing/shared.js';
|
|
13
|
+
import { isInitialized } from '../store/open.js';
|
|
14
|
+
// Generous so metrics are not truncated.
|
|
15
|
+
const DEFAULT_EVAL_BUDGET = 100_000;
|
|
16
|
+
const QUERY_WORDS = 8;
|
|
14
17
|
// ---------------------------------------------------------------------------
|
|
15
18
|
// Metrics — pure functions. K is inclusive of position K.
|
|
16
19
|
// ---------------------------------------------------------------------------
|
|
@@ -64,28 +67,11 @@ export function ndcgAtK(returned, expected, k) {
|
|
|
64
67
|
// Runner
|
|
65
68
|
// ---------------------------------------------------------------------------
|
|
66
69
|
export async function runEval(cases, entries, options = {}) {
|
|
67
|
-
const budget = options.budget ?? 100_000; // generous so metrics aren't truncated
|
|
68
70
|
const start = Date.now();
|
|
69
71
|
const results = [];
|
|
70
72
|
const useBothStores = Boolean(options.globalRoot && options.hippoRoot && isInitialized(options.globalRoot));
|
|
71
73
|
for (const c of cases) {
|
|
72
|
-
const ranked = useBothStores
|
|
73
|
-
? await searchBothHybrid(c.query, options.hippoRoot, options.globalRoot, {
|
|
74
|
-
budget,
|
|
75
|
-
now: options.now,
|
|
76
|
-
embeddingWeight: options.embeddingWeight,
|
|
77
|
-
mmr: options.mmr,
|
|
78
|
-
mmrLambda: options.mmrLambda,
|
|
79
|
-
localBump: options.localBump,
|
|
80
|
-
})
|
|
81
|
-
: await hybridSearch(c.query, entries, {
|
|
82
|
-
budget,
|
|
83
|
-
now: options.now,
|
|
84
|
-
hippoRoot: options.hippoRoot,
|
|
85
|
-
embeddingWeight: options.embeddingWeight,
|
|
86
|
-
mmr: options.mmr,
|
|
87
|
-
mmrLambda: options.mmrLambda,
|
|
88
|
-
});
|
|
74
|
+
const ranked = await rankForCase(c.query, entries, options, useBothStores);
|
|
89
75
|
const returnedIds = ranked.map((r) => r.entry.id);
|
|
90
76
|
results.push({
|
|
91
77
|
case: c,
|
|
@@ -110,6 +96,27 @@ export async function runEval(cases, entries, options = {}) {
|
|
|
110
96
|
durationMs: Date.now() - start,
|
|
111
97
|
};
|
|
112
98
|
}
|
|
99
|
+
/** One case's ranking: across the local and global stores when `useBothStores`, else over `entries` alone. */
|
|
100
|
+
function rankForCase(query, entries, options, useBothStores) {
|
|
101
|
+
const budget = options.budget ?? DEFAULT_EVAL_BUDGET;
|
|
102
|
+
return useBothStores
|
|
103
|
+
? searchBothHybrid(query, options.hippoRoot, options.globalRoot, {
|
|
104
|
+
budget,
|
|
105
|
+
now: options.now,
|
|
106
|
+
embeddingWeight: options.embeddingWeight,
|
|
107
|
+
mmr: options.mmr,
|
|
108
|
+
mmrLambda: options.mmrLambda,
|
|
109
|
+
localBump: options.localBump,
|
|
110
|
+
})
|
|
111
|
+
: hybridSearch(query, entries, {
|
|
112
|
+
budget,
|
|
113
|
+
now: options.now,
|
|
114
|
+
hippoRoot: options.hippoRoot,
|
|
115
|
+
embeddingWeight: options.embeddingWeight,
|
|
116
|
+
mmr: options.mmr,
|
|
117
|
+
mmrLambda: options.mmrLambda,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
113
120
|
/**
|
|
114
121
|
* Compute pairwise deltas between a baseline and a current eval summary.
|
|
115
122
|
* Cases are matched by EvalCase.id; any mismatch is surfaced in the onlyIn
|
|
@@ -174,7 +181,7 @@ export function bootstrapCorpus(entries, maxCases = 50) {
|
|
|
174
181
|
const words = e.content.trim().split(/\s+/).filter((w) => w.length > 2);
|
|
175
182
|
if (words.length < 3)
|
|
176
183
|
continue;
|
|
177
|
-
const query = words.slice(0,
|
|
184
|
+
const query = words.slice(0, QUERY_WORDS).join(' ');
|
|
178
185
|
cases.push({
|
|
179
186
|
id: `bootstrap_${e.id}`,
|
|
180
187
|
query,
|
|
@@ -1,7 +1,7 @@
|
|
|
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 { ConfidenceLevel, EmotionalValence } from '
|
|
4
|
+
import { ConfidenceLevel, EmotionalValence } from '../core/memory.js';
|
|
5
5
|
export type JudgedKind = 'error' | 'decision' | 'convention' | 'preference' | 'trivia';
|
|
6
6
|
export interface Judgment {
|
|
7
7
|
/** Jev noul, 0..1. Maps to `schema_fit` on the written entry. */
|
|
@@ -20,8 +20,6 @@ export interface JudgeOptions {
|
|
|
20
20
|
/** Bounded parallelism for `judgeAll`. */
|
|
21
21
|
concurrency?: number;
|
|
22
22
|
}
|
|
23
|
-
/** Absent key means hippo keeps its pre-Jev behaviour and makes no HTTP call. */
|
|
24
|
-
export declare function judgmentApiKey(): string | undefined;
|
|
25
23
|
/** `null` on any failure, so a Jev outage degrades capture to today's
|
|
26
24
|
* behaviour instead of blocking the write. */
|
|
27
25
|
export declare function judge(content: string, opts: JudgeOptions): Promise<Judgment | null>;
|