hippo-memory 2.0.0 → 2.1.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/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +32 -19
- package/dist/api/prompt-hook.js +65 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +28 -7
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +33 -14
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +45 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +23 -23
- package/dist/cli/auth.js +19 -27
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +4 -4
- package/dist/cli/object-verbs.js +10 -13
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +14 -6
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -5
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -6
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -6
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -6
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -5
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -6
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +24 -14
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +21 -16
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +84 -27
- package/dist/core/memory.js +73 -29
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -3
- package/dist/db/connect.js +8 -3
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +26 -13
- 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 -1
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -4
- package/dist/db/physics-state.js +13 -20
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +19 -5
- package/dist/db/request-stores.js +14 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +19 -6
- package/dist/entry/store-kit.js +6 -4
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +16 -6
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +69 -34
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +8 -7
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +16 -9
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -7
- package/dist/learn/invalidation.js +56 -27
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +18 -14
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +57 -74
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +52 -21
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +9 -6
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +547 -93
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -19
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +75 -36
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +93 -60
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +8 -10
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +3 -1
- package/dist/store/index.js +1 -0
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +215 -229
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +9 -4
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.js +2 -1
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +84 -33
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -11
- package/dist/store/sqlite/store.js +84 -11
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +19 -12
- package/dist/store/summaries.js +36 -21
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +6 -3
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +24 -10
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +16 -4
- package/dist/util/env.js +78 -25
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +11 -3
- package/dist/util/request-scope.js +13 -4
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +3 -1
- package/dist/util/spawn-argv.js +13 -4
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -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 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -11
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -4
- package/dist/store/sqlite/local.js +0 -8
package/dist/eval/eval.d.ts
CHANGED
|
@@ -78,8 +78,14 @@ export interface EvalComparison {
|
|
|
78
78
|
onlyInBaseline: string[];
|
|
79
79
|
onlyInCurrent: string[];
|
|
80
80
|
}
|
|
81
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Compute pairwise deltas between a baseline and a current eval summary, matching cases by EvalCase.id; mismatches land
|
|
83
|
+
* in the onlyIn arrays.
|
|
84
|
+
*/
|
|
82
85
|
export declare function compareSummaries(baseline: EvalSummary, current: EvalSummary): EvalComparison;
|
|
83
|
-
/**
|
|
86
|
+
/**
|
|
87
|
+
* For each memory, use its first 8 content words as a trivial query and expect that memory back: a smoke test for
|
|
88
|
+
* recall.
|
|
89
|
+
*/
|
|
84
90
|
export declare function bootstrapCorpus(entries: MemoryEntry[], maxCases?: number): EvalCase[];
|
|
85
91
|
//# sourceMappingURL=eval.d.ts.map
|
package/dist/eval/eval.js
CHANGED
|
@@ -101,7 +101,10 @@ function rankForCase(query, entries, options, useBothStores) {
|
|
|
101
101
|
mmrLambda: options.mmrLambda,
|
|
102
102
|
});
|
|
103
103
|
}
|
|
104
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Compute pairwise deltas between a baseline and a current eval summary, matching cases by EvalCase.id; mismatches land
|
|
106
|
+
* in the onlyIn arrays.
|
|
107
|
+
*/
|
|
105
108
|
export function compareSummaries(baseline, current) {
|
|
106
109
|
const aggregate = {
|
|
107
110
|
mrr: current.meanMrr - baseline.meanMrr,
|
|
@@ -145,7 +148,10 @@ export function compareSummaries(baseline, current) {
|
|
|
145
148
|
onlyInCurrent: [...curById.keys()].filter((id) => !baseById.has(id)),
|
|
146
149
|
};
|
|
147
150
|
}
|
|
148
|
-
/**
|
|
151
|
+
/**
|
|
152
|
+
* For each memory, use its first 8 content words as a trivial query and expect that memory back: a smoke test for
|
|
153
|
+
* recall.
|
|
154
|
+
*/
|
|
149
155
|
export function bootstrapCorpus(entries, maxCases = 50) {
|
|
150
156
|
const cases = [];
|
|
151
157
|
for (const e of entries) {
|
package/dist/eval/judgment.js
CHANGED
|
@@ -3,14 +3,18 @@
|
|
|
3
3
|
* every captured memory currently lands on a flat schema_fit of 0.5. */
|
|
4
4
|
import { fetchWithRetry } from '../util/http-retry.js';
|
|
5
5
|
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
6
|
-
import { readCappedJson } from '../util/capped-json.js';
|
|
6
|
+
import { readCappedJson, readCappedText } from '../util/capped-json.js';
|
|
7
7
|
import { isJsonNumber, isJsonObject, isJsonString } from '../util/json.js';
|
|
8
8
|
const ENDPOINT = 'https://api.typesafe.ai/v1/systemone';
|
|
9
9
|
const DEFAULT_MODEL = 'jev-1.13.0';
|
|
10
10
|
const MAX_CONCURRENCY = 8;
|
|
11
11
|
// An honest reply is three short answers, a few hundred bytes; 1 MiB leaves room for a verbose envelope.
|
|
12
12
|
const JUDGE_MAX_REPLY_BYTES = 1024 * 1024;
|
|
13
|
-
|
|
13
|
+
const JUDGE_MAX_ERROR_BYTES = 4096;
|
|
14
|
+
/**
|
|
15
|
+
* One named answer of a Jev reply `{ answers: { <name>: Answer } }`; an empty object when the reply has none of that
|
|
16
|
+
* shape.
|
|
17
|
+
*/
|
|
14
18
|
function answerNamed(reply, name) {
|
|
15
19
|
const answers = isJsonObject(reply) ? reply.answers : undefined;
|
|
16
20
|
const answer = isJsonObject(answers) ? answers[name] : undefined;
|
|
@@ -19,9 +23,12 @@ function answerNamed(reply, name) {
|
|
|
19
23
|
const QUESTIONS = {
|
|
20
24
|
durable: {
|
|
21
25
|
type: 'noul',
|
|
22
|
-
instructions: 'This text was extracted from an AI coding agent transcript as a candidate memory. It is worth storing
|
|
23
|
-
'
|
|
24
|
-
'
|
|
26
|
+
instructions: 'This text was extracted from an AI coding agent transcript as a candidate memory. It is worth storing ' +
|
|
27
|
+
'long-term only if it would still be useful to ' +
|
|
28
|
+
'a future agent working on this codebase weeks from now: a durable preference, a convention, a decision with a ' +
|
|
29
|
+
'reason, or a gotcha that will recur. ' +
|
|
30
|
+
'Transient chatter, one-off status, restatements of code already in the repo, and anything only true inside ' +
|
|
31
|
+
'this one session are not worth storing.',
|
|
25
32
|
},
|
|
26
33
|
kind: {
|
|
27
34
|
type: 'choice',
|
|
@@ -81,7 +88,10 @@ async function post(content, opts) {
|
|
|
81
88
|
if (res.ok)
|
|
82
89
|
return res;
|
|
83
90
|
// The body is the server's reply, never the request, so it cannot hold the key.
|
|
84
|
-
const snippet = (await res
|
|
91
|
+
const snippet = (await readCappedText(res, JUDGE_MAX_ERROR_BYTES).catch((err) => {
|
|
92
|
+
log.debug(`judge: error body unreadable: ${errorMessage(err)}`, errorFields(err));
|
|
93
|
+
return '';
|
|
94
|
+
})).slice(0, 200);
|
|
85
95
|
log.warn('judge: non-2xx reply', { status: res.status, body: snippet });
|
|
86
96
|
return null;
|
|
87
97
|
}
|
package/dist/graph/delta.d.ts
CHANGED
|
@@ -1,45 +1,12 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
/** What names an object-derived entity across rebuilds; v38 has no UNIQUE on it, so the diff keeps one row per key. */
|
|
4
|
-
export interface NaturalKey {
|
|
5
|
-
readonly entityType: EntityType;
|
|
6
|
-
readonly sourceObject: SourceObjectRef;
|
|
7
|
-
}
|
|
8
|
-
export interface DesiredEntity extends NaturalKey {
|
|
9
|
-
readonly name: string;
|
|
10
|
-
readonly memoryId: string | null;
|
|
11
|
-
}
|
|
12
|
-
export interface DesiredRelation {
|
|
13
|
-
readonly from: NaturalKey;
|
|
14
|
-
readonly to: NaturalKey;
|
|
15
|
-
readonly relType: RelationType;
|
|
16
|
-
readonly memoryId: string | null;
|
|
17
|
-
readonly sourceObject: SourceObjectRef;
|
|
18
|
-
}
|
|
19
|
-
export interface DesiredGraph {
|
|
20
|
-
readonly entities: readonly DesiredEntity[];
|
|
21
|
-
readonly relations: readonly DesiredRelation[];
|
|
22
|
-
}
|
|
23
|
-
export type GraphOp = {
|
|
24
|
-
readonly op: 'deleteEntity';
|
|
25
|
-
readonly id: number;
|
|
26
|
-
} | {
|
|
27
|
-
readonly op: 'updateEntity';
|
|
28
|
-
readonly id: number;
|
|
29
|
-
readonly entity: DesiredEntity;
|
|
30
|
-
} | {
|
|
31
|
-
readonly op: 'insertEntity';
|
|
32
|
-
readonly entity: DesiredEntity;
|
|
33
|
-
} | {
|
|
34
|
-
readonly op: 'deleteRelation';
|
|
35
|
-
readonly id: number;
|
|
36
|
-
} | {
|
|
37
|
-
readonly op: 'insertRelation';
|
|
38
|
-
readonly relation: DesiredRelation;
|
|
39
|
-
};
|
|
1
|
+
import type { DesiredEntity, DesiredGraph, DesiredRelation, GraphOp, NaturalKey, StoredGraph } from '../store/graph-rows.js';
|
|
2
|
+
export type { DesiredEntity, DesiredGraph, DesiredRelation, GraphOp, NaturalKey };
|
|
40
3
|
export declare function entityKey(k: NaturalKey): string;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
4
|
+
export declare function memoryIdsOf(desired: DesiredGraph): string[];
|
|
5
|
+
/** The diff itself: pure, so the store reads the rows and this decides the ops. */
|
|
6
|
+
export declare function diffGraph(stored: StoredGraph, desired: DesiredGraph): GraphOp[];
|
|
7
|
+
/**
|
|
8
|
+
* Ops that turn the stored graph into `desired`, in apply order; read outside any write lock, so the apply re-checks
|
|
9
|
+
* each op against what changed since. Keeps the lowest id per natural key.
|
|
10
|
+
*/
|
|
44
11
|
export declare function readGraphDelta(hippoRoot: string, tenantId: string, desired: DesiredGraph): GraphOp[];
|
|
45
12
|
//# sourceMappingURL=delta.d.ts.map
|
package/dist/graph/delta.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
// Diffs the derived graph against the stored rows, so a rebuild writes only what changed and an entity keeps the id its
|
|
2
|
+
// relations hang on.
|
|
3
|
+
import { loadStoredGraph } from '../store/graph-reads.js';
|
|
2
4
|
const keyText = (entityType, objectType, objectId) => `${entityType}|${objectType}:${objectId}`;
|
|
3
5
|
export function entityKey(k) {
|
|
4
6
|
return keyText(k.entityType, k.sourceObject.type, k.sourceObject.id);
|
|
@@ -14,7 +16,7 @@ function provenanceOf(memoryId, kinds) {
|
|
|
14
16
|
const kind = memoryId === null ? undefined : kinds.get(memoryId);
|
|
15
17
|
return kind === undefined ? '|distilled' : `${memoryId}|${kind}`;
|
|
16
18
|
}
|
|
17
|
-
function memoryIdsOf(desired) {
|
|
19
|
+
export function memoryIdsOf(desired) {
|
|
18
20
|
const ids = new Set();
|
|
19
21
|
for (const row of [...desired.entities, ...desired.relations])
|
|
20
22
|
if (row.memoryId !== null)
|
|
@@ -47,7 +49,8 @@ function diffEntities(stored, desired, kinds) {
|
|
|
47
49
|
const row = kept.get(key);
|
|
48
50
|
if (!row)
|
|
49
51
|
inserts.push({ op: 'insertEntity', entity });
|
|
50
|
-
else if (row.name !== entity.name ||
|
|
52
|
+
else if (row.name !== entity.name ||
|
|
53
|
+
`${row.memory_id ?? ''}|${row.source_kind}` !== provenanceOf(entity.memoryId, kinds)) {
|
|
51
54
|
updates.push({ op: 'updateEntity', id: row.id, entity });
|
|
52
55
|
}
|
|
53
56
|
}
|
|
@@ -80,16 +83,19 @@ function diffRelations(stored, desired, keptKeyById, kinds) {
|
|
|
80
83
|
inserts.push({ op: 'insertRelation', relation });
|
|
81
84
|
return [...deletes, ...inserts];
|
|
82
85
|
}
|
|
83
|
-
|
|
86
|
+
/** The diff itself: pure, so the store reads the rows and this decides the ops. */
|
|
87
|
+
export function diffGraph(stored, desired) {
|
|
84
88
|
const entityDelta = diffEntities(stored.entities, desired.entities, stored.kinds);
|
|
85
|
-
return [
|
|
89
|
+
return [
|
|
90
|
+
...entityDelta.ops,
|
|
91
|
+
...diffRelations(stored.relations, desired.relations, entityDelta.keptKeyById, stored.kinds),
|
|
92
|
+
];
|
|
86
93
|
}
|
|
87
|
-
/**
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
/** graphDelta on its own connection and outside any write lock; the apply re-checks each op against what changed since. */
|
|
94
|
+
/**
|
|
95
|
+
* Ops that turn the stored graph into `desired`, in apply order; read outside any write lock, so the apply re-checks
|
|
96
|
+
* each op against what changed since. Keeps the lowest id per natural key.
|
|
97
|
+
*/
|
|
92
98
|
export function readGraphDelta(hippoRoot, tenantId, desired) {
|
|
93
|
-
return
|
|
99
|
+
return diffGraph(loadStoredGraph(hippoRoot, tenantId, memoryIdsOf(desired)), desired);
|
|
94
100
|
}
|
|
95
101
|
//# sourceMappingURL=delta.js.map
|
package/dist/graph/extract.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
/** Deterministic entity extraction: the graph is a pure function of the consolidated object tables
|
|
2
|
-
* Writes go through the src/store/graph-writes.ts
|
|
1
|
+
/** Deterministic entity extraction: the graph is a pure function of the consolidated object tables
|
|
2
|
+
* (decisions, policies, customer_notes, project_briefs). Writes go through the src/store/graph-writes.ts
|
|
3
|
+
* consolidated-source guard. Pass 3 adds `references` edges by a conservative name-match heuristic. */
|
|
3
4
|
import { type EntityType } from '../store/graph-rows.js';
|
|
4
5
|
import { type DesiredGraph } from './delta.js';
|
|
5
6
|
import { type WriteBudget } from '../util/write-budget.js';
|
|
6
|
-
|
|
7
|
+
import type { Objects } from '../store/port.js';
|
|
8
|
+
/** Per-type load cap (the loaders default to 100); a type over it is truncated and
|
|
9
|
+
* `ExtractResult.truncated` records that. */
|
|
7
10
|
export declare const MAX_EXTRACT_PER_TYPE = 10000;
|
|
8
11
|
/** A target entity name must be in [MIN, MAX] chars to be matched: MIN skips short, generic words; MAX skips prose
|
|
9
12
|
* (a decision's prose name is never a target, only a source). */
|
|
@@ -47,8 +50,8 @@ export interface LoadedType {
|
|
|
47
50
|
/** True when either status load filled MAX_EXTRACT_PER_TYPE. */
|
|
48
51
|
hitCap: boolean;
|
|
49
52
|
}
|
|
50
|
-
/** Every source type's rows
|
|
51
|
-
export declare function loadGraphSources(
|
|
53
|
+
/** Every source type's rows; callers load before any write lock is taken. */
|
|
54
|
+
export declare function loadGraphSources(objects: Objects, tenantId: string): Promise<LoadedType[]>;
|
|
52
55
|
/** The graph the loaded objects imply, plus the counts ExtractResult reports. */
|
|
53
56
|
export interface DerivedGraph extends DesiredGraph {
|
|
54
57
|
byType: Record<string, number>;
|
|
@@ -59,8 +62,8 @@ export interface DerivedGraph extends DesiredGraph {
|
|
|
59
62
|
export declare function deriveGraph(loaded: readonly LoadedType[]): DerivedGraph;
|
|
60
63
|
/** Idempotent rebuild of the tenant's graph from its consolidated objects, in one transaction; safe to re-run.
|
|
61
64
|
* Returns the derived counts and which types hit the per-type cap. */
|
|
62
|
-
export declare function extractGraph(hippoRoot: string, tenantId: string): ExtractResult
|
|
65
|
+
export declare function extractGraph(objects: Objects, hippoRoot: string, tenantId: string): Promise<ExtractResult>;
|
|
63
66
|
/** extractGraph for sleep: diffs outside the lock, then applies in transactions of about `budget.holdMs` with a pause
|
|
64
67
|
* between them. A run stopped between chunks leaves a mixed graph that the next run's diff finishes. */
|
|
65
|
-
export declare function extractGraphChunked(hippoRoot: string, tenantId: string, budget?: WriteBudget): Promise<ExtractResult>;
|
|
68
|
+
export declare function extractGraphChunked(objects: Objects, hippoRoot: string, tenantId: string, budget?: WriteBudget): Promise<ExtractResult>;
|
|
66
69
|
//# sourceMappingURL=extract.d.ts.map
|
package/dist/graph/extract.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
/** Deterministic entity extraction: the graph is a pure function of the consolidated object tables
|
|
2
|
-
* Writes go through the src/store/graph-writes.ts
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import { MAX_ENTITY_NAME_LEN } from '../store/graph-rows.js';
|
|
6
|
-
import {
|
|
1
|
+
/** Deterministic entity extraction: the graph is a pure function of the consolidated object tables
|
|
2
|
+
* (decisions, policies, customer_notes, project_briefs). Writes go through the src/store/graph-writes.ts
|
|
3
|
+
* consolidated-source guard. Pass 3 adds `references` edges by a conservative name-match heuristic. */
|
|
4
|
+
import { applyGraphOps, rebuildGraphUnderLock } from '../store/graph-apply.js';
|
|
5
|
+
import { MAX_ENTITY_NAME_LEN, } from '../store/graph-rows.js';
|
|
6
|
+
import { diffGraph, memoryIdsOf, readGraphDelta, } from './delta.js';
|
|
7
7
|
import { WRITE_BUDGET } from '../util/write-budget.js';
|
|
8
8
|
import { SLEEP_DB_WAIT_MS } from '../db/index.js';
|
|
9
9
|
import { loadDecisions } from '../objects/decisions.js';
|
|
@@ -12,7 +12,8 @@ import { loadCustomerNotes } from '../objects/customer-notes.js';
|
|
|
12
12
|
import { loadProjectBriefs } from '../objects/project-briefs.js';
|
|
13
13
|
import { assertTenantId } from '../store/tenant.js';
|
|
14
14
|
import { escapeRegex } from '../util/escape.js';
|
|
15
|
-
/** Per-type load cap (the loaders default to 100); a type over it is truncated and
|
|
15
|
+
/** Per-type load cap (the loaders default to 100); a type over it is truncated and
|
|
16
|
+
* `ExtractResult.truncated` records that. */
|
|
16
17
|
export const MAX_EXTRACT_PER_TYPE = 10000;
|
|
17
18
|
/** A target entity name must be in [MIN, MAX] chars to be matched: MIN skips short, generic words; MAX skips prose
|
|
18
19
|
* (a decision's prose name is never a target, only a source). */
|
|
@@ -49,18 +50,26 @@ function sourceObjectOf(entityType, e2Id) {
|
|
|
49
50
|
function pairKey(a, b) {
|
|
50
51
|
return a < b ? `${a}:${b}` : `${b}:${a}`;
|
|
51
52
|
}
|
|
52
|
-
/** Close over one loader's row type so the table below holds uniform functions. Loads ACTIVE and SUPERSEDED rows
|
|
53
|
-
* one call per status, so MAX_EXTRACT_PER_TYPE is a per-status budget; `hitCap` is set when
|
|
53
|
+
/** Close over one loader's row type so the table below holds uniform functions. Loads ACTIVE and SUPERSEDED rows
|
|
54
|
+
* (not `closed`), one call per status, so MAX_EXTRACT_PER_TYPE is a per-status budget; `hitCap` is set when
|
|
55
|
+
* either load is full. */
|
|
54
56
|
function source(entityType, load, nameOf, textOf) {
|
|
55
|
-
return (
|
|
57
|
+
return async (objects, tenantId) => {
|
|
56
58
|
const rows = [];
|
|
57
59
|
let hitCap = false;
|
|
58
60
|
for (const status of ['active', 'superseded']) {
|
|
59
|
-
const loaded = load(
|
|
61
|
+
const loaded = await load(objects, tenantId, { status, limit: MAX_EXTRACT_PER_TYPE });
|
|
60
62
|
if (loaded.length === MAX_EXTRACT_PER_TYPE)
|
|
61
63
|
hitCap = true;
|
|
62
64
|
for (const r of loaded) {
|
|
63
|
-
rows.push({
|
|
65
|
+
rows.push({
|
|
66
|
+
entityType,
|
|
67
|
+
e2Id: r.id,
|
|
68
|
+
name: nameOf(r),
|
|
69
|
+
searchText: textOf(r),
|
|
70
|
+
memoryId: r.memoryId,
|
|
71
|
+
supersededBy: r.supersededBy,
|
|
72
|
+
});
|
|
64
73
|
}
|
|
65
74
|
}
|
|
66
75
|
return { entityType, rows, hitCap };
|
|
@@ -72,10 +81,10 @@ const GRAPH_SOURCES = [
|
|
|
72
81
|
source('customer', loadCustomerNotes, (r) => r.customer, (r) => [r.customer, r.note].filter(Boolean).join(' ')),
|
|
73
82
|
source('project', loadProjectBriefs, (r) => r.repo, (r) => [r.repo, r.summary].filter(Boolean).join(' ')),
|
|
74
83
|
];
|
|
75
|
-
/** Every source type's rows
|
|
76
|
-
export function loadGraphSources(
|
|
84
|
+
/** Every source type's rows; callers load before any write lock is taken. */
|
|
85
|
+
export async function loadGraphSources(objects, tenantId) {
|
|
77
86
|
assertTenantId('loadGraphSources', tenantId);
|
|
78
|
-
return GRAPH_SOURCES.map((load) => load(
|
|
87
|
+
return Promise.all(GRAPH_SOURCES.map((load) => load(objects, tenantId)));
|
|
79
88
|
}
|
|
80
89
|
/** The tenant's graph as a pure function of its loaded objects; the write side diffs it against what is stored. */
|
|
81
90
|
export function deriveGraph(loaded) {
|
|
@@ -83,7 +92,12 @@ export function deriveGraph(loaded) {
|
|
|
83
92
|
const supersedes = deriveSupersedes(pass);
|
|
84
93
|
const references = deriveReferences(pass.created, supersedes.supersededPairs, pass.truncated);
|
|
85
94
|
return {
|
|
86
|
-
entities: pass.created.map((e) => ({
|
|
95
|
+
entities: pass.created.map((e) => ({
|
|
96
|
+
entityType: e.entityType,
|
|
97
|
+
sourceObject: e.sourceObject,
|
|
98
|
+
name: e.name,
|
|
99
|
+
memoryId: e.memoryId,
|
|
100
|
+
})),
|
|
87
101
|
relations: [...supersedes.relations, ...references],
|
|
88
102
|
byType: pass.byType,
|
|
89
103
|
truncated: pass.truncated,
|
|
@@ -201,33 +215,45 @@ function deriveReferences(created, supersededPairs, truncated) {
|
|
|
201
215
|
break;
|
|
202
216
|
}
|
|
203
217
|
for (const target of targets.values()) {
|
|
204
|
-
relations.push({
|
|
218
|
+
relations.push({
|
|
219
|
+
from: naturalKeyOf(src),
|
|
220
|
+
to: naturalKeyOf(target),
|
|
221
|
+
relType: 'references',
|
|
222
|
+
memoryId: src.memoryId,
|
|
223
|
+
sourceObject: src.sourceObject,
|
|
224
|
+
});
|
|
205
225
|
}
|
|
206
226
|
}
|
|
207
227
|
return relations;
|
|
208
228
|
}
|
|
209
229
|
function resultOf(derived, skipped) {
|
|
210
230
|
const { entities, relations, references, byType, truncated } = derived;
|
|
211
|
-
const result = {
|
|
231
|
+
const result = {
|
|
232
|
+
entities: entities.length,
|
|
233
|
+
relations: relations.length,
|
|
234
|
+
references,
|
|
235
|
+
byType,
|
|
236
|
+
truncated,
|
|
237
|
+
};
|
|
212
238
|
if (skipped > 0)
|
|
213
239
|
result.skipped = skipped;
|
|
214
240
|
return result;
|
|
215
241
|
}
|
|
216
242
|
/** Idempotent rebuild of the tenant's graph from its consolidated objects, in one transaction; safe to re-run.
|
|
217
243
|
* Returns the derived counts and which types hit the per-type cap. */
|
|
218
|
-
export function extractGraph(hippoRoot, tenantId) {
|
|
244
|
+
export async function extractGraph(objects, hippoRoot, tenantId) {
|
|
219
245
|
assertTenantId('extractGraph', tenantId);
|
|
220
246
|
// Loaded first: opening a second connection under the rebuild's BEGIN IMMEDIATE dead-locks ('database is locked').
|
|
221
|
-
const derived = deriveGraph(loadGraphSources(
|
|
247
|
+
const derived = deriveGraph(await loadGraphSources(objects, tenantId));
|
|
222
248
|
// Diffed and applied under one lock, so two concurrent rebuilds serialize instead of both inserting a missing row.
|
|
223
|
-
const skipped =
|
|
249
|
+
const skipped = rebuildGraphUnderLock(hippoRoot, tenantId, memoryIdsOf(derived), (stored) => diffGraph(stored, derived));
|
|
224
250
|
return resultOf(derived, skipped);
|
|
225
251
|
}
|
|
226
252
|
/** extractGraph for sleep: diffs outside the lock, then applies in transactions of about `budget.holdMs` with a pause
|
|
227
253
|
* between them. A run stopped between chunks leaves a mixed graph that the next run's diff finishes. */
|
|
228
|
-
export async function extractGraphChunked(hippoRoot, tenantId, budget = WRITE_BUDGET) {
|
|
254
|
+
export async function extractGraphChunked(objects, hippoRoot, tenantId, budget = WRITE_BUDGET) {
|
|
229
255
|
assertTenantId('extractGraphChunked', tenantId);
|
|
230
|
-
const derived = deriveGraph(loadGraphSources(
|
|
256
|
+
const derived = deriveGraph(await loadGraphSources(objects, tenantId));
|
|
231
257
|
const ops = readGraphDelta(hippoRoot, tenantId, derived);
|
|
232
258
|
let next = 0;
|
|
233
259
|
let skipped = 0;
|
|
@@ -236,8 +262,14 @@ export async function extractGraphChunked(hippoRoot, tenantId, budget = WRITE_BU
|
|
|
236
262
|
if (next > 0)
|
|
237
263
|
await budget.pause(committedAt);
|
|
238
264
|
const from = next;
|
|
239
|
-
// Sleep's wait, not a server request's 250 ms: each chunk is a fresh BEGIN IMMEDIATE
|
|
240
|
-
|
|
265
|
+
// Sleep's wait, not a server request's 250 ms: each chunk is a fresh BEGIN IMMEDIATE
|
|
266
|
+
// a hook's write could otherwise fail.
|
|
267
|
+
const chunk = applyGraphOps(hippoRoot, tenantId, ops, {
|
|
268
|
+
from,
|
|
269
|
+
holdMs: budget.holdMs,
|
|
270
|
+
clock: budget.clock,
|
|
271
|
+
busyWaitMs: SLEEP_DB_WAIT_MS,
|
|
272
|
+
});
|
|
241
273
|
committedAt = budget.clock();
|
|
242
274
|
next = chunk.next;
|
|
243
275
|
skipped += chunk.skipped;
|
package/dist/graph/recall.d.ts
CHANGED
|
@@ -27,16 +27,24 @@ export interface GraphExpandOpts {
|
|
|
27
27
|
/** The recall --min-results floor: this many top base rows are kept regardless of
|
|
28
28
|
* budget, so graph expansion never violates the floor. Defaults to 1. */
|
|
29
29
|
minResults?: number;
|
|
30
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Recall-side scope rule applied to graph-REACHED memories only (base results already passed the caller), mirroring
|
|
32
|
+
* HybridSearchOptions.recallScope.
|
|
31
33
|
* Omitted = default-deny (private and quarantine excluded, NULL passes), the fail-closed default for SDK callers.
|
|
32
|
-
*
|
|
34
|
+
* { requested, additive: true } is CLI --scope unlock (passesCliRecallScopeFilter); otherwise exact narrowing
|
|
35
|
+
* (passesScopeFilterForRecall).
|
|
36
|
+
*/
|
|
33
37
|
recallScope?: {
|
|
34
38
|
requested?: string;
|
|
35
39
|
additive?: boolean;
|
|
36
40
|
ownScope?: string;
|
|
37
41
|
};
|
|
38
42
|
}
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
43
|
+
/**
|
|
44
|
+
* Augment `baseResults` with memories reached by walking `hops` graph edges from the seeds across local AND global
|
|
45
|
+
* stores, each placed after its seed.
|
|
46
|
+
* Returns `baseResults` unchanged when `hops <= 0`, there are no base results, or nothing new survives the filters and
|
|
47
|
+
* the token budget.
|
|
48
|
+
*/
|
|
41
49
|
export declare function graphExpandRecall(baseResults: SearchResult[], opts: GraphExpandOpts): SearchResult[];
|
|
42
50
|
//# sourceMappingURL=recall.d.ts.map
|
package/dist/graph/recall.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Multi-hop graph recall: a READ-ONLY walk of the relations graph from the lexical seeds, surfacing reached entities'
|
|
3
|
+
* memories the lexical search missed.
|
|
4
|
+
* Reached rows load by id (not intersected with the lexically prefiltered candidates), then the recall hard filters are
|
|
5
|
+
* re-applied.
|
|
6
|
+
* Hits inherit their seed's score minus a per-hop discount; both stores are expanded; no writes, so check-graph-writes
|
|
7
|
+
* permits it outside graph.ts.
|
|
8
|
+
*/
|
|
4
9
|
import { loadEntriesByIds } from '../store/entry-reads.js';
|
|
5
10
|
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
6
11
|
import { estimateTokens } from '../util/token-text.js';
|
|
@@ -29,10 +34,12 @@ function loadByIdsChunked(root, tenantId, ids) {
|
|
|
29
34
|
}
|
|
30
35
|
/** BFS, both directions, up to `hops`: each reached entity's via, and the base memory it descends from. */
|
|
31
36
|
function walkRelations(root, tenantId, seedEntities, hops, maxNeighbors) {
|
|
32
|
-
// `visited` makes expansion cycle-safe; `originMemByEntityId` carries each node's base-result memory id for adjacency
|
|
37
|
+
// `visited` makes expansion cycle-safe; `originMemByEntityId` carries each node's base-result memory id for adjacency
|
|
38
|
+
// placement and score inheritance.
|
|
33
39
|
const visitedEntityIds = new Set(seedEntities.map((e) => e.id));
|
|
34
40
|
const reached = new Map();
|
|
35
|
-
// A seed/reached entity whose mirror was forgotten or pruned has a null memoryId; traversal still propagates origin
|
|
41
|
+
// A seed/reached entity whose mirror was forgotten or pruned has a null memoryId; traversal still propagates origin
|
|
42
|
+
// and the null is dropped before any load.
|
|
36
43
|
const originMemByEntityId = new Map();
|
|
37
44
|
for (const se of seedEntities)
|
|
38
45
|
originMemByEntityId.set(se.id, se.memoryId);
|
|
@@ -79,7 +86,8 @@ function walkRelations(root, tenantId, seedEntities, hops, maxNeighbors) {
|
|
|
79
86
|
/** The recall hard filters (as-of, superseded, scope) re-applied to a directly loaded graph-reached row. */
|
|
80
87
|
function passesRecallFilters(mem, via, successorValidFrom, opts) {
|
|
81
88
|
const { includeSuperseded, asOfDate, recallScope } = opts;
|
|
82
|
-
// The `to` endpoint of a `supersedes` edge IS the superseded version; the graph is authoritative because `hippo
|
|
89
|
+
// The `to` endpoint of a `supersedes` edge IS the superseded version; the graph is authoritative because `hippo
|
|
90
|
+
// decide` does not set `superseded_by`.
|
|
83
91
|
// Drop it unless --include-superseded; the newer `from` endpoint is always kept.
|
|
84
92
|
const isSupersededEndpoint = via.relType === 'supersedes' && via.direction === 'to';
|
|
85
93
|
if (asOfDate) {
|
|
@@ -96,7 +104,8 @@ function passesRecallFilters(mem, via, successorValidFrom, opts) {
|
|
|
96
104
|
return false; // default recall drops superseded
|
|
97
105
|
}
|
|
98
106
|
return recallScope.additive
|
|
99
|
-
? passesCliRecallScopeFilter(mem.scope ?? null, recallScope.requested) ||
|
|
107
|
+
? passesCliRecallScopeFilter(mem.scope ?? null, recallScope.requested) ||
|
|
108
|
+
passesScopeFilterForRecall(mem.scope ?? null, undefined, recallScope.ownScope)
|
|
100
109
|
: passesScopeFilterForRecall(mem.scope ?? null, recallScope.requested, recallScope.ownScope);
|
|
101
110
|
}
|
|
102
111
|
/** Traverse one store's graph from its seeds into `hitsByOrigin`. Pure reads; mutates `seenMemoryIds`
|
|
@@ -146,7 +155,8 @@ function buildGraphHit(mem, via, originScore) {
|
|
|
146
155
|
graphVia: via,
|
|
147
156
|
};
|
|
148
157
|
}
|
|
149
|
-
// Reached entities -> source memory ids -> load by id (chunked). A mirror-less entity (memoryId === null) has no memory
|
|
158
|
+
// Reached entities -> source memory ids -> load by id (chunked). A mirror-less entity (memoryId === null) has no memory
|
|
159
|
+
// to surface,
|
|
150
160
|
// so drop its null id before it reaches loadByIdsChunked.
|
|
151
161
|
function loadReachedMemories(root, tenantId, reachedEntities, seenMemoryIds) {
|
|
152
162
|
const needLoad = [...new Set(reachedEntities
|
|
@@ -162,8 +172,12 @@ function loadSuccessorValidFrom(root, tenantId, loadedById, asOfDate) {
|
|
|
162
172
|
const succIds = [...new Set([...loadedById.values()].map((m) => m.superseded_by).filter((id) => !!id))];
|
|
163
173
|
return new Map(loadByIdsChunked(root, tenantId, succIds).map((m) => [m.id, m.valid_from]));
|
|
164
174
|
}
|
|
165
|
-
/**
|
|
166
|
-
*
|
|
175
|
+
/**
|
|
176
|
+
* Augment `baseResults` with memories reached by walking `hops` graph edges from the seeds across local AND global
|
|
177
|
+
* stores, each placed after its seed.
|
|
178
|
+
* Returns `baseResults` unchanged when `hops <= 0`, there are no base results, or nothing new survives the filters and
|
|
179
|
+
* the token budget.
|
|
180
|
+
*/
|
|
167
181
|
export function graphExpandRecall(baseResults, opts) {
|
|
168
182
|
const { hops, hippoRoot, globalRoot, tenantId } = opts;
|
|
169
183
|
if (hops <= 0 || baseResults.length === 0)
|
|
@@ -191,7 +205,8 @@ export function graphExpandRecall(baseResults, opts) {
|
|
|
191
205
|
return mergeKeptHits(baseResults, hitsByOrigin, keep);
|
|
192
206
|
}
|
|
193
207
|
function sortHitsWithinOrigin(hitsByOrigin) {
|
|
194
|
-
// Closer hops first within each origin group, then by inherited score; compareEntryIdentity only breaks same-hop,
|
|
208
|
+
// Closer hops first within each origin group, then by inherited score; compareEntryIdentity only breaks same-hop,
|
|
209
|
+
// same-score ties.
|
|
195
210
|
for (const hits of hitsByOrigin.values()) {
|
|
196
211
|
hits.sort((a, b) => {
|
|
197
212
|
const byHops = a.graphVia.hops - b.graphVia.hops;
|
|
@@ -205,8 +220,10 @@ function sortHitsWithinOrigin(hitsByOrigin) {
|
|
|
205
220
|
function selectWithinBudget(baseResults, allHits, opts) {
|
|
206
221
|
const budget = opts.budget ?? DEFAULT_RECALL_BUDGET;
|
|
207
222
|
const minResults = opts.minResults ?? 1;
|
|
208
|
-
// Budget selection is by score, not position, so a high-value graph hit can beat a low-score lexical distractor; the
|
|
209
|
-
//
|
|
223
|
+
// Budget selection is by score, not position, so a high-value graph hit can beat a low-score lexical distractor; the
|
|
224
|
+
// greedy pack uses `continue`,
|
|
225
|
+
// so the DISPLAY loop emits a hit only under a kept seed. The top --min-results base rows are never evicted; at least
|
|
226
|
+
// one result is kept.
|
|
210
227
|
const protectedCount = Math.min(Math.max(minResults, 1), baseResults.length);
|
|
211
228
|
const keep = new Set(baseResults.slice(0, protectedCount));
|
|
212
229
|
const price = opts.cost ?? ((r) => r.tokens);
|
package/dist/graph/stream.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Graph-retrieval ranked-list stream for RRF fusion: READ-ONLY, ranks `entries[]` indices by graph proximity to the
|
|
3
|
+
* strong lexical seeds.
|
|
4
|
+
* Unlike graph recall it only re-ranks in-pool, graph-reached, non-seed entries; scoring seeds would double-count
|
|
5
|
+
* BM25/dense.
|
|
6
|
+
* The score scale only sets the order inside this stream (RRF re-ranks by 1/(k + graphRank)), so do not tune it for a
|
|
7
|
+
* fused-score effect.
|
|
8
|
+
*/
|
|
4
9
|
import type { MemoryEntry } from '../core/memory.js';
|
|
5
10
|
/** Default hops expanded from each seed (MVP; hard cap MAX_HOPS=3 reused from graph recall). */
|
|
6
11
|
export declare const DEFAULT_GRAPH_HOPS = 2;
|
|
@@ -30,9 +35,16 @@ export interface GraphStreamOpts {
|
|
|
30
35
|
/** Per-hop fanout cap. Default DEFAULT_MAX_NEIGHBORS. */
|
|
31
36
|
maxNeighbors?: number;
|
|
32
37
|
}
|
|
33
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Pick the top `seedCount` candidates by best lexical rank (lowest position across BM25 and dense), strength =
|
|
40
|
+
* 1/(bestRank + 1). Pure.
|
|
41
|
+
*/
|
|
34
42
|
export declare function selectGraphSeeds(bm25Ranked: ReadonlyArray<number>, cosineRanked: ReadonlyArray<number>, seedCount: number): GraphSeed[];
|
|
35
|
-
/**
|
|
36
|
-
*
|
|
43
|
+
/**
|
|
44
|
+
* Produce the graph-retrieval ranked list: `entries[]` indices by graph proximity (desc) to the lexical `seeds`; absent
|
|
45
|
+
* indices fall to rrfFuse absentRank.
|
|
46
|
+
* Returns `[]` when there are no seeds/entries, the graph is empty, or nothing reached is in-pool, so the caller skips
|
|
47
|
+
* the 3rd fusion list.
|
|
48
|
+
*/
|
|
37
49
|
export declare function graphRankStream(entries: ReadonlyArray<MemoryEntry>, seeds: ReadonlyArray<GraphSeed>, opts: GraphStreamOpts): number[];
|
|
38
50
|
//# sourceMappingURL=stream.d.ts.map
|