hippo-memory 1.70.0 → 1.72.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 +2 -2
- package/dist/agent-memories/apply.d.ts +0 -11
- package/dist/agent-memories/apply.js +6 -21
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +15 -6
- package/dist/agent-memories/codex.js +1 -1
- package/dist/agent-memories/copilot.d.ts +1 -3
- package/dist/agent-memories/copilot.js +1 -17
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/project-folds.d.ts +10 -0
- package/dist/agent-memories/project-folds.js +34 -0
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +18 -11
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +3 -23
- package/dist/api/audit.d.ts +33 -1
- package/dist/api/audit.js +48 -1
- package/dist/api/auth.d.ts +20 -26
- package/dist/api/auth.js +43 -29
- package/dist/api/auto-sleep.d.ts +5 -2
- package/dist/api/auto-sleep.js +9 -5
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +4 -18
- package/dist/api/cards.d.ts +42 -0
- package/dist/api/cards.js +52 -0
- package/dist/api/conflicts.d.ts +28 -0
- package/dist/api/conflicts.js +61 -0
- package/dist/api/context-render.js +4 -3
- package/dist/api/context-select.js +12 -15
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +38 -46
- package/dist/api/continuity.d.ts +47 -0
- package/dist/api/continuity.js +66 -0
- package/dist/{cli → api}/correction-latency.d.ts +2 -14
- package/dist/{cli → api}/correction-latency.js +2 -14
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +11 -28
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +6 -27
- package/dist/api/embeddings.d.ts +17 -0
- package/dist/api/embeddings.js +28 -0
- package/dist/api/error-reply.d.ts +8 -0
- package/dist/api/error-reply.js +21 -0
- package/dist/api/forget.d.ts +11 -26
- package/dist/api/forget.js +23 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +5 -9
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +6 -2
- package/dist/api/index.js +6 -2
- package/dist/api/instruction-detect.js +21 -6
- package/dist/api/learn.d.ts +4 -0
- package/dist/api/learn.js +53 -27
- package/dist/api/ledger-db.d.ts +2 -5
- package/dist/api/ledger-db.js +5 -35
- package/dist/api/memories.d.ts +23 -0
- package/dist/api/memories.js +46 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/outcome.js +1 -1
- package/dist/api/pilot-arm.d.ts +1 -11
- package/dist/api/pilot-arm.js +5 -45
- package/dist/api/predictions.d.ts +11 -0
- package/dist/api/predictions.js +24 -0
- package/dist/api/projects.d.ts +21 -0
- package/dist/api/projects.js +24 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +12 -20
- package/dist/api/prompt-hook.d.ts +19 -6
- package/dist/api/prompt-hook.js +54 -13
- package/dist/api/provenance-coverage.d.ts +14 -0
- package/dist/{cli → api}/provenance-coverage.js +2 -6
- package/dist/api/recall-cli.d.ts +58 -0
- package/dist/api/recall-cli.js +103 -0
- package/dist/api/recall-core.js +17 -9
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +21 -15
- package/dist/api/recall-request.js +1 -1
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +3 -34
- package/dist/api/recall.js +63 -89
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +20 -2
- package/dist/api/remember.js +16 -3
- package/dist/api/session-end.d.ts +22 -0
- package/dist/api/session-end.js +101 -0
- package/dist/api/sleep-run.d.ts +2 -4
- package/dist/api/sleep-run.js +28 -28
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/status.d.ts +24 -0
- package/dist/api/status.js +40 -0
- package/dist/api/store-init.d.ts +4 -0
- package/dist/api/store-init.js +9 -0
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +4 -11
- package/dist/api/types.d.ts +8 -29
- package/dist/api/types.js +10 -23
- package/dist/capture/caller-session.d.ts +0 -3
- package/dist/capture/caller-session.js +1 -12
- package/dist/capture/capture-error.d.ts +2 -2
- package/dist/capture/capture-error.js +23 -18
- package/dist/capture/codex-patch.js +3 -1
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +39 -114
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +26 -30
- package/dist/capture/compaction-items-caller.js +11 -20
- package/dist/capture/compaction-record.d.ts +7 -93
- package/dist/capture/compaction-record.js +34 -399
- package/dist/capture/compaction-spool.d.ts +5 -3
- package/dist/capture/compaction-spool.js +21 -7
- package/dist/capture/copilot-transcript.d.ts +2 -1
- package/dist/capture/copilot-transcript.js +2 -1
- package/dist/capture/extract.d.ts +5 -2
- package/dist/capture/extract.js +4 -3
- package/dist/capture/failure-caller.d.ts +1 -1
- package/dist/capture/failure-caller.js +21 -16
- package/dist/capture/failure-reading.d.ts +2 -1
- package/dist/capture/failure-reading.js +7 -9
- package/dist/capture/pre-compact-caller.js +5 -4
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +17 -10
- package/dist/capture/session-end-caller.js +2 -1
- package/dist/capture/session-worker.js +3 -4
- package/dist/capture/transcript.d.ts +4 -11
- package/dist/capture/transcript.js +10 -21
- package/dist/capture/working-state.d.ts +4 -2
- package/dist/capture/working-state.js +4 -2
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +1 -59
- package/dist/cli/audit-prune.js +2 -61
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +42 -43
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +61 -44
- package/dist/cli/briefs.d.ts +1 -4
- package/dist/cli/briefs.js +42 -301
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +63 -56
- package/dist/cli/client.d.ts +12 -27
- package/dist/cli/client.js +41 -44
- package/dist/cli/compact-resume-payload.js +4 -3
- package/dist/cli/context.d.ts +2 -3
- package/dist/cli/context.js +22 -18
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +81 -86
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +88 -116
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +55 -34
- package/dist/cli/decisions.d.ts +2 -4
- package/dist/cli/decisions.js +18 -309
- package/dist/cli/eval.d.ts +1 -1
- package/dist/cli/eval.js +27 -26
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +2 -3
- package/dist/cli/explain.js +25 -27
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +42 -15
- package/dist/cli/flags.d.ts +0 -288
- package/dist/cli/flags.js +3 -138
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/graph.d.ts +3 -0
- package/dist/cli/graph.js +83 -0
- package/dist/cli/hook-runtime.d.ts +12 -32
- package/dist/cli/hook-runtime.js +21 -64
- package/dist/cli/incidents.d.ts +3 -0
- package/dist/cli/incidents.js +112 -0
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +33 -30
- package/dist/cli/install-steps.d.ts +2 -1
- package/dist/cli/install-steps.js +13 -14
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +4 -1
- package/dist/cli/lenient-id.d.ts +2 -0
- package/dist/cli/lenient-id.js +13 -0
- package/dist/cli/maintenance.d.ts +5 -5
- package/dist/cli/maintenance.js +37 -43
- package/dist/cli/notes.d.ts +2 -0
- package/dist/cli/notes.js +41 -0
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/open-browser.d.ts +14 -0
- package/dist/cli/open-browser.js +26 -0
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +3 -4
- package/dist/cli/playbooks.js +131 -300
- package/dist/cli/predictions.d.ts +3 -0
- package/dist/cli/predictions.js +175 -0
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +3 -5
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +31 -25
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +67 -137
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +23 -50
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +134 -192
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +14 -19
- package/dist/cli/serve.js +23 -14
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +143 -214
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +35 -30
- package/dist/cli/shared.d.ts +7 -25
- package/dist/cli/shared.js +17 -60
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep-render.js +6 -3
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +17 -49
- package/dist/cli/status.d.ts +11 -14
- package/dist/cli/status.js +74 -120
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +87 -108
- package/dist/cli/usage.d.ts +0 -79
- package/dist/cli/usage.js +1 -689
- package/dist/cli/verb-row.d.ts +32 -0
- package/dist/cli/verb-row.js +6 -0
- package/dist/cli/verbs/health.d.ts +27 -0
- package/dist/cli/verbs/health.js +232 -0
- package/dist/cli/verbs/memory.d.ts +16 -0
- package/dist/cli/verbs/memory.js +244 -0
- package/dist/cli/verbs/objects.d.ts +20 -0
- package/dist/cli/verbs/objects.js +254 -0
- package/dist/cli/verbs/sessions.d.ts +31 -0
- package/dist/cli/verbs/sessions.js +312 -0
- package/dist/cli/verbs.d.ts +81 -0
- package/dist/cli/verbs.js +7 -0
- package/dist/cli/versioned-verbs.d.ts +51 -0
- package/dist/cli/versioned-verbs.js +79 -0
- package/dist/cli.d.ts +1 -654
- package/dist/cli.js +44 -510
- package/dist/connectors/dlq.d.ts +39 -3
- package/dist/connectors/dlq.js +37 -3
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +26 -52
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +34 -93
- package/dist/connectors/github/ingest.d.ts +4 -12
- package/dist/connectors/github/ingest.js +5 -36
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +3 -16
- package/dist/connectors/github/webhook.js +38 -23
- package/dist/connectors/ingest.d.ts +10 -0
- package/dist/connectors/ingest.js +28 -0
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +51 -90
- package/dist/connectors/slack/ingest.d.ts +4 -9
- package/dist/connectors/slack/ingest.js +4 -30
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +3 -19
- package/dist/connectors/slack/webhook.js +6 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +7 -15
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +29 -84
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +13 -52
- package/dist/consolidate/dedupe.js +18 -74
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +49 -40
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +18 -105
- package/dist/consolidate/merge.js +12 -33
- package/dist/consolidate/physics-pass.d.ts +6 -1
- package/dist/consolidate/physics-pass.js +27 -9
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +25 -56
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +13 -22
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +9 -25
- package/dist/core/ablation.d.ts +14 -91
- package/dist/core/ablation.js +16 -91
- package/dist/core/active-scope.d.ts +7 -0
- package/dist/{sharing/scope.js → core/active-scope.js} +5 -12
- package/dist/core/ambient.d.ts +5 -8
- package/dist/core/ambient.js +40 -26
- package/dist/core/api-errors.d.ts +16 -0
- package/dist/core/api-errors.js +20 -0
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +11 -1
- package/dist/core/compaction-timing.d.ts +7 -0
- package/dist/core/compaction-timing.js +9 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +20 -16
- package/dist/core/cosine.d.ts +3 -0
- package/dist/core/cosine.js +19 -0
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/markdown.d.ts +6 -0
- package/dist/{store → core}/markdown.js +23 -22
- package/dist/core/memory-audit.d.ts +17 -0
- package/dist/core/memory-audit.js +54 -0
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +51 -168
- package/dist/core/memory.js +76 -239
- package/dist/{consolidate → core}/merged-row.d.ts +1 -1
- package/dist/{consolidate → core}/merged-row.js +3 -2
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +65 -138
- package/dist/core/prediction.d.ts +3 -0
- package/dist/core/prediction.js +6 -0
- package/dist/core/project-identity.d.ts +20 -58
- package/dist/core/project-identity.js +27 -39
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/recall-scope.d.ts +69 -0
- package/dist/core/recall-scope.js +138 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +3 -8
- package/dist/db/busy.js +37 -33
- package/dist/db/connect.js +7 -8
- package/dist/db/index.d.ts +3 -3
- package/dist/db/index.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v55.d.ts +3 -0
- package/dist/db/migrations/v55.js +17 -0
- package/dist/db/open.d.ts +2 -2
- package/dist/db/open.js +21 -9
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +28 -39
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -2
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +25 -5
- package/dist/db/wal-checkpointer.js +2 -1
- package/dist/doctor.js +85 -27
- package/dist/embeddings/local.d.ts +62 -0
- package/dist/embeddings/local.js +146 -0
- package/dist/embeddings/provider.d.ts +43 -0
- package/dist/{store/embeddings → embeddings}/provider.js +58 -83
- package/dist/embeddings/transformers.d.ts +26 -0
- package/dist/embeddings/transformers.js +89 -0
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +3 -2
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +91 -45
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +8 -35
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +30 -15
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +10 -36
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +15 -77
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +24 -44
- package/dist/graph/write.d.ts +1 -1
- package/dist/graph/write.js +9 -9
- package/dist/hooks/codex-session.js +3 -2
- package/dist/hooks/codex-wrapper.js +4 -3
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +22 -59
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +17 -81
- package/dist/hooks/shared.d.ts +6 -21
- package/dist/hooks/shared.js +31 -33
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +10 -28
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +12 -39
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +31 -85
- package/dist/index.d.ts +8 -3
- package/dist/index.js +8 -3
- package/dist/learn/autolearn.d.ts +23 -42
- package/dist/learn/autolearn.js +45 -52
- package/dist/learn/churn-git.js +13 -4
- package/dist/learn/extract.d.ts +3 -2
- package/dist/learn/extract.js +8 -8
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +18 -68
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +18 -31
- package/dist/mcp/admin-tools.d.ts +2 -2
- package/dist/mcp/admin-tools.js +30 -53
- package/dist/mcp/format.js +3 -2
- package/dist/mcp/framing.d.ts +1 -0
- package/dist/mcp/framing.js +1 -1
- package/dist/mcp/memory-tools.js +7 -10
- package/dist/mcp/protocol.d.ts +15 -29
- package/dist/mcp/protocol.js +26 -16
- package/dist/mcp/recall-tools.js +14 -11
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +12 -27
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +68 -16
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +47 -22
- package/dist/objects/customer-notes.d.ts +9 -44
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +14 -52
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/descriptor.d.ts +1 -1
- package/dist/objects/incidents.d.ts +9 -40
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/lifecycle.d.ts +1 -1
- package/dist/objects/lifecycle.js +2 -1
- package/dist/objects/policies.d.ts +13 -91
- package/dist/objects/policies.js +13 -99
- package/dist/objects/processes.d.ts +9 -54
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +13 -57
- package/dist/objects/project-briefs.js +16 -78
- package/dist/objects/skills.d.ts +9 -44
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +7 -20
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +6 -37
- package/dist/rerankers/cross-encoder.d.ts +31 -2
- package/dist/rerankers/cross-encoder.js +65 -101
- package/dist/rerankers/index.js +5 -4
- package/dist/rerankers/jev.js +11 -10
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +5 -2
- package/dist/rerankers/outage-warning.js +7 -4
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/bm25-search.js +1 -1
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +3 -3
- package/dist/search/embed-memories.d.ts +9 -0
- package/dist/search/embed-memories.js +377 -0
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +93 -0
- package/dist/search/hybrid.d.ts +11 -2
- package/dist/search/hybrid.js +9 -4
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.d.ts +6 -3
- package/dist/search/physics-search.js +29 -19
- package/dist/search/rerank.js +1 -1
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +13 -4
- package/dist/search/vector.js +40 -13
- package/dist/server/auth.d.ts +11 -28
- package/dist/server/auth.js +49 -32
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +69 -161
- package/dist/server/client-ip.d.ts +3 -21
- package/dist/server/client-ip.js +8 -30
- package/dist/server/deadline.d.ts +0 -2
- package/dist/server/deadline.js +1 -7
- package/dist/server/defaults.d.ts +4 -0
- package/dist/server/defaults.js +5 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +24 -53
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +16 -19
- package/dist/server/route-checks.d.ts +7 -0
- package/dist/server/route-checks.js +42 -0
- package/dist/server/route-table.d.ts +9 -8
- package/dist/server/route-table.js +127 -139
- package/dist/server/routes/admin.d.ts +8 -8
- package/dist/server/routes/admin.js +35 -49
- package/dist/server/routes/customer-notes.d.ts +6 -6
- package/dist/server/routes/customer-notes.js +8 -14
- package/dist/server/routes/decisions.d.ts +6 -6
- package/dist/server/routes/decisions.js +12 -21
- package/dist/server/routes/incidents.d.ts +6 -6
- package/dist/server/routes/incidents.js +14 -25
- package/dist/server/routes/memories.d.ts +9 -9
- package/dist/server/routes/memories.js +20 -63
- package/dist/server/routes/object-routes.d.ts +6 -11
- package/dist/server/routes/object-routes.js +11 -22
- package/dist/server/routes/policies.d.ts +7 -7
- package/dist/server/routes/policies.js +12 -22
- package/dist/server/routes/predictions.d.ts +6 -6
- package/dist/server/routes/predictions.js +22 -38
- package/dist/server/routes/processes.d.ts +6 -6
- package/dist/server/routes/processes.js +17 -28
- package/dist/server/routes/project-briefs.d.ts +7 -7
- package/dist/server/routes/project-briefs.js +11 -20
- package/dist/server/routes/recall.d.ts +5 -5
- package/dist/server/routes/recall.js +16 -45
- package/dist/server/routes/skills.d.ts +7 -7
- package/dist/server/routes/skills.js +10 -22
- package/dist/server/server-detect.d.ts +15 -53
- package/dist/server/server-detect.js +55 -96
- package/dist/server/sleep-child.js +26 -7
- package/dist/server/sleep-offload.d.ts +11 -5
- package/dist/server/sleep-offload.js +21 -12
- package/dist/server/types.d.ts +32 -18
- package/dist/server/validation.d.ts +3 -2
- package/dist/server/validation.js +15 -33
- package/dist/server.d.ts +7 -6
- package/dist/server.js +8 -6
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +73 -0
- package/dist/sharing/project-merge.d.ts +11 -19
- package/dist/sharing/project-merge.js +63 -125
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +40 -0
- package/dist/sharing/share.js +229 -0
- package/dist/store/ambient.js +9 -15
- package/dist/store/audit-event.d.ts +5 -13
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -21
- package/dist/store/audit.js +8 -67
- package/dist/store/auth.d.ts +10 -8
- package/dist/store/auth.js +17 -12
- package/dist/store/candidates.d.ts +23 -5
- package/dist/store/candidates.js +119 -71
- package/dist/store/capture-write.d.ts +17 -0
- package/dist/store/capture-write.js +35 -0
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/compaction-caller.d.ts +18 -0
- package/dist/store/compaction-caller.js +29 -0
- package/dist/store/compactions-record.d.ts +115 -0
- package/dist/store/compactions-record.js +417 -0
- package/dist/store/compactions.js +6 -4
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +76 -152
- package/dist/store/connectors/dlq.d.ts +10 -0
- package/dist/store/connectors/dlq.js +32 -0
- package/dist/store/connectors/github.d.ts +14 -16
- package/dist/store/connectors/github.js +34 -57
- package/dist/store/connectors/slack.d.ts +2 -11
- package/dist/store/connectors/slack.js +18 -47
- package/dist/store/dashboard-reads.js +11 -14
- package/dist/store/delete-and-batch.d.ts +17 -31
- package/dist/store/delete-and-batch.js +84 -67
- package/dist/store/delivery-recorder.d.ts +15 -4
- package/dist/store/delivery-recorder.js +34 -17
- package/dist/store/descendant-page.js +6 -3
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +8 -30
- package/dist/store/dormant.js +18 -57
- package/dist/store/embeddings/index.d.ts +11 -90
- package/dist/store/embeddings/index.js +18 -523
- package/dist/store/entry-reads.d.ts +34 -61
- package/dist/store/entry-reads.js +111 -136
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +12 -18
- package/dist/store/entry-writes.js +46 -44
- package/dist/store/failure-log-at.d.ts +8 -0
- package/dist/store/failure-log-at.js +16 -0
- package/dist/store/failure-log.d.ts +2 -2
- package/dist/store/failure-log.js +5 -3
- package/dist/{trust → store}/gated-write.d.ts +3 -1
- package/dist/{trust → store}/gated-write.js +7 -5
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +41 -178
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +24 -60
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +10 -35
- package/dist/store/graph-writes.js +59 -106
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +22 -40
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +36 -84
- package/dist/store/key-writes.js +1 -1
- package/dist/store/ledger-turn.d.ts +9 -0
- package/dist/store/ledger-turn.js +38 -0
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +24 -29
- package/dist/store/open.d.ts +0 -4
- package/dist/store/open.js +42 -62
- package/dist/store/pilot-arm.d.ts +12 -0
- package/dist/store/pilot-arm.js +42 -0
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +91 -82
- package/dist/store/port.js +8 -0
- package/dist/store/predictions.d.ts +12 -53
- package/dist/store/predictions.js +41 -125
- package/dist/store/project-tags.d.ts +62 -0
- package/dist/store/project-tags.js +67 -0
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/quarantine.js +2 -1
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-trace.d.ts +12 -77
- package/dist/store/recall-trace.js +37 -97
- package/dist/store/rejected-values.js +9 -20
- package/dist/store/rejection-probe.d.ts +4 -0
- package/dist/store/rejection-probe.js +19 -0
- package/dist/store/rejection.d.ts +10 -73
- package/dist/store/rejection.js +12 -84
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +14 -0
- package/dist/store/rule-sql.js +56 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +23 -54
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +21 -75
- package/dist/store/set-aside.d.ts +14 -0
- package/dist/store/set-aside.js +23 -0
- package/dist/store/sqlite/busy.d.ts +3 -0
- package/dist/store/sqlite/busy.js +8 -0
- package/dist/store/sqlite/connector-events-group.js +5 -8
- package/dist/store/sqlite/connector-writes-group.js +3 -3
- package/dist/store/sqlite/entry-writes-group.js +4 -4
- package/dist/store/sqlite/error-codec.js +8 -5
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +12 -5
- package/dist/store/sqlite/graph-reads-group.js +1 -1
- package/dist/store/sqlite/held-connection.d.ts +9 -0
- package/dist/store/sqlite/held-connection.js +41 -0
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.d.ts +1 -1
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.d.ts +1 -1
- package/dist/store/sqlite/objects-group.js +5 -3
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +16 -15
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +11 -63
- package/dist/store/summaries.js +37 -148
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -50
- package/dist/store/token-ledger.js +19 -85
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +171 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/support-bundle.js +9 -8
- package/dist/trust/reject-flow.js +3 -5
- package/dist/util/agent-homes.d.ts +15 -0
- package/dist/util/agent-homes.js +34 -0
- package/dist/util/anthropic-messages.d.ts +3 -0
- package/dist/util/anthropic-messages.js +35 -6
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/chunked.d.ts +3 -0
- package/dist/util/chunked.js +10 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/ellipsize.d.ts +3 -0
- package/dist/util/ellipsize.js +5 -0
- package/dist/util/env.d.ts +14 -6
- package/dist/util/env.js +15 -7
- package/dist/util/format.d.ts +3 -0
- package/dist/util/format.js +6 -0
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/hook-payload.d.ts +8 -0
- package/dist/util/hook-payload.js +37 -0
- package/dist/util/http-retry.d.ts +9 -1
- package/dist/util/http-retry.js +67 -8
- package/dist/util/http-util.d.ts +0 -8
- package/dist/util/http-util.js +10 -21
- package/dist/util/limits.d.ts +7 -0
- package/dist/util/limits.js +14 -0
- package/dist/util/log.d.ts +7 -2
- package/dist/util/log.js +34 -9
- package/dist/util/request-scope.d.ts +5 -2
- package/dist/util/request-scope.js +13 -7
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +19 -40
- package/dist/util/sqlite-blocked.d.ts +2 -0
- package/dist/util/sqlite-blocked.js +5 -0
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/stream-tee.d.ts +3 -0
- package/dist/util/stream-tee.js +35 -0
- package/dist/util/time.d.ts +4 -0
- package/dist/util/time.js +4 -0
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/dist/{store → util}/yaml.d.ts +1 -5
- package/dist/{store → util}/yaml.js +2 -6
- package/extensions/openclaw-plugin/index.ts +1 -1
- 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/cli/provenance-coverage.d.ts +0 -18
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/scope.d.ts +0 -14
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/embeddings/local.d.ts +0 -15
- package/dist/store/embeddings/local.js +0 -192
- package/dist/store/embeddings/provider.d.ts +0 -77
- package/dist/store/markdown.d.ts +0 -10
- package/dist/store/recall-scope.d.ts +0 -138
- package/dist/store/recall-scope.js +0 -216
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{store → core}/object-types.d.ts +0 -0
- /package/dist/{store → core}/object-types.js +0 -0
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.d.ts +0 -0
- /package/dist/{capture → util}/compaction-items.js +0 -0
package/dist/learn/autolearn.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
import { execSync, execFileSync, spawn } from 'child_process';
|
|
1
|
+
/** Auto-learn from errors and git history.
|
|
2
|
+
* Agents learn from failures without explicit hippo remember calls. */
|
|
3
|
+
import { execFileSync, spawn } from 'child_process';
|
|
6
4
|
import { createMemory, Layer, DEFAULT_HALF_LIFE_DAYS } from '../core/memory.js';
|
|
7
5
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
8
6
|
import { textOverlap } from '../util/tokenize.js';
|
|
@@ -11,7 +9,7 @@ import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
|
11
9
|
import { errorMessage, log } from '../util/log.js';
|
|
12
10
|
const AUTOLEARN_TEXT_CHARS = 500;
|
|
13
11
|
const AUTOLEARN_TAG_CHARS = 30;
|
|
14
|
-
/** A memory of a failed command, "Command '<cmd>' failed: <truncated stderr>";
|
|
12
|
+
/** A memory of a failed command, "Command '<cmd>' failed: <truncated stderr>"; `hippo watch` stores its text and tags through remember. */
|
|
15
13
|
export function captureError(exitCode, stderr, command, tenantId) {
|
|
16
14
|
// Truncate to first 500 chars to avoid storing megabytes of build logs
|
|
17
15
|
const clean = redactSecretsStrict(stderr);
|
|
@@ -35,10 +33,8 @@ export function captureError(exitCode, stderr, command, tenantId) {
|
|
|
35
33
|
baseHalfLifeDays: DEFAULT_HALF_LIFE_DAYS,
|
|
36
34
|
});
|
|
37
35
|
}
|
|
38
|
-
/**
|
|
39
|
-
*
|
|
40
|
-
* Looks for fix:, revert:, bug:, error:, hotfix: commit messages.
|
|
41
|
-
*/
|
|
36
|
+
/** Parse git log output for actionable lessons.
|
|
37
|
+
* Looks for fix:, revert:, bug:, error:, hotfix: commit messages. */
|
|
42
38
|
export function extractLessons(gitLog, customPatterns) {
|
|
43
39
|
const lessons = [];
|
|
44
40
|
const lines = gitLog.split('\n');
|
|
@@ -73,18 +69,8 @@ export function extractLessons(gitLog, customPatterns) {
|
|
|
73
69
|
// Deduplicate exact matches at extraction time
|
|
74
70
|
return [...new Set(lessons)];
|
|
75
71
|
}
|
|
76
|
-
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* `extractLessons` is a published API surface (exported from src/index.ts)
|
|
80
|
-
* and does one job: parse a git log into candidate lesson strings. Adding a
|
|
81
|
-
* quality check inside it would break that contract and silently change
|
|
82
|
-
* what external callers get back. So parsing and admission are separate
|
|
83
|
-
* steps: this function is the write-path gate, called by each caller that
|
|
84
|
-
* actually stores a lesson, not by the parser itself.
|
|
85
|
-
*
|
|
86
|
-
* Order is preserved in both output arrays; both hold lessons with secret shapes redacted.
|
|
87
|
-
*/
|
|
72
|
+
/** Split parsed lessons into ones worth storing and low-information ones; kept out of `extractLessons` so that published parser's output cannot change.
|
|
73
|
+
* Order is preserved in both arrays, and both hold lessons with secret shapes redacted. */
|
|
88
74
|
export function partitionLessons(lessons) {
|
|
89
75
|
const kept = [];
|
|
90
76
|
const dropped = [];
|
|
@@ -98,15 +84,8 @@ export function partitionLessons(lessons) {
|
|
|
98
84
|
}
|
|
99
85
|
return { kept, dropped };
|
|
100
86
|
}
|
|
101
|
-
/**
|
|
102
|
-
*
|
|
103
|
-
* Returns true if overlap > threshold (default 0.7).
|
|
104
|
-
*
|
|
105
|
-
* `tenantId` is opt-in. Only takes effect when the first argument is a
|
|
106
|
-
* root string (string-overload path). When the first argument is a
|
|
107
|
-
* pre-loaded MemoryEntry[], the caller has already scoped — tenantId is
|
|
108
|
-
* ignored on that path.
|
|
109
|
-
*/
|
|
87
|
+
/** Check if a substantially similar memory already exists: true if overlap > threshold (default 0.7).
|
|
88
|
+
* `tenantId` applies only on the root-string overload; a pre-loaded MemoryEntry[] is already scoped, so it is ignored there. */
|
|
110
89
|
export function deduplicateLesson(hippoRootOrEntries, lesson, threshold = 0.7, tenantId) {
|
|
111
90
|
const entries = Array.isArray(hippoRootOrEntries)
|
|
112
91
|
? hippoRootOrEntries
|
|
@@ -118,37 +97,53 @@ export function deduplicateLesson(hippoRootOrEntries, lesson, threshold = 0.7, t
|
|
|
118
97
|
}
|
|
119
98
|
return false;
|
|
120
99
|
}
|
|
121
|
-
/**
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
100
|
+
/** The most stderr `runWatched` returns; the terminal still gets all of it. */
|
|
101
|
+
const STDERR_TAIL_BYTES = 64 * 1024;
|
|
102
|
+
/** A transfer command that has not exited in this long is hung on a prompt or a dead remote. */
|
|
103
|
+
export const RUN_WATCHED_DEADLINE_MS = 30 * 60_000;
|
|
104
|
+
/** The command passed its deadline and was killed. */
|
|
105
|
+
export class RunWatchedTimeoutError extends Error {
|
|
106
|
+
deadlineMs;
|
|
107
|
+
stderr;
|
|
108
|
+
constructor(deadlineMs, stderr) {
|
|
109
|
+
super(`the command did not exit within ${deadlineMs} ms and was killed`);
|
|
110
|
+
this.deadlineMs = deadlineMs;
|
|
111
|
+
this.stderr = stderr;
|
|
112
|
+
this.name = 'RunWatchedTimeoutError';
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Run a command in a shell, streaming stderr live; never pass text the caller did not write.
|
|
116
|
+
* Returns: { exitCode, stderr } with only the last 64 KiB of stderr; rejects with RunWatchedTimeoutError past `deadlineMs`. */
|
|
117
|
+
export function runWatched(command, deadlineMs = RUN_WATCHED_DEADLINE_MS) {
|
|
118
|
+
return new Promise((resolve, reject) => {
|
|
127
119
|
// Use shell: true so the command string is handled by the shell as-is
|
|
128
120
|
const child = spawn(command, { shell: true, stdio: ['inherit', 'inherit', 'pipe'], windowsHide: true });
|
|
129
|
-
|
|
121
|
+
let tail = Buffer.alloc(0);
|
|
130
122
|
child.stderr.on('data', (chunk) => {
|
|
131
|
-
|
|
132
|
-
|
|
123
|
+
tail = Buffer.concat([tail, chunk]);
|
|
124
|
+
if (tail.length > STDERR_TAIL_BYTES)
|
|
125
|
+
tail = tail.subarray(tail.length - STDERR_TAIL_BYTES);
|
|
133
126
|
process.stderr.write(chunk);
|
|
134
127
|
});
|
|
128
|
+
// SHORTCUT: kills the shell only; on Windows a grandchild can outlive it. A process-tree kill is the upgrade path.
|
|
129
|
+
const timer = setTimeout(() => {
|
|
130
|
+
child.kill('SIGKILL');
|
|
131
|
+
reject(new RunWatchedTimeoutError(deadlineMs, tail.toString('utf8')));
|
|
132
|
+
}, deadlineMs);
|
|
135
133
|
child.on('close', (code) => {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
stderr: Buffer.concat(stderrChunks).toString('utf8'),
|
|
139
|
-
});
|
|
134
|
+
clearTimeout(timer);
|
|
135
|
+
resolve({ exitCode: code ?? 1, stderr: tail.toString('utf8') });
|
|
140
136
|
});
|
|
141
137
|
child.on('error', (err) => {
|
|
138
|
+
clearTimeout(timer);
|
|
142
139
|
resolve({ exitCode: 1, stderr: err.message });
|
|
143
140
|
});
|
|
144
141
|
});
|
|
145
142
|
}
|
|
146
|
-
/**
|
|
147
|
-
* Check whether a directory is a git work tree.
|
|
148
|
-
*/
|
|
143
|
+
/** Check whether a directory is a git work tree. */
|
|
149
144
|
export function isGitRepo(cwd) {
|
|
150
145
|
try {
|
|
151
|
-
const raw =
|
|
146
|
+
const raw = execFileSync('git', ['rev-parse', '--is-inside-work-tree'], {
|
|
152
147
|
encoding: 'utf8',
|
|
153
148
|
cwd,
|
|
154
149
|
timeout: 10000,
|
|
@@ -162,10 +157,8 @@ export function isGitRepo(cwd) {
|
|
|
162
157
|
return false;
|
|
163
158
|
}
|
|
164
159
|
}
|
|
165
|
-
/**
|
|
166
|
-
*
|
|
167
|
-
* days: how many days of history to include.
|
|
168
|
-
*/
|
|
160
|
+
/** Fetch recent git log lines (subject lines only).
|
|
161
|
+
* days: how many days of history to include. */
|
|
169
162
|
export function fetchGitLog(cwd, days) {
|
|
170
163
|
try {
|
|
171
164
|
const raw = execFileSync('git', [
|
package/dist/learn/churn-git.js
CHANGED
|
@@ -3,12 +3,13 @@ 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';
|
|
6
|
+
import { DAY_MS, MINUTE_MS } from '../util/time.js';
|
|
7
7
|
import { errorMessage } from '../util/log.js';
|
|
8
|
+
import { isJsonObject, isJsonString } from '../util/json.js';
|
|
8
9
|
// A `git log --name-status` dump can run to tens of MB; default 1MB pipe would truncate it.
|
|
9
10
|
const GIT_MAX_BUFFER = 64 * 1024 * 1024;
|
|
10
11
|
// 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.
|
|
11
|
-
const GIT_TIMEOUT_MS =
|
|
12
|
+
const GIT_TIMEOUT_MS = MINUTE_MS;
|
|
12
13
|
/** A real git failure (not git grep's expected exit-1-no-match). Callers abort the whole run on this. */
|
|
13
14
|
export class GitReadError extends Error {
|
|
14
15
|
}
|
|
@@ -93,9 +94,17 @@ export function packageScriptsAt(repoRoot, rev) {
|
|
|
93
94
|
return {};
|
|
94
95
|
const raw = runGit(['show', `${rev}:package.json`], repoRoot);
|
|
95
96
|
try {
|
|
96
|
-
// SAFETY: optional chaining makes a `null` or scalar package.json read as "no scripts".
|
|
97
97
|
const parsed = JSON.parse(raw);
|
|
98
|
-
|
|
98
|
+
const scripts = isJsonObject(parsed) ? parsed.scripts : undefined;
|
|
99
|
+
if (!isJsonObject(scripts))
|
|
100
|
+
return {};
|
|
101
|
+
const out = {};
|
|
102
|
+
for (const [name, command] of Object.entries(scripts)) {
|
|
103
|
+
if (!isJsonString(command))
|
|
104
|
+
return {};
|
|
105
|
+
out[name] = command;
|
|
106
|
+
}
|
|
107
|
+
return out;
|
|
99
108
|
}
|
|
100
109
|
catch (err) {
|
|
101
110
|
if (err instanceof SyntaxError)
|
package/dist/learn/extract.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MemoryEntry, EmotionalValence } from '../core/memory.js';
|
|
2
|
+
import { type AnthropicMessageFailure } from '../util/anthropic-messages.js';
|
|
2
3
|
export interface ExtractedFact {
|
|
3
4
|
content: string;
|
|
4
5
|
tags: string[];
|
|
@@ -8,8 +9,8 @@ export interface ExtractOptions {
|
|
|
8
9
|
apiKey: string;
|
|
9
10
|
model?: string;
|
|
10
11
|
fetcher?: typeof fetch;
|
|
11
|
-
/** Told why a call produced nothing, so callers can surface it instead of guessing. */
|
|
12
|
-
onError?: (msg: string) => void;
|
|
12
|
+
/** Told why a call produced nothing, so callers can surface it instead of guessing; `failure` is set when the API call itself failed. */
|
|
13
|
+
onError?: (msg: string, failure?: AnthropicMessageFailure) => void;
|
|
13
14
|
}
|
|
14
15
|
export declare function extractFacts(text: string, opts: ExtractOptions): Promise<ExtractedFact[]>;
|
|
15
16
|
export declare function storeExtractedFacts(hippoRoot: string, source: MemoryEntry, facts: ExtractedFact[]): MemoryEntry[];
|
package/dist/learn/extract.js
CHANGED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { Layer, createMemory } from '../core/memory.js';
|
|
2
2
|
import { writeEntry } from '../store/entry-writes.js';
|
|
3
3
|
import { loadConfig } from '../core/config.js';
|
|
4
|
-
import { RejectedValueError } from '../
|
|
4
|
+
import { RejectedValueError } from '../core/api-errors.js';
|
|
5
5
|
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
6
6
|
import { describeMessageFailure, sendAnthropicMessage } from '../util/anthropic-messages.js';
|
|
7
|
-
import { neverAutoShareTags } from '../sharing/
|
|
7
|
+
import { neverAutoShareTags } from '../sharing/share.js';
|
|
8
8
|
import { errorMessage, log } from '../util/log.js';
|
|
9
9
|
import { isJsonString } from '../util/json.js';
|
|
10
10
|
import { certainDefect } from '../core/memory-quality.js';
|
|
11
|
-
const EXTRACTION_PROMPT = `You are extracting factual statements from a conversation or memory entry.
|
|
11
|
+
const EXTRACTION_PROMPT = `You are extracting factual statements from a conversation or memory entry. ` +
|
|
12
|
+
`Extract 1-8 standalone factual statements that would be useful to remember later.
|
|
12
13
|
|
|
13
14
|
Rules:
|
|
14
15
|
- Each fact must be a complete, standalone sentence
|
|
15
16
|
- Include the speaker's name in every fact (e.g. "Alice prefers..." not "She prefers...")
|
|
16
17
|
- 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),
|
|
18
|
+
- Return a JSON array of objects with: content (string), tags (array of "speaker:X" and "topic:Y" strings), ` +
|
|
19
|
+
`valence ("neutral", "positive", "negative", or "critical")
|
|
18
20
|
- Return an empty array [] for small talk with no extractable facts
|
|
19
21
|
- Output ONLY the JSON array, no preamble or explanation
|
|
20
22
|
|
|
@@ -31,7 +33,7 @@ export async function extractFacts(text, opts) {
|
|
|
31
33
|
fetcher: opts.fetcher,
|
|
32
34
|
});
|
|
33
35
|
if (!reply.ok) {
|
|
34
|
-
opts.onError?.(describeMessageFailure(reply.failure));
|
|
36
|
+
opts.onError?.(describeMessageFailure(reply.failure), reply.failure);
|
|
35
37
|
return [];
|
|
36
38
|
}
|
|
37
39
|
try {
|
|
@@ -86,9 +88,7 @@ export function storeExtractedFacts(hippoRoot, source, facts) {
|
|
|
86
88
|
continue;
|
|
87
89
|
}
|
|
88
90
|
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.
|
|
91
|
+
// A refusal is per-VALUE: one rejected fact must not drop the rest of the batch; writeEntry already audited it (reject_refusal), so skip and count.
|
|
92
92
|
try {
|
|
93
93
|
writeEntry(hippoRoot, entry);
|
|
94
94
|
}
|
|
@@ -1,36 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* No DB. No state. No dependencies beyond stdlib regex + String.
|
|
5
|
-
*
|
|
6
|
-
* The detector's job is to decide whether a recall query carries a
|
|
7
|
-
* forward-prediction phrase ("will take ~3 days", "ship by Friday",
|
|
8
|
-
* "ETA in 2 weeks"). Calibration is intentionally HIGH-PRECISION /
|
|
9
|
-
* LOW-RECALL: better to fire on 20% of real forward-claims than 80% with
|
|
10
|
-
* 40% noise. Cry-wolf failure dominates planning-fallacy hint UX (Lovallo-
|
|
11
|
-
* Kahneman 2003 inside-vs-outside view).
|
|
12
|
-
*
|
|
13
|
-
* Iteration signal: the `recall_autodebias_hint_no_class_match` audit op
|
|
14
|
-
* (emitted by recall when a phrase matches but no class
|
|
15
|
-
* resolves) is the telemetry channel for deciding whether to add an
|
|
16
|
-
* embedding-based detector.
|
|
17
|
-
*/
|
|
1
|
+
/** Forward-claim detector: a pure regex set plus token extraction deciding whether a recall query carries a forward-prediction phrase.
|
|
2
|
+
* Calibration is HIGH-PRECISION / LOW-RECALL, since cry-wolf noise dominates hint UX; `recall_autodebias_hint_no_class_match` audits are the telemetry. */
|
|
18
3
|
export interface ForwardClaimMatch {
|
|
19
|
-
/** The regex match snippet
|
|
20
|
-
* to the calling agent in `PlanningFallacyHint.detectedPhrase` so they
|
|
21
|
-
* see WHY the hint appeared. */
|
|
4
|
+
/** The regex match snippet (e.g. "will take"), surfaced in `PlanningFallacyHint.detectedPhrase` so the agent sees WHY the hint appeared. */
|
|
22
5
|
phrase: string;
|
|
23
|
-
/** Lower-cased non-stop-word tokens (len >= 3,
|
|
24
|
-
* extracted from the FULL query, NOT just the match. Used by the
|
|
25
|
-
* orchestrator's class resolver to score overlap with class_tag tokens. */
|
|
6
|
+
/** Lower-cased non-stop-word tokens (len >= 3) from the FULL query, not just the match; the class resolver scores them against class_tag tokens. */
|
|
26
7
|
classQueryTokens: string[];
|
|
27
8
|
}
|
|
28
|
-
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* @returns first-match phrase + extracted class-resolution tokens when
|
|
32
|
-
* any pattern matches; null otherwise. Token extraction runs only on a
|
|
33
|
-
* match — non-forward queries pay zero work beyond the regex gate.
|
|
34
|
-
*/
|
|
9
|
+
/** Detect whether a recall query carries a forward-prediction phrase; returns the first-match phrase plus class-resolution tokens, else null.
|
|
10
|
+
* Token extraction runs only on a match, so non-forward queries pay nothing beyond the regex gate. */
|
|
35
11
|
export declare function detectForwardClaim(queryText: string): ForwardClaimMatch | null;
|
|
36
12
|
//# sourceMappingURL=forward-claim-detector.d.ts.map
|
|
@@ -1,91 +1,43 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
* The detector's job is to decide whether a recall query carries a
|
|
7
|
-
* forward-prediction phrase ("will take ~3 days", "ship by Friday",
|
|
8
|
-
* "ETA in 2 weeks"). Calibration is intentionally HIGH-PRECISION /
|
|
9
|
-
* LOW-RECALL: better to fire on 20% of real forward-claims than 80% with
|
|
10
|
-
* 40% noise. Cry-wolf failure dominates planning-fallacy hint UX (Lovallo-
|
|
11
|
-
* Kahneman 2003 inside-vs-outside view).
|
|
12
|
-
*
|
|
13
|
-
* Iteration signal: the `recall_autodebias_hint_no_class_match` audit op
|
|
14
|
-
* (emitted by recall when a phrase matches but no class
|
|
15
|
-
* resolves) is the telemetry channel for deciding whether to add an
|
|
16
|
-
* embedding-based detector.
|
|
17
|
-
*/
|
|
18
|
-
/**
|
|
19
|
-
* Each pattern is intentionally narrow:
|
|
20
|
-
* adding a pattern should require evidence from the
|
|
21
|
-
* `recall_autodebias_hint_no_class_match` audit channel that real forward-
|
|
22
|
-
* claims are slipping through, NOT speculative "this might match more".
|
|
23
|
-
*
|
|
24
|
-
* Word boundaries (`\b`) are mandatory: prevent `~5 days` inside
|
|
25
|
-
* `~5 days_ago` from matching, and prevent `ETA` substring matches inside
|
|
26
|
-
* a longer token (e.g. `BETAtesting`).
|
|
27
|
-
*/
|
|
28
|
-
// Reused fragment for ALL duration-suffix patterns. Requires a digit + unit
|
|
29
|
-
// so 'will take ownership' / 'ship in Docker' (no time component) don't
|
|
30
|
-
// match: verb-only patterns fire on everyday non-estimate queries that share a class-token.
|
|
31
|
-
// Accepts `<N> unit` (3 days), `a/an unit` (a week — implicit 1), and
|
|
32
|
-
// `one unit` so natural English forward-claims aren't lost.
|
|
1
|
+
/** Forward-claim detector: a pure regex set plus token extraction deciding whether a recall query carries a forward-prediction phrase.
|
|
2
|
+
* Calibration is HIGH-PRECISION / LOW-RECALL, since cry-wolf noise dominates hint UX; `recall_autodebias_hint_no_class_match` audits are the telemetry. */
|
|
3
|
+
/** Each pattern is deliberately narrow (add one only on audit evidence); word boundaries are mandatory so `ETA` never matches inside `BETAtesting`. */
|
|
4
|
+
// Shared duration suffix: needs a digit + unit (`<N> unit`, `a/an unit`, `one unit`) so 'will take ownership' and 'ship in Docker' do not match.
|
|
33
5
|
const DURATION_TAIL = String.raw `(?:about|around|~|≈)?\s*(?:\d+|a|an|one)\s*(?:day|week|month|hour|hr|min(?:ute)?|sec(?:ond)?)s?\b`;
|
|
34
6
|
const FORWARD_CLAIM_PATTERNS = [
|
|
35
|
-
// Verb + duration tail
|
|
36
|
-
// matched `who will take ownership of auth?` because there was no
|
|
37
|
-
// quantifier requirement. Now requires `<verb> take <N> <unit>`.
|
|
7
|
+
// Verb + duration tail: requires `<verb> take <N> <unit>`, because a bare `will take` matched `who will take ownership of auth?`.
|
|
38
8
|
new RegExp(String.raw `\b(?:will|should|gonna|going\s+to)\s+take\s+${DURATION_TAIL}`, 'i'),
|
|
39
|
-
// Ship + by/in + duration-or-day
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
new RegExp(String.raw `\bship(?:ping|s)?\s+(?:by|in)\s+(?:(?:about|around)\s+)?(?:next\s+)?(?:${DURATION_TAIL}|(?:monday|tuesday|wednesday|thursday|friday|saturday|sunday))\b`, 'i'),
|
|
9
|
+
// Ship + by/in + duration-or-day: a bare `ship in` matched `how does this ship in Docker?`, so a duration tail or literal day-of-week is required.
|
|
10
|
+
new RegExp(String.raw `\bship(?:ping|s)?\s+(?:by|in)\s+(?:(?:about|around)\s+)?(?:next\s+)?` +
|
|
11
|
+
String.raw `(?:${DURATION_TAIL}|(?:monday|tuesday|wednesday|thursday|friday|saturday|sunday))\b`, 'i'),
|
|
43
12
|
/\bestimate(?:d)?\s+(?:at\s+)?(?:~|≈|about|around)?\s*\d+/i,
|
|
44
13
|
/\b(?:by|in|within)\s+(?:about|around|~)?\s*\d+\s*(?:day|week|month|hour)s?\b/i,
|
|
45
14
|
/\bETA\s*(?:is|:)?\s*\d+/i,
|
|
46
15
|
/\b(?:by|before)\s+next\s+(?:week|month|sprint|monday|tuesday|wednesday|thursday|friday|saturday|sunday)\b/i,
|
|
47
|
-
// Standalone tilde duration
|
|
48
|
-
//
|
|
49
|
-
// because \b before ~ requires a word char immediately preceding (~ is
|
|
50
|
-
// not a word character), so /\b~/ would only match in 'foo~3 days'
|
|
51
|
-
// (malformed) and silently miss the legitimate cases.
|
|
16
|
+
// Standalone tilde duration ('~3 days for migration'): the lookbehind asserts start-of-string or whitespace because `\b` before `~` needs a word char
|
|
17
|
+
// and /\b~/ would only match 'foo~3 days', silently missing the real cases.
|
|
52
18
|
/(?<=^|\s)~\s*\d+\s*(?:day|week|month|hour)s?\b/i,
|
|
53
19
|
// Should + verb + duration tail. Same tightening as the leading 'will
|
|
54
20
|
// take' rule: 'should ship by EOD' must include a quantifier.
|
|
55
|
-
new RegExp(String.raw `\bshould\s+(?:be|ship|finish|complete|land)\s+(?:by|in|within)\s+(?:(?:about|around)\s+)?(?:next\s+)
|
|
21
|
+
new RegExp(String.raw `\bshould\s+(?:be|ship|finish|complete|land)\s+(?:by|in|within)\s+(?:(?:about|around)\s+)?(?:next\s+)?` +
|
|
22
|
+
String.raw `(?:${DURATION_TAIL}|(?:monday|tuesday|wednesday|thursday|friday|saturday|sunday))\b`, 'i'),
|
|
56
23
|
];
|
|
57
|
-
/**
|
|
58
|
-
* Pronouns + function words + modal verbs the regex set already gates on.
|
|
59
|
-
* Dropped before class-resolution so the overlap signal comes from
|
|
60
|
-
* domain tokens ("migration", "auth", "refactor") rather than connectives.
|
|
61
|
-
*/
|
|
24
|
+
/** Pronouns, function words and modal verbs the regex set already gates on; dropped before class resolution so overlap comes from domain tokens. */
|
|
62
25
|
const STOP_WORDS = new Set([
|
|
63
26
|
'the', 'a', 'an', 'and', 'or', 'but', 'for', 'to', 'in', 'on', 'at', 'of',
|
|
64
27
|
'by', 'with', 'my', 'your', 'our', 'their', 'its', 'it', 'this', 'that',
|
|
65
28
|
'these', 'those', 'will', 'should', 'can', 'i', 'we', 'they', 'he', 'she',
|
|
66
29
|
'is', 'be', 'was', 'are', 'were', 'has', 'have', 'had', 'do', 'does', 'did',
|
|
67
30
|
'from', 'as', 'so', 'than', 'then',
|
|
68
|
-
// Verbs
|
|
69
|
-
// signal for the regex gate but NOT signal for class resolution (you
|
|
70
|
-
// wouldn't name a prediction class "take" or "ship"). Listing here so
|
|
71
|
-
// they don't pollute the classQueryTokens overlap score.
|
|
31
|
+
// Verbs inside FORWARD_CLAIM_PATTERNS gate the regex but are no signal for class resolution; listing them keeps them out of the classQueryTokens overlap.
|
|
72
32
|
'take', 'taken', 'takes', 'ship', 'ships', 'finish', 'complete', 'land',
|
|
73
33
|
'eta', 'estimate', 'estimated', 'next', 'about', 'around',
|
|
74
|
-
//
|
|
75
|
-
// regex set REQUIRES a `<N> <unit>` quantifier after the verb). Letting
|
|
76
|
-
// them through to class resolution lets a class tag containing 'days'
|
|
77
|
-
// win or tie on the unit token instead of the domain token.
|
|
34
|
+
// Every forward-claim phrase contains a duration unit by design; letting it through would let a class tag containing 'days' win or tie on the unit.
|
|
78
35
|
'day', 'days', 'week', 'weeks', 'month', 'months',
|
|
79
36
|
'hour', 'hours', 'hr', 'hrs',
|
|
80
37
|
'min', 'mins', 'minute', 'minutes', 'sec', 'secs', 'second', 'seconds',
|
|
81
38
|
]);
|
|
82
|
-
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* @returns first-match phrase + extracted class-resolution tokens when
|
|
86
|
-
* any pattern matches; null otherwise. Token extraction runs only on a
|
|
87
|
-
* match — non-forward queries pay zero work beyond the regex gate.
|
|
88
|
-
*/
|
|
39
|
+
/** Detect whether a recall query carries a forward-prediction phrase; returns the first-match phrase plus class-resolution tokens, else null.
|
|
40
|
+
* Token extraction runs only on a match, so non-forward queries pay nothing beyond the regex gate. */
|
|
89
41
|
export function detectForwardClaim(queryText) {
|
|
90
42
|
if (!queryText)
|
|
91
43
|
return null;
|
|
@@ -103,9 +55,7 @@ function extractClassQueryTokens(queryText) {
|
|
|
103
55
|
.toLowerCase()
|
|
104
56
|
// Strip everything that's not alphanum or whitespace or hyphen / underscore.
|
|
105
57
|
.replace(/[^a-z0-9\s_-]/g, ' ')
|
|
106
|
-
// Split on whitespace
|
|
107
|
-
// produces ['migration', 'effort'] — matching the class-tag split
|
|
108
|
-
// pattern in resolveClassFromTokens (split on /[-_\s]+/).
|
|
58
|
+
// Split on whitespace, hyphen and underscore so `migration-effort` yields ['migration', 'effort'], matching the class-tag split in resolveClassFromTokens.
|
|
109
59
|
.split(/[\s_-]+/)
|
|
110
60
|
.filter((t) => t.length >= 3 && !STOP_WORDS.has(t) && !/^\d+$/.test(t));
|
|
111
61
|
}
|
|
@@ -20,24 +20,11 @@ export interface InvalidationOptions {
|
|
|
20
20
|
/** Consider ONLY this memory id (no content/tag matching). */
|
|
21
21
|
onlyId?: string;
|
|
22
22
|
}
|
|
23
|
-
/**
|
|
24
|
-
*
|
|
25
|
-
* Returns null if the commit isn't a breaking/migration change.
|
|
26
|
-
*/
|
|
23
|
+
/** Extract what was replaced/removed from a commit message.
|
|
24
|
+
* Returns null if the commit isn't a breaking/migration change. */
|
|
27
25
|
export declare function extractInvalidationTarget(message: string): InvalidationTarget | null;
|
|
28
|
-
/**
|
|
29
|
-
*
|
|
30
|
-
* - Halves half_life_days
|
|
31
|
-
* - Sets confidence to 'stale'
|
|
32
|
-
* - Adds 'invalidated' tag
|
|
33
|
-
* - Skips pinned memories (reported in skippedPinned)
|
|
34
|
-
*
|
|
35
|
-
* Tag matching is EXACT (2026-06-09 incident): the FULL pattern must equal a
|
|
36
|
-
* tag. Token-level matching applies to content only, so a pattern that merely
|
|
37
|
-
* CONTAINS a common tag word ("hippo") can no longer mass-weaken every memory
|
|
38
|
-
* carrying that tag. Both callers (the CLI `invalidate` command and the
|
|
39
|
-
* auto-learn-from-git path) inherit this contract.
|
|
40
|
-
*/
|
|
26
|
+
/** Find memories that reference the invalidated pattern and weaken them (halve half_life_days, confidence 'stale', add 'invalidated' tag; pinned are skipped).
|
|
27
|
+
* Tag matching is EXACT: the FULL pattern must equal a tag, so a pattern merely containing a common tag word cannot mass-weaken every memory with that tag. */
|
|
41
28
|
export declare function invalidateMatching(hippoRoot: string, target: InvalidationTarget, tenantId?: string, options?: InvalidationOptions): InvalidationResult;
|
|
42
29
|
/** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it current.
|
|
43
30
|
* 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. */
|
|
@@ -73,6 +60,7 @@ export interface ChurnStaleResult {
|
|
|
73
60
|
preview: ChurnStalePreviewRow[];
|
|
74
61
|
error?: string;
|
|
75
62
|
}
|
|
76
|
-
/** Flags memories whose named file/symbol/script changed or disappeared since storage (or last
|
|
63
|
+
/** Flags memories whose named file/symbol/script changed or disappeared since storage (or last
|
|
64
|
+
* confirmation); only adds/removes CHURN_STALE_TAG, never confidence/half-life/strength. */
|
|
77
65
|
export declare function detectChurnStale(hippoRoot: string, repoRoot: string, opts: DetectChurnStaleOptions): ChurnStaleResult;
|
|
78
66
|
//# sourceMappingURL=invalidation.d.ts.map
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { addTagToEntries,
|
|
1
|
+
import { addTagToEntries, writeEntriesTogether } from '../store/entry-writes.js';
|
|
2
2
|
import { confirmedOutcomeTimes } from '../store/audit.js';
|
|
3
|
-
import {
|
|
3
|
+
import { loadAllEntries, loadEntriesByIds, loadEntriesMentioning, readEntry } from '../store/entry-reads.js';
|
|
4
|
+
import { chunked } from '../util/chunked.js';
|
|
4
5
|
import { CHURN_STALE_TAG } from '../core/memory.js';
|
|
5
6
|
import { GitReadError, gitLsFilesAtHead, fetchChurnWindowLog, gitGrepPresence, resolveCommitBefore, packageScriptsAt, } from './churn-git.js';
|
|
6
7
|
const HEADLINE_CHARS = 60;
|
|
7
|
-
/**
|
|
8
|
-
*
|
|
9
|
-
* Returns null if the commit isn't a breaking/migration change.
|
|
10
|
-
*/
|
|
8
|
+
/** Extract what was replaced/removed from a commit message.
|
|
9
|
+
* Returns null if the commit isn't a breaking/migration change. */
|
|
11
10
|
export function extractInvalidationTarget(message) {
|
|
12
11
|
// Strip conventional commit prefix (e.g., "feat(scope): ")
|
|
13
12
|
const body = message.replace(/^[a-z]+(\([^)]*\))?:\s*/i, '').trim();
|
|
@@ -44,27 +43,16 @@ export function extractInvalidationTarget(message) {
|
|
|
44
43
|
}
|
|
45
44
|
return null;
|
|
46
45
|
}
|
|
47
|
-
/**
|
|
48
|
-
*
|
|
49
|
-
* - Halves half_life_days
|
|
50
|
-
* - Sets confidence to 'stale'
|
|
51
|
-
* - Adds 'invalidated' tag
|
|
52
|
-
* - Skips pinned memories (reported in skippedPinned)
|
|
53
|
-
*
|
|
54
|
-
* Tag matching is EXACT (2026-06-09 incident): the FULL pattern must equal a
|
|
55
|
-
* tag. Token-level matching applies to content only, so a pattern that merely
|
|
56
|
-
* CONTAINS a common tag word ("hippo") can no longer mass-weaken every memory
|
|
57
|
-
* carrying that tag. Both callers (the CLI `invalidate` command and the
|
|
58
|
-
* auto-learn-from-git path) inherit this contract.
|
|
59
|
-
*/
|
|
46
|
+
/** Find memories that reference the invalidated pattern and weaken them (halve half_life_days, confidence 'stale', add 'invalidated' tag; pinned are skipped).
|
|
47
|
+
* Tag matching is EXACT: the FULL pattern must equal a tag, so a pattern merely containing a common tag word cannot mass-weaken every memory with that tag. */
|
|
60
48
|
export function invalidateMatching(hippoRoot, target, tenantId, options) {
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const { result, weakened } = weakenMatches(
|
|
67
|
-
|
|
49
|
+
// tenantId opt-in: when set, only that tenant's memories are weakened; undefined is host-wide.
|
|
50
|
+
// The onlyId read is tenant-scoped too, so another tenant's id is invisible here.
|
|
51
|
+
const entries = options?.onlyId === undefined
|
|
52
|
+
? loadEntriesMentioning(hippoRoot, invalidationTokenize(target.from), target.from.toLowerCase().trim(), tenantId)
|
|
53
|
+
: [readEntry(hippoRoot, options.onlyId, tenantId)].filter((entry) => entry !== null);
|
|
54
|
+
const { result, weakened } = weakenMatches(entries, target, options);
|
|
55
|
+
writeEntriesTogether(hippoRoot, weakened);
|
|
68
56
|
return result;
|
|
69
57
|
}
|
|
70
58
|
/** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it current.
|
|
@@ -75,7 +63,7 @@ export function invalidateMatchingAmong(hippoRoot, live, target, tenantId) {
|
|
|
75
63
|
// loadEntriesByIds reads at most 500 ids a call.
|
|
76
64
|
const fresh = new Map(chunked(ids, 500).flatMap((chunk) => loadEntriesByIds(hippoRoot, chunk, tenantId)).map((entry) => [entry.id, entry]));
|
|
77
65
|
const { result, weakened } = weakenMatches(ids.flatMap((id) => fresh.get(id) ?? []), target);
|
|
78
|
-
|
|
66
|
+
writeEntriesTogether(hippoRoot, weakened);
|
|
79
67
|
const byId = new Map(weakened.map((entry) => [entry.id, entry]));
|
|
80
68
|
for (let i = 0; i < live.length; i++)
|
|
81
69
|
live[i] = byId.get(live[i].id) ?? live[i];
|
|
@@ -381,7 +369,8 @@ function recordChurnEvidence(git, candidates, anchorOf, result) {
|
|
|
381
369
|
}
|
|
382
370
|
return toTag;
|
|
383
371
|
}
|
|
384
|
-
/** Flags memories whose named file/symbol/script changed or disappeared since storage (or last
|
|
372
|
+
/** Flags memories whose named file/symbol/script changed or disappeared since storage (or last
|
|
373
|
+
* confirmation); only adds/removes CHURN_STALE_TAG, never confidence/half-life/strength. */
|
|
385
374
|
export function detectChurnStale(hippoRoot, repoRoot, opts) {
|
|
386
375
|
const dryRun = opts.dryRun === true;
|
|
387
376
|
if (!opts.projectName)
|
|
@@ -408,9 +397,7 @@ export function detectChurnStale(hippoRoot, repoRoot, opts) {
|
|
|
408
397
|
const result = { checked: 0, marked: 0, alreadyMarked: 0, skippedPinned, dryRun, preview: [] };
|
|
409
398
|
try {
|
|
410
399
|
const git = loadChurnGitView(repoRoot, opts.legacyName ?? opts.projectName, candidates, anchorOf, needs);
|
|
411
|
-
// Collected here
|
|
412
|
-
// computed: a GitReadError thrown mid-loop must never leave an earlier
|
|
413
|
-
// candidate tagged while a later one aborts the run untagged.
|
|
400
|
+
// Collected here and written only after every candidate's evidence is computed, so a GitReadError mid-loop cannot leave an earlier candidate tagged.
|
|
414
401
|
const toTag = recordChurnEvidence(git, candidates, anchorOf, result);
|
|
415
402
|
if (!dryRun && toTag.length > 0)
|
|
416
403
|
tagChurnStale(hippoRoot, opts.tenantId, toTag, confirmedAt);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type ToolCall } from './protocol.js';
|
|
2
2
|
export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
|
|
3
|
-
export declare function runStatusTool({ hippoRoot, config, tenantId }: ToolCall): string;
|
|
3
|
+
export declare function runStatusTool({ ctx, 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;
|
|
6
|
-
export declare function runShareTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string
|
|
6
|
+
export declare function runShareTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
|
|
7
7
|
export declare function runPeersTool({ tenantId }: ToolCall): string;
|
|
8
8
|
//# sourceMappingURL=admin-tools.d.ts.map
|