hippo-memory 1.72.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/README.md +6 -4
- 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 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- 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 +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- 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} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- 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} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- 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 -7
- 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 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- 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 +35 -20
- package/dist/api/prompt-hook.js +66 -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} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- 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 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- 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} +54 -45
- 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 +27 -12
- 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 +34 -15
- 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 +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- 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 +58 -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 +33 -33
- package/dist/cli/auth.js +23 -31
- 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 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- 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 +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- 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 +5 -5
- package/dist/cli/object-verbs.js +13 -16
- 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 +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- 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 +16 -8
- 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 +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- 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 -4
- 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 -5
- 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 -5
- 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 +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- 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 -5
- 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 -4
- 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 -5
- 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 +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- 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 +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- 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 +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- 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 +38 -29
- 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 +22 -17
- 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 +87 -30
- package/dist/core/memory.js +82 -33
- 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 +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- 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.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- 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 -2
- package/dist/db/connect.js +8 -2
- 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 +40 -20
- 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/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- 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 -8
- package/dist/db/physics-state.js +17 -50
- 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 +20 -5
- package/dist/db/request-stores.js +15 -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 +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- 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 +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- 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 +17 -7
- 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 +72 -33
- 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 +11 -10
- 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 +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- 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 +17 -10
- 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 -6
- package/dist/learn/invalidation.js +62 -28
- 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 +21 -20
- 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 +61 -77
- 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 +59 -23
- 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 +19 -9
- 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 +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- 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 +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- 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 +550 -97
- 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 -17
- 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 +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- 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 +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -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 +90 -41
- 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 +97 -63
- 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 +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- 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 +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- 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 +11 -12
- 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 +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- 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 +4 -2
- package/dist/store/index.js +2 -1
- 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 +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- 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 +261 -219
- 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 +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- 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 +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- 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 +12 -5
- 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 +9 -6
- 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 +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- 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.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- 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 +97 -38
- 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 -18
- package/dist/store/sqlite/store.js +95 -33
- 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 +25 -11
- package/dist/store/summaries.js +84 -27
- 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 +8 -4
- 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 +28 -11
- 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 +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- 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 +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- 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 +16 -4
- package/dist/util/request-scope.js +19 -6
- 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 +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- 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/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- 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 +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- 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 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- 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 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- 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 -21
- package/dist/store/sqlite/local.js +0 -39
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
/** Project = nearest ancestor of cwd with `.hippo` (else `.git`); home and the temp root never are, and no marker means
|
|
2
|
-
*
|
|
1
|
+
/** Project = nearest ancestor of cwd with `.hippo` (else `.git`); home and the temp root never are, and no marker means
|
|
2
|
+
* user-global (empty name).
|
|
3
|
+
* Name: `.hippo-project.json`, else the normalised `origin`, else the folder name. Must not import shared.ts /
|
|
4
|
+
* store.ts / api/index.ts (cycle). */
|
|
3
5
|
/** The project a working directory belongs to. */
|
|
4
6
|
export interface ProjectIdentity {
|
|
5
7
|
/** Realpath-resolved root directory of the project (the start dir when not in a project). */
|
|
6
8
|
root: string;
|
|
7
|
-
/** The project id rows are stamped with: the project file's id, the origin remote, or legacyName; '' outside a
|
|
9
|
+
/** The project id rows are stamped with: the project file's id, the origin remote, or legacyName; '' outside a
|
|
10
|
+
* project. */
|
|
8
11
|
name: string;
|
|
9
|
-
/** The folder rule rows written before ids carry: the root's lowercased basename, or its repo's for a linked
|
|
12
|
+
/** The folder rule rows written before ids carry: the root's lowercased basename, or its repo's for a linked
|
|
13
|
+
* worktree with no `.hippo`. */
|
|
10
14
|
legacyName: string;
|
|
11
15
|
/** Every other name this root resolves to (the project file id, the origin remote even
|
|
12
16
|
* with the rule off, legacyName), so rows written under an earlier id stay readable. */
|
|
@@ -22,7 +26,8 @@ export interface ResolveProjectIdentityOpts {
|
|
|
22
26
|
}
|
|
23
27
|
/** Clear the per-process identity cache and the remote switch it read (test seam). */
|
|
24
28
|
export declare function clearProjectIdentityCache(): void;
|
|
25
|
-
/** Resolves the project identity for a working directory (default process.cwd()); results are cached per resolved
|
|
29
|
+
/** Resolves the project identity for a working directory (default process.cwd()); results are cached per resolved
|
|
30
|
+
* input path. */
|
|
26
31
|
export declare function resolveProjectIdentity(cwd?: string, opts?: ResolveProjectIdentityOpts): ProjectIdentity;
|
|
27
32
|
/** Nearest ancestor `.hippo` below home and the temp root (never projects; on Windows the temp root sits inside home).
|
|
28
33
|
* Everything is realpath'd so a symlinked temp root or cwd still matches its bound. */
|
|
@@ -38,29 +43,41 @@ export declare function projectId(project: ProjectRef): string;
|
|
|
38
43
|
export declare function projectNames(project: ProjectRef): readonly string[];
|
|
39
44
|
export declare const MAX_PROJECT_ALIASES = 10;
|
|
40
45
|
export declare const MCP_PROJECT_SCOPED_HEADER = "X-Hippo-Project-Scoped";
|
|
41
|
-
/** Refuses a caller's project that is blank (it would stamp user-global), past the caps, or unlike the resolver's ids:
|
|
42
|
-
*
|
|
46
|
+
/** Refuses a caller's project that is blank (it would stamp user-global), past the caps, or unlike the resolver's ids:
|
|
47
|
+
* rows match
|
|
48
|
+
* verbatim, so a rewrite would split a project. Inner spaces pass, since a checkout with no remote is named by its
|
|
49
|
+
* folder. */
|
|
43
50
|
export declare function assertCallerProject(project: {
|
|
44
51
|
readonly name: string;
|
|
45
52
|
readonly aliases?: readonly string[];
|
|
46
53
|
}): void;
|
|
47
54
|
/** `origin_project IN (?, ...)` with one placeholder per name; an empty list matches nothing. */
|
|
48
55
|
export declare function originInSql(names: readonly string[], column?: string): string;
|
|
49
|
-
/** Classifies a memory's origin_project against the active project. An empty current id (home or markerless cwd) puts
|
|
50
|
-
*
|
|
56
|
+
/** Classifies a memory's origin_project against the active project. An empty current id (home or markerless cwd) puts
|
|
57
|
+
* everything in scope;
|
|
58
|
+
* NULL/undefined origin (legacy row, or a shared-store write naming none) counts as cross-project: deny by default
|
|
59
|
+
* for a security partition. */
|
|
51
60
|
export declare function classifyOriginProject(origin: string | null | undefined, current: ProjectRef): 'project' | 'user-global' | 'cross-project';
|
|
52
|
-
/** The global Hippo store directory ($HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo); getGlobalRoot
|
|
61
|
+
/** The global Hippo store directory ($HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo); getGlobalRoot
|
|
62
|
+
* (sharing/global-store.ts) returns it.
|
|
53
63
|
* Leaf module so store migrations can use it without importing sharing/ (store cycle). */
|
|
54
64
|
export declare function resolveGlobalRootDir(): string;
|
|
55
|
-
/** True when `p` IS the global store root, so a global store whose parent chain contains `.git`/`.hippo` (git-managed
|
|
56
|
-
*
|
|
65
|
+
/** True when `p` IS the global store root, so a global store whose parent chain contains `.git`/`.hippo` (git-managed
|
|
66
|
+
* HIPPO_HOME) still backfills as
|
|
67
|
+
* user-global ('') instead of being stamped with the surrounding repo's name, which would hide the global corpus
|
|
68
|
+
* from every project. */
|
|
57
69
|
export declare function isGlobalStoreRoot(p: string): boolean;
|
|
58
|
-
/** Parses a memory's origin from its provenance `source`: `shared:<project>:<ts>` and `promoted:<localRoot>` name the
|
|
59
|
-
*
|
|
70
|
+
/** Parses a memory's origin from its provenance `source`: `shared:<project>:<ts>` and `promoted:<localRoot>` name the
|
|
71
|
+
* owning project; the home dir basename
|
|
72
|
+
* maps to '' (user-global). Returns null without origin evidence. Pure string logic, since recorded paths may no
|
|
73
|
+
* longer exist. */
|
|
60
74
|
export declare function originFromSource(source: string | null | undefined, homeName?: string): string | null;
|
|
61
|
-
/** The origin to stamp on a memory written from cwd: its project name, or '' (user-global, injectable everywhere)
|
|
62
|
-
*
|
|
75
|
+
/** The origin to stamp on a memory written from cwd: its project name, or '' (user-global, injectable everywhere)
|
|
76
|
+
* outside a project.
|
|
77
|
+
* NULL means no known project: a legacy row with no evidence, or a write to a shared store that named none; ambient
|
|
78
|
+
* context treats it as deny. */
|
|
63
79
|
export declare function deriveOriginProject(cwd?: string, opts?: ResolveProjectIdentityOpts): string;
|
|
64
|
-
/** The origin for a write that names none: NULL on a shared store, whose folder is no caller's project, else the
|
|
80
|
+
/** The origin for a write that names none: NULL on a shared store, whose folder is no caller's project, else the
|
|
81
|
+
* folder's project. */
|
|
65
82
|
export declare function fallbackOrigin(hippoRoot: string): string | null;
|
|
66
83
|
//# sourceMappingURL=project-identity.d.ts.map
|
|
@@ -5,9 +5,10 @@ import * as path from 'path';
|
|
|
5
5
|
import { BadRequestError } from './api-errors.js';
|
|
6
6
|
import { isSharedStore, loadConfig } from './config.js';
|
|
7
7
|
import { MAX_ID_LEN } from '../util/limits.js';
|
|
8
|
-
import { errorMessage, log } from '../util/log.js';
|
|
8
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
9
9
|
import { originRemoteId, projectFileId } from './project-remote.js';
|
|
10
10
|
import { realpathOrResolve } from '../util/real-path.js';
|
|
11
|
+
import { placeholders } from '../util/sql.js';
|
|
11
12
|
const MAX_WALK_DEPTH = 64;
|
|
12
13
|
const identityCache = new Map();
|
|
13
14
|
let remoteSwitch = null;
|
|
@@ -19,8 +20,9 @@ export function clearProjectIdentityCache() {
|
|
|
19
20
|
// The global store's config only: a per-store switch would stamp one checkout two ways.
|
|
20
21
|
function remoteRuleOn() {
|
|
21
22
|
const globalRoot = resolveGlobalRootDir();
|
|
22
|
-
if (remoteSwitch?.globalRoot !== globalRoot)
|
|
23
|
+
if (remoteSwitch?.globalRoot !== globalRoot) {
|
|
23
24
|
remoteSwitch = { globalRoot, on: loadConfig(globalRoot).projectIdentity.remote };
|
|
25
|
+
}
|
|
24
26
|
return remoteSwitch.on;
|
|
25
27
|
}
|
|
26
28
|
/** The id a root names itself by plus every rung that resolves; only the root's own
|
|
@@ -56,11 +58,13 @@ function isDirectoryAt(p) {
|
|
|
56
58
|
return fs.statSync(p).isDirectory();
|
|
57
59
|
}
|
|
58
60
|
catch (err) {
|
|
59
|
-
|
|
61
|
+
// Most folders on the walk up hold no marker, so a failed stat is the normal answer.
|
|
62
|
+
log.debug(`project identity: no marker at ${p}: ${errorMessage(err)}`, errorFields(err));
|
|
60
63
|
return false;
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
|
-
/** Resolves the project identity for a working directory (default process.cwd()); results are cached per resolved
|
|
66
|
+
/** Resolves the project identity for a working directory (default process.cwd()); results are cached per resolved
|
|
67
|
+
* input path. */
|
|
64
68
|
export function resolveProjectIdentity(cwd, opts) {
|
|
65
69
|
const startInput = path.resolve(cwd ?? process.cwd());
|
|
66
70
|
const cacheable = !opts?.homeDir && !opts?.stopDir;
|
|
@@ -179,14 +183,17 @@ export function projectNames(project) {
|
|
|
179
183
|
// Each project name is matched against every candidate row, so the caller's list stays short.
|
|
180
184
|
export const MAX_PROJECT_ALIASES = 10;
|
|
181
185
|
export const MCP_PROJECT_SCOPED_HEADER = 'X-Hippo-Project-Scoped';
|
|
182
|
-
/** Refuses a caller's project that is blank (it would stamp user-global), past the caps, or unlike the resolver's ids:
|
|
183
|
-
*
|
|
186
|
+
/** Refuses a caller's project that is blank (it would stamp user-global), past the caps, or unlike the resolver's ids:
|
|
187
|
+
* rows match
|
|
188
|
+
* verbatim, so a rewrite would split a project. Inner spaces pass, since a checkout with no remote is named by its
|
|
189
|
+
* folder. */
|
|
184
190
|
export function assertCallerProject(project) {
|
|
185
191
|
const { name, aliases = [] } = project;
|
|
186
192
|
if (name.trim() === '')
|
|
187
193
|
throw new BadRequestError('project name must not be blank');
|
|
188
|
-
if (aliases.length > MAX_PROJECT_ALIASES)
|
|
194
|
+
if (aliases.length > MAX_PROJECT_ALIASES) {
|
|
189
195
|
throw new BadRequestError(`project aliases: at most ${MAX_PROJECT_ALIASES}`);
|
|
196
|
+
}
|
|
190
197
|
if ([name, ...aliases].some((n) => n.length > MAX_ID_LEN)) {
|
|
191
198
|
throw new BadRequestError(`project names: at most ${MAX_ID_LEN} characters each`);
|
|
192
199
|
}
|
|
@@ -196,10 +203,12 @@ export function assertCallerProject(project) {
|
|
|
196
203
|
}
|
|
197
204
|
/** `origin_project IN (?, ...)` with one placeholder per name; an empty list matches nothing. */
|
|
198
205
|
export function originInSql(names, column = 'origin_project') {
|
|
199
|
-
return names.length === 0 ? '0' : `${column} IN (${names.
|
|
206
|
+
return names.length === 0 ? '0' : `${column} IN (${placeholders(names.length)})`;
|
|
200
207
|
}
|
|
201
|
-
/** Classifies a memory's origin_project against the active project. An empty current id (home or markerless cwd) puts
|
|
202
|
-
*
|
|
208
|
+
/** Classifies a memory's origin_project against the active project. An empty current id (home or markerless cwd) puts
|
|
209
|
+
* everything in scope;
|
|
210
|
+
* NULL/undefined origin (legacy row, or a shared-store write naming none) counts as cross-project: deny by default
|
|
211
|
+
* for a security partition. */
|
|
203
212
|
export function classifyOriginProject(origin, current) {
|
|
204
213
|
if (projectId(current) === '')
|
|
205
214
|
return 'project';
|
|
@@ -209,7 +218,8 @@ export function classifyOriginProject(origin, current) {
|
|
|
209
218
|
return 'user-global';
|
|
210
219
|
return projectNames(current).includes(origin) ? 'project' : 'cross-project';
|
|
211
220
|
}
|
|
212
|
-
/** The global Hippo store directory ($HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo); getGlobalRoot
|
|
221
|
+
/** The global Hippo store directory ($HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo); getGlobalRoot
|
|
222
|
+
* (sharing/global-store.ts) returns it.
|
|
213
223
|
* Leaf module so store migrations can use it without importing sharing/ (store cycle). */
|
|
214
224
|
export function resolveGlobalRootDir() {
|
|
215
225
|
const hippoHome = envHippoHome();
|
|
@@ -220,13 +230,17 @@ export function resolveGlobalRootDir() {
|
|
|
220
230
|
return path.join(xdgData, 'hippo');
|
|
221
231
|
return path.join(os.homedir(), '.hippo');
|
|
222
232
|
}
|
|
223
|
-
/** True when `p` IS the global store root, so a global store whose parent chain contains `.git`/`.hippo` (git-managed
|
|
224
|
-
*
|
|
233
|
+
/** True when `p` IS the global store root, so a global store whose parent chain contains `.git`/`.hippo` (git-managed
|
|
234
|
+
* HIPPO_HOME) still backfills as
|
|
235
|
+
* user-global ('') instead of being stamped with the surrounding repo's name, which would hide the global corpus
|
|
236
|
+
* from every project. */
|
|
225
237
|
export function isGlobalStoreRoot(p) {
|
|
226
238
|
return samePath(realpathOrResolve(path.resolve(p)), realpathOrResolve(resolveGlobalRootDir()));
|
|
227
239
|
}
|
|
228
|
-
/** Parses a memory's origin from its provenance `source`: `shared:<project>:<ts>` and `promoted:<localRoot>` name the
|
|
229
|
-
*
|
|
240
|
+
/** Parses a memory's origin from its provenance `source`: `shared:<project>:<ts>` and `promoted:<localRoot>` name the
|
|
241
|
+
* owning project; the home dir basename
|
|
242
|
+
* maps to '' (user-global). Returns null without origin evidence. Pure string logic, since recorded paths may no
|
|
243
|
+
* longer exist. */
|
|
230
244
|
export function originFromSource(source, homeName) {
|
|
231
245
|
if (!source)
|
|
232
246
|
return null;
|
|
@@ -247,12 +261,15 @@ export function originFromSource(source, homeName) {
|
|
|
247
261
|
}
|
|
248
262
|
return null;
|
|
249
263
|
}
|
|
250
|
-
/** The origin to stamp on a memory written from cwd: its project name, or '' (user-global, injectable everywhere)
|
|
251
|
-
*
|
|
264
|
+
/** The origin to stamp on a memory written from cwd: its project name, or '' (user-global, injectable everywhere)
|
|
265
|
+
* outside a project.
|
|
266
|
+
* NULL means no known project: a legacy row with no evidence, or a write to a shared store that named none; ambient
|
|
267
|
+
* context treats it as deny. */
|
|
252
268
|
export function deriveOriginProject(cwd, opts) {
|
|
253
269
|
return resolveProjectIdentity(cwd, opts).name;
|
|
254
270
|
}
|
|
255
|
-
/** The origin for a write that names none: NULL on a shared store, whose folder is no caller's project, else the
|
|
271
|
+
/** The origin for a write that names none: NULL on a shared store, whose folder is no caller's project, else the
|
|
272
|
+
* folder's project. */
|
|
256
273
|
export function fallbackOrigin(hippoRoot) {
|
|
257
274
|
return isSharedStore(hippoRoot) ? null : deriveOriginProject(path.dirname(path.resolve(hippoRoot)));
|
|
258
275
|
}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
/** The config file git reads for a checkout: `.git/config`, a linked
|
|
1
|
+
/** The config file git reads for a checkout: `.git/config`, a linked
|
|
2
|
+
* worktree's `<commondir>/config`, a submodule's `<gitdir>/config`. */
|
|
2
3
|
export declare function gitConfigPath(gitRoot: string): string | null;
|
|
3
|
-
/** `remote.origin.url` from a config file's text, the first value
|
|
4
|
+
/** `remote.origin.url` from a config file's text, the first value
|
|
5
|
+
* as git fetch uses; the subsection name is case-sensitive. */
|
|
4
6
|
export declare function originUrlFromConfig(text: string): string | null;
|
|
5
|
-
/** `host/path` for a network remote, so ssh, scp and https forms agree; null for a local path, which would put a
|
|
7
|
+
/** `host/path` for a network remote, so ssh, scp and https forms agree; null for a local path, which would put a
|
|
8
|
+
* user path into rows. */
|
|
6
9
|
export declare function normaliseRemote(url: string): string | null;
|
|
7
10
|
/** The normalised origin of the checkout rooted at gitRoot, or null when it has none a project can be named by. */
|
|
8
11
|
export declare function originRemoteId(gitRoot: string): string | null;
|
|
9
12
|
export declare const PROJECT_FILE = ".hippo-project.json";
|
|
10
|
-
/** The `id` a team committed in `.hippo-project.json` at root,
|
|
13
|
+
/** The `id` a team committed in `.hippo-project.json` at root,
|
|
14
|
+
* lowercased like every project name; null when absent or unusable. */
|
|
11
15
|
export declare function projectFileId(root: string): string | null;
|
|
12
16
|
//# sourceMappingURL=project-remote.d.ts.map
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
// A checkout's `origin` remote, read from its git config file and normalised into a project id; no git process, so the
|
|
1
|
+
// A checkout's `origin` remote, read from its git config file and normalised into a project id; no git process, so the
|
|
2
|
+
// prompt hook can call it.
|
|
2
3
|
import * as fs from 'fs';
|
|
3
4
|
import * as path from 'path';
|
|
4
5
|
import { isObjectLike, isStringValue } from './capture-contract.js';
|
|
5
|
-
import { errorMessage, log } from '../util/log.js';
|
|
6
|
-
/** The config file git reads for a checkout: `.git/config`, a linked
|
|
6
|
+
import { errorMessage, log, errorFields } from '../util/log.js';
|
|
7
|
+
/** The config file git reads for a checkout: `.git/config`, a linked
|
|
8
|
+
* worktree's `<commondir>/config`, a submodule's `<gitdir>/config`. */
|
|
7
9
|
export function gitConfigPath(gitRoot) {
|
|
8
10
|
const marker = path.join(gitRoot, '.git');
|
|
9
11
|
try {
|
|
@@ -20,11 +22,13 @@ export function gitConfigPath(gitRoot) {
|
|
|
20
22
|
return path.join(path.resolve(linkDir, fs.readFileSync(commondir, 'utf8').trim()), 'config');
|
|
21
23
|
}
|
|
22
24
|
catch (err) {
|
|
23
|
-
|
|
25
|
+
// A folder with no readable .git has no remote to name a project by, so the caller falls back to the folder name.
|
|
26
|
+
log.debug(`project remote: no git config for ${gitRoot}: ${errorMessage(err)}`, errorFields(err));
|
|
24
27
|
return null;
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
|
-
/** The text of a `.git` file, or null when `.git` is a folder; one descriptor answers both, so the path cannot
|
|
30
|
+
/** The text of a `.git` file, or null when `.git` is a folder; one descriptor answers both, so the path cannot
|
|
31
|
+
* change in between. */
|
|
28
32
|
function gitFilePointer(marker) {
|
|
29
33
|
const fd = fs.openSync(marker, 'r');
|
|
30
34
|
try {
|
|
@@ -34,7 +38,8 @@ function gitFilePointer(marker) {
|
|
|
34
38
|
fs.closeSync(fd);
|
|
35
39
|
}
|
|
36
40
|
}
|
|
37
|
-
/** One config value with git's quoting: `"` toggles quoting,
|
|
41
|
+
/** One config value with git's quoting: `"` toggles quoting,
|
|
42
|
+
* backslash escapes, and an unquoted `#` or `;` starts a comment. */
|
|
38
43
|
function configValue(raw) {
|
|
39
44
|
let out = '';
|
|
40
45
|
let quoted = false;
|
|
@@ -58,7 +63,8 @@ function configValue(raw) {
|
|
|
58
63
|
}
|
|
59
64
|
const SECTION = /^\[\s*([A-Za-z0-9.-]+)(?:\s+"((?:[^"\\]|\\.)*)")?\s*\](.*)$/;
|
|
60
65
|
const ENTRY = /^([A-Za-z][A-Za-z0-9-]*)\s*(?:=(.*))?$/;
|
|
61
|
-
/** `remote.origin.url` from a config file's text, the first value
|
|
66
|
+
/** `remote.origin.url` from a config file's text, the first value
|
|
67
|
+
* as git fetch uses; the subsection name is case-sensitive. */
|
|
62
68
|
export function originUrlFromConfig(text) {
|
|
63
69
|
let inOrigin = false;
|
|
64
70
|
for (const raw of text.split(/\r?\n/)) {
|
|
@@ -89,7 +95,8 @@ function azureDevOps(hostPath) {
|
|
|
89
95
|
const https = legacy ? `dev.azure.com/${legacy[1]}/${legacy[2]}` : hostPath;
|
|
90
96
|
return https.startsWith('dev.azure.com/') ? https.replace('/_git/', '/') : https;
|
|
91
97
|
}
|
|
92
|
-
/** `host/path` for a network remote, so ssh, scp and https forms agree; null for a local path, which would put a
|
|
98
|
+
/** `host/path` for a network remote, so ssh, scp and https forms agree; null for a local path, which would put a
|
|
99
|
+
* user path into rows. */
|
|
93
100
|
export function normaliseRemote(url) {
|
|
94
101
|
// A query or fragment can carry a token (`?private_token=`) and never names the repo.
|
|
95
102
|
const u = url.trim().replace(/[?#].*$/, '');
|
|
@@ -107,9 +114,16 @@ export function normaliseRemote(url) {
|
|
|
107
114
|
return null;
|
|
108
115
|
hostPath = `${scp[1]}/${scp[2]}`;
|
|
109
116
|
}
|
|
110
|
-
const tidy = hostPath
|
|
117
|
+
const tidy = hostPath
|
|
118
|
+
.toLowerCase()
|
|
119
|
+
.replace(/\\/g, '/')
|
|
120
|
+
.replace(/\/{2,}/g, '/')
|
|
121
|
+
.replace(/\/+$/, '')
|
|
122
|
+
.replace(/\.git$/, '')
|
|
123
|
+
.replace(/\/+$/, '');
|
|
111
124
|
const id = azureDevOps(tidy);
|
|
112
|
-
// A colon would break the `shared:<project>:` source format; whitespace means this was no URL; an `@` left in a path
|
|
125
|
+
// A colon would break the `shared:<project>:` source format; whitespace means this was no URL; an `@` left in a path
|
|
126
|
+
// may be a credential.
|
|
113
127
|
return /^[^/]+\/./.test(id) && !/[:\s@]/.test(id) ? id : null;
|
|
114
128
|
}
|
|
115
129
|
/** The normalised origin of the checkout rooted at gitRoot, or null when it has none a project can be named by. */
|
|
@@ -122,12 +136,14 @@ export function originRemoteId(gitRoot) {
|
|
|
122
136
|
return url === null ? null : normaliseRemote(url);
|
|
123
137
|
}
|
|
124
138
|
catch (err) {
|
|
125
|
-
|
|
139
|
+
// A checkout whose .git holds no config has no origin; the project is then named by its folder.
|
|
140
|
+
log.debug(`project remote: ${file} not read: ${errorMessage(err)}`, errorFields(err));
|
|
126
141
|
return null;
|
|
127
142
|
}
|
|
128
143
|
}
|
|
129
144
|
export const PROJECT_FILE = '.hippo-project.json';
|
|
130
|
-
/** The `id` a team committed in `.hippo-project.json` at root,
|
|
145
|
+
/** The `id` a team committed in `.hippo-project.json` at root,
|
|
146
|
+
* lowercased like every project name; null when absent or unusable. */
|
|
131
147
|
export function projectFileId(root) {
|
|
132
148
|
const file = path.join(root, PROJECT_FILE);
|
|
133
149
|
if (!fs.existsSync(file))
|
|
@@ -139,10 +155,11 @@ export function projectFileId(root) {
|
|
|
139
155
|
// No slash: a committed file in an untrusted clone must not claim a remote-shaped id like `github.com/acme/api`.
|
|
140
156
|
if (id !== '' && id.length <= 200 && !/[:\s/\\]/.test(id))
|
|
141
157
|
return id;
|
|
142
|
-
log.warn(`${file}: "id" must be a non-empty string with no colon, slash or spaces;
|
|
158
|
+
log.warn(`${file}: "id" must be a non-empty string with no colon, slash or spaces; ` +
|
|
159
|
+
'using the remote or folder name instead');
|
|
143
160
|
}
|
|
144
161
|
catch (err) {
|
|
145
|
-
log.warn(`${file} not read: ${errorMessage(err)}; using the remote or folder name instead
|
|
162
|
+
log.warn(`${file} not read: ${errorMessage(err)}; using the remote or folder name instead`, errorFields(err));
|
|
146
163
|
}
|
|
147
164
|
return null;
|
|
148
165
|
}
|
|
@@ -1,14 +1,28 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Recall-side scope predicates, in a leaf module so search-both.ts can apply the same default-deny rule to
|
|
3
|
+
* searchBothHybrid's candidate loads without an
|
|
4
|
+
* import cycle. src/api/index.ts imports these and re-exports them for back-compat (`api.isPrivateScope`, tests
|
|
5
|
+
* importing `passesScopeFilterForRecall`).
|
|
6
|
+
*/
|
|
3
7
|
import { ForbiddenError } from './api-errors.js';
|
|
4
|
-
/**
|
|
5
|
-
*
|
|
8
|
+
/**
|
|
9
|
+
* Literal scopes excluded from recall by default-deny when the caller passes no `scope`; read by the SQL clause in
|
|
10
|
+
* `loadSearchRows` and by
|
|
11
|
+
* `passesScopeFilterForRecall`. Invariant: never empty, or quarantine scopes would pass both paths silently (the
|
|
12
|
+
* module-load assertion below pins this).
|
|
13
|
+
*/
|
|
6
14
|
export declare const RECALL_DEFAULT_DENY_SCOPES: readonly ["unknown:legacy"];
|
|
7
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* @internal Runtime guard against blanking a load-bearing literal array; `as const` arrays widen via `readonly T[]` at
|
|
17
|
+
* the call site, so the empty case
|
|
8
18
|
* is reachable and testable. */
|
|
9
19
|
export declare function assertNonEmpty<T>(arr: readonly T[], name: string): void;
|
|
10
|
-
/**
|
|
11
|
-
*
|
|
20
|
+
/**
|
|
21
|
+
* Source-agnostic private-scope detector: private means `<lowercase-source>:private:<rest>` (`slack:private:Cabc`; not
|
|
22
|
+
* `slack:public:x`, null, '',
|
|
23
|
+
* 'private:foo'). The single source of truth for api.recall, the MCP server, the CLI and search-both.ts, so connector
|
|
24
|
+
* work cannot drift.
|
|
25
|
+
*/
|
|
12
26
|
export declare const PRIVATE_SCOPE_RE: RegExp;
|
|
13
27
|
/** True when `scope` matches the `<source>:private:*` shape. */
|
|
14
28
|
export declare function isPrivateScope(scope: string | null | undefined): boolean;
|
|
@@ -29,17 +43,25 @@ export declare function canTouchScope(actor: {
|
|
|
29
43
|
/** canTouchScope for a caller known by its own personal scope, as a store method receives it. */
|
|
30
44
|
export declare function ownScopeTouches(ownScope: string | null, scope: string | null): boolean;
|
|
31
45
|
/** JS half of the recall default-deny rule (SQL half: `loadSearchRows`). A non-empty `requested` needs an exact match;
|
|
32
|
-
* otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the
|
|
46
|
+
* otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the
|
|
47
|
+
* caller's `ownScope` pass.
|
|
48
|
+
*/
|
|
33
49
|
export declare function passesScopeFilterForRecall(scope: string | null, requested: string | undefined, ownScope?: string | null): boolean;
|
|
34
|
-
/**
|
|
35
|
-
*
|
|
50
|
+
/**
|
|
51
|
+
* CLI `--scope` variant: an explicit `--scope X` UNLOCKS scope X on top of the default-admitted set rather than
|
|
52
|
+
* narrowing to X (api.recall keeps 'exact').
|
|
53
|
+
* Includes private/quarantine scopes (owner access); a named personal scope never unlocks: the CLI has no caller
|
|
54
|
+
* identity.
|
|
55
|
+
*/
|
|
36
56
|
export declare function passesCliRecallScopeFilter(scope: string | null, requested: string | undefined): boolean;
|
|
37
57
|
/** Thrown when a caller requests a scope its role may not read; the HTTP layer maps it to 403. */
|
|
38
58
|
export declare class ScopeForbiddenError extends ForbiddenError {
|
|
39
59
|
readonly scope: string;
|
|
40
60
|
constructor(scope: string);
|
|
41
61
|
}
|
|
42
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* True for scopes default-deny hides (`<source>:private:*` and the quarantine buckets); naming one explicitly unlocks
|
|
64
|
+
* it, so naming one needs
|
|
43
65
|
* authorization. */
|
|
44
66
|
export declare function isRestrictedScope(scope: string | null | undefined): boolean;
|
|
45
67
|
/** The identity a scope check runs against: a role, any scope grants, and the person who owns the key. */
|
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Recall-side scope predicates, in a leaf module so search-both.ts can apply the same default-deny rule to
|
|
3
|
+
* searchBothHybrid's candidate loads without an
|
|
4
|
+
* import cycle. src/api/index.ts imports these and re-exports them for back-compat (`api.isPrivateScope`, tests
|
|
5
|
+
* importing `passesScopeFilterForRecall`).
|
|
6
|
+
*/
|
|
3
7
|
import { BadRequestError, ForbiddenError } from './api-errors.js';
|
|
4
8
|
import { MAX_ID_LEN } from '../util/limits.js';
|
|
5
|
-
/**
|
|
6
|
-
*
|
|
9
|
+
/**
|
|
10
|
+
* Literal scopes excluded from recall by default-deny when the caller passes no `scope`; read by the SQL clause in
|
|
11
|
+
* `loadSearchRows` and by
|
|
12
|
+
* `passesScopeFilterForRecall`. Invariant: never empty, or quarantine scopes would pass both paths silently (the
|
|
13
|
+
* module-load assertion below pins this).
|
|
14
|
+
*/
|
|
7
15
|
export const RECALL_DEFAULT_DENY_SCOPES = ['unknown:legacy'];
|
|
8
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* @internal Runtime guard against blanking a load-bearing literal array; `as const` arrays widen via `readonly T[]` at
|
|
18
|
+
* the call site, so the empty case
|
|
9
19
|
* is reachable and testable. */
|
|
10
20
|
export function assertNonEmpty(arr, name) {
|
|
11
21
|
if (arr.length === 0) {
|
|
@@ -13,8 +23,12 @@ export function assertNonEmpty(arr, name) {
|
|
|
13
23
|
}
|
|
14
24
|
}
|
|
15
25
|
assertNonEmpty(RECALL_DEFAULT_DENY_SCOPES, 'RECALL_DEFAULT_DENY_SCOPES');
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
26
|
+
/**
|
|
27
|
+
* Source-agnostic private-scope detector: private means `<lowercase-source>:private:<rest>` (`slack:private:Cabc`; not
|
|
28
|
+
* `slack:public:x`, null, '',
|
|
29
|
+
* 'private:foo'). The single source of truth for api.recall, the MCP server, the CLI and search-both.ts, so connector
|
|
30
|
+
* work cannot drift.
|
|
31
|
+
*/
|
|
18
32
|
export const PRIVATE_SCOPE_RE = /^[a-z][a-z0-9_-]*:private:/;
|
|
19
33
|
function isScopeString(value) {
|
|
20
34
|
return typeof value === 'string';
|
|
@@ -56,15 +70,21 @@ export function ownScopeTouches(ownScope, scope) {
|
|
|
56
70
|
return !isPersonalScope(scope) || scope === ownScope;
|
|
57
71
|
}
|
|
58
72
|
/** JS half of the recall default-deny rule (SQL half: `loadSearchRows`). A non-empty `requested` needs an exact match;
|
|
59
|
-
* otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the
|
|
73
|
+
* otherwise `<source>:private:*` and `RECALL_DEFAULT_DENY_SCOPES` buckets are denied, while null, public scopes and the
|
|
74
|
+
* caller's `ownScope` pass.
|
|
75
|
+
*/
|
|
60
76
|
export function passesScopeFilterForRecall(scope, requested, ownScope) {
|
|
61
77
|
if (requested !== undefined && requested !== '') {
|
|
62
78
|
return scope === requested;
|
|
63
79
|
}
|
|
64
80
|
return !isRestrictedScope(scope) || (ownScope != null && scope === ownScope);
|
|
65
81
|
}
|
|
66
|
-
/**
|
|
67
|
-
*
|
|
82
|
+
/**
|
|
83
|
+
* CLI `--scope` variant: an explicit `--scope X` UNLOCKS scope X on top of the default-admitted set rather than
|
|
84
|
+
* narrowing to X (api.recall keeps 'exact').
|
|
85
|
+
* Includes private/quarantine scopes (owner access); a named personal scope never unlocks: the CLI has no caller
|
|
86
|
+
* identity.
|
|
87
|
+
*/
|
|
68
88
|
export function passesCliRecallScopeFilter(scope, requested) {
|
|
69
89
|
if (requested !== undefined && requested !== '' && !isPersonalScope(requested) && scope === requested) {
|
|
70
90
|
return true;
|
|
@@ -80,14 +100,20 @@ export class ScopeForbiddenError extends ForbiddenError {
|
|
|
80
100
|
this.scope = scope;
|
|
81
101
|
}
|
|
82
102
|
}
|
|
83
|
-
/**
|
|
103
|
+
/**
|
|
104
|
+
* True for scopes default-deny hides (`<source>:private:*` and the quarantine buckets); naming one explicitly unlocks
|
|
105
|
+
* it, so naming one needs
|
|
84
106
|
* authorization. */
|
|
85
107
|
export function isRestrictedScope(scope) {
|
|
86
108
|
if (!isScopeString(scope))
|
|
87
109
|
return false;
|
|
88
|
-
// SAFETY: RECALL_DEFAULT_DENY_SCOPES is a readonly tuple of string literals; widening the array lets .includes() take
|
|
89
|
-
//
|
|
90
|
-
|
|
110
|
+
// SAFETY: RECALL_DEFAULT_DENY_SCOPES is a readonly tuple of string literals; widening the array lets .includes() take
|
|
111
|
+
// any scope.
|
|
112
|
+
// `:private:` anywhere, any case, matches the SQL default-deny in src/store/search-rows.ts so JS never admits what
|
|
113
|
+
// SQL hides.
|
|
114
|
+
return (isPrivateScope(scope) ||
|
|
115
|
+
/:private:/i.test(scope) ||
|
|
116
|
+
RECALL_DEFAULT_DENY_SCOPES.includes(scope));
|
|
91
117
|
}
|
|
92
118
|
/** Personal rows answer to their owner alone: role, key grants and resolver scopes never
|
|
93
119
|
* open one. Else admin reads all; a member needs an exact grant on a restricted scope. */
|
|
@@ -132,7 +158,8 @@ export function commonDerivationScope(scopes) {
|
|
|
132
158
|
/** Map-partition key for consolidate/dag/dedup producers: tenant + derivation scope + origin project,
|
|
133
159
|
* so a derived row never blends two restricted scopes, a mixed pair, or two projects. */
|
|
134
160
|
export function derivationPartitionKey(tenantId, scope, origin) {
|
|
135
|
-
|
|
161
|
+
// unstamped, unknown and named never share a bucket
|
|
162
|
+
const project = origin === undefined ? '\u0002' : (origin ?? '\u0001');
|
|
136
163
|
return `${tenantId}\u0000${derivationScope(scope) ?? ''}\u0000${project}`;
|
|
137
164
|
}
|
|
138
165
|
//# sourceMappingURL=recall-scope.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Normalize content for rejection digests: NFC, lowercase, collapse whitespace runs, trim. No punctuation stripping:
|
|
2
|
+
* over-normalizing causes false refusals, worse than misses. */
|
|
3
|
+
export declare function normalizeValueForRejection(content: string): string;
|
|
4
|
+
/** Full 64-char sha256 hex of the normalized content: a tombstone key needs collision resistance, not the 16-char
|
|
5
|
+
* redaction hash used for query hashing. */
|
|
6
|
+
export declare function rejectionDigest(content: string): string;
|
|
7
|
+
//# sourceMappingURL=rejection-digest.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Tombstone keys are a pure hash of the normalized value, so the domain computes them without reaching the store.
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
/** Normalize content for rejection digests: NFC, lowercase, collapse whitespace runs, trim. No punctuation stripping:
|
|
4
|
+
* over-normalizing causes false refusals, worse than misses. */
|
|
5
|
+
export function normalizeValueForRejection(content) {
|
|
6
|
+
return content.normalize('NFC').toLowerCase().replace(/\s+/g, ' ').trim();
|
|
7
|
+
}
|
|
8
|
+
/** Full 64-char sha256 hex of the normalized content: a tombstone key needs collision resistance, not the 16-char
|
|
9
|
+
* redaction hash used for query hashing. */
|
|
10
|
+
export function rejectionDigest(content) {
|
|
11
|
+
return createHash('sha256').update(normalizeValueForRejection(content)).digest('hex');
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=rejection-digest.js.map
|
package/dist/core/salience.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Salience gate: decides at memory creation whether content is stored at full strength, starts weakened, or is skipped.
|
|
3
|
+
*/
|
|
2
4
|
import type { MemoryEntry } from './memory.js';
|
|
3
5
|
export type SalienceDecision = 'store' | 'skip' | 'start_weak';
|
|
4
6
|
export interface SalienceResult {
|
package/dist/core/salience.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Salience gate: decides at memory creation whether content is stored at full strength, starts weakened, or is skipped.
|
|
3
|
+
*/
|
|
2
4
|
import { textOverlap } from '../util/tokenize.js';
|
|
3
5
|
import { duplicateKey, heldTextKeys } from '../util/same-text.js';
|
|
4
6
|
// Each store or skip reason carries a score; a novel memory adds bonuses for structure and length.
|
|
@@ -10,6 +12,9 @@ const NOVEL_ERROR_SCORE = 0.9;
|
|
|
10
12
|
const NOVEL_BASE_SCORE = 0.5;
|
|
11
13
|
const STRUCTURED_TAGS_BONUS = 0.15;
|
|
12
14
|
const LENGTH_BONUS = 0.1;
|
|
15
|
+
// A novel memory earns LENGTH_BONUS past each of these lengths in characters.
|
|
16
|
+
const LONG_CONTENT_CHARS = 100;
|
|
17
|
+
const VERY_LONG_CONTENT_CHARS = 300;
|
|
13
18
|
const DEFAULTS = {
|
|
14
19
|
recentWindow: 20,
|
|
15
20
|
overlapThreshold: 0.6,
|
|
@@ -35,7 +40,8 @@ export function computeSalience(content, tags, recentMemories, options = {}) {
|
|
|
35
40
|
if (recentErrors >= opts.maxRepeatErrors) {
|
|
36
41
|
return {
|
|
37
42
|
decision: 'start_weak',
|
|
38
|
-
reason: `repeat_error (${recentErrors} recent errors, overlap
|
|
43
|
+
reason: `repeat_error (${recentErrors} recent errors, overlap ` +
|
|
44
|
+
`${(duplicateMatch.overlap * 100).toFixed(0)}% with ${duplicateMatch.matchId})`,
|
|
39
45
|
score: REPEAT_ERROR_SCORE,
|
|
40
46
|
};
|
|
41
47
|
}
|
|
@@ -66,9 +72,9 @@ function scoreNovel(trimmed, tags) {
|
|
|
66
72
|
let score = NOVEL_BASE_SCORE;
|
|
67
73
|
if (hasStructuredTags)
|
|
68
74
|
score += STRUCTURED_TAGS_BONUS;
|
|
69
|
-
if (trimmed.length >
|
|
75
|
+
if (trimmed.length > LONG_CONTENT_CHARS)
|
|
70
76
|
score += LENGTH_BONUS;
|
|
71
|
-
if (trimmed.length >
|
|
77
|
+
if (trimmed.length > VERY_LONG_CONTENT_CHARS)
|
|
72
78
|
score += LENGTH_BONUS;
|
|
73
79
|
return { decision: 'store', reason: 'novel', score: Math.min(score, 1.0) };
|
|
74
80
|
}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import type { MemoryEntry } from './memory.js';
|
|
2
2
|
export declare const DEFAULT_RECALL_BUDGET = 4000;
|
|
3
3
|
export declare const DEFAULT_LOCAL_BUMP = 1.2;
|
|
4
|
-
|
|
4
|
+
export declare const DEFAULT_MMR_LAMBDA = 0.7;
|
|
5
|
+
export declare const CONFLICT_PEER_MULTIPLIER = 0.3;
|
|
6
|
+
export declare const VALUE_MULT_SLOPE = 0.3;
|
|
7
|
+
export declare const VALUE_MULT_MIN = 0.7;
|
|
8
|
+
export declare const VALUE_MULT_MAX = 1.3;
|
|
9
|
+
export declare const UTILITY_LENGTH_PENALTY_CAP = 0.3;
|
|
10
|
+
export declare const UTILITY_LENGTH_TOKENS = 10000;
|
|
11
|
+
export declare const SALIENCE_MIN_MULTIPLIER = 0.5;
|
|
12
|
+
/**
|
|
13
|
+
* One score mutation applied after candidate generation; allocated only under `recall --why` or `RecallOpts.explain`.
|
|
14
|
+
*/
|
|
5
15
|
export interface RerankStep {
|
|
6
16
|
/** One of: interference, value, utility, reranker, goal-boost, retrieval-count-downweight. */
|
|
7
17
|
stage: string;
|
|
@@ -63,7 +73,10 @@ export interface ScoreBreakdown {
|
|
|
63
73
|
scopeBoost: number;
|
|
64
74
|
/** Extra multiplier applied post-hybrid (e.g. 1.2x for local hits in a local+global merge); 1.0 otherwise. */
|
|
65
75
|
sourceBump: number;
|
|
66
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* Immediate outcome nudge, 1 + 0.15*tanh((pos - neg) / 2) clipped to [0.85, 1.15]; separate from the slow strength
|
|
78
|
+
* path.
|
|
79
|
+
*/
|
|
67
80
|
outcomeBoost: number;
|
|
68
81
|
/** CHURN_STALE_RANK_MULTIPLIER if tagged 'churn-stale', else 1.0. */
|
|
69
82
|
churnStaleMultiplier: number;
|