hippo-memory 1.69.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
/** Git subprocess helpers for churn-staleness (src/invalidation.ts). */
|
|
1
|
+
/** Git subprocess helpers for churn-staleness (src/learn/invalidation.ts). */
|
|
2
2
|
import { execFileSync } from 'child_process';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as os from 'os';
|
|
5
5
|
import * as path from 'path';
|
|
6
|
+
import { DAY_MS } from '../util/time.js';
|
|
7
|
+
import { errorMessage } from '../util/log.js';
|
|
6
8
|
// A `git log --name-status` dump can run to tens of MB; default 1MB pipe would truncate it.
|
|
7
9
|
const GIT_MAX_BUFFER = 64 * 1024 * 1024;
|
|
8
10
|
// Longer than the 10 s of one-line git reads because a full log dump on a large repo is slow, yet bounded so a wedged git cannot stall sleep.
|
|
@@ -15,7 +17,7 @@ function runGit(args, repoRoot) {
|
|
|
15
17
|
return execFileSync('git', args, { cwd: repoRoot, encoding: 'utf8', maxBuffer: GIT_MAX_BUFFER, timeout: GIT_TIMEOUT_MS, windowsHide: true });
|
|
16
18
|
}
|
|
17
19
|
catch (err) {
|
|
18
|
-
throw new GitReadError(`git ${args.join(' ')} failed: ${err
|
|
20
|
+
throw new GitReadError(`git ${args.join(' ')} failed: ${errorMessage(err)}`, { cause: err });
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
// git grep exits 1 for "no match" -- a normal empty result, not a failure.
|
|
@@ -28,7 +30,7 @@ function runGitGrepOrEmpty(args, repoRoot) {
|
|
|
28
30
|
const status = err.status;
|
|
29
31
|
if (status === 1)
|
|
30
32
|
return '';
|
|
31
|
-
throw new GitReadError(`git ${args.join(' ')} failed: ${err
|
|
33
|
+
throw new GitReadError(`git ${args.join(' ')} failed: ${errorMessage(err)}`, { cause: err });
|
|
32
34
|
}
|
|
33
35
|
}
|
|
34
36
|
// ls-tree, not ls-files: the index can hold staged adds/deletes that HEAD does not.
|
|
@@ -38,7 +40,7 @@ export function gitLsFilesAtHead(repoRoot) {
|
|
|
38
40
|
}
|
|
39
41
|
// 1-day buffer guards against git's --since boundary excluding a commit dated exactly at the anchor.
|
|
40
42
|
export function fetchChurnWindowLog(repoRoot, sinceIso) {
|
|
41
|
-
const buffered = new Date(new Date(sinceIso).getTime() -
|
|
43
|
+
const buffered = new Date(new Date(sinceIso).getTime() - DAY_MS).toISOString();
|
|
42
44
|
const raw = runGit(
|
|
43
45
|
// --first-parent -m: a merge's changes land as one diff against its mainline parent.
|
|
44
46
|
['log', '--no-renames', '--first-parent', '-m', `--since=${buffered}`, '--pretty=format:%x01%H%x02%cI', '--name-status'], repoRoot);
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Layer, createMemory } from '../core/memory.js';
|
|
2
|
+
import { writeEntry } from '../store/entry-writes.js';
|
|
3
|
+
import { loadConfig } from '../core/config.js';
|
|
4
|
+
import { RejectedValueError } from '../store/rejection.js';
|
|
5
|
+
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
6
|
+
import { describeMessageFailure, sendAnthropicMessage } from '../util/anthropic-messages.js';
|
|
7
|
+
import { neverAutoShareTags } from '../sharing/shared.js';
|
|
8
|
+
import { errorMessage, log } from '../util/log.js';
|
|
9
|
+
import { isJsonString } from '../util/json.js';
|
|
10
|
+
import { certainDefect } from '../core/memory-quality.js';
|
|
11
|
+
const EXTRACTION_PROMPT = `You are extracting factual statements from a conversation or memory entry. Extract 1-8 standalone factual statements that would be useful to remember later.
|
|
12
|
+
|
|
13
|
+
Rules:
|
|
14
|
+
- Each fact must be a complete, standalone sentence
|
|
15
|
+
- Include the speaker's name in every fact (e.g. "Alice prefers..." not "She prefers...")
|
|
16
|
+
- Preserve specific details: names, numbers, dates, paths, IDs
|
|
17
|
+
- Return a JSON array of objects with: content (string), tags (array of "speaker:X" and "topic:Y" strings), valence ("neutral", "positive", "negative", or "critical")
|
|
18
|
+
- Return an empty array [] for small talk with no extractable facts
|
|
19
|
+
- Output ONLY the JSON array, no preamble or explanation
|
|
20
|
+
|
|
21
|
+
Input text:
|
|
22
|
+
`;
|
|
23
|
+
// Output budget for one extraction reply.
|
|
24
|
+
const EXTRACTION_MAX_TOKENS = 1200;
|
|
25
|
+
export async function extractFacts(text, opts) {
|
|
26
|
+
const reply = await sendAnthropicMessage({
|
|
27
|
+
apiKey: opts.apiKey,
|
|
28
|
+
model: opts.model,
|
|
29
|
+
maxTokens: EXTRACTION_MAX_TOKENS,
|
|
30
|
+
prompt: EXTRACTION_PROMPT + redactSecretsStrict(text),
|
|
31
|
+
fetcher: opts.fetcher,
|
|
32
|
+
});
|
|
33
|
+
if (!reply.ok) {
|
|
34
|
+
opts.onError?.(describeMessageFailure(reply.failure));
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const raw = reply.text;
|
|
39
|
+
if (!raw)
|
|
40
|
+
return [];
|
|
41
|
+
const parsed = JSON.parse(raw);
|
|
42
|
+
if (!Array.isArray(parsed))
|
|
43
|
+
return [];
|
|
44
|
+
return parseExtractedFacts(parsed);
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
opts.onError?.(`unparseable response: ${errorMessage(err)}`);
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function parseExtractedFacts(parsed) {
|
|
52
|
+
const validValences = new Set(['neutral', 'positive', 'negative', 'critical']);
|
|
53
|
+
const facts = [];
|
|
54
|
+
for (const item of parsed) {
|
|
55
|
+
if (facts.length >= 8)
|
|
56
|
+
break;
|
|
57
|
+
if (!item ||
|
|
58
|
+
!isJsonString(item.content) ||
|
|
59
|
+
item.content.length < 3)
|
|
60
|
+
continue;
|
|
61
|
+
const itemTags = item.tags;
|
|
62
|
+
const tags = Array.isArray(itemTags)
|
|
63
|
+
? itemTags.filter((t) => isJsonString(t))
|
|
64
|
+
: [];
|
|
65
|
+
// SAFETY: the isJsonString + validValences.has guard below confirms item.valence is one of the four literal strings of EmotionalValence.
|
|
66
|
+
const valence = isJsonString(item.valence) && validValences.has(item.valence)
|
|
67
|
+
? item.valence
|
|
68
|
+
: 'neutral';
|
|
69
|
+
facts.push({ content: item.content, tags, valence });
|
|
70
|
+
}
|
|
71
|
+
return facts;
|
|
72
|
+
}
|
|
73
|
+
const INHERITABLE_PREFIXES = ['conv:', 'session:', 'scope:', 'path:'];
|
|
74
|
+
export function storeExtractedFacts(hippoRoot, source, facts) {
|
|
75
|
+
const inheritedTags = [
|
|
76
|
+
...source.tags.filter((t) => INHERITABLE_PREFIXES.some((p) => t.startsWith(p))),
|
|
77
|
+
...neverAutoShareTags([source]),
|
|
78
|
+
];
|
|
79
|
+
const entries = [];
|
|
80
|
+
let rejected = 0;
|
|
81
|
+
const baseHalfLifeDays = loadConfig(hippoRoot).defaultHalfLifeDays;
|
|
82
|
+
for (const fact of facts) {
|
|
83
|
+
const defect = certainDefect(fact.content);
|
|
84
|
+
if (defect !== null) {
|
|
85
|
+
log.warn(`storeExtractedFacts: skipped automatic quality defect (${defect})`);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const entry = buildExtractedEntry(fact, source, inheritedTags, baseHalfLifeDays);
|
|
89
|
+
// A refusal is per-VALUE: one rejected fact must not
|
|
90
|
+
// drop the rest of this batch. writeEntry has already audited the
|
|
91
|
+
// refusal (reject_refusal) before rethrowing, so skip-and-count here.
|
|
92
|
+
try {
|
|
93
|
+
writeEntry(hippoRoot, entry);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
if (err instanceof RejectedValueError) {
|
|
97
|
+
rejected++;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
throw err;
|
|
101
|
+
}
|
|
102
|
+
entries.push(entry);
|
|
103
|
+
}
|
|
104
|
+
if (rejected > 0) {
|
|
105
|
+
log.warn(`storeExtractedFacts: skipped ${rejected} rejected value(s)`);
|
|
106
|
+
}
|
|
107
|
+
return entries;
|
|
108
|
+
}
|
|
109
|
+
function buildExtractedEntry(fact, source, inheritedTags, baseHalfLifeDays) {
|
|
110
|
+
const tags = ['extracted', ...inheritedTags, ...fact.tags];
|
|
111
|
+
return { ...createMemory(fact.content, {
|
|
112
|
+
layer: Layer.Semantic,
|
|
113
|
+
tags,
|
|
114
|
+
emotional_valence: fact.valence,
|
|
115
|
+
confidence: 'inferred',
|
|
116
|
+
source: source.source,
|
|
117
|
+
extracted_from: source.id,
|
|
118
|
+
scope: source.scope,
|
|
119
|
+
// Without it createMemory stamps 'default', and extracted facts leave
|
|
120
|
+
// the tenant of the episodic memory they were extracted from.
|
|
121
|
+
tenantId: source.tenantId,
|
|
122
|
+
baseHalfLifeDays,
|
|
123
|
+
}), origin_project: source.origin_project };
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* Kahneman 2003 inside-vs-outside view).
|
|
12
12
|
*
|
|
13
13
|
* Iteration signal: the `recall_autodebias_hint_no_class_match` audit op
|
|
14
|
-
* (emitted by
|
|
14
|
+
* (emitted by recall when a phrase matches but no class
|
|
15
15
|
* resolves) is the telemetry channel for deciding whether to add an
|
|
16
16
|
* embedding-based detector.
|
|
17
17
|
*/
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* Kahneman 2003 inside-vs-outside view).
|
|
12
12
|
*
|
|
13
13
|
* Iteration signal: the `recall_autodebias_hint_no_class_match` audit op
|
|
14
|
-
* (emitted by
|
|
14
|
+
* (emitted by recall when a phrase matches but no class
|
|
15
15
|
* resolves) is the telemetry channel for deciding whether to add an
|
|
16
16
|
* embedding-based detector.
|
|
17
17
|
*/
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
1
2
|
export interface InvalidationTarget {
|
|
2
3
|
from: string;
|
|
3
4
|
to: string | null;
|
|
@@ -38,6 +39,9 @@ export declare function extractInvalidationTarget(message: string): Invalidation
|
|
|
38
39
|
* auto-learn-from-git path) inherit this contract.
|
|
39
40
|
*/
|
|
40
41
|
export declare function invalidateMatching(hippoRoot: string, target: InvalidationTarget, tenantId?: string, options?: InvalidationOptions): InvalidationResult;
|
|
42
|
+
/** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it current.
|
|
43
|
+
* Each match is read again before it is weakened, so a row another writer changed since the list was read is never written back stale. */
|
|
44
|
+
export declare function invalidateMatchingAmong(hippoRoot: string, live: MemoryEntry[], target: InvalidationTarget, tenantId?: string): InvalidationResult;
|
|
41
45
|
export interface ChurnRefs {
|
|
42
46
|
paths: string[];
|
|
43
47
|
symbols: string[];
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { CHURN_STALE_TAG } from './memory.js';
|
|
1
|
+
import { addTagToEntries, writeEntriesSeparately } from '../store/entry-writes.js';
|
|
2
|
+
import { confirmedOutcomeTimes } from '../store/audit.js';
|
|
3
|
+
import { chunked, loadAllEntries, loadEntriesByIds } from '../store/entry-reads.js';
|
|
4
|
+
import { CHURN_STALE_TAG } from '../core/memory.js';
|
|
6
5
|
import { GitReadError, gitLsFilesAtHead, fetchChurnWindowLog, gitGrepPresence, resolveCommitBefore, packageScriptsAt, } from './churn-git.js';
|
|
6
|
+
const HEADLINE_CHARS = 60;
|
|
7
7
|
/**
|
|
8
8
|
* Extract what was replaced/removed from a commit message.
|
|
9
9
|
* Returns null if the commit isn't a breaking/migration change.
|
|
@@ -63,7 +63,33 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
|
|
|
63
63
|
// (host-wide invalidation across all tenants in the store).
|
|
64
64
|
// options.onlyId resolves by FILTERING this tenant-scoped list — never a
|
|
65
65
|
// direct id lookup — so an id from another tenant is invisible here.
|
|
66
|
-
const
|
|
66
|
+
const { result, weakened } = weakenMatches(loadAllEntries(hippoRoot, tenantId), target, options);
|
|
67
|
+
writeEntriesSeparately(hippoRoot, weakened);
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
/** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it current.
|
|
71
|
+
* Each match is read again before it is weakened, so a row another writer changed since the list was read is never written back stale. */
|
|
72
|
+
export function invalidateMatchingAmong(hippoRoot, live, target, tenantId) {
|
|
73
|
+
const seen = weakenMatches(live, target, { dryRun: true }).result;
|
|
74
|
+
const ids = [...seen.targets, ...seen.skippedPinned];
|
|
75
|
+
// loadEntriesByIds reads at most 500 ids a call.
|
|
76
|
+
const fresh = new Map(chunked(ids, 500).flatMap((chunk) => loadEntriesByIds(hippoRoot, chunk, tenantId)).map((entry) => [entry.id, entry]));
|
|
77
|
+
const { result, weakened } = weakenMatches(ids.flatMap((id) => fresh.get(id) ?? []), target);
|
|
78
|
+
writeEntriesSeparately(hippoRoot, weakened);
|
|
79
|
+
const byId = new Map(weakened.map((entry) => [entry.id, entry]));
|
|
80
|
+
for (let i = 0; i < live.length; i++)
|
|
81
|
+
live[i] = byId.get(live[i].id) ?? live[i];
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
function referencesPattern(entry, fromTokens, exactTag) {
|
|
85
|
+
const contentTokens = invalidationTokenize(entry.content);
|
|
86
|
+
const tagTokens = entry.tags.map(t => t.toLowerCase());
|
|
87
|
+
const tokenMatch = matchScore(fromTokens, contentTokens);
|
|
88
|
+
const tagMatch = tagTokens.includes(exactTag);
|
|
89
|
+
return tokenMatch >= 0.5 || tagMatch;
|
|
90
|
+
}
|
|
91
|
+
/** The match pass: weakens each unpinned match in place and returns them, writing nothing. */
|
|
92
|
+
function weakenMatches(entries, target, options) {
|
|
67
93
|
const fromTokens = invalidationTokenize(target.from);
|
|
68
94
|
const exactTag = target.from.toLowerCase().trim();
|
|
69
95
|
const dryRun = options?.dryRun === true;
|
|
@@ -80,15 +106,8 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
|
|
|
80
106
|
if (entry.id !== options.onlyId)
|
|
81
107
|
continue;
|
|
82
108
|
}
|
|
83
|
-
else
|
|
84
|
-
|
|
85
|
-
const tagTokens = entry.tags.map(t => t.toLowerCase());
|
|
86
|
-
// Check if the memory references the old pattern
|
|
87
|
-
const tokenMatch = matchScore(fromTokens, contentTokens);
|
|
88
|
-
const tagMatch = tagTokens.includes(exactTag);
|
|
89
|
-
if (!(tokenMatch >= 0.5 || tagMatch))
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
109
|
+
else if (!referencesPattern(entry, fromTokens, exactTag))
|
|
110
|
+
continue;
|
|
92
111
|
// Pinned check runs AFTER matching so pinned would-be targets are
|
|
93
112
|
// observable in skippedPinned (pattern mode and onlyId mode alike).
|
|
94
113
|
if (entry.pinned) {
|
|
@@ -99,7 +118,7 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
|
|
|
99
118
|
result.targets.push(entry.id);
|
|
100
119
|
result.preview.push({
|
|
101
120
|
id: entry.id,
|
|
102
|
-
headline: entry.content.replace(/\s+/g, ' ').slice(0,
|
|
121
|
+
headline: entry.content.replace(/\s+/g, ' ').slice(0, HEADLINE_CHARS),
|
|
103
122
|
});
|
|
104
123
|
if (dryRun)
|
|
105
124
|
continue;
|
|
@@ -110,21 +129,7 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
|
|
|
110
129
|
}
|
|
111
130
|
weakened.push(entry);
|
|
112
131
|
}
|
|
113
|
-
|
|
114
|
-
return result;
|
|
115
|
-
}
|
|
116
|
-
/** Each row commits alone, as a run of writeEntry calls would, but the store opens once. */
|
|
117
|
-
function writeEntriesOnOneHandle(hippoRoot, entries) {
|
|
118
|
-
if (entries.length === 0)
|
|
119
|
-
return;
|
|
120
|
-
const db = openStore(hippoRoot);
|
|
121
|
-
try {
|
|
122
|
-
for (const entry of entries)
|
|
123
|
-
writeEntryOn(db, hippoRoot, entry);
|
|
124
|
-
}
|
|
125
|
-
finally {
|
|
126
|
-
closeHippoDb(db);
|
|
127
|
-
}
|
|
132
|
+
return { result, weakened };
|
|
128
133
|
}
|
|
129
134
|
const STOPWORDS = new Set([
|
|
130
135
|
'the', 'an', 'is', 'it', 'in', 'on', 'at', 'to', 'for', 'of', 'by',
|
|
@@ -219,22 +224,6 @@ function resolveTrackedPath(token, repoRoot, projectName, index) {
|
|
|
219
224
|
}
|
|
220
225
|
return null;
|
|
221
226
|
}
|
|
222
|
-
// Anchor SQL runs on its own handle (closed in finally); queryAuditEvents is NOT
|
|
223
|
-
// reused here because its 10k-row cap would silently miss old confirmations.
|
|
224
|
-
function queryConfirmedAt(hippoRoot, tenantId) {
|
|
225
|
-
const db = openHippoDb(hippoRoot);
|
|
226
|
-
try {
|
|
227
|
-
// SAFETY: the SELECT list above is exactly target_id and ts; no other shape reaches this cast.
|
|
228
|
-
const rows = db.prepare(`SELECT target_id, MAX(ts) AS ts FROM audit_log
|
|
229
|
-
WHERE tenant_id = ? AND op = 'outcome' AND target_id IS NOT NULL
|
|
230
|
-
AND json_extract(metadata_json, '$.good') = 1
|
|
231
|
-
GROUP BY target_id`).all(tenantId);
|
|
232
|
-
return new Map(rows.map((r) => [r.target_id, r.ts]));
|
|
233
|
-
}
|
|
234
|
-
finally {
|
|
235
|
-
closeHippoDb(db);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
227
|
function emptyChurnResult(dryRun, skippedPinned = [], error) {
|
|
239
228
|
const result = { checked: 0, marked: 0, alreadyMarked: 0, skippedPinned, dryRun, preview: [] };
|
|
240
229
|
if (error !== undefined)
|
|
@@ -262,25 +251,8 @@ function collectChurnCandidates(entries, opts) {
|
|
|
262
251
|
}
|
|
263
252
|
return { candidates, skippedPinned };
|
|
264
253
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
let windowLog = [];
|
|
268
|
-
if (needs.paths) {
|
|
269
|
-
const minAnchor = candidates.reduce((min, c) => {
|
|
270
|
-
const a = anchorOf(c.entry);
|
|
271
|
-
return min === '' || a < min ? a : min;
|
|
272
|
-
}, '');
|
|
273
|
-
windowLog = fetchChurnWindowLog(repoRoot, minAnchor);
|
|
274
|
-
}
|
|
275
|
-
const touchedInWindow = new Set();
|
|
276
|
-
for (const c of windowLog)
|
|
277
|
-
for (const f of c.files)
|
|
278
|
-
touchedInWindow.add(f.path);
|
|
279
|
-
const trackedIndex = buildTrackedIndex(new Set([...headFiles, ...touchedInWindow]));
|
|
280
|
-
const headIndex = buildTrackedIndex(headFiles);
|
|
281
|
-
const presentAtHeadSymbols = needs.symbols
|
|
282
|
-
? gitGrepPresence(repoRoot, [...new Set(candidates.flatMap((c) => c.refs.symbols))], 'HEAD')
|
|
283
|
-
: new Set();
|
|
254
|
+
/** The per-commit lookups of a ChurnGitView; each asks git once per commit and remembers the answer. */
|
|
255
|
+
function churnCommitLookups(repoRoot) {
|
|
284
256
|
const anchorCommitCache = new Map();
|
|
285
257
|
const resolveAnchorCommit = (anchorIso) => {
|
|
286
258
|
if (!anchorCommitCache.has(anchorIso)) {
|
|
@@ -299,7 +271,6 @@ function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
|
|
|
299
271
|
}
|
|
300
272
|
return known;
|
|
301
273
|
};
|
|
302
|
-
const headScripts = needs.scripts ? packageScriptsAt(repoRoot, 'HEAD') : null;
|
|
303
274
|
const scriptsAtCommit = new Map();
|
|
304
275
|
const scriptsAt = (hash) => {
|
|
305
276
|
if (!scriptsAtCommit.has(hash)) {
|
|
@@ -307,7 +278,29 @@ function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
|
|
|
307
278
|
}
|
|
308
279
|
return scriptsAtCommit.get(hash);
|
|
309
280
|
};
|
|
310
|
-
return {
|
|
281
|
+
return { resolveAnchorCommit, symbolsPresentAt, scriptsAt };
|
|
282
|
+
}
|
|
283
|
+
function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
|
|
284
|
+
const headFiles = gitLsFilesAtHead(repoRoot);
|
|
285
|
+
let windowLog = [];
|
|
286
|
+
if (needs.paths) {
|
|
287
|
+
const minAnchor = candidates.reduce((min, c) => {
|
|
288
|
+
const a = anchorOf(c.entry);
|
|
289
|
+
return min === '' || a < min ? a : min;
|
|
290
|
+
}, '');
|
|
291
|
+
windowLog = fetchChurnWindowLog(repoRoot, minAnchor);
|
|
292
|
+
}
|
|
293
|
+
const touchedInWindow = new Set();
|
|
294
|
+
for (const c of windowLog)
|
|
295
|
+
for (const f of c.files)
|
|
296
|
+
touchedInWindow.add(f.path);
|
|
297
|
+
const trackedIndex = buildTrackedIndex(new Set([...headFiles, ...touchedInWindow]));
|
|
298
|
+
const headIndex = buildTrackedIndex(headFiles);
|
|
299
|
+
const presentAtHeadSymbols = needs.symbols
|
|
300
|
+
? gitGrepPresence(repoRoot, [...new Set(candidates.flatMap((c) => c.refs.symbols))], 'HEAD')
|
|
301
|
+
: new Set();
|
|
302
|
+
const headScripts = needs.scripts ? packageScriptsAt(repoRoot, 'HEAD') : null;
|
|
303
|
+
return { repoRoot, projectName, windowLog, trackedIndex, headIndex, presentAtHeadSymbols, headScripts, ...churnCommitLookups(repoRoot) };
|
|
311
304
|
}
|
|
312
305
|
function pathEvidence(git, paths, anchorTime) {
|
|
313
306
|
for (const rawPath of paths) {
|
|
@@ -362,25 +355,31 @@ function churnEvidence(git, refs, anchor) {
|
|
|
362
355
|
}
|
|
363
356
|
function tagChurnStale(hippoRoot, tenantId, toTag, confirmedAt) {
|
|
364
357
|
// The git calls above can take seconds; a good outcome landing meanwhile moves the anchor past the evidence.
|
|
365
|
-
const confirmedNow =
|
|
358
|
+
const confirmedNow = confirmedOutcomeTimes(hippoRoot, tenantId);
|
|
366
359
|
const unconfirmed = toTag.filter((stale) => confirmedNow.get(stale.id) === confirmedAt.get(stale.id));
|
|
367
360
|
if (unconfirmed.length === 0)
|
|
368
361
|
return;
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
362
|
+
addTagToEntries(hippoRoot, tenantId, unconfirmed.map((stale) => stale.id), CHURN_STALE_TAG);
|
|
363
|
+
}
|
|
364
|
+
/** Counts every candidate's evidence into `result` and returns the rows still to tag, writing nothing. */
|
|
365
|
+
function recordChurnEvidence(git, candidates, anchorOf, result) {
|
|
366
|
+
const toTag = [];
|
|
367
|
+
for (const { entry, refs } of candidates) {
|
|
368
|
+
result.checked++;
|
|
369
|
+
const evidence = churnEvidence(git, refs, anchorOf(entry));
|
|
370
|
+
if (!evidence)
|
|
371
|
+
continue;
|
|
372
|
+
const headline = entry.content.replace(/\s+/g, ' ').slice(0, HEADLINE_CHARS);
|
|
373
|
+
if (entry.tags.includes(CHURN_STALE_TAG)) {
|
|
374
|
+
result.alreadyMarked++;
|
|
375
|
+
result.preview.push({ id: entry.id, headline, evidence, already: true });
|
|
376
|
+
continue;
|
|
379
377
|
}
|
|
378
|
+
result.marked++;
|
|
379
|
+
result.preview.push({ id: entry.id, headline, evidence, already: false });
|
|
380
|
+
toTag.push(entry);
|
|
380
381
|
}
|
|
381
|
-
|
|
382
|
-
closeHippoDb(db);
|
|
383
|
-
}
|
|
382
|
+
return toTag;
|
|
384
383
|
}
|
|
385
384
|
/** Flags memories whose named file/symbol/script changed or disappeared since storage (or last confirmation); only adds/removes CHURN_STALE_TAG, never confidence/half-life/strength. */
|
|
386
385
|
export function detectChurnStale(hippoRoot, repoRoot, opts) {
|
|
@@ -391,7 +390,7 @@ export function detectChurnStale(hippoRoot, repoRoot, opts) {
|
|
|
391
390
|
const { candidates, skippedPinned } = collectChurnCandidates(entries, opts);
|
|
392
391
|
if (candidates.length === 0)
|
|
393
392
|
return emptyChurnResult(dryRun, skippedPinned);
|
|
394
|
-
const confirmedAt =
|
|
393
|
+
const confirmedAt = confirmedOutcomeTimes(hippoRoot, opts.tenantId);
|
|
395
394
|
// Compared as epoch ms, not strings: imported rows may carry offsets or other ISO forms.
|
|
396
395
|
const anchorOf = (entry) => {
|
|
397
396
|
const confirmed = confirmedAt.get(entry.id);
|
|
@@ -412,22 +411,7 @@ export function detectChurnStale(hippoRoot, repoRoot, opts) {
|
|
|
412
411
|
// Collected here, written only after every candidate's evidence is
|
|
413
412
|
// computed: a GitReadError thrown mid-loop must never leave an earlier
|
|
414
413
|
// candidate tagged while a later one aborts the run untagged.
|
|
415
|
-
const toTag =
|
|
416
|
-
for (const { entry, refs } of candidates) {
|
|
417
|
-
result.checked++;
|
|
418
|
-
const evidence = churnEvidence(git, refs, anchorOf(entry));
|
|
419
|
-
if (!evidence)
|
|
420
|
-
continue;
|
|
421
|
-
const headline = entry.content.replace(/\s+/g, ' ').slice(0, 60);
|
|
422
|
-
if (entry.tags.includes(CHURN_STALE_TAG)) {
|
|
423
|
-
result.alreadyMarked++;
|
|
424
|
-
result.preview.push({ id: entry.id, headline, evidence, already: true });
|
|
425
|
-
continue;
|
|
426
|
-
}
|
|
427
|
-
result.marked++;
|
|
428
|
-
result.preview.push({ id: entry.id, headline, evidence, already: false });
|
|
429
|
-
toTag.push(entry);
|
|
430
|
-
}
|
|
414
|
+
const toTag = recordChurnEvidence(git, candidates, anchorOf, result);
|
|
431
415
|
if (!dryRun && toTag.length > 0)
|
|
432
416
|
tagChurnStale(hippoRoot, opts.tenantId, toTag, confirmedAt);
|
|
433
417
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ToolCall } from './protocol.js';
|
|
2
|
-
export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string
|
|
2
|
+
export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
|
|
3
3
|
export declare function runStatusTool({ hippoRoot, config, tenantId }: ToolCall): string;
|
|
4
4
|
export declare function runConflictsTool(call: ToolCall): string;
|
|
5
5
|
export declare function runResolveTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
|
package/dist/mcp/admin-tools.js
CHANGED
|
@@ -1,36 +1,28 @@
|
|
|
1
1
|
// Store health and admin tool handlers: base rates, status, conflicts, resolve, share and peers.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { canTouchScope, passesScopeFilterForRecall, personalScopeOf } from '../recall-scope.js';
|
|
12
|
-
import { selectEntriesByIds } from '../store/entry-reads.js';
|
|
13
|
-
import { selectMemoryReach } from '../store/tenant-lookup.js';
|
|
2
|
+
import { evalNow } from '../core/ablation.js';
|
|
3
|
+
import { loadStrengthTallies } from '../store/candidates.js';
|
|
4
|
+
import { countOpenConflicts, listTouchableConflicts, resolveConflict } from '../store/conflicts.js';
|
|
5
|
+
import { shareMemory, listPeers } from '../sharing/shared.js';
|
|
6
|
+
import { requireGroup, storeFor } from '../store/index.js';
|
|
7
|
+
import { NotFoundError } from '../core/api-errors.js';
|
|
8
|
+
import { classifyOriginProject } from '../core/project-identity.js';
|
|
9
|
+
import { canTouchScope, passesScopeFilterForRecall, personalScopeOf } from '../store/recall-scope.js';
|
|
10
|
+
import { chunked, loadEntriesByIds, readEntry } from '../store/entry-reads.js';
|
|
14
11
|
import { mcpActor } from './protocol.js';
|
|
15
|
-
import { isJsonString } from '../json.js';
|
|
12
|
+
import { isJsonString } from '../util/json.js';
|
|
13
|
+
import { DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
14
|
+
const BASERATE_DECIMALS = 3;
|
|
16
15
|
const NOT_RESOLVED = 'Could not resolve. Check the conflict ID and --keep value.';
|
|
17
16
|
/** The scope of memory `id`, null when it has none or does not exist. */
|
|
18
17
|
function memoryScope(hippoRoot, id) {
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
return selectMemoryReach(db, id)?.scope ?? null;
|
|
22
|
-
}
|
|
23
|
-
finally {
|
|
24
|
-
closeHippoDb(db);
|
|
25
|
-
}
|
|
18
|
+
return readEntry(hippoRoot, id)?.scope ?? null;
|
|
26
19
|
}
|
|
27
|
-
export function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
|
|
28
|
-
// Text-only reply, matching the other MCP tools; the
|
|
29
|
-
// and emits the audit, so call sites cannot drift.
|
|
20
|
+
export async function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
|
|
21
|
+
// Text-only reply, matching the other MCP tools; the group's read writes the audit row, so no surface can skip it.
|
|
30
22
|
const classTag = String(args.class_tag || '').trim();
|
|
31
23
|
if (!classTag)
|
|
32
24
|
return 'No class_tag provided. Usage: pass class_tag matching a class used in past predictions (e.g. "migration-effort").';
|
|
33
|
-
const baserate =
|
|
25
|
+
const baserate = await requireGroup(storeFor({ hippoRoot, store: ctx?.store }), 'predictions').predictionBaserate(tenantId, classTag, ctx?.actor ?? 'mcp');
|
|
34
26
|
if (baserate.nClosed === 0) {
|
|
35
27
|
return `No closed predictions in class "${classTag}" yet. Create one via hippo_predict (or 'hippo predict ...' CLI) and close it with hippo_predict_close once the actual outcome is known. Base rates need closed predictions with numeric actual_value to compute.`;
|
|
36
28
|
}
|
|
@@ -38,37 +30,26 @@ export function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
|
|
|
38
30
|
lines.push(`n_closed: ${baserate.nClosed}`);
|
|
39
31
|
lines.push(`n_ratio_eligible: ${baserate.nRatioEligible}`);
|
|
40
32
|
if (baserate.meanEstimate !== null)
|
|
41
|
-
lines.push(`mean_estimate: ${baserate.meanEstimate.toFixed(
|
|
33
|
+
lines.push(`mean_estimate: ${baserate.meanEstimate.toFixed(BASERATE_DECIMALS)}`);
|
|
42
34
|
if (baserate.meanActual !== null)
|
|
43
|
-
lines.push(`mean_actual: ${baserate.meanActual.toFixed(
|
|
35
|
+
lines.push(`mean_actual: ${baserate.meanActual.toFixed(BASERATE_DECIMALS)}`);
|
|
44
36
|
if (baserate.meanRatio !== null)
|
|
45
|
-
lines.push(`mean_ratio: ${baserate.meanRatio.toFixed(
|
|
37
|
+
lines.push(`mean_ratio: ${baserate.meanRatio.toFixed(BASERATE_DECIMALS)}x`);
|
|
46
38
|
if (baserate.p50Ratio !== null)
|
|
47
|
-
lines.push(`p50_ratio: ${baserate.p50Ratio.toFixed(
|
|
39
|
+
lines.push(`p50_ratio: ${baserate.p50Ratio.toFixed(BASERATE_DECIMALS)}x`);
|
|
48
40
|
if (baserate.mae !== null)
|
|
49
|
-
lines.push(`mae: ${baserate.mae.toFixed(
|
|
41
|
+
lines.push(`mae: ${baserate.mae.toFixed(BASERATE_DECIMALS)}`);
|
|
50
42
|
return lines.join('\n');
|
|
51
43
|
}
|
|
52
44
|
export function runStatusTool({ hippoRoot, config, tenantId }) {
|
|
53
|
-
//
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
let totalStrength = 0;
|
|
58
|
-
for (const e of entries) {
|
|
59
|
-
const s = calculateStrength(e, now);
|
|
60
|
-
totalStrength += s;
|
|
61
|
-
if (s < 0.1 && !e.pinned)
|
|
62
|
-
atRisk++;
|
|
63
|
-
}
|
|
64
|
-
const avgStrength = entries.length > 0 ? (totalStrength / entries.length).toFixed(2) : '0';
|
|
65
|
-
const pinned = entries.filter((e) => e.pinned).length;
|
|
66
|
-
const errors = entries.filter((e) => e.tags.includes('error')).length;
|
|
67
|
-
const conflicts = listMemoryConflicts(hippoRoot, 'open', tenantId).length;
|
|
45
|
+
// honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
46
|
+
const tallies = loadStrengthTallies(hippoRoot, tenantId, evalNow(), 0.1);
|
|
47
|
+
const avgStrength = tallies.total > 0 ? (tallies.strengthSum / tallies.total).toFixed(2) : '0';
|
|
48
|
+
const conflicts = countOpenConflicts(hippoRoot, tenantId);
|
|
68
49
|
return [
|
|
69
|
-
`Memories: ${
|
|
50
|
+
`Memories: ${tallies.total} (${tallies.pinned} pinned, ${tallies.errors} errors)`,
|
|
70
51
|
`Avg strength: ${avgStrength}`,
|
|
71
|
-
`At risk (<0.1): ${atRisk}`,
|
|
52
|
+
`At risk (<0.1): ${tallies.atRisk}`,
|
|
72
53
|
`Open conflicts: ${conflicts}`,
|
|
73
54
|
`Half-life default: ${config.defaultHalfLifeDays}d`,
|
|
74
55
|
].join('\n');
|
|
@@ -76,19 +57,15 @@ export function runStatusTool({ hippoRoot, config, tenantId }) {
|
|
|
76
57
|
/** Pairs whose two rows the caller could recall: its repo or user-global, and no scope it was not asked for. */
|
|
77
58
|
function recallablePairs(call, conflicts, project) {
|
|
78
59
|
const own = personalScopeOf(mcpActor(call.ctx));
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
finally {
|
|
90
|
-
closeHippoDb(db);
|
|
91
|
-
}
|
|
60
|
+
const ids = [...new Set(conflicts.flatMap((c) => [c.memory_a_id, c.memory_b_id]))];
|
|
61
|
+
// loadEntriesByIds reads at most one chunk of ids per call.
|
|
62
|
+
const rows = new Map(chunked(ids).flatMap((chunk) => loadEntriesByIds(call.hippoRoot, chunk, call.tenantId)).map((row) => [row.id, row]));
|
|
63
|
+
const shown = (id) => {
|
|
64
|
+
const row = rows.get(id);
|
|
65
|
+
return row !== undefined && classifyOriginProject(row.origin_project, project) !== 'cross-project'
|
|
66
|
+
&& passesScopeFilterForRecall(row.scope ?? null, undefined, own);
|
|
67
|
+
};
|
|
68
|
+
return conflicts.filter((c) => shown(c.memory_a_id) && shown(c.memory_b_id));
|
|
92
69
|
}
|
|
93
70
|
export function runConflictsTool(call) {
|
|
94
71
|
const { ctx, hippoRoot, tenantId } = call;
|
|
@@ -143,6 +120,6 @@ export function runPeersTool({ tenantId }) {
|
|
|
143
120
|
const peers = listPeers(undefined, tenantId);
|
|
144
121
|
if (peers.length === 0)
|
|
145
122
|
return 'No peers found.';
|
|
146
|
-
return peers.map((p) => `${p.project}: ${p.count} memories (latest: ${p.latest.slice(0,
|
|
123
|
+
return peers.map((p) => `${p.project}: ${p.count} memories (latest: ${p.latest.slice(0, DATE_PREFIX_CHARS)})`).join('\n');
|
|
147
124
|
}
|
|
148
125
|
//# sourceMappingURL=admin-tools.js.map
|
package/dist/mcp/format.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { SearchResult } from '../search
|
|
1
|
+
import type { SearchResult } from '../core/search-types.js';
|
|
2
2
|
import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
|
|
3
|
-
import type { ContextCost, ContinuityBlock, RecallResult, RecallResultItem } from '../api.js';
|
|
4
|
-
import { type SessionHandoff } from '../handoff.js';
|
|
5
|
-
import { detectAnchoring } from '../recall-history.js';
|
|
6
|
-
import { detectAvailabilityBias } from '../availability.js';
|
|
3
|
+
import type { ContextCost, ContinuityBlock, RecallResult, RecallResultItem } from '../api/index.js';
|
|
4
|
+
import { type SessionHandoff } from '../core/handoff.js';
|
|
5
|
+
import { detectAnchoring } from '../api/recall-history.js';
|
|
6
|
+
import { detectAvailabilityBias } from '../api/availability.js';
|
|
7
7
|
export declare function formatContinuityBlock(block: ContinuityBlock): string;
|
|
8
8
|
export declare function formatMemories(results: ReadonlyArray<Pick<SearchResult, 'entry'>>): string;
|
|
9
9
|
export interface RenderedRecall {
|