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
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
// Audit log queries and retention, and the memory-quality audit with its repair passes.
|
|
2
|
-
import { auditMemories } from '
|
|
3
|
-
import { DAY_MS } from '
|
|
4
|
-
import { requireGroup } from '../store/index.js';
|
|
5
|
-
import { storeFor } from '../store/sqlite/store.js';
|
|
2
|
+
import { auditMemories } from '../../core/memory-audit.js';
|
|
3
|
+
import { DAY_MS } from '../../util/time.js';
|
|
6
4
|
/** Read audit events scoped to `ctx.tenantId` on the store the request runs on. Read-only, no audit emit. */
|
|
7
5
|
export async function auditList(ctx, opts) {
|
|
8
|
-
return
|
|
6
|
+
return ctx.store.auditLog.listAuditEvents({
|
|
9
7
|
tenantId: ctx.tenantId, op: opts.op, since: opts.since, limit: opts.limit, after: opts.after,
|
|
10
8
|
});
|
|
11
9
|
}
|
|
12
10
|
function maintenanceOf(ctx) {
|
|
13
|
-
return
|
|
11
|
+
return ctx.store.auditMaintenance;
|
|
14
12
|
}
|
|
15
|
-
/** Delete the memories an audit marked as errors, each with its own forget row, and answer the ids that went: a pinned
|
|
13
|
+
/** Delete the memories an audit marked as errors, each with its own forget row, and answer the ids that went: a pinned
|
|
14
|
+
* or raw row stays. */
|
|
16
15
|
export async function removeAuditErrors(ctx, pass, issues) {
|
|
17
16
|
const removals = issues
|
|
18
17
|
.filter((issue) => issue.severity === 'error')
|
|
@@ -26,7 +25,8 @@ export async function auditMemoryQuality(ctx) {
|
|
|
26
25
|
const maintenance = maintenanceOf(ctx);
|
|
27
26
|
return auditMemories(await maintenance.tenantEntries(ctx.tenantId), await maintenance.objectBackedIds());
|
|
28
27
|
}
|
|
29
|
-
/** Audit repair for the caller's tenant: a preview, or with `apply` the moves of certain defects to dormant storage
|
|
28
|
+
/** Audit repair for the caller's tenant: a preview, or with `apply` the moves of certain defects to dormant storage
|
|
29
|
+
* behind a backup. */
|
|
30
30
|
export async function repairMemoryQuality(ctx, apply) {
|
|
31
31
|
return maintenanceOf(ctx).repairQuality(ctx.tenantId, apply);
|
|
32
32
|
}
|
|
@@ -39,9 +39,9 @@ export function computeCutoff(days, now = new Date()) {
|
|
|
39
39
|
const cutoff = new Date(now.getTime() - days * DAY_MS);
|
|
40
40
|
return cutoff.toISOString();
|
|
41
41
|
}
|
|
42
|
-
/** Delete the caller's tenant's audit_log rows older than `olderThanDays`, then record an `audit_prune` row as
|
|
43
|
-
*
|
|
44
|
-
*
|
|
42
|
+
/** Delete the caller's tenant's audit_log rows older than `olderThanDays`, then record an `audit_prune` row as
|
|
43
|
+
* `ctx.actor`; opt-in, since retention floors (HIPAA, SOX, GDPR) apply. The row is written after the DELETE, so a call
|
|
44
|
+
* never prunes its own record. Throws on non-positive days or an empty tenant. */
|
|
45
45
|
export async function pruneAuditLog(ctx, opts) {
|
|
46
46
|
if (!Number.isFinite(opts.olderThanDays) || opts.olderThanDays <= 0) {
|
|
47
47
|
throw new Error(`pruneAuditLog: olderThanDays must be a positive number, got ${opts.olderThanDays}`);
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { DEFAULT_KEY_TTL_DAYS, type ApiKeyListItem, type ApiKeyListRow } from '
|
|
2
|
-
import type { KeysetPosition } from '
|
|
3
|
-
import { type Context } from '
|
|
1
|
+
import { DEFAULT_KEY_TTL_DAYS, type ApiKeyListItem, type ApiKeyListRow } from '../../store/auth.js';
|
|
2
|
+
import type { KeysetPosition } from '../../util/keyset.js';
|
|
3
|
+
import { type Context, type ContextWith, type StoreContext } from '../types.js';
|
|
4
4
|
export interface AuthCreateOpts {
|
|
5
5
|
label?: string;
|
|
6
|
-
/** Defaults to `'member'`, which admin-gated routes such as
|
|
6
|
+
/** Defaults to `'member'`, which admin-gated routes such as
|
|
7
|
+
* `POST /v1/sleep` refuse; an admin key has to be asked for by name. */
|
|
7
8
|
role?: 'admin' | 'member';
|
|
8
9
|
/** Days until the key expires: above 0 and at most 3650. Defaults to 90. */
|
|
9
10
|
ttlDays?: number;
|
|
@@ -19,9 +20,10 @@ export interface AuthCreateResult {
|
|
|
19
20
|
/** ISO time the key stops working; null for a key that never expires. */
|
|
20
21
|
expiresAt: string | null;
|
|
21
22
|
}
|
|
22
|
-
/** Mints a key always bound to `ctx.tenantId`; opts cannot override the tenant, or
|
|
23
|
-
*
|
|
24
|
-
|
|
23
|
+
/** Mints a key always bound to `ctx.tenantId`; opts cannot override the tenant, or
|
|
24
|
+
* tenant A could mint a key for tenant B. Admin only (ForbiddenError otherwise), and a
|
|
25
|
+
* key never outranks its minter: a resolver admin is tenant-only, so it mints members. */
|
|
26
|
+
export declare function authCreate(ctx: ContextWith<'keyWrites'>, opts: AuthCreateOpts): Promise<AuthCreateResult>;
|
|
25
27
|
export { DEFAULT_KEY_TTL_DAYS };
|
|
26
28
|
export declare const MAX_TTL_DAYS = 3650;
|
|
27
29
|
export interface AuthCreateSelfOpts {
|
|
@@ -37,32 +39,34 @@ export interface AuthCreateSelfResult extends AuthCreateResult {
|
|
|
37
39
|
}
|
|
38
40
|
/** Mint a member key for the caller an auth resolver vouched for, whatever its role; the
|
|
39
41
|
* binary floor, the cap's revokes, the mint and its audit rows commit or fail together. */
|
|
40
|
-
export declare function authCreateSelf(ctx:
|
|
42
|
+
export declare function authCreateSelf(ctx: ContextWith<'keyWrites'>, opts: AuthCreateSelfOpts): Promise<AuthCreateSelfResult>;
|
|
41
43
|
type KeyListOpts = {
|
|
42
44
|
active: boolean;
|
|
43
45
|
limit?: number;
|
|
44
46
|
after?: KeysetPosition;
|
|
45
47
|
};
|
|
46
48
|
/** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from. */
|
|
47
|
-
export declare function authListRows(ctx:
|
|
48
|
-
/** Every tenant's keys in the store, live ones only unless
|
|
49
|
+
export declare function authListRows(ctx: ContextWith<'keyWrites'>, opts: KeyListOpts): Promise<ApiKeyListRow[]>;
|
|
50
|
+
/** Every tenant's keys in the store, live ones only unless
|
|
51
|
+
* `active` is false; the host's own view, so the host admin only. */
|
|
49
52
|
export declare function authListAllTenants(ctx: Context, active: boolean): ApiKeyListItem[];
|
|
50
53
|
export interface AuthRevokeResult {
|
|
51
54
|
ok: true;
|
|
52
55
|
revokedAt: string;
|
|
53
56
|
}
|
|
54
|
-
/** Revoke a key in the caller's tenant: a member API key may revoke only itself, a resolver member only the keys it
|
|
57
|
+
/** Revoke a key in the caller's tenant: a member API key may revoke only itself, a resolver member only the keys it
|
|
58
|
+
* minted.
|
|
55
59
|
* The revoke and its auth_revoke row commit together on either store, so a failed audit write leaves the key live. */
|
|
56
|
-
export declare function authRevoke(ctx:
|
|
60
|
+
export declare function authRevoke(ctx: ContextWith<'keyAudit'>, keyId: string): Promise<AuthRevokeResult>;
|
|
57
61
|
/** The tenant that owns `keyId`, or undefined for an unknown key. Host admin only: it reads across tenants,
|
|
58
62
|
* so the local CLI can run revoke and grant in the key's own tenant. */
|
|
59
|
-
export declare function authKeyTenant(ctx:
|
|
63
|
+
export declare function authKeyTenant(ctx: StoreContext, keyId: string): Promise<string | undefined>;
|
|
60
64
|
/** Shared result shape for authGrant/authUngrant, named per the file's oxlint anti-slop rule. */
|
|
61
65
|
export interface AuthGrantResult {
|
|
62
66
|
ok: true;
|
|
63
67
|
}
|
|
64
68
|
/** Grant `keyId` read access to one restricted `scope`. Admin only. */
|
|
65
|
-
export declare function authGrant(ctx:
|
|
69
|
+
export declare function authGrant(ctx: ContextWith<'keyGrants'>, keyId: string, scope: string): Promise<AuthGrantResult>;
|
|
66
70
|
/** Revoke `keyId`'s grant on `scope`. Same authorization and lookup rules as authGrant. */
|
|
67
|
-
export declare function authUngrant(ctx:
|
|
71
|
+
export declare function authUngrant(ctx: ContextWith<'keyGrants'>, keyId: string, scope: string): Promise<AuthGrantResult>;
|
|
68
72
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
// API key management: create, list, revoke, and grant or ungrant restricted scopes.
|
|
2
|
-
import { BadRequestError, ForbiddenError, NotFoundError } from '
|
|
3
|
-
import { DEFAULT_KEY_TTL_DAYS, listApiKeys, mintApiKey, } from '
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { changeScopeGrant } from '../store/sqlite/local.js';
|
|
7
|
-
import { DAY_MS } from '../util/time.js';
|
|
8
|
-
import { requireHostAdmin } from './types.js';
|
|
2
|
+
import { BadRequestError, ForbiddenError, NotFoundError } from '../../core/api-errors.js';
|
|
3
|
+
import { DEFAULT_KEY_TTL_DAYS, listApiKeys, mintApiKey, } from '../../store/auth.js';
|
|
4
|
+
import { DAY_MS } from '../../util/time.js';
|
|
5
|
+
import { requireHostAdmin } from '../types.js';
|
|
9
6
|
const API_KEY_SUBJECT = 'api_key:';
|
|
10
7
|
/** The key id an API-key actor's subject names, or null for any other actor. */
|
|
11
8
|
function keyIdOfSubject(subject) {
|
|
12
9
|
return subject.startsWith(API_KEY_SUBJECT) ? subject.slice(API_KEY_SUBJECT.length) : null;
|
|
13
10
|
}
|
|
14
|
-
/** Mints a key always bound to `ctx.tenantId`; opts cannot override the tenant, or
|
|
15
|
-
*
|
|
11
|
+
/** Mints a key always bound to `ctx.tenantId`; opts cannot override the tenant, or
|
|
12
|
+
* tenant A could mint a key for tenant B. Admin only (ForbiddenError otherwise), and a
|
|
13
|
+
* key never outranks its minter: a resolver admin is tenant-only, so it mints members. */
|
|
16
14
|
export async function authCreate(ctx, opts) {
|
|
17
15
|
// The key and its auth_create row commit together on every store, so a failed audit write leaves no key.
|
|
18
|
-
const keyWrites =
|
|
16
|
+
const keyWrites = ctx.store.keyWrites;
|
|
19
17
|
const { plaintext, mint } = adminKeyMint(ctx, opts);
|
|
20
18
|
await keyWrites.createApiKey(mint);
|
|
21
19
|
return createResult(mint, plaintext);
|
|
@@ -58,7 +56,8 @@ function adminKeyMint(ctx, opts) {
|
|
|
58
56
|
function createResult({ key }, plaintext) {
|
|
59
57
|
return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: key.role, expiresAt: key.expiresAt };
|
|
60
58
|
}
|
|
61
|
-
/** A RangeError, not a 4xx, since the operator's config sets these; the ttl ceiling keeps toISOString in range and a
|
|
59
|
+
/** A RangeError, not a 4xx, since the operator's config sets these; the ttl ceiling keeps toISOString in range and a
|
|
60
|
+
* departed user's key short-lived. */
|
|
62
61
|
function assertSelfMintOpts({ ttlDays, perSubject }) {
|
|
63
62
|
if (!Number.isFinite(ttlDays) || ttlDays <= 0 || ttlDays > MAX_TTL_DAYS) {
|
|
64
63
|
throw new RangeError(`authCreateSelf: ttlDays must be above 0 and at most ${MAX_TTL_DAYS}, got ${String(ttlDays)}`);
|
|
@@ -70,7 +69,7 @@ function assertSelfMintOpts({ ttlDays, perSubject }) {
|
|
|
70
69
|
/** Mint a member key for the caller an auth resolver vouched for, whatever its role; the
|
|
71
70
|
* binary floor, the cap's revokes, the mint and its audit rows commit or fail together. */
|
|
72
71
|
export async function authCreateSelf(ctx, opts) {
|
|
73
|
-
const keyWrites =
|
|
72
|
+
const keyWrites = ctx.store.keyWrites;
|
|
74
73
|
const { plaintext, mint } = selfKeyMint(ctx, opts);
|
|
75
74
|
await keyWrites.createSelfApiKey(mint);
|
|
76
75
|
return selfResult(mint, plaintext);
|
|
@@ -88,7 +87,12 @@ function selfKeyMint(ctx, opts) {
|
|
|
88
87
|
// Same op and actor as an admin mint, so a lookup by audit row finds this key too.
|
|
89
88
|
return {
|
|
90
89
|
plaintext: made.plaintext,
|
|
91
|
-
mint: {
|
|
90
|
+
mint: {
|
|
91
|
+
key: made.key,
|
|
92
|
+
actor: subject,
|
|
93
|
+
metadata: { label, role: 'member', self: true, expiresAt },
|
|
94
|
+
perSubject: opts.perSubject,
|
|
95
|
+
},
|
|
92
96
|
};
|
|
93
97
|
}
|
|
94
98
|
function selfResult({ key }, plaintext) {
|
|
@@ -96,15 +100,16 @@ function selfResult({ key }, plaintext) {
|
|
|
96
100
|
}
|
|
97
101
|
/** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from. */
|
|
98
102
|
export async function authListRows(ctx, opts) {
|
|
99
|
-
return listRows(ctx,
|
|
103
|
+
return listRows(ctx, ctx.store, opts);
|
|
100
104
|
}
|
|
101
|
-
/** Every tenant's keys in the store, live ones only unless
|
|
105
|
+
/** Every tenant's keys in the store, live ones only unless
|
|
106
|
+
* `active` is false; the host's own view, so the host admin only. */
|
|
102
107
|
export function authListAllTenants(ctx, active) {
|
|
103
108
|
requireHostAdmin(ctx, "Listing every tenant's keys");
|
|
104
109
|
return listApiKeys(ctx.hippoRoot, { active });
|
|
105
110
|
}
|
|
106
111
|
async function listRows(ctx, store, opts) {
|
|
107
|
-
const keyWrites =
|
|
112
|
+
const keyWrites = store.keyWrites;
|
|
108
113
|
const keyId = memberKeyIdOf(ctx.actor);
|
|
109
114
|
const record = keyId === null ? undefined : await store.findApiKey(keyId);
|
|
110
115
|
const filter = memberListFilter(ctx.actor, record?.ownerSubject);
|
|
@@ -114,7 +119,8 @@ async function listRows(ctx, store, opts) {
|
|
|
114
119
|
function memberKeyIdOf(actor) {
|
|
115
120
|
return actor.role === 'admin' || actor.viaAuthResolver ? null : keyIdOfSubject(actor.subject);
|
|
116
121
|
}
|
|
117
|
-
/** A member sees only the keys its person minted, or just its own key when that has no owner; an admin sees the whole
|
|
122
|
+
/** A member sees only the keys its person minted, or just its own key when that has no owner; an admin sees the whole
|
|
123
|
+
* tenant; null means no keys. */
|
|
118
124
|
function memberListFilter(actor, owner) {
|
|
119
125
|
if (actor.role === 'admin')
|
|
120
126
|
return {};
|
|
@@ -125,10 +131,13 @@ function memberListFilter(actor, owner) {
|
|
|
125
131
|
return null;
|
|
126
132
|
return owner ? { ownerSubject: owner } : { keyId };
|
|
127
133
|
}
|
|
128
|
-
/** Throws unless `ctx` may revoke `keyId`; a member gets one answer for a missing, foreign or unowned key, so it cannot
|
|
134
|
+
/** Throws unless `ctx` may revoke `keyId`; a member gets one answer for a missing, foreign or unowned key, so it cannot
|
|
135
|
+
* probe key ids. */
|
|
129
136
|
function assertMayRevoke(ctx, keyId, row) {
|
|
130
137
|
const { actor } = ctx;
|
|
131
|
-
if (actor.role !== 'admin' &&
|
|
138
|
+
if (actor.role !== 'admin' &&
|
|
139
|
+
actor.viaAuthResolver &&
|
|
140
|
+
(row?.tenantId !== ctx.tenantId || row.ownerSubject !== actor.subject)) {
|
|
132
141
|
throw new ForbiddenError('A member can revoke only the keys it minted');
|
|
133
142
|
}
|
|
134
143
|
// Cross-tenant access denied: same message as missing key, no info leak.
|
|
@@ -139,11 +148,12 @@ function assertMayRevoke(ctx, keyId, row) {
|
|
|
139
148
|
throw new ForbiddenError('An auth resolver admin cannot revoke an admin key, which outranks it');
|
|
140
149
|
}
|
|
141
150
|
}
|
|
142
|
-
/** Revoke a key in the caller's tenant: a member API key may revoke only itself, a resolver member only the keys it
|
|
151
|
+
/** Revoke a key in the caller's tenant: a member API key may revoke only itself, a resolver member only the keys it
|
|
152
|
+
* minted.
|
|
143
153
|
* The revoke and its auth_revoke row commit together on either store, so a failed audit write leaves the key live. */
|
|
144
154
|
export async function authRevoke(ctx, keyId) {
|
|
145
|
-
const store =
|
|
146
|
-
const keyAudit =
|
|
155
|
+
const store = ctx.store;
|
|
156
|
+
const keyAudit = store.keyAudit;
|
|
147
157
|
assertMemberKeyRevokesSelf(ctx, keyId);
|
|
148
158
|
const record = await store.findApiKey(keyId);
|
|
149
159
|
assertMayRevoke(ctx, keyId, keyOwnerOf(record));
|
|
@@ -156,7 +166,14 @@ function assertMemberKeyRevokesSelf(ctx, keyId) {
|
|
|
156
166
|
}
|
|
157
167
|
}
|
|
158
168
|
function keyOwnerOf(record) {
|
|
159
|
-
return record
|
|
169
|
+
return record
|
|
170
|
+
? {
|
|
171
|
+
tenantId: record.tenantId,
|
|
172
|
+
revokedAt: record.revokedAt,
|
|
173
|
+
role: record.role,
|
|
174
|
+
ownerSubject: record.ownerSubject ?? null,
|
|
175
|
+
}
|
|
176
|
+
: undefined;
|
|
160
177
|
}
|
|
161
178
|
/** The tenant that owns `keyId`, or undefined for an unknown key. Host admin only: it reads across tenants,
|
|
162
179
|
* so the local CLI can run revoke and grant in the key's own tenant. */
|
|
@@ -164,22 +181,22 @@ export async function authKeyTenant(ctx, keyId) {
|
|
|
164
181
|
if (!ctx.actor.hostAdmin) {
|
|
165
182
|
throw new ForbiddenError('Only the host admin can look up a key across tenants');
|
|
166
183
|
}
|
|
167
|
-
return (await
|
|
184
|
+
return (await ctx.store.findApiKey(keyId))?.tenantId;
|
|
168
185
|
}
|
|
169
186
|
/** Grant `keyId` read access to one restricted `scope`. Admin only. */
|
|
170
|
-
export function authGrant(ctx, keyId, scope) {
|
|
187
|
+
export async function authGrant(ctx, keyId, scope) {
|
|
171
188
|
return changeGrant(ctx, keyId, scope, 'auth_grant');
|
|
172
189
|
}
|
|
173
190
|
/** Revoke `keyId`'s grant on `scope`. Same authorization and lookup rules as authGrant. */
|
|
174
|
-
export function authUngrant(ctx, keyId, scope) {
|
|
191
|
+
export async function authUngrant(ctx, keyId, scope) {
|
|
175
192
|
return changeGrant(ctx, keyId, scope, 'auth_ungrant');
|
|
176
193
|
}
|
|
177
|
-
|
|
178
|
-
function changeGrant(ctx, keyId, scope, op) {
|
|
194
|
+
async function changeGrant(ctx, keyId, scope, op) {
|
|
179
195
|
if (ctx.actor.role !== 'admin') {
|
|
180
196
|
throw new ForbiddenError('Only an admin key can change scope grants');
|
|
181
197
|
}
|
|
182
|
-
|
|
198
|
+
const change = { tenantId: ctx.tenantId, keyId, scope, op, actor: ctx.actor.subject };
|
|
199
|
+
await ctx.store.keyGrants.changeScopeGrant(change);
|
|
183
200
|
return { ok: true };
|
|
184
201
|
}
|
|
185
202
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { QuarantineStatus } from '
|
|
2
|
-
import type { KeysetPosition } from '
|
|
3
|
-
import type {
|
|
1
|
+
import type { QuarantineStatus } from '../../store/quarantine.js';
|
|
2
|
+
import type { KeysetPosition } from '../../util/keyset.js';
|
|
3
|
+
import type { ContextWith } from '../types.js';
|
|
4
4
|
export interface QuarantineListItem {
|
|
5
5
|
id: string;
|
|
6
6
|
originalScope: string | null;
|
|
@@ -12,13 +12,14 @@ export interface QuarantineListItem {
|
|
|
12
12
|
contentPreview: string;
|
|
13
13
|
}
|
|
14
14
|
/** A tenant's quarantined memories, newest first. Default `status` is 'pending' (the review queue). */
|
|
15
|
-
export declare function quarantineList(ctx:
|
|
15
|
+
export declare function quarantineList(ctx: ContextWith<'quarantine'>, opts?: {
|
|
16
16
|
status?: QuarantineStatus | 'all';
|
|
17
17
|
limit?: number;
|
|
18
18
|
after?: KeysetPosition;
|
|
19
19
|
}): Promise<QuarantineListItem[]>;
|
|
20
|
-
/** Release a quarantined memory to its original scope. Admin only; the
|
|
21
|
-
|
|
20
|
+
/** Release a quarantined memory to its original scope. Admin only; the
|
|
21
|
+
* scope guard refuses a row moved since (mirrors restoreDormant). */
|
|
22
|
+
export declare function quarantineApprove(ctx: ContextWith<'quarantine'>, id: string): Promise<void>;
|
|
22
23
|
/** Keep a quarantined memory hidden for good. Admin only; the raw row is untouched (append-only). */
|
|
23
|
-
export declare function quarantineReject(ctx:
|
|
24
|
+
export declare function quarantineReject(ctx: ContextWith<'quarantine'>, id: string): Promise<void>;
|
|
24
25
|
//# sourceMappingURL=quarantine.d.ts.map
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
// Quarantine review: list, approve and reject held memories.
|
|
2
|
-
import { ConflictError, ForbiddenError, NotFoundError } from '
|
|
3
|
-
import { requireGroup } from '../store/index.js';
|
|
4
|
-
import { storeFor } from '../store/sqlite/store.js';
|
|
2
|
+
import { ConflictError, ForbiddenError, NotFoundError } from '../../core/api-errors.js';
|
|
5
3
|
const QUARANTINE_PREVIEW_CHARS = 200;
|
|
6
4
|
/** A tenant's quarantined memories, newest first. Default `status` is 'pending' (the review queue). */
|
|
7
5
|
export async function quarantineList(ctx, opts = {}) {
|
|
8
|
-
const rows = await
|
|
6
|
+
const rows = await ctx.store.quarantine
|
|
9
7
|
.listQuarantined(ctx.tenantId, { status: opts.status ?? 'pending', limit: opts.limit, after: opts.after });
|
|
10
8
|
return rows.map((row) => ({
|
|
11
9
|
id: row.memoryId,
|
|
@@ -23,16 +21,18 @@ function refusalError(id, refusal) {
|
|
|
23
21
|
return new NotFoundError(`not quarantined: ${id}`);
|
|
24
22
|
return new ConflictError(`${id} is already ${refusal.status}`);
|
|
25
23
|
}
|
|
26
|
-
/** Release a quarantined memory to its original scope. Admin only; the
|
|
24
|
+
/** Release a quarantined memory to its original scope. Admin only; the
|
|
25
|
+
* scope guard refuses a row moved since (mirrors restoreDormant). */
|
|
27
26
|
export async function quarantineApprove(ctx, id) {
|
|
28
27
|
if (ctx.actor.role !== 'admin') {
|
|
29
28
|
throw new ForbiddenError('Only an admin key can approve a quarantined memory');
|
|
30
29
|
}
|
|
31
|
-
const result = await
|
|
30
|
+
const result = await ctx.store.quarantine.approveQuarantined(ctx.tenantId, id, ctx.actor.subject);
|
|
32
31
|
if (result.outcome === 'approved')
|
|
33
32
|
return;
|
|
34
|
-
if (result.outcome === 'scope_moved')
|
|
33
|
+
if (result.outcome === 'scope_moved') {
|
|
35
34
|
throw new ConflictError(`memory ${id} scope changed since quarantine; refusing to approve`);
|
|
35
|
+
}
|
|
36
36
|
throw refusalError(id, result);
|
|
37
37
|
}
|
|
38
38
|
/** Keep a quarantined memory hidden for good. Admin only; the raw row is untouched (append-only). */
|
|
@@ -40,7 +40,7 @@ export async function quarantineReject(ctx, id) {
|
|
|
40
40
|
if (ctx.actor.role !== 'admin') {
|
|
41
41
|
throw new ForbiddenError('Only an admin key can reject a quarantined memory');
|
|
42
42
|
}
|
|
43
|
-
const result = await
|
|
43
|
+
const result = await ctx.store.quarantine.rejectQuarantined(ctx.tenantId, id, ctx.actor.subject);
|
|
44
44
|
if (result.outcome !== 'rejected')
|
|
45
45
|
throw refusalError(id, result);
|
|
46
46
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Context, type ContextWith } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Binds `sessionId` to the caller's owner on first use; a session another owner holds is a 409, so the client can set
|
|
4
|
+
* it aside.
|
|
5
|
+
*/
|
|
6
|
+
export declare function bindSessionOwner(ctx: Context, sessionId: string): void;
|
|
7
|
+
/** `bindSessionOwner` through the store's sessions group, for a caller whose store is not hippo.db; a failure rejects,
|
|
8
|
+
* never throws. */
|
|
9
|
+
export declare function bindSessionOwnerOn(ctx: ContextWith<'sessions'>, sessionId: string): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=session-owners.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// A session id belongs to the first owner that binds it, so one developer's client cannot write into another's session.
|
|
2
|
+
import { ConflictError } from '../../core/api-errors.js';
|
|
3
|
+
import { ownerOrSubject } from '../types.js';
|
|
4
|
+
import { sessionOwnerOrBind } from '../../store/sessions.js';
|
|
5
|
+
import { assertTenantId } from '../../store/tenant.js';
|
|
6
|
+
import { DAY_MS } from '../../util/time.js';
|
|
7
|
+
/** Bindings older than this are pruned when a new session binds. */
|
|
8
|
+
const BINDING_RETENTION_DAYS = 90;
|
|
9
|
+
/**
|
|
10
|
+
* Binds `sessionId` to the caller's owner on first use; a session another owner holds is a 409, so the client can set
|
|
11
|
+
* it aside.
|
|
12
|
+
*/
|
|
13
|
+
export function bindSessionOwner(ctx, sessionId) {
|
|
14
|
+
assertTenantId('bindSessionOwner', ctx.tenantId);
|
|
15
|
+
const owner = ownerOrSubject(ctx.actor);
|
|
16
|
+
const bound = sessionOwnerOrBind(ctx.hippoRoot, {
|
|
17
|
+
tenantId: ctx.tenantId,
|
|
18
|
+
sessionId,
|
|
19
|
+
owner,
|
|
20
|
+
retentionMs: BINDING_RETENTION_DAYS * DAY_MS,
|
|
21
|
+
});
|
|
22
|
+
if (bound !== owner)
|
|
23
|
+
throw new ConflictError('session id belongs to another caller');
|
|
24
|
+
}
|
|
25
|
+
/** `bindSessionOwner` through the store's sessions group, for a caller whose store is not hippo.db; a failure rejects,
|
|
26
|
+
* never throws. */
|
|
27
|
+
export async function bindSessionOwnerOn(ctx, sessionId) {
|
|
28
|
+
assertTenantId('bindSessionOwnerOn', ctx.tenantId);
|
|
29
|
+
const owner = ownerOrSubject(ctx.actor);
|
|
30
|
+
const retentionMs = BINDING_RETENTION_DAYS * DAY_MS;
|
|
31
|
+
const bound = await ctx.store.sessions.bindSessionOwner(ctx.tenantId, sessionId, owner, retentionMs);
|
|
32
|
+
if (bound !== owner)
|
|
33
|
+
throw new ConflictError('session id belongs to another caller');
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=session-owners.js.map
|
|
@@ -46,7 +46,9 @@ export declare const DEFAULT_RECENT_FRACTION_THRESHOLD = 0.7;
|
|
|
46
46
|
export declare const DEFAULT_MIN_RETURNED = 3;
|
|
47
47
|
export declare const DEFAULT_MIN_POOL = 10;
|
|
48
48
|
export declare const DEFAULT_MIN_OLDER_PASSED_OVER = 3;
|
|
49
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Returns an AvailabilityHint when the returned slice is recency-dominated, the pool skews older and older matches were
|
|
51
|
+
* passed over; else null.
|
|
50
52
|
* Entries with an unparseable `created` are dropped so a malformed row cannot poison the medians with NaN. */
|
|
51
53
|
export declare function detectAvailabilityBias(opts: DetectAvailabilityBiasOpts): AvailabilityHint | null;
|
|
52
54
|
//# sourceMappingURL=availability.d.ts.map
|
package/dist/api/availability.js
CHANGED
|
@@ -16,7 +16,9 @@ function parseTimestamps(refs) {
|
|
|
16
16
|
.map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
|
|
17
17
|
.filter((e) => Number.isFinite(e.ts));
|
|
18
18
|
}
|
|
19
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Returns an AvailabilityHint when the returned slice is recency-dominated, the pool skews older and older matches were
|
|
21
|
+
* passed over; else null.
|
|
20
22
|
* Entries with an unparseable `created` are dropped so a malformed row cannot poison the medians with NaN. */
|
|
21
23
|
export function detectAvailabilityBias(opts) {
|
|
22
24
|
const now = opts.now ?? Date.now();
|
package/dist/api/busy.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { hashQueryText } from './recall/finish.js';
|
|
2
|
+
export { sessionRing, shownRecallRows } from './recall/finish.js';
|
|
3
|
+
export { availabilityPool, cutoffClauses, detectRecallHints, shrinkToFit, suppressionSummary, tokenPurse, } from './recall/render.js';
|
|
4
|
+
export { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from './context-render.js';
|
|
5
|
+
export type { RankRecallResult, RankStage, RecallGraphHops, RecallGraphStream, RecallReranker, } from './recall/pipeline.js';
|
|
6
|
+
//# sourceMappingURL=cli-surface.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// The api internals the recall CLI reads; off api/index.ts because server.ts publishes names from that barrel.
|
|
2
|
+
export { hashQueryText } from './recall/finish.js';
|
|
3
|
+
export { sessionRing, shownRecallRows } from './recall/finish.js';
|
|
4
|
+
export { availabilityPool, cutoffClauses, detectRecallHints, shrinkToFit, suppressionSummary, tokenPurse, } from './recall/render.js';
|
|
5
|
+
export { handoffText, printedTokens, sessionTrailText, settleTokens, snapshotText } from './context-render.js';
|
|
6
|
+
//# sourceMappingURL=cli-surface.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type HippoConfig } from '../core/config.js';
|
|
2
|
+
import type { Context } from './types.js';
|
|
3
|
+
/** The config a composition root set on the Context, else the store's own file; roots set it per command or request. */
|
|
4
|
+
export declare function configOf(ctx: Context): HippoConfig;
|
|
5
|
+
//# sourceMappingURL=config-of.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { loadConfig } from '../core/config.js';
|
|
2
|
+
/** The config a composition root set on the Context, else the store's own file; roots set it per command or request. */
|
|
3
|
+
export function configOf(ctx) {
|
|
4
|
+
return ctx.config ?? loadConfig(ctx.hippoRoot);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=config-of.js.map
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* A context query from the cwd's git state ('' means `getContext` lists by strength); kept out of the api layer, which
|
|
3
|
+
* never shells out.
|
|
4
|
+
*/
|
|
2
5
|
export declare function autoDetectContext(): string;
|
|
3
6
|
//# sourceMappingURL=context-auto.d.ts.map
|
package/dist/api/context-auto.js
CHANGED
|
@@ -4,9 +4,17 @@ const MAX_DIFF_TERMS = 10;
|
|
|
4
4
|
const SKIPPED_PATH_TERMS = ['src', 'dist', 'test', 'tests', 'node_modules', 'index'];
|
|
5
5
|
// stderr is dropped because git's warnings (line-ending notices, for one) would otherwise become query terms.
|
|
6
6
|
function readGit(args) {
|
|
7
|
-
return execFileSync('git', args, {
|
|
7
|
+
return execFileSync('git', args, {
|
|
8
|
+
encoding: 'utf8',
|
|
9
|
+
timeout: 3000,
|
|
10
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
11
|
+
windowsHide: true,
|
|
12
|
+
}).trim();
|
|
8
13
|
}
|
|
9
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* A context query from the cwd's git state ('' means `getContext` lists by strength); kept out of the api layer, which
|
|
16
|
+
* never shells out.
|
|
17
|
+
*/
|
|
10
18
|
export function autoDetectContext() {
|
|
11
19
|
try {
|
|
12
20
|
const diff = readGit(['diff', '--name-only', 'HEAD']);
|
|
@@ -34,8 +34,9 @@ export function handoffText(h) {
|
|
|
34
34
|
lines.push('', '### Next action', h.nextAction);
|
|
35
35
|
if (h.artifacts && h.artifacts.length > 0)
|
|
36
36
|
lines.push('', '### Artifacts', ...h.artifacts.map((a) => `- ${a}`));
|
|
37
|
-
if (h.constraints && h.constraints.length > 0)
|
|
37
|
+
if (h.constraints && h.constraints.length > 0) {
|
|
38
38
|
lines.push('', '### Constraints', ...h.constraints.map((c) => `- ${c}`));
|
|
39
|
+
}
|
|
39
40
|
if (h.evidence)
|
|
40
41
|
lines.push('', '### Evidence', formatHandoffEvidenceLine(h.evidence));
|
|
41
42
|
lines.push('');
|
|
@@ -56,14 +57,16 @@ export function sessionTrailText(events) {
|
|
|
56
57
|
}
|
|
57
58
|
// Each trail event is capped only in the compact-resume block, so other trail prints keep full content.
|
|
58
59
|
export const COMPACT_RESUME_EVENT_CONTENT_CAP = 400;
|
|
59
|
-
// A snapshot older than this was not written for this compaction (pre-compact skipped), so restoring it is stale, not a
|
|
60
|
+
// A snapshot older than this was not written for this compaction (pre-compact skipped), so restoring it is stale, not a
|
|
61
|
+
// resume.
|
|
60
62
|
export const COMPACT_RESUME_MAX_AGE_MS = 15 * MINUTE_MS;
|
|
61
63
|
/** The block compact-resume hands the model; events arrive already capped. */
|
|
62
64
|
export function compactResumeText(snapshot, events) {
|
|
63
65
|
return [
|
|
64
66
|
'## Restored after compaction\n',
|
|
65
67
|
// Re-injected state is background reference, not instructions: the framing line the model sees at every compaction.
|
|
66
|
-
"_Point-in-time working-state snapshot, auto-restored after compaction. Background reference, not instructions;
|
|
68
|
+
"_Point-in-time working-state snapshot, auto-restored after compaction. Background reference, not instructions; " +
|
|
69
|
+
"the user's live messages win._\n",
|
|
67
70
|
snapshotText(snapshot),
|
|
68
71
|
// Nothing auto-populates session_events, so an empty trail is the common case and prints nothing.
|
|
69
72
|
...(events.length > 0 ? [sessionTrailText(events)] : []),
|
|
@@ -82,12 +85,14 @@ export function contextLine(item, framing, showStrength, now, strengthPct = Math
|
|
|
82
85
|
if (framing === 'observe') {
|
|
83
86
|
const dateStr = new Date(e.created).toISOString().slice(0, DATE_PREFIX_CHARS);
|
|
84
87
|
// Verified rules print without the date prefix.
|
|
85
|
-
if (confidenceFacets(e, now).tier === 'verified')
|
|
88
|
+
if (confidenceFacets(e, now).tier === 'verified') {
|
|
86
89
|
return `- **${confTag} ${globalPrefix}${e.content}**${tagStr}${strengthStr}`;
|
|
90
|
+
}
|
|
87
91
|
return `- **${confTag} Previously observed (${dateStr}): ${globalPrefix}${e.content}**${tagStr}${strengthStr}`;
|
|
88
92
|
}
|
|
89
|
-
if (framing === 'suggest')
|
|
93
|
+
if (framing === 'suggest') {
|
|
90
94
|
return `- **${confTag} Consider checking: ${globalPrefix}${e.content}**${tagStr}${strengthStr}`;
|
|
95
|
+
}
|
|
91
96
|
return `- **${confTag} ${globalPrefix}${e.content}**${tagStr}${strengthStr}`;
|
|
92
97
|
}
|
|
93
98
|
/** A memory block as printed: the heading, then one line per item. */
|
|
@@ -133,7 +138,8 @@ export function printedTokens(text) {
|
|
|
133
138
|
return estimateTokens(text + '\n');
|
|
134
139
|
}
|
|
135
140
|
export function assembleHeading(c) {
|
|
136
|
-
return `Session ${c.sessionId} \u2014 ${c.items} items, ${c.tokens} tokens (raw=${c.totalRaw},
|
|
141
|
+
return `Session ${c.sessionId} \u2014 ${c.items} items, ${c.tokens} tokens (raw=${c.totalRaw}, ` +
|
|
142
|
+
`summarized=${c.summarized}, evicted=${c.evicted})`;
|
|
137
143
|
}
|
|
138
144
|
export function assembleLine(it) {
|
|
139
145
|
const prefix = it.isSummary ? '[summary]' : it.isFreshTail ? '[tail]' : '[older]';
|
|
@@ -152,7 +158,8 @@ export function assembleCost(sessionId) {
|
|
|
152
158
|
}
|
|
153
159
|
function drillHead(s, shown, total, truncated) {
|
|
154
160
|
const span = s.earliestAt ? ` (${s.earliestAt} -> ${s.latestAt})` : '';
|
|
155
|
-
return `Summary ${s.id} \u2014 ${s.descendantCount} descendants${span}\n ${s.content}\n\nChildren
|
|
161
|
+
return `Summary ${s.id} \u2014 ${s.descendantCount} descendants${span}\n ${s.content}\n\nChildren ` +
|
|
162
|
+
`(${shown}/${total}${truncated ? ', truncated' : ''}):`;
|
|
156
163
|
}
|
|
157
164
|
export function drillLine(c) {
|
|
158
165
|
return ` [L${c.dagLevel}] ${c.id} - ${c.content}`;
|
|
@@ -53,7 +53,10 @@ export interface ContextPools {
|
|
|
53
53
|
}
|
|
54
54
|
export declare function oneCopyPerMemory(local: readonly MemoryEntry[], global: readonly MemoryEntry[], now: Date): [MemoryEntry[], MemoryEntry[]];
|
|
55
55
|
export declare const finiteOr: (v: number, dflt: number, min: number) => number;
|
|
56
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Pins plus the prompt-recall or recent-N backfill; null means the hook block is turned off, so task state stays out
|
|
58
|
+
* too.
|
|
59
|
+
*/
|
|
57
60
|
export declare function selectPinned(opts: ContextOpts, plan: ContextPlan, left: number, pools: ContextPools, admission: ContextAdmission): ContextResultEntry[] | null;
|
|
58
61
|
/** No query: the strongest memories by strength, up to budget. */
|
|
59
62
|
export declare function selectStrongest(plan: ContextPlan, left: number, pools: ContextPools): ContextResultEntry[];
|