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/core/physics.js
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Memory-as-Physics engine: pure math (forces, Velocity Verlet integration, physics-based scoring, cluster
|
|
3
|
+
* amplification), no I/O.
|
|
4
|
+
* Memories are particles on the unit hypersphere in embedding space (384-dim); query gravity, attraction, conflict
|
|
5
|
+
* repulsion and drag act on them,
|
|
3
6
|
* and nearby high-scoring memories amplify each other. */
|
|
4
7
|
import { cosineOf } from './cosine.js';
|
|
5
8
|
import { evalNow, isRecallBoostAblated, strengthAblation } from './ablation.js';
|
|
6
9
|
import { calculateStrength, FALLBACK_HALF_LIFE_DAYS } from './memory.js';
|
|
7
10
|
import { DAY_MS } from '../util/time.js';
|
|
8
11
|
import { comparePhysicsResultsBy } from './compare.js';
|
|
12
|
+
// Floors that stop a near-zero mass or a coincident pair from dividing a force by about zero.
|
|
13
|
+
const MIN_MASS = 0.01;
|
|
14
|
+
const MIN_COSINE_DISTANCE = 0.01;
|
|
15
|
+
// Mass gained per doubling of the retrieval count.
|
|
16
|
+
const RETRIEVAL_MASS_GAIN = 0.1;
|
|
17
|
+
const NEAR_ZERO = 1e-10;
|
|
9
18
|
export function vecDot(a, b) {
|
|
10
19
|
let sum = 0;
|
|
11
20
|
for (let i = 0; i < a.length; i++)
|
|
@@ -39,7 +48,7 @@ export function vecZero(dim) {
|
|
|
39
48
|
/** Normalize to unit length. Returns zero vector if magnitude < epsilon. */
|
|
40
49
|
export function vecNormalize(v) {
|
|
41
50
|
const mag = vecNorm(v);
|
|
42
|
-
if (mag <
|
|
51
|
+
if (mag < NEAR_ZERO)
|
|
43
52
|
return vecZero(v.length);
|
|
44
53
|
return vecScale(v, 1 / mag);
|
|
45
54
|
}
|
|
@@ -57,10 +66,12 @@ const CHARGE_MAP = {
|
|
|
57
66
|
critical: -1.0,
|
|
58
67
|
};
|
|
59
68
|
export function computeMass(strength, retrievalCount) {
|
|
60
|
-
// EVAL-ONLY ablation (ablation.ts): under the recall-boost flag mass ignores retrieval history, which would otherwise
|
|
61
|
-
//
|
|
69
|
+
// EVAL-ONLY ablation (ablation.ts): under the recall-boost flag mass ignores retrieval history, which would otherwise
|
|
70
|
+
// leak strengthening into the ablated
|
|
71
|
+
// arm's physics-pool rankings (query gravity ranks by mass). Covers both init and refresh callers in
|
|
72
|
+
// physics-state.ts.
|
|
62
73
|
const effectiveCount = isRecallBoostAblated() ? 0 : retrievalCount;
|
|
63
|
-
return Math.max(
|
|
74
|
+
return Math.max(MIN_MASS, strength * (1 + RETRIEVAL_MASS_GAIN * Math.log2(effectiveCount + 1)));
|
|
64
75
|
}
|
|
65
76
|
export function computeCharge(valence) {
|
|
66
77
|
return CHARGE_MAP[valence] ?? 0;
|
|
@@ -68,7 +79,10 @@ export function computeCharge(valence) {
|
|
|
68
79
|
export function computeTemperature(ageDays, temperatureDecay) {
|
|
69
80
|
return 1 / (ageDays * temperatureDecay + 1);
|
|
70
81
|
}
|
|
71
|
-
/**
|
|
82
|
+
/**
|
|
83
|
+
* Query gravity (retrieval-time, virtual: does not move the particle): scalar ranking magnitude F = G_Q * mass * max(0,
|
|
84
|
+
* cosine(pos, query))^2.
|
|
85
|
+
*/
|
|
72
86
|
export function queryGravityMagnitude(particle, queryEmbedding, G_query) {
|
|
73
87
|
const cos = cosineOf(particle.position, queryEmbedding);
|
|
74
88
|
return G_query * particle.mass * Math.pow(Math.max(0, cos), 2);
|
|
@@ -79,13 +93,17 @@ export function velocityAlignmentBonus(particle, queryEmbedding) {
|
|
|
79
93
|
return 0;
|
|
80
94
|
const velMag = vecNorm(particle.velocity);
|
|
81
95
|
const qNorm = vecNorm(queryEmbedding);
|
|
82
|
-
if (velMag <
|
|
96
|
+
if (velMag < NEAR_ZERO || qNorm < NEAR_ZERO)
|
|
83
97
|
return 0;
|
|
84
98
|
const alignment = vecDot(particle.velocity, queryEmbedding) / (velMag * qNorm);
|
|
85
99
|
return Math.max(0, alignment);
|
|
86
100
|
}
|
|
87
|
-
/**
|
|
88
|
-
*
|
|
101
|
+
/**
|
|
102
|
+
* Attraction force on particle i from j (consolidation-time): G_M m_i m_j max(0, cosine)^3, directed along (pos_j -
|
|
103
|
+
* pos_i) projected tangent to the unit
|
|
104
|
+
* sphere at pos_i (positions are re-normalized to the sphere after integration). Adds into `out` (a fresh zero vector
|
|
105
|
+
* by default) using `diff` as scratch.
|
|
106
|
+
*/
|
|
89
107
|
export function attractionForce(pi, pj, G_memory, out = vecZero(pi.position.length), diff = vecZero(pi.position.length)) {
|
|
90
108
|
const cos = cosineOf(pi.position, pj.position);
|
|
91
109
|
if (cos <= 0)
|
|
@@ -95,23 +113,29 @@ export function attractionForce(pi, pj, G_memory, out = vecZero(pi.position.leng
|
|
|
95
113
|
for (let k = 0; k < out.length; k++)
|
|
96
114
|
diff[k] = pj.position[k] - pi.position[k];
|
|
97
115
|
const norm = vecNorm(diff);
|
|
98
|
-
if (norm <
|
|
116
|
+
if (norm < NEAR_ZERO)
|
|
99
117
|
return out;
|
|
100
118
|
const inv = 1 / norm;
|
|
101
119
|
for (let k = 0; k < out.length; k++)
|
|
102
120
|
out[k] += diff[k] * inv * magnitude;
|
|
103
121
|
return out;
|
|
104
122
|
}
|
|
105
|
-
/**
|
|
123
|
+
/**
|
|
124
|
+
* Conflict repulsion on i away from j (consolidation-time): K_R * m_i * m_j / max(0.01, cosine_distance)^2, where
|
|
125
|
+
* cosine_distance = 1 - cosine_similarity.
|
|
126
|
+
*/
|
|
106
127
|
export function repulsionForce(pi, pj, K_repulsion) {
|
|
107
128
|
const cos = cosineOf(pi.position, pj.position);
|
|
108
|
-
const dist = Math.max(
|
|
129
|
+
const dist = Math.max(MIN_COSINE_DISTANCE, 1 - cos);
|
|
109
130
|
const magnitude = K_repulsion * pi.mass * pj.mass / (dist * dist);
|
|
110
131
|
// Direction: away from j
|
|
111
132
|
const direction = vecNormalize(vecSub(pi.position, pj.position));
|
|
112
133
|
return vecScale(direction, magnitude);
|
|
113
134
|
}
|
|
114
|
-
/**
|
|
135
|
+
/**
|
|
136
|
+
* Drag force (consolidation-time): -drag * velocity / max(1, effectiveHalfLife), with effectiveHalfLife from the
|
|
137
|
+
* memory's current half_life_days.
|
|
138
|
+
*/
|
|
115
139
|
export function dragForce(particle, drag, effectiveHalfLife) {
|
|
116
140
|
const damping = drag / Math.max(1, effectiveHalfLife);
|
|
117
141
|
return vecScale(particle.velocity, -damping);
|
|
@@ -143,7 +167,7 @@ function computeNetForce(i, particles, ctx, diff) {
|
|
|
143
167
|
/** Acceleration of particle i: its net force divided by mass, scaled in place. */
|
|
144
168
|
function computeAcceleration(i, particles, ctx, diff) {
|
|
145
169
|
const accel = computeNetForce(i, particles, ctx, diff);
|
|
146
|
-
const inv = 1 / Math.max(
|
|
170
|
+
const inv = 1 / Math.max(MIN_MASS, particles[i].mass);
|
|
147
171
|
for (let k = 0; k < accel.length; k++)
|
|
148
172
|
accel[k] *= inv;
|
|
149
173
|
return accel;
|
|
@@ -234,9 +258,13 @@ export function computeSystemEnergy(particles, G_memory) {
|
|
|
234
258
|
}
|
|
235
259
|
return { kinetic, potential, total: kinetic + potential };
|
|
236
260
|
}
|
|
237
|
-
/**
|
|
261
|
+
/**
|
|
262
|
+
* Scores all particles against a query embedding; virtual force computation, so it does NOT modify particle positions.
|
|
263
|
+
*/
|
|
238
264
|
export function physicsScore(particles, queryEmbedding, config,
|
|
239
|
-
/**
|
|
265
|
+
/**
|
|
266
|
+
* Cross-ingest-stable tie key per memoryId (typically the memory content, from a caller with entries in scope);
|
|
267
|
+
* without it ties fall to memoryId,
|
|
240
268
|
* which is per-instance only and lets the cluster_top_k amplification set vary across fresh ingests. */
|
|
241
269
|
tieKeyOf) {
|
|
242
270
|
if (particles.length === 0 || queryEmbedding.length === 0)
|
|
@@ -252,7 +280,8 @@ tieKeyOf) {
|
|
|
252
280
|
finalScore: gravity + momentum,
|
|
253
281
|
};
|
|
254
282
|
});
|
|
255
|
-
// Base-score order picks the cluster_top_k amplification SET (which mutates scores), so ties must be
|
|
283
|
+
// Base-score order picks the cluster_top_k amplification SET (which mutates scores), so ties must be
|
|
284
|
+
// cross-ingest-stable
|
|
256
285
|
// when the caller supplies a content tie key (see comparePhysicsResultsBy in compare.ts).
|
|
257
286
|
const tie = tieKeyOf ? (r) => tieKeyOf(r.memoryId) : undefined;
|
|
258
287
|
results.sort(comparePhysicsResultsBy((r) => r.baseScore, tie));
|
|
@@ -293,7 +322,10 @@ function applyClusterAmplification(results, particles, config) {
|
|
|
293
322
|
top[i].finalScore = top[i].baseScore * amplification;
|
|
294
323
|
}
|
|
295
324
|
}
|
|
296
|
-
/**
|
|
325
|
+
/**
|
|
326
|
+
* Nudges a particle toward (good outcome) or away from (bad outcome) the query embedding; new memories respond more
|
|
327
|
+
* (temperature). Mutates in place.
|
|
328
|
+
*/
|
|
297
329
|
export function applyOutcomeFeedback(particle, queryEmbedding, good, feedbackAlpha) {
|
|
298
330
|
if (particle.position.length === 0 || particle.position.length !== queryEmbedding.length)
|
|
299
331
|
return;
|
|
@@ -302,7 +334,10 @@ export function applyOutcomeFeedback(particle, queryEmbedding, good, feedbackAlp
|
|
|
302
334
|
const nudge = vecScale(direction, sign * feedbackAlpha * particle.temperature);
|
|
303
335
|
particle.position = vecNormalize(vecAdd(particle.position, nudge));
|
|
304
336
|
}
|
|
305
|
-
/**
|
|
337
|
+
/**
|
|
338
|
+
* Initialize physics state for a memory from its embedding vector; returns the new particle without persisting (the
|
|
339
|
+
* caller must save).
|
|
340
|
+
*/
|
|
306
341
|
export function initializeParticle(entry, embedding, now = evalNow()) {
|
|
307
342
|
const strength = calculateStrength(entry, now, { ablation: strengthAblation() });
|
|
308
343
|
const ageDays = (now.getTime() - new Date(entry.created).getTime()) / DAY_MS;
|
|
@@ -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,7 +5,7 @@ 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
11
|
import { placeholders } from '../util/sql.js';
|
|
@@ -20,8 +20,9 @@ export function clearProjectIdentityCache() {
|
|
|
20
20
|
// The global store's config only: a per-store switch would stamp one checkout two ways.
|
|
21
21
|
function remoteRuleOn() {
|
|
22
22
|
const globalRoot = resolveGlobalRootDir();
|
|
23
|
-
if (remoteSwitch?.globalRoot !== globalRoot)
|
|
23
|
+
if (remoteSwitch?.globalRoot !== globalRoot) {
|
|
24
24
|
remoteSwitch = { globalRoot, on: loadConfig(globalRoot).projectIdentity.remote };
|
|
25
|
+
}
|
|
25
26
|
return remoteSwitch.on;
|
|
26
27
|
}
|
|
27
28
|
/** The id a root names itself by plus every rung that resolves; only the root's own
|
|
@@ -57,11 +58,13 @@ function isDirectoryAt(p) {
|
|
|
57
58
|
return fs.statSync(p).isDirectory();
|
|
58
59
|
}
|
|
59
60
|
catch (err) {
|
|
60
|
-
|
|
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));
|
|
61
63
|
return false;
|
|
62
64
|
}
|
|
63
65
|
}
|
|
64
|
-
/** 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. */
|
|
65
68
|
export function resolveProjectIdentity(cwd, opts) {
|
|
66
69
|
const startInput = path.resolve(cwd ?? process.cwd());
|
|
67
70
|
const cacheable = !opts?.homeDir && !opts?.stopDir;
|
|
@@ -180,14 +183,17 @@ export function projectNames(project) {
|
|
|
180
183
|
// Each project name is matched against every candidate row, so the caller's list stays short.
|
|
181
184
|
export const MAX_PROJECT_ALIASES = 10;
|
|
182
185
|
export const MCP_PROJECT_SCOPED_HEADER = 'X-Hippo-Project-Scoped';
|
|
183
|
-
/** Refuses a caller's project that is blank (it would stamp user-global), past the caps, or unlike the resolver's ids:
|
|
184
|
-
*
|
|
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. */
|
|
185
190
|
export function assertCallerProject(project) {
|
|
186
191
|
const { name, aliases = [] } = project;
|
|
187
192
|
if (name.trim() === '')
|
|
188
193
|
throw new BadRequestError('project name must not be blank');
|
|
189
|
-
if (aliases.length > MAX_PROJECT_ALIASES)
|
|
194
|
+
if (aliases.length > MAX_PROJECT_ALIASES) {
|
|
190
195
|
throw new BadRequestError(`project aliases: at most ${MAX_PROJECT_ALIASES}`);
|
|
196
|
+
}
|
|
191
197
|
if ([name, ...aliases].some((n) => n.length > MAX_ID_LEN)) {
|
|
192
198
|
throw new BadRequestError(`project names: at most ${MAX_ID_LEN} characters each`);
|
|
193
199
|
}
|
|
@@ -199,8 +205,10 @@ export function assertCallerProject(project) {
|
|
|
199
205
|
export function originInSql(names, column = 'origin_project') {
|
|
200
206
|
return names.length === 0 ? '0' : `${column} IN (${placeholders(names.length)})`;
|
|
201
207
|
}
|
|
202
|
-
/** Classifies a memory's origin_project against the active project. An empty current id (home or markerless cwd) puts
|
|
203
|
-
*
|
|
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. */
|
|
204
212
|
export function classifyOriginProject(origin, current) {
|
|
205
213
|
if (projectId(current) === '')
|
|
206
214
|
return 'project';
|
|
@@ -210,7 +218,8 @@ export function classifyOriginProject(origin, current) {
|
|
|
210
218
|
return 'user-global';
|
|
211
219
|
return projectNames(current).includes(origin) ? 'project' : 'cross-project';
|
|
212
220
|
}
|
|
213
|
-
/** 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.
|
|
214
223
|
* Leaf module so store migrations can use it without importing sharing/ (store cycle). */
|
|
215
224
|
export function resolveGlobalRootDir() {
|
|
216
225
|
const hippoHome = envHippoHome();
|
|
@@ -221,13 +230,17 @@ export function resolveGlobalRootDir() {
|
|
|
221
230
|
return path.join(xdgData, 'hippo');
|
|
222
231
|
return path.join(os.homedir(), '.hippo');
|
|
223
232
|
}
|
|
224
|
-
/** True when `p` IS the global store root, so a global store whose parent chain contains `.git`/`.hippo` (git-managed
|
|
225
|
-
*
|
|
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. */
|
|
226
237
|
export function isGlobalStoreRoot(p) {
|
|
227
238
|
return samePath(realpathOrResolve(path.resolve(p)), realpathOrResolve(resolveGlobalRootDir()));
|
|
228
239
|
}
|
|
229
|
-
/** Parses a memory's origin from its provenance `source`: `shared:<project>:<ts>` and `promoted:<localRoot>` name the
|
|
230
|
-
*
|
|
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. */
|
|
231
244
|
export function originFromSource(source, homeName) {
|
|
232
245
|
if (!source)
|
|
233
246
|
return null;
|
|
@@ -248,12 +261,15 @@ export function originFromSource(source, homeName) {
|
|
|
248
261
|
}
|
|
249
262
|
return null;
|
|
250
263
|
}
|
|
251
|
-
/** The origin to stamp on a memory written from cwd: its project name, or '' (user-global, injectable everywhere)
|
|
252
|
-
*
|
|
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. */
|
|
253
268
|
export function deriveOriginProject(cwd, opts) {
|
|
254
269
|
return resolveProjectIdentity(cwd, opts).name;
|
|
255
270
|
}
|
|
256
|
-
/** 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. */
|
|
257
273
|
export function fallbackOrigin(hippoRoot) {
|
|
258
274
|
return isSharedStore(hippoRoot) ? null : deriveOriginProject(path.dirname(path.resolve(hippoRoot)));
|
|
259
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. */
|