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/cli/projects.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
// The `hippo projects` verb: list a store's project names, fold an old worktree name into its repo, repair old tags in one pass.
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import { execFileSync } from 'child_process';
|
|
4
|
-
import { closeHippoDb, openHippoDb } from '../db.js';
|
|
5
|
-
import { listProjects, mergeProjects, repairProjects } from '../project-merge.js';
|
|
6
|
-
import { resolveTenantId } from '../tenant.js';
|
|
4
|
+
import { closeHippoDb, openHippoDb } from '../db/index.js';
|
|
5
|
+
import { listProjects, mergeProjects, repairProjects } from '../sharing/project-merge.js';
|
|
6
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
7
|
+
import { flagIsTrue } from './flag-values.js';
|
|
7
8
|
import { resolveAuthRoot } from './shared.js';
|
|
8
9
|
import { printError } from './output.js';
|
|
10
|
+
import { errorMessage } from '../util/log.js';
|
|
11
|
+
import { DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
9
12
|
/** Old per-worktree project names of the repo at cwd, mapped to the repo's main checkout name; empty outside git. */
|
|
10
13
|
function worktreeNames() {
|
|
11
14
|
try {
|
|
@@ -30,62 +33,66 @@ function hint(p, worktrees) {
|
|
|
30
33
|
function count(n, one, many = `${one}s`) {
|
|
31
34
|
return `${n} ${n === 1 ? one : many}`;
|
|
32
35
|
}
|
|
36
|
+
function projectsList(db, tenantId, root, flags) {
|
|
37
|
+
const projects = listProjects(db, tenantId);
|
|
38
|
+
if (flags['json']) {
|
|
39
|
+
console.log(JSON.stringify({ store: root, projects }, null, 2));
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const worktrees = worktreeNames();
|
|
43
|
+
console.log(`${count(projects.length, 'project name')} in ${root} (newest write first):\n`);
|
|
44
|
+
for (const p of projects) {
|
|
45
|
+
console.log(`${label(p.origin)} ${count(p.live, 'memory', 'memories')}, ${p.imported} imported from agent notes, newest ${p.newest.slice(0, DATE_PREFIX_CHARS)}${hint(p, worktrees)}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function projectsMerge(db, tenantId, root, args, flags) {
|
|
49
|
+
const apply = flagIsTrue(flags, 'apply');
|
|
50
|
+
const [from, into] = [args[1] ?? '', args[2] ?? ''];
|
|
51
|
+
const r = mergeProjects(db, root, { tenantId, from, into, dryRun: !apply });
|
|
52
|
+
if (flags['json']) {
|
|
53
|
+
console.log(JSON.stringify(r, null, 2));
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
console.log(`${apply ? 'Merged' : 'Dry run: would merge'} ${from} into ${into}:`);
|
|
57
|
+
console.log(` ${count(r.setAside.length, 'imported note copy', 'imported note copies')} set aside (${into} already holds the same note; the rest move under ${into} on the next sync)`);
|
|
58
|
+
console.log(` ${count(r.restamped.length, 'memory', 'memories')} re-tagged, plus ${r.dormantRestamped.length} dormant and ${count(r.compactions, 'compaction record')}`);
|
|
59
|
+
console.log(apply ? `Backup: ${r.backup}\nEvery id is in the audit log: hippo audit list --op project_merge` : 'Nothing written. Add --apply to run it.');
|
|
60
|
+
}
|
|
61
|
+
function projectsRepair(db, tenantId, root, flags) {
|
|
62
|
+
const apply = flagIsTrue(flags, 'apply');
|
|
63
|
+
const r = repairProjects(db, root, { tenantId, dryRun: !apply });
|
|
64
|
+
if (flags['json']) {
|
|
65
|
+
console.log(JSON.stringify(r, null, 2));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
console.log(`${apply ? 'Repaired' : 'Dry run: would repair'} ${root}:`);
|
|
69
|
+
console.log(` ${count(r.copies.length, 'imported note copy', 'imported note copies')} under the wrong project set aside (the note stays under its own, or user-global)`);
|
|
70
|
+
for (const f of r.folds)
|
|
71
|
+
console.log(` ${f.from} folded into ${f.into} (its sessions' folders resolve there now)`);
|
|
72
|
+
for (const c of r.collisions)
|
|
73
|
+
console.log(` ${c.name} left as it is: its folders now resolve to ${c.ids.join(', ')}; fold it by hand with hippo projects merge`);
|
|
74
|
+
console.log(` sleep's user-global merged rows: ${r.toProject.length} re-tagged to their parents' project`);
|
|
75
|
+
console.log(` ${r.setAside.length} set aside (parents in two projects; sleep re-merges them per project)`);
|
|
76
|
+
console.log(` ${r.untraced.length} left as they are (no parent left to show which project; check them with hippo inspect <id>)`);
|
|
77
|
+
console.log(apply ? `Backup: ${r.backup}\nEvery id is in the audit log: hippo audit list --op project_repair` : 'Nothing written. Add --apply to run it.');
|
|
78
|
+
}
|
|
33
79
|
export function cmdProjects(hippoRoot, args, flags) {
|
|
34
80
|
const root = resolveAuthRoot(hippoRoot, flags);
|
|
35
81
|
const tenantId = resolveTenantId({});
|
|
36
|
-
const apply = flags['apply'] === true;
|
|
37
82
|
const sub = args[0] ?? 'list';
|
|
38
83
|
const db = openHippoDb(root);
|
|
39
84
|
try {
|
|
40
|
-
if (sub === 'list')
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const worktrees = worktreeNames();
|
|
47
|
-
console.log(`${count(projects.length, 'project name')} in ${root} (newest write first):\n`);
|
|
48
|
-
for (const p of projects) {
|
|
49
|
-
console.log(`${label(p.origin)} ${count(p.live, 'memory', 'memories')}, ${p.imported} imported from agent notes, newest ${p.newest.slice(0, 10)}${hint(p, worktrees)}`);
|
|
50
|
-
}
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
if (sub === 'merge') {
|
|
54
|
-
const [from, into] = [args[1] ?? '', args[2] ?? ''];
|
|
55
|
-
const r = mergeProjects(db, root, { tenantId, from, into, dryRun: !apply });
|
|
56
|
-
if (flags['json']) {
|
|
57
|
-
console.log(JSON.stringify(r, null, 2));
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
console.log(`${apply ? 'Merged' : 'Dry run: would merge'} ${from} into ${into}:`);
|
|
61
|
-
console.log(` ${count(r.setAside.length, 'imported note copy', 'imported note copies')} set aside (${into} already holds the same note; the rest move under ${into} on the next sync)`);
|
|
62
|
-
console.log(` ${count(r.restamped.length, 'memory', 'memories')} re-tagged, plus ${r.dormantRestamped.length} dormant and ${count(r.compactions, 'compaction record')}`);
|
|
63
|
-
console.log(apply ? `Backup: ${r.backup}\nEvery id is in the audit log: hippo audit list --op project_merge` : 'Nothing written. Add --apply to run it.');
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (sub === 'repair') {
|
|
67
|
-
const r = repairProjects(db, root, { tenantId, dryRun: !apply });
|
|
68
|
-
if (flags['json']) {
|
|
69
|
-
console.log(JSON.stringify(r, null, 2));
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
console.log(`${apply ? 'Repaired' : 'Dry run: would repair'} ${root}:`);
|
|
73
|
-
console.log(` ${count(r.copies.length, 'imported note copy', 'imported note copies')} under the wrong project set aside (the note stays under its own, or user-global)`);
|
|
74
|
-
for (const f of r.folds)
|
|
75
|
-
console.log(` ${f.from} folded into ${f.into} (its sessions' folders resolve there now)`);
|
|
76
|
-
for (const c of r.collisions)
|
|
77
|
-
console.log(` ${c.name} left as it is: its folders now resolve to ${c.ids.join(', ')}; fold it by hand with hippo projects merge`);
|
|
78
|
-
console.log(` sleep's user-global merged rows: ${r.toProject.length} re-tagged to their parents' project`);
|
|
79
|
-
console.log(` ${r.setAside.length} set aside (parents in two projects; sleep re-merges them per project)`);
|
|
80
|
-
console.log(` ${r.untraced.length} left as they are (no parent left to show which project; check them with hippo inspect <id>)`);
|
|
81
|
-
console.log(apply ? `Backup: ${r.backup}\nEvery id is in the audit log: hippo audit list --op project_repair` : 'Nothing written. Add --apply to run it.');
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
85
|
+
if (sub === 'list')
|
|
86
|
+
return projectsList(db, tenantId, root, flags);
|
|
87
|
+
if (sub === 'merge')
|
|
88
|
+
return projectsMerge(db, tenantId, root, args, flags);
|
|
89
|
+
if (sub === 'repair')
|
|
90
|
+
return projectsRepair(db, tenantId, root, flags);
|
|
84
91
|
printError('Usage: hippo projects [list] [--json] | merge <from> <into> [--apply] | repair [--apply] [--global]');
|
|
85
92
|
process.exitCode = 1;
|
|
86
93
|
}
|
|
87
94
|
catch (err) {
|
|
88
|
-
printError(
|
|
95
|
+
printError(errorMessage(err));
|
|
89
96
|
process.exitCode = 1;
|
|
90
97
|
}
|
|
91
98
|
finally {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Sleep and the daily runner clean a store's old automatic memories once, so an upgrade needs no command.
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { errorMessage, log } from '../log.js';
|
|
4
|
-
import { repairQualityOnce } from '
|
|
5
|
-
import { getGlobalRoot } from '../shared.js';
|
|
6
|
-
import { resolveTenantId } from '../tenant.js';
|
|
3
|
+
import { errorMessage, log } from '../util/log.js';
|
|
4
|
+
import { repairQualityOnce } from './quality-repair.js';
|
|
5
|
+
import { getGlobalRoot } from '../sharing/shared.js';
|
|
6
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
7
7
|
/** Fault-isolated like the project tag repair: a failure warns, leaves the store unmarked and runs again next time. */
|
|
8
8
|
export function repairQualityOnceAt(root) {
|
|
9
9
|
try {
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { appendAuditEvent } from '
|
|
4
|
-
import { withBackup } from '
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
3
|
+
import { appendAuditEvent } from '../store/audit.js';
|
|
4
|
+
import { withBackup } from '../db/backup.js';
|
|
5
|
+
import { withTrialScope, withWriteScope } from '../db/busy.js';
|
|
6
|
+
import { assertSqliteAllowed } from '../db/open.js';
|
|
7
|
+
import { DatabaseSync } from '../db/sqlite.js';
|
|
8
|
+
import { getMeta, pragmaUserVersion, setMeta } from '../db/meta.js';
|
|
9
|
+
import { tableColumns } from '../db/tables.js';
|
|
10
|
+
import { assertBinaryCompatible } from '../db/migrate.js';
|
|
11
|
+
import { insertDormantRow, listDormantSnapshots } from '../store/dormant.js';
|
|
12
|
+
import { calculateStrength, canAutoDelete } from '../core/memory.js';
|
|
13
|
+
import { assessAutomaticMemory, BUNDLE_HEADER, isAutomaticEntry, isCertainReason } from '../core/memory-quality.js';
|
|
14
|
+
import { heldTexts } from '../util/same-text.js';
|
|
15
|
+
import { deleteEntryCore, MEMORY_BACKED_TABLES, memoriesBackingObjectsOn } from '../store/delete-and-batch.js';
|
|
16
|
+
import { selectAllEntries, selectPreviewRows } from '../store/entry-reads.js';
|
|
17
|
+
import { ftsRowExists } from '../store/entry-row.js';
|
|
18
|
+
import { MEMORY_SELECT_COLUMNS, parseJsonArray } from '../store/rows.js';
|
|
19
|
+
import { purgeMirrorBestEffort } from '../store/mirrors.js';
|
|
18
20
|
const REQUIRED_COLUMNS = {
|
|
19
21
|
memories: MEMORY_SELECT_COLUMNS.split(',').map((s) => s.trim()),
|
|
20
22
|
meta: ['key', 'value'],
|
|
@@ -104,11 +106,7 @@ function unsupportedPreview(db, tenantId) {
|
|
|
104
106
|
const columns = tableColumns(db, 'memories');
|
|
105
107
|
if (!columns.has('id') || !columns.has('content'))
|
|
106
108
|
return { total: 0, issues: [] };
|
|
107
|
-
const
|
|
108
|
-
const column = (name, fallback) => (columns.has(name) ? name : `${fallback} AS ${name}`);
|
|
109
|
-
const statement = db.prepare(`SELECT id, content, ${column('source', "''")}, ${column('confidence', 'NULL')}, ${column('extracted_from', 'NULL')}, ${column('dag_level', '0')}, ${column('tags_json', "'[]'")} FROM memories${tenant}`);
|
|
110
|
-
// SAFETY: the SELECT names every Row field, each a literal fallback when its column is missing.
|
|
111
|
-
const rows = (tenant ? statement.all(tenantId) : statement.all());
|
|
109
|
+
const rows = selectPreviewRows(db, columns, tenantId);
|
|
112
110
|
const issues = rows.flatMap((row) => {
|
|
113
111
|
const provenance = { ...row, source: row.source ?? '', confidence: row.confidence ?? 'observed', dag_level: row.dag_level ?? 0, tags: parseJsonArray(row.tags_json) };
|
|
114
112
|
if (!isAutomaticEntry(provenance))
|
|
@@ -120,8 +118,7 @@ function unsupportedPreview(db, tenantId) {
|
|
|
120
118
|
}
|
|
121
119
|
function initialResult(db, root, tenantId) {
|
|
122
120
|
const blockers = capabilityBlockers(db);
|
|
123
|
-
|
|
124
|
-
const schema = db.prepare('PRAGMA user_version').get().user_version;
|
|
121
|
+
const schema = pragmaUserVersion(db);
|
|
125
122
|
const plan = blockers.length > 0 ? unsupportedPreview(db, tenantId) : planRows(db, tenantId);
|
|
126
123
|
return {
|
|
127
124
|
root, schema, supported: blockers.length === 0, blockers,
|
|
@@ -135,15 +132,14 @@ function setAsideIssue(db, entry, reason, now, backup) {
|
|
|
135
132
|
if (deleteEntryCore(db, entry.id, { actor, automatic: true, suppressForgetAudit: true }) === null)
|
|
136
133
|
return false;
|
|
137
134
|
insertDormantRow(db, { entry, strength: calculateStrength(entry, now), reason: 'quality-repair', dormantAt: now.toISOString() });
|
|
138
|
-
if (getMeta(db, 'fts5_available', '0') === '1' && db
|
|
135
|
+
if (getMeta(db, 'fts5_available', '0') === '1' && ftsRowExists(db, entry.id)) {
|
|
139
136
|
throw new Error(`Quality repair could not remove the full-text row for ${entry.id}`);
|
|
140
137
|
}
|
|
141
138
|
appendAuditEvent(db, { tenantId: entry.tenantId, actor, op: 'quality_repair', targetId: entry.id, metadata: { reason, backup } });
|
|
142
139
|
return true;
|
|
143
140
|
}
|
|
144
141
|
function applyPlan(db, root, tenantId, backup, doneKey) {
|
|
145
|
-
db
|
|
146
|
-
try {
|
|
142
|
+
return withWriteScope(db, 'quality_repair_apply', () => {
|
|
147
143
|
const result = initialResult(db, root, tenantId);
|
|
148
144
|
if (!result.supported)
|
|
149
145
|
throw new Error(`Quality repair capability changed: ${result.blockers.join('; ')}`);
|
|
@@ -161,21 +157,11 @@ function applyPlan(db, root, tenantId, backup, doneKey) {
|
|
|
161
157
|
}
|
|
162
158
|
if (doneKey)
|
|
163
159
|
setMeta(db, doneKey, '1');
|
|
164
|
-
db.exec('COMMIT');
|
|
165
160
|
return { ...result, appliedIds, backup, warnings };
|
|
166
|
-
}
|
|
167
|
-
catch (error) {
|
|
168
|
-
try {
|
|
169
|
-
db.exec('ROLLBACK');
|
|
170
|
-
}
|
|
171
|
-
catch { /* preserve the mutation error */ }
|
|
172
|
-
throw error;
|
|
173
|
-
}
|
|
161
|
+
});
|
|
174
162
|
}
|
|
175
163
|
function repairOn(db, root, opts) {
|
|
176
|
-
db
|
|
177
|
-
const initial = initialResult(db, root, opts.tenantId);
|
|
178
|
-
db.exec('ROLLBACK');
|
|
164
|
+
const initial = withTrialScope(db, 'quality_repair_plan', () => initialResult(db, root, opts.tenantId));
|
|
179
165
|
if (!opts.apply || !initial.supported || !initial.issues.some((issue) => issue.disposition === 'set-aside'))
|
|
180
166
|
return initial;
|
|
181
167
|
db.exec('PRAGMA foreign_keys = ON');
|
package/dist/cli/recall.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { type CliFlags, type CommandContext } from './
|
|
2
|
-
/**
|
|
3
|
-
export declare function __resetSessionRecallHistoryCli(): void;
|
|
4
|
-
/** Runs `hippo recall`: parse, rank, load continuity, fit the printed block to the budget, audit, then write and print. */
|
|
1
|
+
import { type CliFlags, type CommandContext } from './flag-values.js';
|
|
2
|
+
/** Runs `hippo recall`: the flags name the ranking core and this verb's presenter, `retrieve` ranks and records, then the block prints. */
|
|
5
3
|
export declare function cmdRecall(hippoRoot: string, query: string, flags: CliFlags): Promise<void>;
|
|
6
4
|
export declare function handleRecall({ hippoRoot, args, flags }: CommandContext): Promise<void>;
|
|
7
5
|
//# sourceMappingURL=recall.d.ts.map
|
package/dist/cli/recall.js
CHANGED
|
@@ -1,46 +1,35 @@
|
|
|
1
1
|
// The `hippo recall` verb; main() loads it lazily from the command table.
|
|
2
|
-
import { envHippoSessionId } from '../env.js';
|
|
3
|
-
import { confidenceFacets, Layer } from '../memory.js';
|
|
2
|
+
import { envHippoSessionId } from '../util/env.js';
|
|
3
|
+
import { confidenceFacets, Layer } from '../core/memory.js';
|
|
4
4
|
import { isInitialized } from '../store/open.js';
|
|
5
|
-
import {
|
|
6
|
-
import { isRecallBoostAblated } from '../ablation.js';
|
|
7
|
-
import { loadIndex, saveIndex, updateStats } from '../store/index-and-stats.js';
|
|
5
|
+
import { loadIndex } from '../store/index-and-stats.js';
|
|
8
6
|
import { loadActiveTaskSnapshot, listSessionEvents } from '../store/sessions.js';
|
|
9
7
|
import { loadLatestHandoff } from '../store/handoffs.js';
|
|
10
|
-
import { passesScopeFilterForRecall } from '../recall-scope.js';
|
|
8
|
+
import { passesScopeFilterForRecall } from '../store/recall-scope.js';
|
|
11
9
|
import { fitBudget } from '../search/finalize.js';
|
|
12
10
|
import { explainMatch } from '../search/explain.js';
|
|
13
|
-
import { DEFAULT_RECALL_BUDGET } from '../search
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import { appendRecallAudit, recallAuditMetadata, recordShownRecall, resetSessionRings, sessionRing } from '../api/recall-record.js';
|
|
27
|
-
import { detectAvailabilityBias } from '../availability.js';
|
|
28
|
-
import { resolveTenantId } from '../tenant.js';
|
|
29
|
-
import { MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from '../graph-recall.js';
|
|
11
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
12
|
+
import { loadConfig } from '../core/config.js';
|
|
13
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
14
|
+
import { dropHeldCopies } from '../util/same-text.js';
|
|
15
|
+
import { isGlobalStoreRoot } from '../core/project-identity.js';
|
|
16
|
+
import { detectScope } from '../sharing/scope.js';
|
|
17
|
+
import { getGlobalRoot } from '../sharing/shared.js';
|
|
18
|
+
import * as api from '../api/index.js';
|
|
19
|
+
import { detectAnchoring, hashQueryText, biasHintEnabled, snapshotRing } from '../api/recall-history.js';
|
|
20
|
+
import { noteRecall, sessionRing, shownRecallRows } from '../api/recall-record.js';
|
|
21
|
+
import { detectAvailabilityBias } from '../api/availability.js';
|
|
22
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
23
|
+
import { MAX_HOPS, DEFAULT_MAX_NEIGHBORS } from '../graph/recall.js';
|
|
30
24
|
import { getReranker } from '../rerankers/index.js';
|
|
31
|
-
import { rankRecall, } from '../recall-pipeline.js';
|
|
32
25
|
import { JEV_DEFAULT_TOP_K } from '../rerankers/jev.js';
|
|
33
26
|
import { isClefModel } from '../rerankers/clef.js';
|
|
34
|
-
import { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from '../context-render.js';
|
|
35
|
-
import { withLedgerDb } from '../ledger-db.js';
|
|
27
|
+
import { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from '../api/context-render.js';
|
|
36
28
|
import { printError } from './output.js';
|
|
37
|
-
import { parseLimitFlag, parseBudgetFlag,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
export function __resetSessionRecallHistoryCli() {
|
|
42
|
-
resetSessionRings('cli');
|
|
43
|
-
}
|
|
29
|
+
import { parseLimitFlag, parseBudgetFlag, parseAsOfFlag, engineFlags, boolFlag, flagIsTrue } from './flag-values.js';
|
|
30
|
+
import { requireInit } from './shared.js';
|
|
31
|
+
import { recallEntryText, recallHeading, printActiveTaskSnapshot, printSessionEvents, printHandoff, captureConsole } from './print.js';
|
|
32
|
+
import { hostSessionId, hookStoreRoot } from './hook-runtime.js';
|
|
44
33
|
// JSON.stringify keeps quotes or parens in the matched phrase from blurring the line.
|
|
45
34
|
function planningLine(p) {
|
|
46
35
|
if (p.hint)
|
|
@@ -178,22 +167,46 @@ function parseRecallLateFlags(flags) {
|
|
|
178
167
|
error,
|
|
179
168
|
};
|
|
180
169
|
}
|
|
181
|
-
/** Runs `hippo recall`:
|
|
170
|
+
/** Runs `hippo recall`: the flags name the ranking core and this verb's presenter, `retrieve` ranks and records, then the block prints. */
|
|
182
171
|
export async function cmdRecall(hippoRoot, query, flags) {
|
|
183
172
|
requireInit(hippoRoot);
|
|
184
173
|
const o = parseRecallOptions(hippoRoot, flags);
|
|
185
|
-
const
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
174
|
+
const priced = priceRecallEntries(hippoRoot, query, o);
|
|
175
|
+
const slot = {};
|
|
176
|
+
await api.retrieve({ hippoRoot, tenantId: o.tenantId, actor: api.adminActor('cli') }, {
|
|
177
|
+
query,
|
|
178
|
+
goalTag: o.goalTag,
|
|
179
|
+
sessionId: o.sessionId,
|
|
180
|
+
cliCore: {
|
|
181
|
+
rank: rankOptions(query, flags, o, priced),
|
|
182
|
+
// The global store is a second source for this surface alone, and never when it is the store being searched.
|
|
183
|
+
sources: { globalRoot: o.globalRoot !== hippoRoot && priced.globalOn ? o.globalRoot : undefined },
|
|
184
|
+
note: (line) => printError(line),
|
|
185
|
+
hostSessionId: hostSessionId(),
|
|
186
|
+
show: (rank, planning) => {
|
|
187
|
+
slot.presented = presentRecall(hippoRoot, query, o, { rank, ...priced }, planning);
|
|
188
|
+
return slot.presented.shown;
|
|
189
|
+
},
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
// A late flag is rejected where the ranking halted, after the notes its earlier stages printed.
|
|
193
|
+
o.late.error?.fail();
|
|
194
|
+
if (!slot.presented)
|
|
195
|
+
throw new Error('recall ranked but presented nothing');
|
|
196
|
+
const { fit, text } = slot.presented;
|
|
197
|
+
const { results, hints } = fit;
|
|
198
|
+
// Fed after the final detect, so the next recall's cooldown reads the top row and hint this one showed.
|
|
199
|
+
if (fit.anchorRing)
|
|
200
|
+
noteRecall(fit.anchorRing, query, results[0]?.entry.id ?? null, hints.anchoring?.memoryId);
|
|
201
|
+
console.log(text);
|
|
189
202
|
}
|
|
190
203
|
/** Every flag recall reads, parsed in the order the single-body command checked them. */
|
|
191
204
|
function parseRecallOptions(hippoRoot, flags) {
|
|
192
205
|
const budget = parseBudgetFlag(flags['budget'], DEFAULT_RECALL_BUDGET);
|
|
193
206
|
const limit = parseLimitFlag(flags['limit']);
|
|
194
|
-
const asJson =
|
|
195
|
-
const showWhy =
|
|
196
|
-
const includeSuperseded =
|
|
207
|
+
const asJson = boolFlag(flags, 'json');
|
|
208
|
+
const showWhy = boolFlag(flags, 'why');
|
|
209
|
+
const includeSuperseded = boolFlag(flags, 'include-superseded');
|
|
197
210
|
const asOf = parseAsOfFlag(flags);
|
|
198
211
|
const globalRoot = getGlobalRoot();
|
|
199
212
|
const primaryIsGlobal = isGlobalStoreRoot(hippoRoot);
|
|
@@ -206,7 +219,7 @@ function parseRecallOptions(hippoRoot, flags) {
|
|
|
206
219
|
? parseInt(String(flags['min-results']), 10)
|
|
207
220
|
: undefined;
|
|
208
221
|
const activeScope = explicitScope || detectScope();
|
|
209
|
-
const graphStream = flags
|
|
222
|
+
const graphStream = flagIsTrue(flags, 'graph-stream') ? parseGraphStreamFlags(flags) : undefined;
|
|
210
223
|
const late = parseRecallLateFlags(flags);
|
|
211
224
|
const goalTag = flags['goal'] !== undefined ? String(flags['goal']).trim() : '';
|
|
212
225
|
const sessionId = (flags['session-id'] !== undefined
|
|
@@ -215,45 +228,37 @@ function parseRecallOptions(hippoRoot, flags) {
|
|
|
215
228
|
return {
|
|
216
229
|
budget, limit, asJson, showWhy, includeSuperseded, asOf, globalRoot, primaryIsGlobal, tenantId,
|
|
217
230
|
explicitScope, config, minResults, activeScope, graphStream, late, goalTag, sessionId,
|
|
218
|
-
includeContinuity:
|
|
231
|
+
includeContinuity: boolFlag(flags, 'continuity'),
|
|
219
232
|
};
|
|
220
233
|
}
|
|
221
|
-
/**
|
|
222
|
-
|
|
223
|
-
// Engines spend the budget on the text each result prints as, less the header, so selection and print agree.
|
|
234
|
+
/** Each entry priced as the line it prints, with the source marker `--why` shows. */
|
|
235
|
+
function priceRecallEntries(hippoRoot, query, o) {
|
|
224
236
|
const localIndex = loadIndex(hippoRoot);
|
|
225
237
|
const globalOn = isInitialized(o.globalRoot);
|
|
226
|
-
const
|
|
238
|
+
const isGlobal = (r) => o.primaryIsGlobal || (globalOn && !localIndex.entries[r.entry.id]);
|
|
239
|
+
const entryText = (r) => recallEntryText(r, query, o.showWhy, isGlobal(r));
|
|
227
240
|
const printCost = (r) => printedTokens(entryText(r));
|
|
241
|
+
return { globalOn, isGlobal, entryText, printCost };
|
|
242
|
+
}
|
|
243
|
+
/** The ranking core's options; a late flag error halts it before the stage that reads the flag. */
|
|
244
|
+
function rankOptions(query, flags, o, priced) {
|
|
245
|
+
// Engines spend the budget on the text each result prints as, less the header, so selection and print agree.
|
|
228
246
|
const entryBudget = Math.max(0, o.budget - printedTokens(recallHeading(o.budget, o.budget, query)));
|
|
229
|
-
|
|
230
|
-
|
|
247
|
+
return {
|
|
248
|
+
budget: entryBudget, cost: priced.printCost, limit: o.limit, why: o.showWhy, includeSuperseded: o.includeSuperseded, asOf: o.asOf,
|
|
231
249
|
explicitScope: o.explicitScope, activeScope: o.activeScope,
|
|
232
|
-
search: { ...engineFlags(flags, o.config), multihop: flags
|
|
250
|
+
search: { ...engineFlags(flags, o.config), multihop: flagIsTrue(flags, 'multihop') || o.config.multihop.enabled, graphStream: o.graphStream, minResults: o.minResults, explain: false },
|
|
233
251
|
graphHops: o.late.graphHops,
|
|
234
|
-
evcAdaptive:
|
|
235
|
-
filterConflicts:
|
|
236
|
-
valueAware:
|
|
237
|
-
rerankUtility:
|
|
252
|
+
evcAdaptive: boolFlag(flags, 'evc-adaptive'),
|
|
253
|
+
filterConflicts: boolFlag(flags, 'filter-conflicts'),
|
|
254
|
+
valueAware: boolFlag(flags, 'value-aware'),
|
|
255
|
+
rerankUtility: boolFlag(flags, 'rerank-utility'),
|
|
238
256
|
reranker: o.late.reranker,
|
|
239
|
-
goalTag: o.goalTag,
|
|
240
|
-
sessionId: o.sessionId,
|
|
241
257
|
salienceThreshold: o.late.salienceThreshold,
|
|
242
258
|
outcome: o.late.outcome,
|
|
243
259
|
layer: o.late.layer,
|
|
244
260
|
haltBefore: o.late.error?.stage,
|
|
245
|
-
}
|
|
246
|
-
if (rank.goalRecallLog.length > 0) {
|
|
247
|
-
const dbForGoals = openHippoDb(hippoRoot);
|
|
248
|
-
try {
|
|
249
|
-
writeGoalRecallLog(dbForGoals, rank.goalRecallLog);
|
|
250
|
-
}
|
|
251
|
-
finally {
|
|
252
|
-
closeHippoDb(dbForGoals);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
o.late.error?.fail();
|
|
256
|
-
return { rank, localIndex, entryText, printCost };
|
|
261
|
+
};
|
|
257
262
|
}
|
|
258
263
|
/** Loaded before the zero-result branch, so a no-match query with live continuity still returns a resume packet. */
|
|
259
264
|
function loadRecallContinuity(hippoRoot, o) {
|
|
@@ -355,7 +360,7 @@ function renderRecallBlock(list, h, v) {
|
|
|
355
360
|
}));
|
|
356
361
|
}
|
|
357
362
|
/** Pays the continuity sections and the plan hint first, then fits the memories into what is left. */
|
|
358
|
-
function fitRecallBlock(
|
|
363
|
+
function fitRecallBlock(query, o, ranked, loaded, planning) {
|
|
359
364
|
const { budget } = o;
|
|
360
365
|
let { activeSnapshot, sessionHandoff, recentSessionEvents } = loaded;
|
|
361
366
|
// Sections print ahead of the memories, so they are paid first, after the header; one that does not fit is dropped.
|
|
@@ -372,12 +377,11 @@ function fitRecallBlock(hippoRoot, query, o, ranked, loaded) {
|
|
|
372
377
|
const continuityTokens = sectionBudget - left;
|
|
373
378
|
const continuity = { activeSnapshot, sessionHandoff, recentSessionEvents };
|
|
374
379
|
const hasContinuity = activeSnapshot !== null || sessionHandoff !== null || recentSessionEvents.length > 0;
|
|
375
|
-
// The baserate hint depends on the query alone
|
|
376
|
-
const
|
|
377
|
-
const planText = planningLine(cmdPlanningFallacyOutput);
|
|
380
|
+
// The baserate hint depends on the query alone, so `retrieve` evaluates it and this only prices the line.
|
|
381
|
+
const planText = planningLine(planning);
|
|
378
382
|
const showPlan = planText !== null && pays(printedTokens(`${planText}\n`));
|
|
379
|
-
const cmdPlanningFallacyHint = showPlan ?
|
|
380
|
-
const cmdPlanningFallacyWatching = showPlan ?
|
|
383
|
+
const cmdPlanningFallacyHint = showPlan ? planning.hint ?? null : null;
|
|
384
|
+
const cmdPlanningFallacyWatching = showPlan ? planning.watching ?? null : null;
|
|
381
385
|
// The first --min-results are kept whatever they cost (the documented exception); the rest skip and continue.
|
|
382
386
|
const floor = o.minResults ?? 1;
|
|
383
387
|
const fitted = fitBudget(ranked.rank.results, left, floor, ranked.printCost);
|
|
@@ -398,60 +402,35 @@ function fitRecallBlock(hippoRoot, query, o, ranked, loaded) {
|
|
|
398
402
|
}
|
|
399
403
|
return { results, hints, recallText, continuity, continuityTokens, cmdPlanningFallacyHint, cmdPlanningFallacyWatching, anchorRing };
|
|
400
404
|
}
|
|
401
|
-
|
|
405
|
+
/** The presenter `retrieve` calls once ranking ends: fits and renders the block, and names the rows and hint rows to record. */
|
|
406
|
+
function presentRecall(hippoRoot, query, o, ranked, planning) {
|
|
407
|
+
const fit = fitRecallBlock(query, o, ranked, loadRecallContinuity(hippoRoot, o), planning);
|
|
402
408
|
const { results, hints } = fit;
|
|
403
|
-
const
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
appendRecallAudit({ ...who, hippoRoot: o.globalRoot }, 'recall', undefined, metadata);
|
|
410
|
-
}
|
|
409
|
+
const text = recallOutput(query, o, fit, ranked.isGlobal);
|
|
410
|
+
const audit = shownRecallRows({ tenantId: o.tenantId, actor: 'cli' }, {
|
|
411
|
+
query, ring: fit.anchorRing, topId: results[0]?.entry.id ?? null, anchoring: hints.anchoring, availability: hints.availability,
|
|
412
|
+
});
|
|
413
|
+
// The token ledger books the text this recall prints, on whichever exit it takes.
|
|
414
|
+
return { fit, text, shown: { results, audit, tokens: estimateTokens(text) } };
|
|
411
415
|
}
|
|
412
|
-
/**
|
|
413
|
-
function
|
|
414
|
-
const {
|
|
416
|
+
/** What this recall prints: the JSON object, or the fitted block. */
|
|
417
|
+
function recallOutput(query, o, fit, isGlobal) {
|
|
418
|
+
const { asJson, includeContinuity } = o;
|
|
415
419
|
const { results, recallText } = fit;
|
|
416
|
-
// The token ledger books the block this recall prints, on whichever exit it takes.
|
|
417
|
-
const emit = (text) => {
|
|
418
|
-
withLedgerDb(hippoRoot, (db) => recordTokenUse(db, {
|
|
419
|
-
tenantId,
|
|
420
|
-
sessionId: hostSessionId() ?? null,
|
|
421
|
-
surface: 'recall',
|
|
422
|
-
event: 'inject',
|
|
423
|
-
items: results.length,
|
|
424
|
-
tokens: estimateTokens(text),
|
|
425
|
-
}));
|
|
426
|
-
console.log(text);
|
|
427
|
-
};
|
|
428
420
|
if (results.length === 0) {
|
|
429
|
-
// Traced too, so a coverage gap still lands in the training corpus; this path never touches localIndex.
|
|
430
|
-
writeRecallTraceAtRoot(hippoRoot, {
|
|
431
|
-
tenantId,
|
|
432
|
-
sessionId: sessionId || hostSessionId() || null,
|
|
433
|
-
pipeline: 'cli',
|
|
434
|
-
query,
|
|
435
|
-
explainMode: showWhy,
|
|
436
|
-
results: [],
|
|
437
|
-
});
|
|
438
421
|
// HTTP and MCP surface the hint whatever matched, so the zero-result JSON keeps it for parity.
|
|
439
|
-
|
|
440
|
-
return;
|
|
441
|
-
}
|
|
442
|
-
recordRetrieval(hippoRoot, query, o, results, localIndex);
|
|
443
|
-
if (asJson) {
|
|
444
|
-
const output = results.map((r) => recallJsonRow(r, query, showWhy, o.primaryIsGlobal || (isInitialized(o.globalRoot) && !localIndex.entries[r.entry.id])));
|
|
445
|
-
emit(JSON.stringify({
|
|
446
|
-
query,
|
|
447
|
-
budget: o.budget,
|
|
448
|
-
results: output,
|
|
449
|
-
total: output.length,
|
|
450
|
-
...recallJsonTail(fit, includeContinuity),
|
|
451
|
-
}));
|
|
452
|
-
return;
|
|
422
|
+
return asJson ? JSON.stringify({ query, results: [], total: 0, ...recallJsonTail(fit, includeContinuity) }) : recallText;
|
|
453
423
|
}
|
|
454
|
-
|
|
424
|
+
if (!asJson)
|
|
425
|
+
return recallText;
|
|
426
|
+
const output = results.map((r) => recallJsonRow(r, query, o.showWhy, isGlobal(r)));
|
|
427
|
+
return JSON.stringify({
|
|
428
|
+
query,
|
|
429
|
+
budget: o.budget,
|
|
430
|
+
results: output,
|
|
431
|
+
total: output.length,
|
|
432
|
+
...recallJsonTail(fit, includeContinuity),
|
|
433
|
+
});
|
|
455
434
|
}
|
|
456
435
|
/** The JSON keys after the result list: suppression summary, any bias hints, then continuity when asked for. */
|
|
457
436
|
function recallJsonTail(fit, includeContinuity) {
|
|
@@ -475,34 +454,6 @@ function recallJsonTail(fit, includeContinuity) {
|
|
|
475
454
|
}
|
|
476
455
|
return tail;
|
|
477
456
|
}
|
|
478
|
-
/** Strengthens the returned rows and persists last_retrieval_ids and last_trace_id in one saveIndex call. */
|
|
479
|
-
function recordRetrieval(hippoRoot, query, o, results, localIndex) {
|
|
480
|
-
const { globalRoot, tenantId, sessionId, showWhy } = o;
|
|
481
|
-
const retrievedIds = results.map((r) => r.entry.id);
|
|
482
|
-
const gate = { recallBoostAblated: isRecallBoostAblated() };
|
|
483
|
-
const strengthenedHere = strengthenRetrieved(hippoRoot, retrievedIds, gate);
|
|
484
|
-
if (isInitialized(globalRoot))
|
|
485
|
-
strengthenRetrieved(globalRoot, retrievedIds.filter((id) => !strengthenedHere.has(id)), gate);
|
|
486
|
-
// Track last retrieval IDs for outcome command
|
|
487
|
-
localIndex.last_retrieval_ids = retrievedIds;
|
|
488
|
-
// One trace at hippoRoot, where outcome attribution lives, written first so the same saveIndex keeps
|
|
489
|
-
// last_retrieval_ids and last_trace_id in lockstep (see writeRecallTraceAtRoot). Fail-soft; never throws.
|
|
490
|
-
const traceId = writeRecallTraceAtRoot(hippoRoot, {
|
|
491
|
-
tenantId,
|
|
492
|
-
sessionId: sessionId || hostSessionId() || null,
|
|
493
|
-
pipeline: 'cli',
|
|
494
|
-
query,
|
|
495
|
-
explainMode: showWhy,
|
|
496
|
-
results: results.map((r) => ({
|
|
497
|
-
memoryId: r.entry.id,
|
|
498
|
-
score: r.score,
|
|
499
|
-
rerankSteps: r.rerankTrace,
|
|
500
|
-
})),
|
|
501
|
-
});
|
|
502
|
-
localIndex.last_trace_id = traceId !== null ? String(traceId) : null;
|
|
503
|
-
saveIndex(hippoRoot, localIndex);
|
|
504
|
-
updateStats(hippoRoot, { recalled: results.length });
|
|
505
|
-
}
|
|
506
457
|
function recallJsonRow(r, query, showWhy, isGlobal) {
|
|
507
458
|
const base = {
|
|
508
459
|
id: r.entry.id,
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - Uses fetch directly so no SDK dependency.
|
|
13
13
|
* - On failure (API error, bad response), the original memory is untouched.
|
|
14
14
|
*/
|
|
15
|
-
import { MemoryEntry } from '
|
|
15
|
+
import { MemoryEntry } from '../core/memory.js';
|
|
16
16
|
export interface RefineOptions {
|
|
17
17
|
apiKey: string;
|
|
18
18
|
model?: string;
|