hippo-memory 1.72.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +35 -20
- package/dist/api/prompt-hook.js +66 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +27 -12
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +34 -15
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +58 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +33 -33
- package/dist/cli/auth.js +23 -31
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +5 -5
- package/dist/cli/object-verbs.js +13 -16
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +16 -8
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -4
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -5
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -5
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -5
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -4
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -5
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +38 -29
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +22 -17
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +87 -30
- package/dist/core/memory.js +82 -33
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +8 -2
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +40 -20
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -8
- package/dist/db/physics-state.js +17 -50
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +20 -5
- package/dist/db/request-stores.js +15 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +17 -7
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +72 -33
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +11 -10
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +17 -10
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -6
- package/dist/learn/invalidation.js +62 -28
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +21 -20
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +61 -77
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +59 -23
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +19 -9
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +550 -97
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -17
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +90 -41
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +97 -63
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +11 -12
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +4 -2
- package/dist/store/index.js +2 -1
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +261 -219
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +12 -5
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +97 -38
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -18
- package/dist/store/sqlite/store.js +95 -33
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +25 -11
- package/dist/store/summaries.js +84 -27
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +8 -4
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +28 -11
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +16 -4
- package/dist/util/request-scope.js +19 -6
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -21
- package/dist/store/sqlite/local.js +0 -39
package/dist/api/assemble.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// Session context assembly under a token budget.
|
|
2
|
-
import { requireGroup, storeFor } from '../store/index.js';
|
|
3
2
|
import { estimateTokens } from '../util/token-text.js';
|
|
4
3
|
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../core/recall-scope.js';
|
|
5
4
|
import { classifyOriginProject, projectNames } from '../core/project-identity.js';
|
|
6
5
|
const DEFAULT_FRESH_TAIL_COUNT = 10;
|
|
7
6
|
const DEFAULT_ROW_CAP = 5000;
|
|
8
7
|
export const DEFAULT_ASSEMBLE_BUDGET = 4000;
|
|
9
|
-
/** Chronological context window for a session; over budget, evicts the lowest-strength non-fresh-tail item first (fresh
|
|
8
|
+
/** Chronological context window for a session; over budget, evicts the lowest-strength non-fresh-tail item first (fresh
|
|
9
|
+
* tail is never evicted).
|
|
10
10
|
* Returns `items: []` for an empty sessionId, no raws, or when every row fails the scope/tenant filter. */
|
|
11
11
|
export async function assemble(ctx, sessionId, opts = {}) {
|
|
12
12
|
assertScopeRequestAllowed(ctx.actor, opts.scope);
|
|
@@ -43,7 +43,7 @@ export async function assemble(ctx, sessionId, opts = {}) {
|
|
|
43
43
|
async function loadScopedRaws(ctx, sessionId, opts, own) {
|
|
44
44
|
const rowCap = opts.rowCap ?? DEFAULT_ROW_CAP;
|
|
45
45
|
const origins = opts.project ? projectNames(opts.project) : undefined;
|
|
46
|
-
const dag =
|
|
46
|
+
const dag = ctx.store.dagReads;
|
|
47
47
|
const rows = await dag.sessionRawEntries({ tenantId: ctx.tenantId, sessionId, cap: rowCap, origins });
|
|
48
48
|
const truncated = rows.length === rowCap;
|
|
49
49
|
// `scoped.length` under-counts a capped session, so totalRaw falls back to a COUNT below.
|
|
@@ -52,7 +52,13 @@ async function loadScopedRaws(ctx, sessionId, opts, own) {
|
|
|
52
52
|
if (truncated) {
|
|
53
53
|
// The COUNT applies the same default-deny scope rule in SQL, so a no-scope
|
|
54
54
|
// caller cannot infer private rows by comparing totalRaw to items.length.
|
|
55
|
-
totalRaw = await dag.sessionRawCount({
|
|
55
|
+
totalRaw = await dag.sessionRawCount({
|
|
56
|
+
tenantId: ctx.tenantId,
|
|
57
|
+
sessionId,
|
|
58
|
+
scope: opts.scope,
|
|
59
|
+
ownScope: own,
|
|
60
|
+
origins,
|
|
61
|
+
});
|
|
56
62
|
}
|
|
57
63
|
else {
|
|
58
64
|
totalRaw = scoped.length;
|
|
@@ -89,7 +95,7 @@ async function substituteSummaries(ctx, olderRows, scope, own, project) {
|
|
|
89
95
|
}
|
|
90
96
|
const eligibleParentIds = Array.from(olderByParent.keys()).filter((pid) => (olderByParent.get(pid)?.length ?? 0) >= 2);
|
|
91
97
|
const parents = eligibleParentIds.length > 0
|
|
92
|
-
? (await
|
|
98
|
+
? (await ctx.store.entriesByIds(eligibleParentIds, ctx.tenantId))
|
|
93
99
|
.filter((p) => (p.dag_level ?? 0) === 2 && !p.superseded_by)
|
|
94
100
|
.filter((p) => passesScopeFilterForRecall(p.scope ?? null, scope, own))
|
|
95
101
|
.filter((p) => !project || classifyOriginProject(p.origin_project, project) !== 'cross-project')
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { type AuditIssue, type AuditResult } from '
|
|
3
|
-
import {
|
|
4
|
-
import type { KeysetPosition } from '
|
|
5
|
-
import type {
|
|
1
|
+
import type { AuditEvent, AuditOp } from '../../store/audit.js';
|
|
2
|
+
import { type AuditIssue, type AuditResult } from '../../core/memory-audit.js';
|
|
3
|
+
import type { QualityRepairResult } from '../../store/quality-repair.js';
|
|
4
|
+
import type { KeysetPosition } from '../../util/keyset.js';
|
|
5
|
+
import type { ContextWith } from '../types.js';
|
|
6
6
|
export interface AuditListOpts {
|
|
7
7
|
op?: AuditOp;
|
|
8
8
|
/** ISO timestamp lower bound. */
|
|
@@ -12,17 +12,19 @@ export interface AuditListOpts {
|
|
|
12
12
|
after?: KeysetPosition;
|
|
13
13
|
}
|
|
14
14
|
/** Read audit events scoped to `ctx.tenantId` on the store the request runs on. Read-only, no audit emit. */
|
|
15
|
-
export declare function auditList(ctx:
|
|
15
|
+
export declare function auditList(ctx: ContextWith<'auditLog'>, opts: AuditListOpts): Promise<AuditEvent[]>;
|
|
16
16
|
/** The pass that removes audit errors; it leads the reason on each forget row. */
|
|
17
17
|
export type AuditPass = 'audit --fix' | 'sleep-audit';
|
|
18
|
-
/** Delete the memories an audit marked as errors, each with its own forget row, and answer the ids that went: a pinned
|
|
19
|
-
|
|
18
|
+
/** Delete the memories an audit marked as errors, each with its own forget row, and answer the ids that went: a pinned
|
|
19
|
+
* or raw row stays. */
|
|
20
|
+
export declare function removeAuditErrors(ctx: ContextWith<'auditMaintenance'>, pass: AuditPass, issues: readonly AuditIssue[]): Promise<string[]>;
|
|
20
21
|
/** The caller's memories run through the quality audit; a memory that backs an object is never marked for removal. */
|
|
21
|
-
export declare function auditMemoryQuality(ctx:
|
|
22
|
-
/** Audit repair for the caller's tenant: a preview, or with `apply` the moves of certain defects to dormant storage
|
|
23
|
-
|
|
22
|
+
export declare function auditMemoryQuality(ctx: ContextWith<'auditMaintenance'>): Promise<AuditResult>;
|
|
23
|
+
/** Audit repair for the caller's tenant: a preview, or with `apply` the moves of certain defects to dormant storage
|
|
24
|
+
* behind a backup. */
|
|
25
|
+
export declare function repairMemoryQuality(ctx: ContextWith<'auditMaintenance'>, apply: boolean): Promise<QualityRepairResult>;
|
|
24
26
|
/** The repair sleep and the daily runner apply once per store after an upgrade; null when it already ran there. */
|
|
25
|
-
export declare function repairMemoryQualityOnce(ctx:
|
|
27
|
+
export declare function repairMemoryQualityOnce(ctx: ContextWith<'auditMaintenance'>): Promise<QualityRepairResult | null>;
|
|
26
28
|
export interface PruneAuditOpts {
|
|
27
29
|
/** Cutoff in days. Rows with `ts < (now - N days)` are deleted. */
|
|
28
30
|
olderThanDays: number;
|
|
@@ -39,8 +41,8 @@ export interface PruneAuditResult {
|
|
|
39
41
|
}
|
|
40
42
|
/** Cutoff ISO timestamp for N days ago; exported so tests can pin "now" without mocking Date. */
|
|
41
43
|
export declare function computeCutoff(days: number, now?: Date): string;
|
|
42
|
-
/** Delete the caller's tenant's audit_log rows older than `olderThanDays`, then record an `audit_prune` row as
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
export declare function pruneAuditLog(ctx:
|
|
44
|
+
/** Delete the caller's tenant's audit_log rows older than `olderThanDays`, then record an `audit_prune` row as
|
|
45
|
+
* `ctx.actor`; opt-in, since retention floors (HIPAA, SOX, GDPR) apply. The row is written after the DELETE, so a call
|
|
46
|
+
* never prunes its own record. Throws on non-positive days or an empty tenant. */
|
|
47
|
+
export declare function pruneAuditLog(ctx: ContextWith<'auditMaintenance'>, opts: PruneAuditOpts): Promise<PruneAuditResult>;
|
|
46
48
|
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Audit log queries and retention, and the memory-quality audit with its repair passes.
|
|
2
|
+
import { auditMemories } from '../../core/memory-audit.js';
|
|
3
|
+
import { DAY_MS } from '../../util/time.js';
|
|
4
|
+
/** Read audit events scoped to `ctx.tenantId` on the store the request runs on. Read-only, no audit emit. */
|
|
5
|
+
export async function auditList(ctx, opts) {
|
|
6
|
+
return ctx.store.auditLog.listAuditEvents({
|
|
7
|
+
tenantId: ctx.tenantId, op: opts.op, since: opts.since, limit: opts.limit, after: opts.after,
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
function maintenanceOf(ctx) {
|
|
11
|
+
return ctx.store.auditMaintenance;
|
|
12
|
+
}
|
|
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. */
|
|
15
|
+
export async function removeAuditErrors(ctx, pass, issues) {
|
|
16
|
+
const removals = issues
|
|
17
|
+
.filter((issue) => issue.severity === 'error')
|
|
18
|
+
.map((issue) => ({ id: issue.memoryId, reason: `${pass}: ${issue.reason}` }));
|
|
19
|
+
if (removals.length === 0)
|
|
20
|
+
return [];
|
|
21
|
+
return maintenanceOf(ctx).deleteAutomatically(removals, ctx.actor.subject);
|
|
22
|
+
}
|
|
23
|
+
/** The caller's memories run through the quality audit; a memory that backs an object is never marked for removal. */
|
|
24
|
+
export async function auditMemoryQuality(ctx) {
|
|
25
|
+
const maintenance = maintenanceOf(ctx);
|
|
26
|
+
return auditMemories(await maintenance.tenantEntries(ctx.tenantId), await maintenance.objectBackedIds());
|
|
27
|
+
}
|
|
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
|
+
export async function repairMemoryQuality(ctx, apply) {
|
|
31
|
+
return maintenanceOf(ctx).repairQuality(ctx.tenantId, apply);
|
|
32
|
+
}
|
|
33
|
+
/** The repair sleep and the daily runner apply once per store after an upgrade; null when it already ran there. */
|
|
34
|
+
export async function repairMemoryQualityOnce(ctx) {
|
|
35
|
+
return maintenanceOf(ctx).repairQualityOnce(ctx.tenantId);
|
|
36
|
+
}
|
|
37
|
+
/** Cutoff ISO timestamp for N days ago; exported so tests can pin "now" without mocking Date. */
|
|
38
|
+
export function computeCutoff(days, now = new Date()) {
|
|
39
|
+
const cutoff = new Date(now.getTime() - days * DAY_MS);
|
|
40
|
+
return cutoff.toISOString();
|
|
41
|
+
}
|
|
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
|
+
export async function pruneAuditLog(ctx, opts) {
|
|
46
|
+
if (!Number.isFinite(opts.olderThanDays) || opts.olderThanDays <= 0) {
|
|
47
|
+
throw new Error(`pruneAuditLog: olderThanDays must be a positive number, got ${opts.olderThanDays}`);
|
|
48
|
+
}
|
|
49
|
+
if (!ctx.tenantId) {
|
|
50
|
+
throw new Error('pruneAuditLog: tenantId is required');
|
|
51
|
+
}
|
|
52
|
+
const dryRun = opts.dryRun === true;
|
|
53
|
+
const cutoff = computeCutoff(opts.olderThanDays);
|
|
54
|
+
const prune = { tenantId: ctx.tenantId, cutoff, actor: ctx.actor.subject, olderThanDays: opts.olderThanDays, dryRun };
|
|
55
|
+
const count = await maintenanceOf(ctx).pruneAuditRows(prune);
|
|
56
|
+
return { cutoff, count, dryRun };
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { DEFAULT_KEY_TTL_DAYS, type ApiKeyListItem, type ApiKeyListRow } from '
|
|
2
|
-
import type { KeysetPosition } from '
|
|
3
|
-
import { type Context, type
|
|
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,33 +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
|
|
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
|
|
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
|
-
|
|
55
|
-
|
|
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.
|
|
56
59
|
* The revoke and its auth_revoke row commit together on either store, so a failed audit write leaves the key live. */
|
|
57
|
-
export declare function authRevoke
|
|
60
|
+
export declare function authRevoke(ctx: ContextWith<'keyAudit'>, keyId: string): Promise<AuthRevokeResult>;
|
|
58
61
|
/** The tenant that owns `keyId`, or undefined for an unknown key. Host admin only: it reads across tenants,
|
|
59
62
|
* so the local CLI can run revoke and grant in the key's own tenant. */
|
|
60
|
-
export declare function authKeyTenant(ctx:
|
|
63
|
+
export declare function authKeyTenant(ctx: StoreContext, keyId: string): Promise<string | undefined>;
|
|
61
64
|
/** Shared result shape for authGrant/authUngrant, named per the file's oxlint anti-slop rule. */
|
|
62
65
|
export interface AuthGrantResult {
|
|
63
66
|
ok: true;
|
|
64
67
|
}
|
|
65
68
|
/** Grant `keyId` read access to one restricted `scope`. Admin only. */
|
|
66
|
-
export declare function authGrant(ctx:
|
|
69
|
+
export declare function authGrant(ctx: ContextWith<'keyGrants'>, keyId: string, scope: string): Promise<AuthGrantResult>;
|
|
67
70
|
/** Revoke `keyId`'s grant on `scope`. Same authorization and lookup rules as authGrant. */
|
|
68
|
-
export declare function authUngrant(ctx:
|
|
71
|
+
export declare function authUngrant(ctx: ContextWith<'keyGrants'>, keyId: string, scope: string): Promise<AuthGrantResult>;
|
|
69
72
|
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -1,25 +1,22 @@
|
|
|
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 { DAY_MS } from '../util/time.js';
|
|
7
|
-
import { andThen, notPorted, onStore } from './on-store.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
|
-
*
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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. */
|
|
14
|
+
export async function authCreate(ctx, opts) {
|
|
15
|
+
// The key and its auth_create row commit together on every store, so a failed audit write leaves no key.
|
|
16
|
+
const keyWrites = ctx.store.keyWrites;
|
|
17
|
+
const { plaintext, mint } = adminKeyMint(ctx, opts);
|
|
18
|
+
await keyWrites.createApiKey(mint);
|
|
19
|
+
return createResult(mint, plaintext);
|
|
23
20
|
}
|
|
24
21
|
/** A key row in the caller's tenant, made here so only its hash ever reaches a store. */
|
|
25
22
|
function newKey(ctx, fields) {
|
|
@@ -59,7 +56,8 @@ function adminKeyMint(ctx, opts) {
|
|
|
59
56
|
function createResult({ key }, plaintext) {
|
|
60
57
|
return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: key.role, expiresAt: key.expiresAt };
|
|
61
58
|
}
|
|
62
|
-
/** 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. */
|
|
63
61
|
function assertSelfMintOpts({ ttlDays, perSubject }) {
|
|
64
62
|
if (!Number.isFinite(ttlDays) || ttlDays <= 0 || ttlDays > MAX_TTL_DAYS) {
|
|
65
63
|
throw new RangeError(`authCreateSelf: ttlDays must be above 0 and at most ${MAX_TTL_DAYS}, got ${String(ttlDays)}`);
|
|
@@ -70,12 +68,11 @@ function assertSelfMintOpts({ ttlDays, perSubject }) {
|
|
|
70
68
|
}
|
|
71
69
|
/** Mint a member key for the caller an auth resolver vouched for, whatever its role; the
|
|
72
70
|
* binary floor, the cap's revokes, the mint and its audit rows commit or fail together. */
|
|
73
|
-
export function authCreateSelf(ctx, opts) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
});
|
|
71
|
+
export async function authCreateSelf(ctx, opts) {
|
|
72
|
+
const keyWrites = ctx.store.keyWrites;
|
|
73
|
+
const { plaintext, mint } = selfKeyMint(ctx, opts);
|
|
74
|
+
await keyWrites.createSelfApiKey(mint);
|
|
75
|
+
return selfResult(mint, plaintext);
|
|
79
76
|
}
|
|
80
77
|
function selfKeyMint(ctx, opts) {
|
|
81
78
|
if (!ctx.actor.viaAuthResolver) {
|
|
@@ -90,34 +87,40 @@ function selfKeyMint(ctx, opts) {
|
|
|
90
87
|
// Same op and actor as an admin mint, so a lookup by audit row finds this key too.
|
|
91
88
|
return {
|
|
92
89
|
plaintext: made.plaintext,
|
|
93
|
-
mint: {
|
|
90
|
+
mint: {
|
|
91
|
+
key: made.key,
|
|
92
|
+
actor: subject,
|
|
93
|
+
metadata: { label, role: 'member', self: true, expiresAt },
|
|
94
|
+
perSubject: opts.perSubject,
|
|
95
|
+
},
|
|
94
96
|
};
|
|
95
97
|
}
|
|
96
98
|
function selfResult({ key }, plaintext) {
|
|
97
99
|
return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: 'member', expiresAt: key.expiresAt };
|
|
98
100
|
}
|
|
99
101
|
/** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from. */
|
|
100
|
-
export function authListRows(ctx, opts) {
|
|
101
|
-
return
|
|
102
|
+
export async function authListRows(ctx, opts) {
|
|
103
|
+
return listRows(ctx, ctx.store, opts);
|
|
102
104
|
}
|
|
103
|
-
/** 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. */
|
|
104
107
|
export function authListAllTenants(ctx, active) {
|
|
105
108
|
requireHostAdmin(ctx, "Listing every tenant's keys");
|
|
106
109
|
return listApiKeys(ctx.hippoRoot, { active });
|
|
107
110
|
}
|
|
108
|
-
function listRows(ctx,
|
|
109
|
-
const keyWrites =
|
|
111
|
+
async function listRows(ctx, store, opts) {
|
|
112
|
+
const keyWrites = store.keyWrites;
|
|
110
113
|
const keyId = memberKeyIdOf(ctx.actor);
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
});
|
|
114
|
+
const record = keyId === null ? undefined : await store.findApiKey(keyId);
|
|
115
|
+
const filter = memberListFilter(ctx.actor, record?.ownerSubject);
|
|
116
|
+
return filter === null ? [] : keyWrites.listApiKeys({ ...opts, tenantId: ctx.tenantId, ...filter });
|
|
115
117
|
}
|
|
116
118
|
/** The key id of a member API key caller, whose owner decides what it lists; null for any other caller. */
|
|
117
119
|
function memberKeyIdOf(actor) {
|
|
118
120
|
return actor.role === 'admin' || actor.viaAuthResolver ? null : keyIdOfSubject(actor.subject);
|
|
119
121
|
}
|
|
120
|
-
/** 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. */
|
|
121
124
|
function memberListFilter(actor, owner) {
|
|
122
125
|
if (actor.role === 'admin')
|
|
123
126
|
return {};
|
|
@@ -128,10 +131,13 @@ function memberListFilter(actor, owner) {
|
|
|
128
131
|
return null;
|
|
129
132
|
return owner ? { ownerSubject: owner } : { keyId };
|
|
130
133
|
}
|
|
131
|
-
/** 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. */
|
|
132
136
|
function assertMayRevoke(ctx, keyId, row) {
|
|
133
137
|
const { actor } = ctx;
|
|
134
|
-
if (actor.role !== 'admin' &&
|
|
138
|
+
if (actor.role !== 'admin' &&
|
|
139
|
+
actor.viaAuthResolver &&
|
|
140
|
+
(row?.tenantId !== ctx.tenantId || row.ownerSubject !== actor.subject)) {
|
|
135
141
|
throw new ForbiddenError('A member can revoke only the keys it minted');
|
|
136
142
|
}
|
|
137
143
|
// Cross-tenant access denied: same message as missing key, no info leak.
|
|
@@ -142,18 +148,17 @@ function assertMayRevoke(ctx, keyId, row) {
|
|
|
142
148
|
throw new ForbiddenError('An auth resolver admin cannot revoke an admin key, which outranks it');
|
|
143
149
|
}
|
|
144
150
|
}
|
|
145
|
-
/** 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.
|
|
146
153
|
* The revoke and its auth_revoke row commit together on either store, so a failed audit write leaves the key live. */
|
|
147
|
-
export function authRevoke(ctx, keyId) {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
});
|
|
156
|
-
});
|
|
154
|
+
export async function authRevoke(ctx, keyId) {
|
|
155
|
+
const store = ctx.store;
|
|
156
|
+
const keyAudit = store.keyAudit;
|
|
157
|
+
assertMemberKeyRevokesSelf(ctx, keyId);
|
|
158
|
+
const record = await store.findApiKey(keyId);
|
|
159
|
+
assertMayRevoke(ctx, keyId, keyOwnerOf(record));
|
|
160
|
+
const revoke = { tenantId: ctx.tenantId, keyId, actor: ctx.actor.subject, at: new Date().toISOString() };
|
|
161
|
+
return { ok: true, revokedAt: await keyAudit.revokeApiKey(revoke) };
|
|
157
162
|
}
|
|
158
163
|
function assertMemberKeyRevokesSelf(ctx, keyId) {
|
|
159
164
|
if (ctx.actor.role !== 'admin' && !ctx.actor.viaAuthResolver && keyIdOfSubject(ctx.actor.subject) !== keyId) {
|
|
@@ -161,7 +166,14 @@ function assertMemberKeyRevokesSelf(ctx, keyId) {
|
|
|
161
166
|
}
|
|
162
167
|
}
|
|
163
168
|
function keyOwnerOf(record) {
|
|
164
|
-
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;
|
|
165
177
|
}
|
|
166
178
|
/** The tenant that owns `keyId`, or undefined for an unknown key. Host admin only: it reads across tenants,
|
|
167
179
|
* so the local CLI can run revoke and grant in the key's own tenant. */
|
|
@@ -169,22 +181,22 @@ export async function authKeyTenant(ctx, keyId) {
|
|
|
169
181
|
if (!ctx.actor.hostAdmin) {
|
|
170
182
|
throw new ForbiddenError('Only the host admin can look up a key across tenants');
|
|
171
183
|
}
|
|
172
|
-
return (await
|
|
184
|
+
return (await ctx.store.findApiKey(keyId))?.tenantId;
|
|
173
185
|
}
|
|
174
186
|
/** Grant `keyId` read access to one restricted `scope`. Admin only. */
|
|
175
|
-
export function authGrant(ctx, keyId, scope) {
|
|
187
|
+
export async function authGrant(ctx, keyId, scope) {
|
|
176
188
|
return changeGrant(ctx, keyId, scope, 'auth_grant');
|
|
177
189
|
}
|
|
178
190
|
/** Revoke `keyId`'s grant on `scope`. Same authorization and lookup rules as authGrant. */
|
|
179
|
-
export function authUngrant(ctx, keyId, scope) {
|
|
191
|
+
export async function authUngrant(ctx, keyId, scope) {
|
|
180
192
|
return changeGrant(ctx, keyId, scope, 'auth_ungrant');
|
|
181
193
|
}
|
|
182
|
-
|
|
183
|
-
function changeGrant(ctx, keyId, scope, op) {
|
|
194
|
+
async function changeGrant(ctx, keyId, scope, op) {
|
|
184
195
|
if (ctx.actor.role !== 'admin') {
|
|
185
196
|
throw new ForbiddenError('Only an admin key can change scope grants');
|
|
186
197
|
}
|
|
187
|
-
|
|
198
|
+
const change = { tenantId: ctx.tenantId, keyId, scope, op, actor: ctx.actor.subject };
|
|
199
|
+
await ctx.store.keyGrants.changeScopeGrant(change);
|
|
188
200
|
return { ok: true };
|
|
189
201
|
}
|
|
190
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,10 +1,9 @@
|
|
|
1
1
|
// Quarantine review: list, approve and reject held memories.
|
|
2
|
-
import { ConflictError, ForbiddenError, NotFoundError } from '
|
|
3
|
-
import { requireGroup, storeFor } from '../store/index.js';
|
|
2
|
+
import { ConflictError, ForbiddenError, NotFoundError } from '../../core/api-errors.js';
|
|
4
3
|
const QUARANTINE_PREVIEW_CHARS = 200;
|
|
5
4
|
/** A tenant's quarantined memories, newest first. Default `status` is 'pending' (the review queue). */
|
|
6
5
|
export async function quarantineList(ctx, opts = {}) {
|
|
7
|
-
const rows = await
|
|
6
|
+
const rows = await ctx.store.quarantine
|
|
8
7
|
.listQuarantined(ctx.tenantId, { status: opts.status ?? 'pending', limit: opts.limit, after: opts.after });
|
|
9
8
|
return rows.map((row) => ({
|
|
10
9
|
id: row.memoryId,
|
|
@@ -22,16 +21,18 @@ function refusalError(id, refusal) {
|
|
|
22
21
|
return new NotFoundError(`not quarantined: ${id}`);
|
|
23
22
|
return new ConflictError(`${id} is already ${refusal.status}`);
|
|
24
23
|
}
|
|
25
|
-
/** 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). */
|
|
26
26
|
export async function quarantineApprove(ctx, id) {
|
|
27
27
|
if (ctx.actor.role !== 'admin') {
|
|
28
28
|
throw new ForbiddenError('Only an admin key can approve a quarantined memory');
|
|
29
29
|
}
|
|
30
|
-
const result = await
|
|
30
|
+
const result = await ctx.store.quarantine.approveQuarantined(ctx.tenantId, id, ctx.actor.subject);
|
|
31
31
|
if (result.outcome === 'approved')
|
|
32
32
|
return;
|
|
33
|
-
if (result.outcome === 'scope_moved')
|
|
33
|
+
if (result.outcome === 'scope_moved') {
|
|
34
34
|
throw new ConflictError(`memory ${id} scope changed since quarantine; refusing to approve`);
|
|
35
|
+
}
|
|
35
36
|
throw refusalError(id, result);
|
|
36
37
|
}
|
|
37
38
|
/** Keep a quarantined memory hidden for good. Admin only; the raw row is untouched (append-only). */
|
|
@@ -39,7 +40,7 @@ export async function quarantineReject(ctx, id) {
|
|
|
39
40
|
if (ctx.actor.role !== 'admin') {
|
|
40
41
|
throw new ForbiddenError('Only an admin key can reject a quarantined memory');
|
|
41
42
|
}
|
|
42
|
-
const result = await
|
|
43
|
+
const result = await ctx.store.quarantine.rejectQuarantined(ctx.tenantId, id, ctx.actor.subject);
|
|
43
44
|
if (result.outcome !== 'rejected')
|
|
44
45
|
throw refusalError(id, result);
|
|
45
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
|