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/server/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ContextWith, StoreContext } from '../api/index.js';
|
|
3
3
|
import type { JsonValue } from '../util/json.js';
|
|
4
4
|
import type { RateLimiter } from './rate-limit.js';
|
|
5
5
|
import type { HippoStore, StoreGroup } from '../store/index.js';
|
|
@@ -7,8 +7,8 @@ export interface ServerHandle {
|
|
|
7
7
|
port: number;
|
|
8
8
|
url: string;
|
|
9
9
|
stop: () => Promise<void>;
|
|
10
|
-
/** Introspection-only: the underlying node:http Server, so tests can assert keep-alive/headers timeout hardening
|
|
11
|
-
* Do not use for control flow. */
|
|
10
|
+
/** Introspection-only: the underlying node:http Server, so tests can assert keep-alive/headers timeout hardening
|
|
11
|
+
* without reaching into serve()'s closure. Do not use for control flow. */
|
|
12
12
|
server?: import('node:http').Server;
|
|
13
13
|
}
|
|
14
14
|
/** Identity an {@link AuthResolver} vouches for. The core sanitises it before use. */
|
|
@@ -20,11 +20,12 @@ export interface ResolvedBearer {
|
|
|
20
20
|
role: 'admin' | 'member';
|
|
21
21
|
scopes?: readonly string[];
|
|
22
22
|
}
|
|
23
|
-
/** Sole judge of non-`hk_` bearer tokens: null is a 401; a throw or missed deadline is a 503, so throw only when
|
|
23
|
+
/** Sole judge of non-`hk_` bearer tokens: null is a 401; a throw or missed deadline is a 503, so throw only when
|
|
24
|
+
* upstream is down. */
|
|
24
25
|
export type AuthResolver = (token: string) => ResolvedBearer | null | Promise<ResolvedBearer | null>;
|
|
25
26
|
/** What an add-on route's handler gets: the caller core authenticated and the parsed JSON body. */
|
|
26
27
|
export interface AddonCall {
|
|
27
|
-
readonly ctx:
|
|
28
|
+
readonly ctx: StoreContext;
|
|
28
29
|
readonly body: Readonly<Record<string, JsonValue>>;
|
|
29
30
|
}
|
|
30
31
|
/** A POST /v1 route an add-on mounts through serve(): core authenticates and parses first, then sends the
|
|
@@ -46,14 +47,16 @@ export interface ServeOpts {
|
|
|
46
47
|
authResolverTimeoutMs?: number;
|
|
47
48
|
port?: number;
|
|
48
49
|
host?: string;
|
|
49
|
-
/** Stop and exit on SIGINT/SIGTERM, and drain then exit 1 on an uncaught exception or unhandled rejection. A stop
|
|
50
|
-
* 10 s past `shutdownDrainMs` ends the process with a failure exit. Only `hippo serve`
|
|
50
|
+
/** Stop and exit on SIGINT/SIGTERM, and drain then exit 1 on an uncaught exception or unhandled rejection. A stop
|
|
51
|
+
* still running 10 s past `shutdownDrainMs` ends the process with a failure exit. Only `hippo serve` sets this. */
|
|
51
52
|
handleSignals?: boolean;
|
|
52
53
|
/** How long stop() lets in-flight requests finish before closing their sockets; defaults to 5000 ms. */
|
|
53
54
|
shutdownDrainMs?: number;
|
|
54
|
-
/** How long a request may stay unanswered before one warn names it; the request itself is left alone. Defaults to
|
|
55
|
+
/** How long a request may stay unanswered before one warn names it; the request itself is left alone. Defaults to
|
|
56
|
+
* 60000 ms. */
|
|
55
57
|
slowRequestWarnMs?: number;
|
|
56
|
-
/** Defaults to hippo.db under `hippoRoot`. A store of another
|
|
58
|
+
/** Defaults to hippo.db under `hippoRoot`. A store of another
|
|
59
|
+
* kind runs only the routes ported to it; its caller closes it. */
|
|
57
60
|
store?: HippoStore;
|
|
58
61
|
autoSleep?: false;
|
|
59
62
|
routes?: readonly AddonRoute[];
|
|
@@ -66,14 +69,17 @@ export interface ServeOpts {
|
|
|
66
69
|
cert: string | Buffer;
|
|
67
70
|
key: string | Buffer;
|
|
68
71
|
};
|
|
69
|
-
/** Lets a non-loopback bind start without `tls`, for TLS that ends at a
|
|
72
|
+
/** Lets a non-loopback bind start without `tls`, for TLS that ends at a
|
|
73
|
+
* proxy in front; else serve() refuses it. Also HIPPO_ALLOW_CLEARTEXT=1. */
|
|
70
74
|
allowCleartext?: boolean;
|
|
71
|
-
/** The role a keyless local request (HIPPO_ALLOW_KEYLESS_LOCAL=1) gets; defaults to HIPPO_KEYLESS_LOCAL_ROLE, else
|
|
75
|
+
/** The role a keyless local request (HIPPO_ALLOW_KEYLESS_LOCAL=1) gets; defaults to HIPPO_KEYLESS_LOCAL_ROLE, else
|
|
76
|
+
* 'member'. Only 'admin' is host admin. */
|
|
72
77
|
keylessLocalRole?: 'member' | 'admin';
|
|
73
|
-
/** Static JSON served to anyone at GET <path>; built once at
|
|
78
|
+
/** Static JSON served to anyone at GET <path>; built once at
|
|
79
|
+
* boot and never authenticated, so it must hold nothing secret. */
|
|
74
80
|
publicJson?: Readonly<Record<string, JsonValue>>;
|
|
75
|
-
/** Request limits: perCaller after auth, on by default (HIPPO_CALLER_RPS, else 20 per second, burst 40); perAddress
|
|
76
|
-
* 'off' disables either; failedAuthPerAddress guards scrypt. */
|
|
81
|
+
/** Request limits: perCaller after auth, on by default (HIPPO_CALLER_RPS, else 20 per second, burst 40); perAddress
|
|
82
|
+
* replaces HIPPO_V1_RPS when set; 'off' disables either; failedAuthPerAddress guards scrypt. */
|
|
77
83
|
rateLimits?: {
|
|
78
84
|
perCaller?: RateLimitSpec | 'off';
|
|
79
85
|
perAddress?: RateLimitSpec | 'off';
|
|
@@ -82,6 +88,8 @@ export interface ServeOpts {
|
|
|
82
88
|
}
|
|
83
89
|
export type ResolvedServeOpts = ServeOpts & {
|
|
84
90
|
store: HippoStore;
|
|
91
|
+
/** Fences a loop-off route's work from hippo.db on the server thread when the store has workers. */
|
|
92
|
+
offLoop: <T>(run: () => T) => T;
|
|
85
93
|
publicJsonBodies: ReadonlyMap<string, string>;
|
|
86
94
|
callerLimiter?: RateLimiter;
|
|
87
95
|
failedAuthLimiter: RateLimiter;
|
|
@@ -94,19 +102,20 @@ export interface RouteRequest {
|
|
|
94
102
|
query: URLSearchParams;
|
|
95
103
|
}
|
|
96
104
|
/** A request past the dispatch gate, carrying the caller the gate authenticated. */
|
|
97
|
-
export interface AuthedRouteRequest extends RouteRequest {
|
|
98
|
-
ctx:
|
|
105
|
+
export interface AuthedRouteRequest<G extends StoreGroup = 'base'> extends RouteRequest {
|
|
106
|
+
ctx: ContextWith<G>;
|
|
99
107
|
}
|
|
100
|
-
/** A route's store status: a `storeReady` group, a `sqliteOnly`
|
|
101
|
-
|
|
102
|
-
|
|
108
|
+
/** A route's store status: a `storeReady` group, a `sqliteOnly`
|
|
109
|
+
* reason, or neither while it waits for a group; never both. */
|
|
110
|
+
type StoreStatus<S extends StoreGroup> = {
|
|
111
|
+
storeReady?: S;
|
|
103
112
|
sqliteOnly?: never;
|
|
104
113
|
} | {
|
|
105
114
|
sqliteOnly: string;
|
|
106
115
|
storeReady?: never;
|
|
107
116
|
};
|
|
108
|
-
/** What the dispatch gate proves before a handler runs: any caller, an admin, a host admin on loopback, or nothing, for
|
|
109
|
-
* whose handler checks the sender's signature itself. */
|
|
117
|
+
/** What the dispatch gate proves before a handler runs: any caller, an admin, a host admin on loopback, or nothing, for
|
|
118
|
+
* a route whose handler checks the sender's signature itself. */
|
|
110
119
|
export type RouteAuth = 'caller' | 'admin' | 'host-admin-local' | 'webhook-signature';
|
|
111
120
|
export type RouteEndpoint<R> = {
|
|
112
121
|
path: string;
|
|
@@ -118,15 +127,18 @@ export type RouteEndpoint<R> = {
|
|
|
118
127
|
regex: RegExp;
|
|
119
128
|
handler: (r: R, match: RegExpMatchArray) => Promise<void>;
|
|
120
129
|
};
|
|
121
|
-
/** One /v1 route: an exact path, a matchPath pattern, or a regex, each paired with one method's handler. Under another
|
|
122
|
-
* store's `storeReady` group; `loop: 'off'` runs its SQLite work on a worker thread
|
|
123
|
-
export type
|
|
130
|
+
/** One /v1 route: an exact path, a matchPath pattern, or a regex, each paired with one method's handler. Under another
|
|
131
|
+
* store it runs only with its store's `storeReady` group; `loop: 'off'` runs its SQLite work on a worker thread. */
|
|
132
|
+
export type RouteOf<G extends StoreGroup, S extends StoreGroup = G> = {
|
|
124
133
|
method: string;
|
|
125
134
|
loop?: 'off';
|
|
126
|
-
} & StoreStatus & (({
|
|
135
|
+
} & StoreStatus<S> & (({
|
|
127
136
|
auth: Exclude<RouteAuth, 'webhook-signature'>;
|
|
128
|
-
} & RouteEndpoint<AuthedRouteRequest
|
|
137
|
+
} & RouteEndpoint<AuthedRouteRequest<G>>) | ({
|
|
129
138
|
auth: 'webhook-signature';
|
|
130
139
|
} & RouteEndpoint<RouteRequest>));
|
|
140
|
+
/** A route as the table holds it, its handler's group erased: `defineRoute` is where a handler's group meets the
|
|
141
|
+
* row's `storeReady`. */
|
|
142
|
+
export type Route = RouteOf<'base', StoreGroup>;
|
|
131
143
|
export {};
|
|
132
144
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -8,9 +8,12 @@ export declare function parseListLimit(limitRaw: string | null, defaultLimit?: n
|
|
|
8
8
|
* an authenticated caller; the key mint reads under its own small cap. */
|
|
9
9
|
export declare function parseJsonBody(req: IncomingMessage, _authed: Context): Promise<Record<string, JsonValue>>;
|
|
10
10
|
export declare function parseJsonObjectText(raw: string): Record<string, JsonValue>;
|
|
11
|
+
/** Absent (undefined or null) is undefined; a present value of the wrong type is a 400, never a silent default. */
|
|
11
12
|
export declare function getString(obj: Record<string, JsonValue>, key: string): string | undefined;
|
|
12
13
|
export declare function getStringArray(obj: Record<string, JsonValue>, key: string): string[] | undefined;
|
|
13
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Keeps only `name` and `aliases`: a client's `legacy_name` is a folder name, which must never become a row's origin.
|
|
16
|
+
*/
|
|
14
17
|
export declare function getCallerProject(body: Record<string, JsonValue>): RememberOpts['project'];
|
|
15
18
|
export declare function validateIdSegment(id: string, fieldName: string): void;
|
|
16
19
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { HttpError, readBody } from '../util/http-util.js';
|
|
2
2
|
import { DEFAULT_LIST_LIMIT, MAX_ID_LEN, MAX_LIST_LIMIT, resolveListLimit } from '../util/limits.js';
|
|
3
3
|
import { isJsonString, isJsonObject } from '../util/json.js';
|
|
4
|
-
// Runtime membership check for a `ReadonlySet<T>` of string-literal members: Set<T>.has gives no narrowing, so this is
|
|
4
|
+
// Runtime membership check for a `ReadonlySet<T>` of string-literal members: Set<T>.has gives no narrowing, so this is
|
|
5
|
+
// the one place the `as T` assertion lives
|
|
5
6
|
// and callers narrow via the `value is T` return.
|
|
6
7
|
export function isSetMember(set, value) {
|
|
7
|
-
// SAFETY: `value as T` is discarded unless `set.has` (the real runtime check) confirms membership; the `value is T`
|
|
8
|
+
// SAFETY: `value as T` is discarded unless `set.has` (the real runtime check) confirms membership; the `value is T`
|
|
9
|
+
// return type does the narrowing.
|
|
8
10
|
return set.has(value);
|
|
9
11
|
}
|
|
10
12
|
// Cap for short free-text HTTP fields (names, text, context, change summaries) on the object routes.
|
|
@@ -36,19 +38,26 @@ export function parseJsonObjectText(raw) {
|
|
|
36
38
|
throw new HttpError(400, 'invalid JSON body');
|
|
37
39
|
}
|
|
38
40
|
}
|
|
41
|
+
/** Absent (undefined or null) is undefined; a present value of the wrong type is a 400, never a silent default. */
|
|
39
42
|
export function getString(obj, key) {
|
|
40
43
|
const v = obj[key];
|
|
41
|
-
|
|
44
|
+
if (v === undefined || v === null)
|
|
45
|
+
return undefined;
|
|
46
|
+
if (!isJsonString(v))
|
|
47
|
+
throw new HttpError(400, `${key} must be a string`);
|
|
48
|
+
return v;
|
|
42
49
|
}
|
|
43
50
|
export function getStringArray(obj, key) {
|
|
44
51
|
const v = obj[key];
|
|
45
|
-
if (
|
|
46
|
-
return undefined;
|
|
47
|
-
if (!v.every(isJsonString))
|
|
52
|
+
if (v === undefined || v === null)
|
|
48
53
|
return undefined;
|
|
54
|
+
if (!Array.isArray(v) || !v.every(isJsonString))
|
|
55
|
+
throw new HttpError(400, `${key} must be an array of strings`);
|
|
49
56
|
return v;
|
|
50
57
|
}
|
|
51
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* Keeps only `name` and `aliases`: a client's `legacy_name` is a folder name, which must never become a row's origin.
|
|
60
|
+
*/
|
|
52
61
|
export function getCallerProject(body) {
|
|
53
62
|
const v = body.project;
|
|
54
63
|
if (v === undefined || v === null)
|
|
@@ -63,8 +72,12 @@ export function getCallerProject(body) {
|
|
|
63
72
|
}
|
|
64
73
|
return { name: v.name, aliases: v.aliases };
|
|
65
74
|
}
|
|
66
|
-
/**
|
|
67
|
-
*
|
|
75
|
+
/**
|
|
76
|
+
* Charset + length validation for `:id` captures, called right after `matchPath` so empty/overlong/illegal ids get a
|
|
77
|
+
* 400, not "not found".
|
|
78
|
+
* Allows every production id shape (`mem_<hex>`, `sess-<id>`, Slack ids) plus `:` and `.`; no `/`, since
|
|
79
|
+
* `rejectEncodedSlash` stops `%2F` smuggling.
|
|
80
|
+
*/
|
|
68
81
|
const ID_SEGMENT_RE = /^[A-Za-z0-9_:.-]+$/;
|
|
69
82
|
export function validateIdSegment(id, fieldName) {
|
|
70
83
|
if (id.length === 0)
|
package/dist/server.d.ts
CHANGED
|
@@ -1,23 +1,28 @@
|
|
|
1
|
-
import { type Actor,
|
|
1
|
+
import { type Actor, type AuthCreateOpts, type AuthCreateResult, type AuthCreateSelfOpts, type AuthCreateSelfResult, type AuthRevokeResult, type Context } from './api/index.js';
|
|
2
|
+
import { promptHookContext as renderPromptHook, type PromptHookOpts, type PromptHookRequest } from './api/prompt-hook.js';
|
|
2
3
|
import { BadRequestError, ConflictError, ForbiddenError, NotFoundError } from './core/api-errors.js';
|
|
3
4
|
export { serve } from './server/boot.js';
|
|
4
|
-
|
|
5
|
+
declare function authCreate(ctx: Context, opts: AuthCreateOpts): Promise<AuthCreateResult>;
|
|
6
|
+
declare function authCreateSelf(ctx: Context, opts: AuthCreateSelfOpts): Promise<AuthCreateSelfResult>;
|
|
7
|
+
declare function authRevoke(ctx: Context, keyId: string): Promise<AuthRevokeResult>;
|
|
8
|
+
declare function promptHookContext(ctx: Context, req: PromptHookRequest, opts?: PromptHookOpts): ReturnType<typeof renderPromptHook>;
|
|
9
|
+
export { authCreate, authCreateSelf, authRevoke, BadRequestError, ConflictError, ForbiddenError, NotFoundError, promptHookContext, type AuthCreateSelfOpts, type AuthCreateSelfResult, type AuthRevokeResult, type Context, type Actor, };
|
|
5
10
|
export { isCrossSite, LOOPBACK_HOST_HEADER } from './util/http-util.js';
|
|
6
11
|
export { clientIpForRateLimit } from './server/client-ip.js';
|
|
7
12
|
export { isLoopback, isReservedActor } from './server/auth.js';
|
|
8
|
-
export type { AddonCall, AddonRoute, AuthResolver, RateLimitSpec, ResolvedBearer, ServeOpts, ServerHandle } from './server/types.js';
|
|
13
|
+
export type { AddonCall, AddonRoute, AuthResolver, RateLimitSpec, ResolvedBearer, ServeOpts, ServerHandle, } from './server/types.js';
|
|
9
14
|
export type { HippoStore } from './store/index.js';
|
|
10
15
|
export { HttpError } from './util/http-util.js';
|
|
11
|
-
export {
|
|
16
|
+
export type { CallerProject } from './api/prompt-hook.js';
|
|
12
17
|
export type { JsonValue } from './util/json.js';
|
|
13
18
|
export { captureSessionTexts, type SessionCaptureRequest, type SessionCaptureResult } from './capture/session-texts.js';
|
|
14
|
-
export {
|
|
19
|
+
export type { AuthCreateOpts, AuthCreateResult };
|
|
15
20
|
export { ownerOrSubject } from './api/index.js';
|
|
16
|
-
export { bindSessionOwner } from './api/session-owners.js';
|
|
17
|
-
export { preCompactForCaller, type CallerHookOutput, type CallerPreCompactRequest } from './capture/pre-compact-caller.js';
|
|
21
|
+
export { bindSessionOwner, bindSessionOwnerOn } from './api/auth/session-owners.js';
|
|
22
|
+
export { preCompactForCaller, type CallerHookOutput, type CallerPreCompactRequest, } from './capture/pre-compact-caller.js';
|
|
18
23
|
export { compactResumeForCaller, type CallerCompactResumeRequest } from './capture/compact-resume-caller.js';
|
|
19
|
-
export { saveCompactionItemsForCaller, type CallerItemsRequest, type CallerItemsResult } from './capture/compaction-items-caller.js';
|
|
20
|
-
export { captureFailureForCaller, type CallerFailureRequest, type CallerFailureResult } from './capture/failure-caller.js';
|
|
21
|
-
export { sessionEndHandoffForCaller, type CallerEvidence, type CallerSessionEndRequest, type CallerSessionEndResult } from './capture/session-end-caller.js';
|
|
24
|
+
export { saveCompactionItemsForCaller, type CallerItemsRequest, type CallerItemsResult, } from './capture/compaction-items-caller.js';
|
|
25
|
+
export { captureFailureForCaller, type CallerFailureRequest, type CallerFailureResult, } from './capture/failure-caller.js';
|
|
26
|
+
export { sessionEndHandoffForCaller, type CallerEvidence, type CallerSessionEndRequest, type CallerSessionEndResult, } from './capture/session-end-caller.js';
|
|
22
27
|
export type { WorkingState } from './capture/working-state.js';
|
|
23
28
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.js
CHANGED
|
@@ -1,25 +1,45 @@
|
|
|
1
|
-
import { authCreateSelf, authRevoke, } from './api/index.js';
|
|
1
|
+
import { authCreate as createKey, authCreateSelf as createSelfKey, authRevoke as revokeKey, } from './api/index.js';
|
|
2
|
+
import { promptHookContext as renderPromptHook, } from './api/prompt-hook.js';
|
|
2
3
|
import { BadRequestError, ConflictError, ForbiddenError, NotFoundError } from './core/api-errors.js';
|
|
4
|
+
import { hasGroup } from './store/port.js';
|
|
5
|
+
import { sqliteReach, withStoreGroups } from './store/sqlite/store.js';
|
|
3
6
|
export { serve } from './server/boot.js';
|
|
7
|
+
// An add-on hands in a Context with no store, so each entry that
|
|
8
|
+
// needs one fills it with hippo.db under the Context's root.
|
|
9
|
+
async function authCreate(ctx, opts) {
|
|
10
|
+
return createKey(withStoreGroups(ctx, 'keyWrites'), opts);
|
|
11
|
+
}
|
|
12
|
+
async function authCreateSelf(ctx, opts) {
|
|
13
|
+
return createSelfKey(withStoreGroups(ctx, 'keyWrites'), opts);
|
|
14
|
+
}
|
|
15
|
+
async function authRevoke(ctx, keyId) {
|
|
16
|
+
return revokeKey(withStoreGroups(ctx, 'keyAudit'), keyId);
|
|
17
|
+
}
|
|
18
|
+
async function promptHookContext(ctx, req, opts) {
|
|
19
|
+
const filled = withStoreGroups(ctx, 'contextReads');
|
|
20
|
+
// Only hippo.db has a global store beside it; an add-on's own store reads as one project.
|
|
21
|
+
const sqliteBacked = ctx.store === undefined || hasGroup(ctx.store, 'localFiles');
|
|
22
|
+
const reach = ctx.reach ?? (sqliteBacked ? sqliteReach(ctx.hippoRoot, filled.store, opts?.sharedStore) : undefined);
|
|
23
|
+
return renderPromptHook({ ...filled, reach }, req, opts);
|
|
24
|
+
}
|
|
4
25
|
// Add-on packages mint and revoke keys through these without importing the whole api surface.
|
|
5
|
-
export { authCreateSelf, authRevoke, BadRequestError, ConflictError, ForbiddenError, NotFoundError, };
|
|
26
|
+
export { authCreate, authCreateSelf, authRevoke, BadRequestError, ConflictError, ForbiddenError, NotFoundError, promptHookContext, };
|
|
6
27
|
export { isCrossSite, LOOPBACK_HOST_HEADER } from './util/http-util.js';
|
|
7
28
|
export { clientIpForRateLimit } from './server/client-ip.js';
|
|
8
29
|
export { isLoopback, isReservedActor } from './server/auth.js';
|
|
9
|
-
// An add-on route replies 4xx with HttpError, renders the prompt hook elsewhere with promptHookContext, and types its
|
|
30
|
+
// An add-on route replies 4xx with HttpError, renders the prompt hook elsewhere with promptHookContext, and types its
|
|
31
|
+
// body as JsonValue.
|
|
10
32
|
export { HttpError } from './util/http-util.js';
|
|
11
|
-
export { promptHookContext } from './api/prompt-hook.js';
|
|
12
33
|
// A session-end route stores the turns its caller read from a transcript on the caller's own machine.
|
|
13
34
|
export { captureSessionTexts } from './capture/session-texts.js';
|
|
14
|
-
// An add-on's install step mints the first admin key into a store folder it names, which `hippo auth create` cannot reach.
|
|
15
|
-
export { authCreate } from './api/index.js';
|
|
16
35
|
export { ownerOrSubject } from './api/index.js';
|
|
17
36
|
// A route that writes for a session binds it to the caller's owner first.
|
|
18
|
-
export { bindSessionOwner } from './api/session-owners.js';
|
|
19
|
-
// A hook route for a caller on another machine: each call binds
|
|
20
|
-
|
|
37
|
+
export { bindSessionOwner, bindSessionOwnerOn } from './api/auth/session-owners.js';
|
|
38
|
+
// A hook route for a caller on another machine: each call binds
|
|
39
|
+
// the session, then writes under the caller's owner and project.
|
|
40
|
+
export { preCompactForCaller, } from './capture/pre-compact-caller.js';
|
|
21
41
|
export { compactResumeForCaller } from './capture/compact-resume-caller.js';
|
|
22
|
-
export { saveCompactionItemsForCaller } from './capture/compaction-items-caller.js';
|
|
23
|
-
export { captureFailureForCaller } from './capture/failure-caller.js';
|
|
24
|
-
export { sessionEndHandoffForCaller } from './capture/session-end-caller.js';
|
|
42
|
+
export { saveCompactionItemsForCaller, } from './capture/compaction-items-caller.js';
|
|
43
|
+
export { captureFailureForCaller, } from './capture/failure-caller.js';
|
|
44
|
+
export { sessionEndHandoffForCaller, } from './capture/session-end-caller.js';
|
|
25
45
|
//# sourceMappingURL=server.js.map
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import { MemoryEntry } from '../core/memory.js';
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import type { PromoteOptions } from '../store/port/promotion.js';
|
|
2
3
|
/** Returns the path to the global Hippo store.
|
|
3
4
|
* Resolution order: $HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo/ */
|
|
4
5
|
export declare function getGlobalRoot(): string;
|
|
5
6
|
/** Ensure the global store exists. */
|
|
6
7
|
export declare function initGlobal(): void;
|
|
7
|
-
export
|
|
8
|
-
actor?: string;
|
|
9
|
-
tenantId?: string;
|
|
10
|
-
/** Also writes one `promote` audit row for the copy ({sourceId}), in the copy's own transaction. */
|
|
11
|
-
auditAs?: {
|
|
12
|
-
tenantId: string;
|
|
13
|
-
actor: string;
|
|
14
|
-
};
|
|
15
|
-
}
|
|
8
|
+
export type { PromoteOptions };
|
|
16
9
|
/** Copies a local memory to the global store and returns the copy, which gets a new `g_` id so it cannot collide. */
|
|
17
10
|
export declare function promoteToGlobal(localRoot: string, id: string, opts?: PromoteOptions): MemoryEntry;
|
|
11
|
+
/** Fire-and-forget: embedMemory gates on availability and never rejects. */
|
|
12
|
+
export declare function embedGlobalCopy(globalEntry: MemoryEntry): void;
|
|
18
13
|
//# sourceMappingURL=global-store.d.ts.map
|
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
// The global store: where it lives, creating it, and copying a local memory into it.
|
|
2
|
-
import { BadRequestError, NotFoundError } from '../core/api-errors.js';
|
|
3
2
|
import * as fs from 'fs';
|
|
4
|
-
import {
|
|
3
|
+
import { resolveGlobalRootDir } from '../core/project-identity.js';
|
|
5
4
|
import { initStore } from '../store/open.js';
|
|
6
|
-
import {
|
|
7
|
-
import { readEntry } from '../store/entry-reads.js';
|
|
8
|
-
import { isPersonalScope } from '../core/recall-scope.js';
|
|
9
|
-
import { fallbackOrigin, resolveGlobalRootDir } from '../core/project-identity.js';
|
|
10
|
-
import { isSharedStore } from '../core/config.js';
|
|
11
|
-
import { detectSecret } from '../util/secret-detect.js';
|
|
12
|
-
import { isQuarantineScope } from '../trust/quarantine.js';
|
|
5
|
+
import { copyToGlobal } from '../store/sqlite/global-promote.js';
|
|
13
6
|
import { embedMemory } from '../search/embed-memories.js';
|
|
14
|
-
import { appendAuditEvent } from '../store/audit.js';
|
|
15
7
|
/** Returns the path to the global Hippo store.
|
|
16
8
|
* Resolution order: $HIPPO_HOME > $XDG_DATA_HOME/hippo > ~/.hippo/ */
|
|
17
9
|
export function getGlobalRoot() {
|
|
@@ -32,39 +24,12 @@ export function initGlobal() {
|
|
|
32
24
|
}
|
|
33
25
|
/** Copies a local memory to the global store and returns the copy, which gets a new `g_` id so it cannot collide. */
|
|
34
26
|
export function promoteToGlobal(localRoot, id, opts) {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
throw new NotFoundError(`Memory not found: ${id}`);
|
|
38
|
-
// Same quarantine veto as shareMemory; a promoted copy would have no quarantine record to review.
|
|
39
|
-
if (isQuarantineScope(entry.scope)) {
|
|
40
|
-
throw new BadRequestError(`Refusing to promote ${id}: it is quarantined pending review. Approve it first via 'hippo quarantine approve ${id}'.`);
|
|
41
|
-
}
|
|
42
|
-
if (isPersonalScope(entry.scope ?? null)) {
|
|
43
|
-
throw new BadRequestError(`Refusing to promote ${id}: it is a personal memory and stays with its owner on this server.`);
|
|
44
|
-
}
|
|
45
|
-
// Secret producer veto: promote is a producer path to the global store
|
|
46
|
-
// exactly like shareMemory - same hard rule.
|
|
47
|
-
const promoteSecret = detectSecret(entry);
|
|
48
|
-
if (promoteSecret.flagged) {
|
|
49
|
-
throw new BadRequestError(`Refusing to promote ${id} to the global store: content matches secret material (${promoteSecret.reason}). ` +
|
|
50
|
-
`Secrets stay in their owning project's store.`);
|
|
51
|
-
}
|
|
52
|
-
initGlobal();
|
|
53
|
-
const globalRoot = getGlobalRoot();
|
|
54
|
-
// A project store's NULL row gets its folder back; a shared store's folder is no caller's project, so NULL stays and the label names no path.
|
|
55
|
-
const globalEntry = {
|
|
56
|
-
...entry,
|
|
57
|
-
id: generateId('g'),
|
|
58
|
-
source: isSharedStore(localRoot) ? `shared::${new Date().toISOString()}` : `promoted:${localRoot}`,
|
|
59
|
-
origin_project: entry.origin_project ?? fallbackOrigin(localRoot),
|
|
60
|
-
};
|
|
61
|
-
const { auditAs } = opts ?? {};
|
|
62
|
-
const promoteRow = auditAs && ((db, globalId) => {
|
|
63
|
-
appendAuditEvent(db, { tenantId: auditAs.tenantId, actor: auditAs.actor, op: 'promote', targetId: globalId, metadata: { sourceId: id } });
|
|
64
|
-
});
|
|
65
|
-
writeEntryWithHook(globalRoot, globalEntry, { actor: opts?.actor, afterWrite: promoteRow });
|
|
66
|
-
// Fire-and-forget: embedMemory gates on availability and never rejects.
|
|
67
|
-
void embedMemory(globalRoot, globalEntry);
|
|
27
|
+
const globalEntry = copyToGlobal(localRoot, id, opts);
|
|
28
|
+
embedGlobalCopy(globalEntry);
|
|
68
29
|
return globalEntry;
|
|
69
30
|
}
|
|
31
|
+
/** Fire-and-forget: embedMemory gates on availability and never rejects. */
|
|
32
|
+
export function embedGlobalCopy(globalEntry) {
|
|
33
|
+
void embedMemory(getGlobalRoot(), globalEntry);
|
|
34
|
+
}
|
|
70
35
|
//# sourceMappingURL=global-store.js.map
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Copy all global memories into the local store, skipping entries that already exist locally by ID or text (promote and
|
|
3
|
+
* share copy under a new ID).
|
|
2
4
|
* Returns the count of newly copied entries. */
|
|
3
5
|
export declare function syncGlobalToLocal(localRoot: string, globalRoot: string, opts?: {
|
|
4
6
|
includeCrossProject?: boolean;
|
|
@@ -13,7 +13,9 @@ import { detectSecret } from '../util/secret-detect.js';
|
|
|
13
13
|
import { embedAll } from '../search/embed-memories.js';
|
|
14
14
|
import { log } from '../util/log.js';
|
|
15
15
|
import { logEmbedAllFailure } from './search-both.js';
|
|
16
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Copy all global memories into the local store, skipping entries that already exist locally by ID or text (promote and
|
|
18
|
+
* share copy under a new ID).
|
|
17
19
|
* Returns the count of newly copied entries. */
|
|
18
20
|
export function syncGlobalToLocal(localRoot, globalRoot, opts = {}) {
|
|
19
21
|
if (isSharedStore(localRoot)) {
|
|
@@ -25,7 +27,10 @@ export function syncGlobalToLocal(localRoot, globalRoot, opts = {}) {
|
|
|
25
27
|
return withRequestStoresSync(() => copyMissingRows(localRoot, globalRoot, opts.includeCrossProject === true));
|
|
26
28
|
}
|
|
27
29
|
const textKey = (e) => `${e.tenant_id}\n${e.content}`;
|
|
28
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* One open per store and one transaction: id, tenant and text decide which rows to read whole, and the copies commit
|
|
32
|
+
* together.
|
|
33
|
+
*/
|
|
29
34
|
function copyMissingRows(localRoot, globalRoot, includeCrossProject) {
|
|
30
35
|
// Host-wide read: the global union is copied into a tenant-scoped local store, and each copy keeps its own tenant.
|
|
31
36
|
const localKeys = loadEntryTextKeys(localRoot);
|
|
@@ -35,8 +40,11 @@ function copyMissingRows(localRoot, globalRoot, includeCrossProject) {
|
|
|
35
40
|
const candidates = loadEntryTextKeys(globalRoot).filter((k) => !localIds.has(k.id) && !k.source.startsWith(AGENT_MEMORY_SOURCE_PREFIX) && !localText.has(textKey(k)));
|
|
36
41
|
if (candidates.length === 0)
|
|
37
42
|
return 0;
|
|
38
|
-
const byId = new Map(chunked(candidates.map((k) => k.id))
|
|
39
|
-
|
|
43
|
+
const byId = new Map(chunked(candidates.map((k) => k.id))
|
|
44
|
+
.flatMap((ids) => loadEntriesByIds(globalRoot, ids))
|
|
45
|
+
.map((e) => [e.id, e]));
|
|
46
|
+
// Syncing down must not re-import what ambient context excludes: other-project rows are skipped by default and secret
|
|
47
|
+
// rows never copied.
|
|
40
48
|
// origin_project is preserved on the copy (the write stamps it only when missing).
|
|
41
49
|
const currentProject = resolveProjectIdentity(path.dirname(path.resolve(localRoot)));
|
|
42
50
|
// A locally rejected value must not come back through sync down: skipped per item, printed as one line.
|
|
@@ -44,13 +52,15 @@ function copyMissingRows(localRoot, globalRoot, includeCrossProject) {
|
|
|
44
52
|
const count = writeEntriesSkippingRejected(localRoot, (put) => {
|
|
45
53
|
for (const { id } of candidates) {
|
|
46
54
|
const entry = byId.get(id);
|
|
47
|
-
// A row the global store dropped between the two reads, or a text an earlier copy in this batch already brought
|
|
55
|
+
// A row the global store dropped between the two reads, or a text an earlier copy in this batch already brought
|
|
56
|
+
// down.
|
|
48
57
|
if (!entry || localText.has(textKey(entry)))
|
|
49
58
|
continue;
|
|
50
59
|
if (detectSecret(entry).flagged)
|
|
51
60
|
continue;
|
|
52
|
-
if (!includeCrossProject && classifyOriginProject(entry.origin_project, currentProject) === 'cross-project')
|
|
61
|
+
if (!includeCrossProject && classifyOriginProject(entry.origin_project, currentProject) === 'cross-project') {
|
|
53
62
|
continue;
|
|
63
|
+
}
|
|
54
64
|
if (put(entry))
|
|
55
65
|
localText.add(textKey(entry));
|
|
56
66
|
else
|
|
@@ -6,13 +6,18 @@ export interface ProjectSummary {
|
|
|
6
6
|
readonly live: number;
|
|
7
7
|
readonly imported: number;
|
|
8
8
|
readonly newest: string;
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Imported notes whose text another project name also holds: evidence of a duplicate import, never a merge target.
|
|
11
|
+
*/
|
|
10
12
|
readonly copiesElsewhere: number;
|
|
11
13
|
}
|
|
12
14
|
export interface MergeResult {
|
|
13
15
|
readonly from: string;
|
|
14
16
|
readonly into: string;
|
|
15
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Imports `into` already holds for the same note, moved to dormant storage; the rest are re-tagged and the next sync
|
|
19
|
+
* files them under `into`.
|
|
20
|
+
*/
|
|
16
21
|
readonly setAside: readonly string[];
|
|
17
22
|
readonly restamped: readonly string[];
|
|
18
23
|
readonly dormantRestamped: readonly string[];
|
|
@@ -25,11 +30,17 @@ export interface ProjectCollision {
|
|
|
25
30
|
readonly ids: readonly string[];
|
|
26
31
|
}
|
|
27
32
|
export interface RepairResult {
|
|
28
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Imported notes filed under the wrong project, or under a project name when a user-global import holds the same
|
|
35
|
+
* text: set aside.
|
|
36
|
+
*/
|
|
29
37
|
readonly copies: readonly string[];
|
|
30
38
|
/** Names whose recorded session folders all resolve to one other project today, folded as `merge` would. */
|
|
31
39
|
readonly folds: readonly ProjectFold[];
|
|
32
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Names left unfolded because their folders now resolve to more than one project; only `merge` by hand can split
|
|
42
|
+
* them.
|
|
43
|
+
*/
|
|
33
44
|
readonly collisions: readonly ProjectCollision[];
|
|
34
45
|
readonly toProject: ReadonlyArray<{
|
|
35
46
|
readonly id: string;
|
|
@@ -45,13 +56,19 @@ export interface RepairResult {
|
|
|
45
56
|
export declare function listProjects(store: ProjectTagReads): ProjectSummary[];
|
|
46
57
|
/** Refuses user-global and unknown: they are not projects, and folding them would leak or hide every row. */
|
|
47
58
|
export declare function validateMergeNames(from: string, into: string): string | null;
|
|
48
|
-
/**
|
|
59
|
+
/**
|
|
60
|
+
* Folds project `from` into `into` for one tenant in one transaction; a dry run rolls back and writes nothing, mirrors
|
|
61
|
+
* included.
|
|
62
|
+
*/
|
|
49
63
|
export declare function mergeProjects(store: ProjectTagStore, opts: {
|
|
50
64
|
from: string;
|
|
51
65
|
into: string;
|
|
52
66
|
dryRun: boolean;
|
|
53
67
|
}): MergeResult;
|
|
54
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Reads only, so doctor and a dry run take no write lock; merged rows are planned before any fold, so a few may re-tag
|
|
70
|
+
* differently once folds apply.
|
|
71
|
+
*/
|
|
55
72
|
export declare function planProjectRepair(store: ProjectTagReads, hippoRoot: string, globalFolds?: boolean): Omit<RepairResult, 'backup'>;
|
|
56
73
|
/** Sets aside stray imports, folds the names the resolver now maps elsewhere, then
|
|
57
74
|
* re-tags sleep's user-global merges by their parents; a dry run only plans. */
|
|
@@ -60,6 +77,7 @@ export declare function repairProjects(store: ProjectTagStore, opts: {
|
|
|
60
77
|
globalFolds?: boolean;
|
|
61
78
|
}): RepairResult;
|
|
62
79
|
/** Sleep runs repair once per store, so an upgrade needs no command. Global-store folds stay
|
|
63
|
-
*
|
|
80
|
+
* with `hippo projects repair`: their evidence is compaction folders, blind to a same-named repo that never compacted.
|
|
81
|
+
*/
|
|
64
82
|
export declare function repairOnceOnSleep(store: ProjectTagStore): RepairResult | null;
|
|
65
83
|
//# sourceMappingURL=project-merge.d.ts.map
|