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/api/sleep-run.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// The sleep pipeline behind `sleep`, with its phase dependencies injectable; kept out of the package root.
|
|
2
2
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
3
|
-
import {
|
|
4
|
-
import { reportAuditWriteFailure
|
|
3
|
+
import { memoriesBackingObjects } from '../store/delete-and-batch.js';
|
|
4
|
+
import { reportAuditWriteFailure } from '../store/audit.js';
|
|
5
|
+
import { auditMemories } from '../core/memory-audit.js';
|
|
5
6
|
import { sqliteSyncStore } from '../store/sqlite/store.js';
|
|
6
|
-
import { autoShare } from '../sharing/
|
|
7
|
+
import { AUTO_SHARE_MIN_SCORE, autoShare } from '../sharing/share.js';
|
|
7
8
|
import { consolidate } from '../consolidate/sleep.js';
|
|
8
9
|
import { failedUnitOf } from '../store/delete-and-batch.js';
|
|
9
10
|
import { loadConfig } from '../core/config.js';
|
|
@@ -11,6 +12,7 @@ import { deduplicateStore } from '../consolidate/dedupe.js';
|
|
|
11
12
|
import { computeAmbientState } from '../core/ambient.js';
|
|
12
13
|
import { loadPendingExtractionTenants, markPendingProcessedUpTo } from '../store/graph-queue.js';
|
|
13
14
|
import { extractGraphChunked } from '../graph/extract.js';
|
|
15
|
+
import { removeAuditErrors } from './audit.js';
|
|
14
16
|
import { errorMessage } from '../util/log.js';
|
|
15
17
|
const DEFAULT_SLEEP_PHASES = {
|
|
16
18
|
consolidate,
|
|
@@ -18,7 +20,6 @@ const DEFAULT_SLEEP_PHASES = {
|
|
|
18
20
|
auditMemories,
|
|
19
21
|
autoShare,
|
|
20
22
|
loadAllEntries,
|
|
21
|
-
deleteEntry,
|
|
22
23
|
computeAmbientState,
|
|
23
24
|
loadConfig,
|
|
24
25
|
loadPendingExtractionTenants,
|
|
@@ -28,18 +29,15 @@ const DEFAULT_SLEEP_PHASES = {
|
|
|
28
29
|
export async function runSleep(ctx, opts, overrides = {}) {
|
|
29
30
|
const dryRun = Boolean(opts.dryRun);
|
|
30
31
|
const phases = { ...DEFAULT_SLEEP_PHASES, ...overrides };
|
|
31
|
-
// Phase counters for the consolidate audit emit (in finally).
|
|
32
|
-
// Accumulated as each phase completes so partial-failure paths still report
|
|
33
|
-
// accurate "what got done before the failure" data.
|
|
32
|
+
// Phase counters for the consolidate audit emit (in finally), accumulated per phase so a partial failure still reports what got done.
|
|
34
33
|
const counts = { consolidation: 0, dedup: 0, auditDeleted: 0, ambient: 0 };
|
|
35
34
|
let phaseError = null;
|
|
36
35
|
try {
|
|
37
36
|
return await runSleepPhases(ctx, opts, phases, counts);
|
|
38
37
|
}
|
|
39
38
|
catch (err) {
|
|
40
|
-
// SAFETY: phaseError is read via phaseError.message / (phaseError !==
|
|
41
|
-
//
|
|
42
|
-
// the existing lenient (err as Error) pattern used throughout this catch chain.
|
|
39
|
+
// SAFETY: phaseError is only read via phaseError.message / (phaseError !== null) below, safe even if a non-Error was thrown;
|
|
40
|
+
// this mirrors the lenient (err as Error) pattern used through this catch chain.
|
|
43
41
|
phaseError = err;
|
|
44
42
|
throw err;
|
|
45
43
|
}
|
|
@@ -54,20 +52,23 @@ async function runSleepPhases(ctx, opts, phases, counts) {
|
|
|
54
52
|
const consolidateResult = await phases.consolidate(ctx.hippoRoot, { dryRun });
|
|
55
53
|
counts.consolidation = consolidateResult.semanticCreated + consolidateResult.merged;
|
|
56
54
|
const result = sleepResultFrom(consolidateResult, dryRun);
|
|
55
|
+
// One read after consolidation serves dedup, the audit and ambient: dedup reports every row it deletes, so later phases subtract instead of reading again.
|
|
56
|
+
const loaded = { entries: phases.loadAllEntries(ctx.hippoRoot), backing: memoriesBackingObjects(ctx.hippoRoot) };
|
|
57
57
|
// Phase 2: Dedup (post-consolidate near-duplicate cleanup).
|
|
58
|
-
const dedupResult = phases.deduplicateStore(ctx.hippoRoot, { dryRun, actor: ctx.actor.subject });
|
|
58
|
+
const dedupResult = phases.deduplicateStore(ctx.hippoRoot, { dryRun, actor: ctx.actor.subject, loaded });
|
|
59
59
|
counts.dedup = dedupResult.removed;
|
|
60
60
|
if (dedupResult.removed > 0)
|
|
61
61
|
result.deduped = dedupSummary(dedupResult);
|
|
62
62
|
// Phase 3: Quality audit (remove junk, report warnings; a dry run skips rows earlier phases would remove).
|
|
63
|
-
|
|
63
|
+
const audited = runQualityAudit(ctx, phases, { dryRun, consolidateResult, dedupResult, result, loaded });
|
|
64
|
+
counts.auditDeleted = audited.removed;
|
|
64
65
|
if (dryRun)
|
|
65
66
|
return result;
|
|
66
67
|
// Phase 4: Auto-share high-transfer-score memories to global.
|
|
67
68
|
if (!opts.noShare)
|
|
68
69
|
shareOnSleep(ctx, phases, result);
|
|
69
70
|
// Phase 5: Post-sleep ambient state summary.
|
|
70
|
-
counts.ambient = summarizeAmbient(ctx, phases, result);
|
|
71
|
+
counts.ambient = summarizeAmbient(ctx, phases, result, audited.remaining);
|
|
71
72
|
await drainGraphQueue(ctx, phases, snapshot, result);
|
|
72
73
|
return result;
|
|
73
74
|
}
|
|
@@ -115,28 +116,27 @@ function dedupSummary(dedupResult) {
|
|
|
115
116
|
crossDups,
|
|
116
117
|
};
|
|
117
118
|
}
|
|
119
|
+
/** `removed` counts audit errors deleted (or that would be under dryRun); `remaining` is what the audit read, less the rows it deleted. */
|
|
118
120
|
function runQualityAudit(ctx, phases, options) {
|
|
119
|
-
const { dryRun, consolidateResult, dedupResult, result } = options;
|
|
120
|
-
|
|
121
|
-
const
|
|
122
|
-
const
|
|
121
|
+
const { dryRun, consolidateResult, dedupResult, result, loaded } = options;
|
|
122
|
+
// The load followed consolidation, so only a dry run still holds the rows consolidation would remove; dedup's pairs are gone or would be.
|
|
123
|
+
const planned = new Set([...(dryRun ? consolidateResult.removedIds ?? [] : []), ...dedupResult.pairs.map((p) => p.removed)]);
|
|
124
|
+
const allEntries = loaded.entries.filter((e) => !planned.has(e.id));
|
|
125
|
+
const auditOut = phases.auditMemories(allEntries, loaded.backing);
|
|
123
126
|
if (auditOut.issues.length === 0)
|
|
124
|
-
return 0;
|
|
127
|
+
return { removed: 0, remaining: allEntries };
|
|
125
128
|
const errors = auditOut.issues.filter((i) => i.severity === 'error');
|
|
126
129
|
const warnings = auditOut.issues.filter((i) => i.severity === 'warning');
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if (dryRun || phases.deleteEntry(ctx.hippoRoot, issue.memoryId, { actor: ctx.actor.subject, reason, automatic: true }))
|
|
131
|
-
removed++;
|
|
132
|
-
}
|
|
130
|
+
const gone = dryRun ? errors.map((issue) => issue.memoryId) : removeAuditErrors(ctx, 'sleep-audit', errors);
|
|
131
|
+
const removed = gone.length;
|
|
132
|
+
const deleted = new Set(gone);
|
|
133
133
|
if (removed > 0 || warnings.length > 0) {
|
|
134
134
|
result.audit = {
|
|
135
135
|
errorsRemoved: removed,
|
|
136
136
|
warningCount: warnings.length,
|
|
137
137
|
};
|
|
138
138
|
}
|
|
139
|
-
return removed;
|
|
139
|
+
return { removed, remaining: allEntries.filter((e) => !deleted.has(e.id)) };
|
|
140
140
|
}
|
|
141
141
|
function shareOnSleep(ctx, phases, result) {
|
|
142
142
|
const sleepConfig = phases.loadConfig(ctx.hippoRoot);
|
|
@@ -144,7 +144,7 @@ function shareOnSleep(ctx, phases, result) {
|
|
|
144
144
|
return;
|
|
145
145
|
// Both skip counters are surfaced so the secret veto and the rejection tombstone are observable, not silent.
|
|
146
146
|
const autoShareStats = { secretSkipped: 0, rejectedSkipped: 0 };
|
|
147
|
-
const shared = phases.autoShare(ctx.hippoRoot, { minScore:
|
|
147
|
+
const shared = phases.autoShare(ctx.hippoRoot, { minScore: AUTO_SHARE_MIN_SCORE, stats: autoShareStats });
|
|
148
148
|
if (shared.length > 0) {
|
|
149
149
|
result.shared = shared.length;
|
|
150
150
|
}
|
|
@@ -156,11 +156,11 @@ function shareOnSleep(ctx, phases, result) {
|
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
158
|
/** Returns the ambient total the audit row reports: 0 when ambient is off or no current row is left. */
|
|
159
|
-
function summarizeAmbient(ctx, phases, result) {
|
|
159
|
+
function summarizeAmbient(ctx, phases, result, loaded) {
|
|
160
160
|
const postSleepConfig = phases.loadConfig(ctx.hippoRoot);
|
|
161
161
|
if (!postSleepConfig.ambient.enabled)
|
|
162
162
|
return 0;
|
|
163
|
-
const postSleepEntries =
|
|
163
|
+
const postSleepEntries = loaded.filter((e) => !e.superseded_by);
|
|
164
164
|
if (postSleepEntries.length === 0)
|
|
165
165
|
return 0;
|
|
166
166
|
result.ambient = phases.computeAmbientState(postSleepEntries);
|
package/dist/api/sleep.d.ts
CHANGED
|
@@ -4,23 +4,17 @@ import type { Context } from './types.js';
|
|
|
4
4
|
export interface SleepOpts {
|
|
5
5
|
/** Report what a sleep would change without applying it; sharing, the ambient summary and the graph refresh are skipped. */
|
|
6
6
|
dryRun?: boolean;
|
|
7
|
-
/** Skip copying high-scoring memories to the global store under `HIPPO_HOME`. Default
|
|
7
|
+
/** Skip copying high-scoring memories to the global store under `HIPPO_HOME`. Default
|
|
8
|
+
* false, so every tenant's memories are eligible; multi-tenant callers pass `true`. */
|
|
8
9
|
noShare?: boolean;
|
|
9
10
|
}
|
|
10
11
|
export interface SleepResult {
|
|
11
12
|
active: number;
|
|
12
13
|
removed: number;
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
* deleting (config `dormant.enabled`). Absent when 0. Per-invocation
|
|
16
|
-
* activity counter, same class as `removed`.
|
|
17
|
-
*/
|
|
14
|
+
/** Faded memories the decay pass moved to the dormant store instead of deleting (config `dormant.enabled`); absent when 0. Per-invocation counter, like
|
|
15
|
+
* `removed`. */
|
|
18
16
|
dormant?: number;
|
|
19
|
-
/**
|
|
20
|
-
* Dormant memories deleted for good this sleep because they outlived
|
|
21
|
-
* `dormant.retentionDays`. Absent when 0. Same per-invocation class as
|
|
22
|
-
* `removed`.
|
|
23
|
-
*/
|
|
17
|
+
/** Dormant memories deleted for good this sleep for outliving `dormant.retentionDays`; absent when 0. Per-invocation counter, like `removed`. */
|
|
24
18
|
dormantExpired?: number;
|
|
25
19
|
mergedEpisodic: number;
|
|
26
20
|
newSemantic: number;
|
|
@@ -36,26 +30,13 @@ export interface SleepResult {
|
|
|
36
30
|
warningCount: number;
|
|
37
31
|
};
|
|
38
32
|
shared?: number;
|
|
39
|
-
/**
|
|
40
|
-
* Count of memories the auto-share secret veto withheld this sleep
|
|
41
|
-
* — rows that passed every other admission gate (transfer score,
|
|
42
|
-
* not-already-global) and were blocked solely by `detectSecret`. Absent
|
|
43
|
-
* when 0 or when auto-share did not run.
|
|
44
|
-
*/
|
|
33
|
+
/** Memories the auto-share secret veto withheld: rows that passed every other gate but `detectSecret`; absent when 0 or auto-share did not run. */
|
|
45
34
|
secretSkipped?: number;
|
|
46
|
-
/**
|
|
47
|
-
* Count of auto-share candidates the GLOBAL store's rejection
|
|
48
|
-
* tombstone refused this sleep; copy paths must not let one rejected
|
|
49
|
-
* candidate abort the batch. Absent when 0 or when auto-share did not run.
|
|
50
|
-
*/
|
|
35
|
+
/** Auto-share candidates the GLOBAL store's rejection tombstone refused (one must not abort the batch); absent when 0 or auto-share did not run. */
|
|
51
36
|
rejectedSkipped?: number;
|
|
52
37
|
ambient?: AmbientState | null;
|
|
53
|
-
/**
|
|
54
|
-
*
|
|
55
|
-
* this sleep. Absent when no tenant was dirty, and under dryRun (the graph
|
|
56
|
-
* phase runs only on a real sleep). Cross-tenant aggregate, one reason
|
|
57
|
-
* /v1/sleep stays loopback-only.
|
|
58
|
-
*/
|
|
38
|
+
/** Graph re-extraction totals across tenants rebuilt this sleep; absent when none was dirty or under dryRun.
|
|
39
|
+
* Cross-tenant aggregate: one reason /v1/sleep stays loopback-only. */
|
|
59
40
|
graph?: {
|
|
60
41
|
tenants: number;
|
|
61
42
|
entities: number;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PhysicsParticle } from '../core/physics.js';
|
|
2
|
+
import type { LegacyStats } from '../store/rows.js';
|
|
3
|
+
import { type StatusCounts } from '../store/candidates.js';
|
|
4
|
+
import { type StoredVectorSummary } from '../store/vector-index.js';
|
|
5
|
+
import { type CorrectionLatencyReport } from './correction-latency.js';
|
|
6
|
+
import { type ProvenanceCoverage } from './provenance-coverage.js';
|
|
7
|
+
import { type Context } from './types.js';
|
|
8
|
+
export interface StoreStatus {
|
|
9
|
+
stats: LegacyStats;
|
|
10
|
+
counts: StatusCounts;
|
|
11
|
+
}
|
|
12
|
+
/** Lifetime stats and row counts for the whole store. Every tenant, so the host admin only. */
|
|
13
|
+
export declare function storeStatus(ctx: Context, now: Date, atRiskBelow: number): StoreStatus;
|
|
14
|
+
/** Ids and dimension of the stored vectors. Every tenant, so the host admin only. */
|
|
15
|
+
export declare function vectorSummary(ctx: Context): StoredVectorSummary;
|
|
16
|
+
/** Whether the stored vectors were built by a different model than `providerId`. Every tenant, so the host admin only. */
|
|
17
|
+
export declare function embeddingReindexNeeded(ctx: Context, providerId: string): boolean;
|
|
18
|
+
/** Every stored physics particle. Every tenant, so the host admin only. */
|
|
19
|
+
export declare function storedParticles(ctx: Context): PhysicsParticle[];
|
|
20
|
+
/** Correction latency over every superseded row in the store. Every tenant, so the host admin only. */
|
|
21
|
+
export declare function correctionLatencyReport(ctx: Context): CorrectionLatencyReport;
|
|
22
|
+
/** Provenance coverage over every kind=raw row in the store. Every tenant, so the host admin only. */
|
|
23
|
+
export declare function provenanceCoverageReport(ctx: Context): ProvenanceCoverage;
|
|
24
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Store-wide status reads: counts, stats, vector index state and the correction and provenance reports.
|
|
2
|
+
import { loadCorrectionEntries, loadRawEntries } from '../store/report-reads.js';
|
|
3
|
+
import { loadStats } from '../store/index-and-stats.js';
|
|
4
|
+
import { loadStatusCounts } from '../store/candidates.js';
|
|
5
|
+
import { embeddingModelRequiresReindex } from '../store/embeddings/index.js';
|
|
6
|
+
import { loadStoredParticles, storedVectorSummary } from '../store/vector-index.js';
|
|
7
|
+
import { buildCorrectionLatency } from './correction-latency.js';
|
|
8
|
+
import { buildProvenanceCoverage } from './provenance-coverage.js';
|
|
9
|
+
import { requireHostAdmin } from './types.js';
|
|
10
|
+
/** Lifetime stats and row counts for the whole store. Every tenant, so the host admin only. */
|
|
11
|
+
export function storeStatus(ctx, now, atRiskBelow) {
|
|
12
|
+
requireHostAdmin(ctx, 'Reading every tenant');
|
|
13
|
+
return { stats: loadStats(ctx.hippoRoot), counts: loadStatusCounts(ctx.hippoRoot, now, atRiskBelow) };
|
|
14
|
+
}
|
|
15
|
+
/** Ids and dimension of the stored vectors. Every tenant, so the host admin only. */
|
|
16
|
+
export function vectorSummary(ctx) {
|
|
17
|
+
requireHostAdmin(ctx, 'Reading every tenant');
|
|
18
|
+
return storedVectorSummary(ctx.hippoRoot);
|
|
19
|
+
}
|
|
20
|
+
/** Whether the stored vectors were built by a different model than `providerId`. Every tenant, so the host admin only. */
|
|
21
|
+
export function embeddingReindexNeeded(ctx, providerId) {
|
|
22
|
+
requireHostAdmin(ctx, 'Reading every tenant');
|
|
23
|
+
return embeddingModelRequiresReindex(ctx.hippoRoot, providerId);
|
|
24
|
+
}
|
|
25
|
+
/** Every stored physics particle. Every tenant, so the host admin only. */
|
|
26
|
+
export function storedParticles(ctx) {
|
|
27
|
+
requireHostAdmin(ctx, 'Reading every tenant');
|
|
28
|
+
return loadStoredParticles(ctx.hippoRoot);
|
|
29
|
+
}
|
|
30
|
+
/** Correction latency over every superseded row in the store. Every tenant, so the host admin only. */
|
|
31
|
+
export function correctionLatencyReport(ctx) {
|
|
32
|
+
requireHostAdmin(ctx, 'Reading every tenant');
|
|
33
|
+
return buildCorrectionLatency(loadCorrectionEntries(ctx.hippoRoot));
|
|
34
|
+
}
|
|
35
|
+
/** Provenance coverage over every kind=raw row in the store. Every tenant, so the host admin only. */
|
|
36
|
+
export function provenanceCoverageReport(ctx) {
|
|
37
|
+
requireHostAdmin(ctx, 'Reading every tenant');
|
|
38
|
+
return buildProvenanceCoverage(loadRawEntries(ctx.hippoRoot));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Context } from './types.js';
|
|
2
|
+
/** Create the store at `ctx.hippoRoot`, or finish setting up one that exists; a store holds every tenant, so the host admin only. */
|
|
3
|
+
export declare function initMemoryStore(ctx: Context): void;
|
|
4
|
+
//# sourceMappingURL=store-init.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Creating a store for `hippo init`: the database, its mirror folders and first-run setup.
|
|
2
|
+
import { initStore } from '../store/open.js';
|
|
3
|
+
import { requireHostAdmin } from './types.js';
|
|
4
|
+
/** Create the store at `ctx.hippoRoot`, or finish setting up one that exists; a store holds every tenant, so the host admin only. */
|
|
5
|
+
export function initMemoryStore(ctx) {
|
|
6
|
+
requireHostAdmin(ctx, 'Creating a store');
|
|
7
|
+
initStore(ctx.hippoRoot);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=store-init.js.map
|
package/dist/api/tokens.d.ts
CHANGED
|
@@ -1,21 +1,14 @@
|
|
|
1
1
|
import type { TokenSummary, TokenSurface } from '../store/token-ledger.js';
|
|
2
2
|
import type { FailureSummary } from '../store/failure-log.js';
|
|
3
3
|
import type { Context } from './types.js';
|
|
4
|
-
/**
|
|
5
|
-
* Record memory text handed to an agent in the token ledger.
|
|
6
|
-
* Best-effort: never throws, because a ledger failure must not fail the
|
|
7
|
-
* recall or context call that produced the text.
|
|
8
|
-
*/
|
|
4
|
+
/** Records memory text handed to an agent in the token ledger. Best-effort: never throws, since a ledger failure must not fail the recall or context call. */
|
|
9
5
|
export declare function recordTokens(ctx: Context, surface: TokenSurface, use: {
|
|
10
6
|
items: number;
|
|
11
7
|
tokens: number;
|
|
12
8
|
sessionId?: string | null;
|
|
13
9
|
}): Promise<void>;
|
|
14
|
-
/**
|
|
15
|
-
*
|
|
16
|
-
* tokens sent, skipped as unchanged and re-read by later model calls, per
|
|
17
|
-
* surface, with session counts and mean tokens per session.
|
|
18
|
-
*/
|
|
10
|
+
/** Token ledger totals for the tenant over the last `days` days (default 30): tokens sent, skipped as unchanged and re-read,
|
|
11
|
+
* per surface, with session counts and mean tokens per session. */
|
|
19
12
|
export declare function tokenSummary(ctx: Context, opts?: {
|
|
20
13
|
days?: number;
|
|
21
14
|
}): TokenSummary;
|
package/dist/api/tokens.js
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
// Token-use and failure reports.
|
|
2
|
-
import { rethrowIfSqliteBlocked } from '../
|
|
2
|
+
import { rethrowIfSqliteBlocked } from '../util/sqlite-blocked.js';
|
|
3
3
|
import { storeFor } from '../store/index.js';
|
|
4
4
|
import { failureLogSummary, tokenUseSummary } from '../store/usage-reports.js';
|
|
5
5
|
import { errorMessage, log } from '../util/log.js';
|
|
6
6
|
import { DAY_MS } from '../util/time.js';
|
|
7
|
-
/**
|
|
8
|
-
* Record memory text handed to an agent in the token ledger.
|
|
9
|
-
* Best-effort: never throws, because a ledger failure must not fail the
|
|
10
|
-
* recall or context call that produced the text.
|
|
11
|
-
*/
|
|
7
|
+
/** Records memory text handed to an agent in the token ledger. Best-effort: never throws, since a ledger failure must not fail the recall or context call. */
|
|
12
8
|
export async function recordTokens(ctx, surface, use) {
|
|
13
9
|
try {
|
|
14
10
|
await storeFor(ctx).recordTokens({
|
|
@@ -25,11 +21,8 @@ export async function recordTokens(ctx, surface, use) {
|
|
|
25
21
|
log.warnThenDebug('api-token-ledger', `token ledger write failed; the reply is unaffected: ${errorMessage(err)}`);
|
|
26
22
|
}
|
|
27
23
|
}
|
|
28
|
-
/**
|
|
29
|
-
*
|
|
30
|
-
* tokens sent, skipped as unchanged and re-read by later model calls, per
|
|
31
|
-
* surface, with session counts and mean tokens per session.
|
|
32
|
-
*/
|
|
24
|
+
/** Token ledger totals for the tenant over the last `days` days (default 30): tokens sent, skipped as unchanged and re-read,
|
|
25
|
+
* per surface, with session counts and mean tokens per session. */
|
|
33
26
|
export function tokenSummary(ctx, opts = {}) {
|
|
34
27
|
return tokenUseSummary(ctx.hippoRoot, ctx.tenantId, reportWindowStart(opts.days));
|
|
35
28
|
}
|
package/dist/api/types.d.ts
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { BadRequestError } from '../core/api-errors.js';
|
|
2
2
|
import type { HippoStore } from '../store/index.js';
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* Carries the audit-log subject plus a role for /v1/sleep admin gating. Audit
|
|
7
|
-
* helpers take the bare `string`, so callers pass `ctx.actor.subject`. Role checks happen at the request
|
|
8
|
-
* boundary (e.g. /v1/sleep), except in authCreate and authRevoke (ForbiddenError).
|
|
9
|
-
*/
|
|
3
|
+
/** Actor identity + role for a Context: the audit-log subject (pass `ctx.actor.subject` to audit helpers) and the role for admin gating.
|
|
4
|
+
* Role checks happen at the request boundary (e.g. /v1/sleep), except in authCreate and authRevoke (ForbiddenError). */
|
|
10
5
|
export interface Actor {
|
|
11
6
|
/** 'cli' | 'localhost:cli' | 'api_key:<key_id>' | 'mcp' | 'connector:slack' | 'connector:github' */
|
|
12
7
|
subject: string;
|
|
@@ -34,31 +29,15 @@ export type StoreReply<C extends Context, R> = C extends {
|
|
|
34
29
|
readonly hippoRoot: string;
|
|
35
30
|
readonly store?: undefined;
|
|
36
31
|
} ? R : R | Promise<R>;
|
|
37
|
-
/**
|
|
38
|
-
*
|
|
39
|
-
* used by CLI and CLI-run connector Context constructors so the role
|
|
40
|
-
* boilerplate isn't repeated at every site. Bearer-authed callers (HTTP
|
|
41
|
-
* /v1/*) construct Actor directly from the api_keys row's role column via
|
|
42
|
-
* buildContextWithAuth in src/server.ts.
|
|
43
|
-
*/
|
|
32
|
+
/** Builds process-local Actor values (admin and host admin) for CLI and CLI-run connector Contexts; Bearer-authed callers build Actor from the api_keys row
|
|
33
|
+
* instead. */
|
|
44
34
|
export declare function adminActor(subject: string): Actor;
|
|
35
|
+
/** Throws unless the caller is the host's operator: `action` reaches past the caller's tenant. */
|
|
36
|
+
export declare function requireHostAdmin(ctx: Context, action: string): void;
|
|
45
37
|
/** The per-person key: an unowned key gets its own bucket by key id rather than sharing one. */
|
|
46
38
|
export declare function ownerOrSubject(actor: Actor): string;
|
|
47
|
-
/**
|
|
48
|
-
*
|
|
49
|
-
* that has been opted into via env. Carries a stable `code` field for HTTP /
|
|
50
|
-
* MCP / CLI render paths to discriminate without parsing the message.
|
|
51
|
-
*
|
|
52
|
-
* Codes:
|
|
53
|
-
* - 'fresh_tail_requires_session_id' — `freshTailCount > 0` AND no
|
|
54
|
-
* `freshTailSessionId` AND `HIPPO_REQUIRE_SESSION_SCOPED_FRESH_TAIL=1`.
|
|
55
|
-
* Default behaviour (env unset) returns tenant-wide rows; the env gate
|
|
56
|
-
* is opt-in so multi-session tenants can fail loud instead of silently
|
|
57
|
-
* surfacing cross-session rows tagged `isFreshTail=true`.
|
|
58
|
-
* - 'invalid_scorer_window' — `opts.scorerWindow` is set to a non-positive,
|
|
59
|
-
* non-integer, or non-finite value. 0 would route through FTS/LIKE
|
|
60
|
-
* `LIMIT 0` and then an uncapped full-store fallback, so it is validated upfront.
|
|
61
|
-
*/
|
|
39
|
+
/** Thrown by `api.recall` on a contract violation; the stable `code` lets callers discriminate without parsing the message.
|
|
40
|
+
* 'fresh_tail_requires_session_id' (needs HIPPO_REQUIRE_SESSION_SCOPED_FRESH_TAIL=1) or 'invalid_scorer_window' (0 would hit an uncapped fallback). */
|
|
62
41
|
export declare class RecallContractError extends BadRequestError {
|
|
63
42
|
readonly code: 'fresh_tail_requires_session_id' | 'invalid_scorer_window';
|
|
64
43
|
constructor(code: 'fresh_tail_requires_session_id' | 'invalid_scorer_window', message: string);
|
package/dist/api/types.js
CHANGED
|
@@ -1,34 +1,21 @@
|
|
|
1
1
|
// Request context (caller identity and tenant) shared by every API module, plus the recall contract error.
|
|
2
|
-
import { BadRequestError } from '../core/api-errors.js';
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
* used by CLI and CLI-run connector Context constructors so the role
|
|
6
|
-
* boilerplate isn't repeated at every site. Bearer-authed callers (HTTP
|
|
7
|
-
* /v1/*) construct Actor directly from the api_keys row's role column via
|
|
8
|
-
* buildContextWithAuth in src/server.ts.
|
|
9
|
-
*/
|
|
2
|
+
import { BadRequestError, ForbiddenError } from '../core/api-errors.js';
|
|
3
|
+
/** Builds process-local Actor values (admin and host admin) for CLI and CLI-run connector Contexts; Bearer-authed callers build Actor from the api_keys row
|
|
4
|
+
* instead. */
|
|
10
5
|
export function adminActor(subject) {
|
|
11
6
|
return { subject, role: 'admin', hostAdmin: true };
|
|
12
7
|
}
|
|
8
|
+
/** Throws unless the caller is the host's operator: `action` reaches past the caller's tenant. */
|
|
9
|
+
export function requireHostAdmin(ctx, action) {
|
|
10
|
+
if (!ctx.actor.hostAdmin)
|
|
11
|
+
throw new ForbiddenError(`${action} requires a host admin`);
|
|
12
|
+
}
|
|
13
13
|
/** The per-person key: an unowned key gets its own bucket by key id rather than sharing one. */
|
|
14
14
|
export function ownerOrSubject(actor) {
|
|
15
15
|
return actor.owner ?? actor.subject;
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
19
|
-
* that has been opted into via env. Carries a stable `code` field for HTTP /
|
|
20
|
-
* MCP / CLI render paths to discriminate without parsing the message.
|
|
21
|
-
*
|
|
22
|
-
* Codes:
|
|
23
|
-
* - 'fresh_tail_requires_session_id' — `freshTailCount > 0` AND no
|
|
24
|
-
* `freshTailSessionId` AND `HIPPO_REQUIRE_SESSION_SCOPED_FRESH_TAIL=1`.
|
|
25
|
-
* Default behaviour (env unset) returns tenant-wide rows; the env gate
|
|
26
|
-
* is opt-in so multi-session tenants can fail loud instead of silently
|
|
27
|
-
* surfacing cross-session rows tagged `isFreshTail=true`.
|
|
28
|
-
* - 'invalid_scorer_window' — `opts.scorerWindow` is set to a non-positive,
|
|
29
|
-
* non-integer, or non-finite value. 0 would route through FTS/LIKE
|
|
30
|
-
* `LIMIT 0` and then an uncapped full-store fallback, so it is validated upfront.
|
|
31
|
-
*/
|
|
17
|
+
/** Thrown by `api.recall` on a contract violation; the stable `code` lets callers discriminate without parsing the message.
|
|
18
|
+
* 'fresh_tail_requires_session_id' (needs HIPPO_REQUIRE_SESSION_SCOPED_FRESH_TAIL=1) or 'invalid_scorer_window' (0 would hit an uncapped fallback). */
|
|
32
19
|
export class RecallContractError extends BadRequestError {
|
|
33
20
|
code;
|
|
34
21
|
constructor(code, message) {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type Context } from '../api/types.js';
|
|
2
|
-
import { type DatabaseSyncLike } from '../db/index.js';
|
|
3
2
|
import { type CallerProject } from '../api/prompt-hook.js';
|
|
4
3
|
import type { ContinuityKey } from '../store/sessions.js';
|
|
5
4
|
import { type WorkingState } from './working-state.js';
|
|
@@ -11,6 +10,4 @@ export declare function callerInHoldout(ctx: Context, sessionId: string): boolea
|
|
|
11
10
|
export declare function checkedWorkingState(state: WorkingState | null): WorkingState | null;
|
|
12
11
|
export declare function assertTrigger(trigger: string | null): void;
|
|
13
12
|
export declare function assertRequestId(requestId: string): void;
|
|
14
|
-
/** Opens with the request's own lock wait, so a busy store becomes a 503 rather than a long stall. */
|
|
15
|
-
export declare function withCallerDb<T>(ctx: Context, fn: (db: DatabaseSyncLike) => T): T;
|
|
16
13
|
//# sourceMappingURL=caller-session.d.ts.map
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
// The checks every caller call shares: ids, project, the session's owner and the pilot arm, all from the request, never the server's env or folder.
|
|
2
2
|
import { BadRequestError } from '../core/api-errors.js';
|
|
3
3
|
import { ownerOrSubject } from '../api/types.js';
|
|
4
|
-
import {
|
|
5
|
-
import { MAX_ID_LEN } from '../util/http-util.js';
|
|
4
|
+
import { MAX_ID_LEN } from '../util/limits.js';
|
|
6
5
|
import { sessionPilotArm } from '../api/pilot-arm.js';
|
|
7
6
|
import { assertCallerIds } from '../api/prompt-hook.js';
|
|
8
7
|
import { assertCallerProject, projectNames } from '../core/project-identity.js';
|
|
@@ -45,14 +44,4 @@ export function assertRequestId(requestId) {
|
|
|
45
44
|
if (requestId.length > MAX_ID_LEN)
|
|
46
45
|
throw new BadRequestError(`request id: at most ${MAX_ID_LEN} characters`);
|
|
47
46
|
}
|
|
48
|
-
/** Opens with the request's own lock wait, so a busy store becomes a 503 rather than a long stall. */
|
|
49
|
-
export function withCallerDb(ctx, fn) {
|
|
50
|
-
const db = openHippoDb(ctx.hippoRoot);
|
|
51
|
-
try {
|
|
52
|
-
return fn(db);
|
|
53
|
-
}
|
|
54
|
-
finally {
|
|
55
|
-
closeHippoDb(db);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
47
|
//# sourceMappingURL=caller-session.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { CaptureErrorOutcome } from '../store/failure-log.js';
|
|
2
2
|
import type { JsonValue } from '../util/json.js';
|
|
3
3
|
/** Store a failure as an error memory unless it is routine or a repeat, and log it either way, even when storing throws. */
|
|
4
|
-
export declare function captureToolFailure(hippoRoot: string, tenantId: string, payload: JsonValue): CaptureErrorOutcome;
|
|
4
|
+
export declare function captureToolFailure(hippoRoot: string, tenantId: string, payload: JsonValue, onLogged?: (failureId: number | null) => void): CaptureErrorOutcome;
|
|
5
5
|
/** Who sent a failure from another machine: the audit actor and the project its lesson and repeat check belong to. */
|
|
6
6
|
export interface LessonCaller {
|
|
7
7
|
actor: string;
|
|
@@ -5,11 +5,10 @@ import { createMemory } from '../core/memory.js';
|
|
|
5
5
|
import { writeEntry } from '../store/entry-writes.js';
|
|
6
6
|
import { loadContentsWithTag } from '../store/entry-reads.js';
|
|
7
7
|
import { loadConfig } from '../core/config.js';
|
|
8
|
-
import {
|
|
9
|
-
import { recordFailure } from '../store/failure-log.js';
|
|
8
|
+
import { recordFailureAt } from '../store/failure-log-at.js';
|
|
10
9
|
import { failureHash, failureSignature, lessonFromFailure, payloadString, } from './failure-reading.js';
|
|
11
10
|
/** Store a failure as an error memory unless it is routine or a repeat, and log it either way, even when storing throws. */
|
|
12
|
-
export function captureToolFailure(hippoRoot, tenantId, payload) {
|
|
11
|
+
export function captureToolFailure(hippoRoot, tenantId, payload, onLogged) {
|
|
13
12
|
const lesson = lessonFromFailure(payload);
|
|
14
13
|
let outcome = 'store-failed';
|
|
15
14
|
try {
|
|
@@ -17,26 +16,32 @@ export function captureToolFailure(hippoRoot, tenantId, payload) {
|
|
|
17
16
|
return outcome;
|
|
18
17
|
}
|
|
19
18
|
finally {
|
|
20
|
-
|
|
19
|
+
logAndReport(hippoRoot, tenantId, payload, lesson, outcome, onLogged);
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
/** Logs the failure, then tells the caller the row id, or null when the write threw; the throw goes on. */
|
|
23
|
+
function logAndReport(hippoRoot, tenantId, payload, lesson, outcome, onLogged) {
|
|
24
|
+
let id;
|
|
26
25
|
try {
|
|
27
|
-
|
|
28
|
-
tenantId,
|
|
29
|
-
sessionId: payloadString(payload, 'session_id'),
|
|
30
|
-
tool: payloadString(payload, 'tool_name'),
|
|
31
|
-
outcome,
|
|
32
|
-
rule: 'rule' in lesson ? lesson.rule : null,
|
|
33
|
-
sigHash: hash(lesson.text),
|
|
34
|
-
detailHash: hash(lesson.detail),
|
|
35
|
-
});
|
|
26
|
+
id = logFailure(hippoRoot, tenantId, payload, lesson, outcome);
|
|
36
27
|
}
|
|
37
|
-
|
|
38
|
-
|
|
28
|
+
catch (error) {
|
|
29
|
+
onLogged?.(null);
|
|
30
|
+
throw error;
|
|
39
31
|
}
|
|
32
|
+
onLogged?.(id);
|
|
33
|
+
}
|
|
34
|
+
function logFailure(hippoRoot, tenantId, payload, lesson, outcome) {
|
|
35
|
+
const hash = (s) => (s === null ? null : failureHash(s));
|
|
36
|
+
return recordFailureAt(hippoRoot, {
|
|
37
|
+
tenantId,
|
|
38
|
+
sessionId: payloadString(payload, 'session_id'),
|
|
39
|
+
tool: payloadString(payload, 'tool_name'),
|
|
40
|
+
outcome,
|
|
41
|
+
rule: 'rule' in lesson ? lesson.rule : null,
|
|
42
|
+
sigHash: hash(lesson.text),
|
|
43
|
+
detailHash: hash(lesson.detail),
|
|
44
|
+
});
|
|
40
45
|
}
|
|
41
46
|
export function storeLesson(hippoRoot, tenantId, text, caller) {
|
|
42
47
|
const sig = failureSignature(text);
|
|
@@ -35,7 +35,9 @@ export function patchPaths(body) {
|
|
|
35
35
|
}
|
|
36
36
|
return paths.filter(Boolean);
|
|
37
37
|
}
|
|
38
|
-
const HEREDOC =
|
|
38
|
+
const HEREDOC = new RegExp(String.raw `^\s*(?:cd\s+(?<cd>'[^']*'|"[^"]*"|[^\s'"&|;]+)\s+&&\s+)?` +
|
|
39
|
+
String.raw `(?:apply_patch|applypatch)\s+<<\s*(?<q>['"]?)(?<tag>\w+)\k<q>[ \t]*\r?\n` +
|
|
40
|
+
String.raw `(?<body>[\s\S]*?)\r?\n\s*\k<tag>\s*$`);
|
|
39
41
|
/** The script a shell argv runs, for the shells Codex checks for an apply_patch heredoc. */
|
|
40
42
|
function shellScript(argv) {
|
|
41
43
|
const exe = path.basename(argv[0] ?? '').toLowerCase().replace(/\.exe$/, '');
|
|
@@ -12,21 +12,13 @@ export interface CaptureOptions {
|
|
|
12
12
|
stdinText?: string;
|
|
13
13
|
stdinTimedOut?: boolean;
|
|
14
14
|
sessionTurns?: readonly SessionTurn[];
|
|
15
|
-
/**
|
|
16
|
-
*
|
|
17
|
-
* pattern used by `hippo sleep --log-file` so the SessionEnd hook output
|
|
18
|
-
* (invisible during TUI teardown) can be surfaced via `hippo last-sleep`
|
|
19
|
-
* on the next session start. Appends rather than truncates — `hippo sleep`
|
|
20
|
-
* writes the same file first in the SessionEnd sequence.
|
|
21
|
-
*/
|
|
15
|
+
/** Tee stdout/stderr to this log file while capture runs, so SessionEnd output (lost in TUI teardown) shows via `hippo last-sleep`.
|
|
16
|
+
* Appends, because `hippo sleep` writes the same file first. */
|
|
22
17
|
logFile?: string;
|
|
23
18
|
dryRun: boolean;
|
|
24
19
|
global: boolean;
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
* AND `global` is false, the dedup check only considers this tenant's
|
|
28
|
-
* existing memories. Undefined means host-wide dedup. Ignored when `global: true` (global captures are host-wide).
|
|
29
|
-
*/
|
|
20
|
+
/** Tenant scope for the dedup read in `cmdCaptureCore`: when set and `global` is false, only this tenant's memories count.
|
|
21
|
+
* Undefined means host-wide dedup; ignored when `global: true`. */
|
|
30
22
|
tenantId?: string;
|
|
31
23
|
/** The session's project: rows are stamped with its id, and dedup reads its rows under either name. */
|
|
32
24
|
originProject?: ProjectRef;
|