hippo-memory 1.69.0 → 1.71.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 +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- 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 -2
- package/dist/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/api/auth.js
CHANGED
|
@@ -1,40 +1,47 @@
|
|
|
1
1
|
// API key management: create, list, revoke, and grant or ungrant restricted scopes.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { DAY_MS } from '../
|
|
7
|
-
import {
|
|
8
|
-
import { requireGroup } from '../store-port.js';
|
|
9
|
-
import { createAuditOf, createKeyAt, createSelfKeyAt } from '../store/key-writes.js';
|
|
10
|
-
import { selectApiKeyOwner } from '../store/tenant-lookup.js';
|
|
2
|
+
import { BadRequestError, ForbiddenError, NotFoundError } from '../core/api-errors.js';
|
|
3
|
+
import { mintApiKey, } from '../store/auth.js';
|
|
4
|
+
import { changeScopeGrant } from '../store/sqlite/local.js';
|
|
5
|
+
import { sqliteSyncStore } from '../store/sqlite/store.js';
|
|
6
|
+
import { DAY_MS } from '../util/time.js';
|
|
7
|
+
import { andThen, notPorted, onStore } from './on-store.js';
|
|
11
8
|
const API_KEY_SUBJECT = 'api_key:';
|
|
12
9
|
/** The key id an API-key actor's subject names, or null for any other actor. */
|
|
13
10
|
function keyIdOfSubject(subject) {
|
|
14
11
|
return subject.startsWith(API_KEY_SUBJECT) ? subject.slice(API_KEY_SUBJECT.length) : null;
|
|
15
12
|
}
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
* cannot override the tenant via the opts bag — a previous `tenantId` field
|
|
19
|
-
* was removed because the HTTP layer would happily forward `body.tenantId`,
|
|
20
|
-
* letting tenant A mint a key for tenant B. The HTTP route handler at
|
|
21
|
-
* `src/server.ts` POST /v1/auth/keys mirrors this: it ignores any body
|
|
22
|
-
* `tenantId` and uses the resolved Bearer's tenant exclusively.
|
|
23
|
-
*
|
|
24
|
-
* Only an admin actor can mint (ForbiddenError otherwise), and a key never
|
|
25
|
-
* outranks its minter: a resolver admin is tenant-only, so it mints members.
|
|
26
|
-
*/
|
|
13
|
+
/** Mints a key always bound to `ctx.tenantId`; opts cannot override the tenant, or tenant A could mint a key for tenant B.
|
|
14
|
+
* Admin only (ForbiddenError otherwise), and a key never outranks its minter: a resolver admin is tenant-only, so it mints members. */
|
|
27
15
|
export function authCreate(ctx, opts) {
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
16
|
+
// The key and its auth_create row commit together on either store, so a failed audit write leaves no key.
|
|
17
|
+
return onStore(ctx, (port) => {
|
|
18
|
+
const keyWrites = port.keyWrites ?? notPorted(port, 'keyWrites');
|
|
19
|
+
const { plaintext, mint } = adminKeyMint(ctx, opts);
|
|
20
|
+
return andThen(keyWrites.createApiKey(mint), () => createResult(mint, plaintext));
|
|
21
|
+
});
|
|
32
22
|
}
|
|
33
23
|
/** A key row in the caller's tenant, made here so only its hash ever reaches a store. */
|
|
34
24
|
function newKey(ctx, fields) {
|
|
35
25
|
const { keyId, plaintext, keyHash } = mintApiKey();
|
|
36
26
|
return { plaintext, key: { ...fields, keyId, keyHash, tenantId: ctx.tenantId, createdAt: new Date().toISOString() } };
|
|
37
27
|
}
|
|
28
|
+
/** Days a key lives when its mint names no expiry, so a key nobody remembers stops working by itself. */
|
|
29
|
+
const DEFAULT_KEY_TTL_DAYS = 90;
|
|
30
|
+
// The ceiling keeps toISOString in range.
|
|
31
|
+
const MAX_TTL_DAYS = 3650;
|
|
32
|
+
/** A 400, not a RangeError, since the caller of the mint chose these. */
|
|
33
|
+
function mintExpiry({ ttlDays, noExpiry }) {
|
|
34
|
+
if (noExpiry && ttlDays !== undefined) {
|
|
35
|
+
throw new BadRequestError('send ttlDays or noExpiry, not both');
|
|
36
|
+
}
|
|
37
|
+
if (noExpiry)
|
|
38
|
+
return null;
|
|
39
|
+
const days = ttlDays ?? DEFAULT_KEY_TTL_DAYS;
|
|
40
|
+
if (!Number.isFinite(days) || days <= 0 || days > MAX_TTL_DAYS) {
|
|
41
|
+
throw new BadRequestError(`ttlDays must be above 0 and at most ${MAX_TTL_DAYS}`);
|
|
42
|
+
}
|
|
43
|
+
return new Date(Date.now() + days * DAY_MS).toISOString();
|
|
44
|
+
}
|
|
38
45
|
function adminKeyMint(ctx, opts) {
|
|
39
46
|
if (ctx.actor.role !== 'admin') {
|
|
40
47
|
throw new ForbiddenError('Only an admin key can create API keys');
|
|
@@ -42,45 +49,16 @@ function adminKeyMint(ctx, opts) {
|
|
|
42
49
|
if (ctx.actor.viaAuthResolver && opts.role === 'admin') {
|
|
43
50
|
throw new ForbiddenError('A key minted through the auth resolver can only be a member key');
|
|
44
51
|
}
|
|
45
|
-
const role = opts.role ??
|
|
52
|
+
const role = opts.role ?? 'member';
|
|
46
53
|
const label = opts.label ?? null;
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
const expiresAt = mintExpiry(opts);
|
|
55
|
+
const { plaintext, key } = newKey(ctx, { label, role, ownerSubject: null, expiresAt });
|
|
56
|
+
// The plaintext is NEVER logged; the audit row carries what the key can do and for how long, keyId is non-secret.
|
|
57
|
+
return { plaintext, mint: { key, actor: ctx.actor.subject, metadata: { label, role, expiresAt } } };
|
|
50
58
|
}
|
|
51
59
|
function createResult({ key }, plaintext) {
|
|
52
|
-
return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: key.role };
|
|
53
|
-
}
|
|
54
|
-
async function createThroughStore(ctx, store, opts) {
|
|
55
|
-
const keyWrites = requireGroup(store, 'keyWrites');
|
|
56
|
-
const { plaintext, mint } = adminKeyMint(ctx, opts);
|
|
57
|
-
await keyWrites.createApiKey(mint);
|
|
58
|
-
return createResult(mint, plaintext);
|
|
59
|
-
}
|
|
60
|
-
function createOnHippoDb(ctx, opts) {
|
|
61
|
-
const { plaintext, mint } = adminKeyMint(ctx, opts);
|
|
62
|
-
const db = openHippoDb(ctx.hippoRoot);
|
|
63
|
-
try {
|
|
64
|
-
// A resolver admin's keys are found again only through their audit rows, so the key and its row commit together.
|
|
65
|
-
if (ctx.actor.viaAuthResolver) {
|
|
66
|
-
createKeyAt(db, mint);
|
|
67
|
-
return createResult(mint, plaintext);
|
|
68
|
-
}
|
|
69
|
-
insertApiKey(db, mint.key);
|
|
70
|
-
try {
|
|
71
|
-
appendAuditEvent(db, createAuditOf(mint));
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
// Audit must not crash a successful mint.
|
|
75
|
-
reportAuditWriteFailure('auth_create', String(error), mint.key.keyId);
|
|
76
|
-
}
|
|
77
|
-
return createResult(mint, plaintext);
|
|
78
|
-
}
|
|
79
|
-
finally {
|
|
80
|
-
closeHippoDb(db);
|
|
81
|
-
}
|
|
60
|
+
return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: key.role, expiresAt: key.expiresAt };
|
|
82
61
|
}
|
|
83
|
-
const MAX_TTL_DAYS = 3650;
|
|
84
62
|
/** A RangeError, not a 4xx, since the operator's config sets these; the ttl ceiling keeps toISOString in range and a departed user's key short-lived. */
|
|
85
63
|
function assertSelfMintOpts({ ttlDays, perSubject }) {
|
|
86
64
|
if (!Number.isFinite(ttlDays) || ttlDays <= 0 || ttlDays > MAX_TTL_DAYS) {
|
|
@@ -90,12 +68,14 @@ function assertSelfMintOpts({ ttlDays, perSubject }) {
|
|
|
90
68
|
throw new RangeError(`authCreateSelf: perSubject must be a whole number of at least 1, got ${String(perSubject)}`);
|
|
91
69
|
}
|
|
92
70
|
}
|
|
93
|
-
/** Mint a member key for the caller an auth resolver vouched for, whatever its role; the
|
|
94
|
-
*
|
|
71
|
+
/** Mint a member key for the caller an auth resolver vouched for, whatever its role; the
|
|
72
|
+
* binary floor, the cap's revokes, the mint and its audit rows commit or fail together. */
|
|
95
73
|
export function authCreateSelf(ctx, opts) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
74
|
+
return onStore(ctx, (port) => {
|
|
75
|
+
const keyWrites = port.keyWrites ?? notPorted(port, 'keyWrites');
|
|
76
|
+
const { plaintext, mint } = selfKeyMint(ctx, opts);
|
|
77
|
+
return andThen(keyWrites.createSelfApiKey(mint), () => selfResult(mint, plaintext));
|
|
78
|
+
});
|
|
99
79
|
}
|
|
100
80
|
function selfKeyMint(ctx, opts) {
|
|
101
81
|
if (!ctx.actor.viaAuthResolver) {
|
|
@@ -108,69 +88,25 @@ function selfKeyMint(ctx, opts) {
|
|
|
108
88
|
// Not destructured: a binding pattern makes TypeScript infer F as KeyFields and lose ownerSubject's string type.
|
|
109
89
|
const made = newKey(ctx, { label, role: 'member', ownerSubject: subject, expiresAt });
|
|
110
90
|
// Same op and actor as an admin mint, so a lookup by audit row finds this key too.
|
|
111
|
-
return {
|
|
91
|
+
return {
|
|
92
|
+
plaintext: made.plaintext,
|
|
93
|
+
mint: { key: made.key, actor: subject, metadata: { label, role: 'member', self: true, expiresAt }, perSubject: opts.perSubject }
|
|
94
|
+
};
|
|
112
95
|
}
|
|
113
96
|
function selfResult({ key }, plaintext) {
|
|
114
97
|
return { keyId: key.keyId, plaintext, tenantId: key.tenantId, role: 'member', expiresAt: key.expiresAt };
|
|
115
98
|
}
|
|
116
|
-
/**
|
|
117
|
-
async function createSelfThroughStore(ctx, store, opts) {
|
|
118
|
-
const keyWrites = requireGroup(store, 'keyWrites');
|
|
119
|
-
const { plaintext, mint } = selfKeyMint(ctx, opts);
|
|
120
|
-
for (const keyId of await keyWrites.createSelfApiKey(mint))
|
|
121
|
-
forgetVerifiedKey(keyId);
|
|
122
|
-
return selfResult(mint, plaintext);
|
|
123
|
-
}
|
|
124
|
-
function createSelfOnHippoDb(ctx, opts) {
|
|
125
|
-
const { plaintext, mint } = selfKeyMint(ctx, opts);
|
|
126
|
-
const db = openHippoDb(ctx.hippoRoot);
|
|
127
|
-
try {
|
|
128
|
-
createSelfKeyAt(db, mint);
|
|
129
|
-
return selfResult(mint, plaintext);
|
|
130
|
-
}
|
|
131
|
-
finally {
|
|
132
|
-
closeHippoDb(db);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* List API keys visible to the calling tenant.
|
|
137
|
-
*
|
|
138
|
-
* Divergence from `cmdAuthList` in src/cli.ts: the CLI today returns ALL keys
|
|
139
|
-
* regardless of tenant (single-tenant deployments). The API surface is tenant-
|
|
140
|
-
* scoped because future multi-tenant deployments will share a hippoRoot, and
|
|
141
|
-
* tenant A must not see tenant B's keys. Read-only, so no audit emit.
|
|
142
|
-
*/
|
|
143
|
-
export function authList(ctx, opts) {
|
|
144
|
-
const keysOf = (rows) => rows.map((r) => r.key);
|
|
145
|
-
const rows = listRows(ctx, opts);
|
|
146
|
-
// SAFETY: the promise comes back exactly when ctx has a store, as StoreReply says.
|
|
147
|
-
return (rows instanceof Promise ? rows.then(keysOf) : keysOf(rows));
|
|
148
|
-
}
|
|
149
|
-
/** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from.
|
|
150
|
-
* With `ctx.store`, its keyWrites group reads them; hippo.db is opened only when there is no store. */
|
|
99
|
+
/** One page of the caller's tenant's keys, newest first, with the row ids a next-page cursor is built from. */
|
|
151
100
|
export function authListRows(ctx, opts) {
|
|
152
|
-
|
|
153
|
-
return listRows(ctx, opts);
|
|
154
|
-
}
|
|
155
|
-
function listRows(ctx, opts) {
|
|
156
|
-
return ctx.store ? listThroughStore(ctx, ctx.store, opts) : listOnHippoDb(ctx, opts);
|
|
101
|
+
return onStore(ctx, (port) => listRows(ctx, port, opts));
|
|
157
102
|
}
|
|
158
|
-
|
|
159
|
-
const keyWrites =
|
|
103
|
+
function listRows(ctx, port, opts) {
|
|
104
|
+
const keyWrites = port.keyWrites ?? notPorted(port, 'keyWrites');
|
|
160
105
|
const keyId = memberKeyIdOf(ctx.actor);
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const db = openHippoDb(ctx.hippoRoot);
|
|
166
|
-
try {
|
|
167
|
-
const keyId = memberKeyIdOf(ctx.actor);
|
|
168
|
-
const filter = memberListFilter(ctx.actor, keyId === null ? undefined : selectApiKeyOwner(db, keyId)?.ownerSubject);
|
|
169
|
-
return filter === null ? [] : listApiKeyRows(db, { ...opts, tenantId: ctx.tenantId, ...filter });
|
|
170
|
-
}
|
|
171
|
-
finally {
|
|
172
|
-
closeHippoDb(db);
|
|
173
|
-
}
|
|
106
|
+
return andThen(keyId === null ? undefined : port.findApiKey(keyId), (record) => {
|
|
107
|
+
const filter = memberListFilter(ctx.actor, record?.ownerSubject);
|
|
108
|
+
return filter === null ? [] : keyWrites.listApiKeys({ ...opts, tenantId: ctx.tenantId, ...filter });
|
|
109
|
+
});
|
|
174
110
|
}
|
|
175
111
|
/** The key id of a member API key caller, whose owner decides what it lists; null for any other caller. */
|
|
176
112
|
function memberKeyIdOf(actor) {
|
|
@@ -202,12 +138,17 @@ function assertMayRevoke(ctx, keyId, row) {
|
|
|
202
138
|
}
|
|
203
139
|
}
|
|
204
140
|
/** Revoke a key in the caller's tenant: a member API key may revoke only itself, a resolver member only the keys it minted.
|
|
205
|
-
*
|
|
141
|
+
* The revoke and its auth_revoke row commit together on either store, so a failed audit write leaves the key live. */
|
|
206
142
|
export function authRevoke(ctx, keyId) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
143
|
+
return onStore(ctx, (port) => {
|
|
144
|
+
const keyAudit = port.keyAudit ?? notPorted(port, 'keyAudit');
|
|
145
|
+
assertMemberKeyRevokesSelf(ctx, keyId);
|
|
146
|
+
return andThen(port.findApiKey(keyId), (record) => {
|
|
147
|
+
assertMayRevoke(ctx, keyId, keyOwnerOf(record));
|
|
148
|
+
const revoke = { tenantId: ctx.tenantId, keyId, actor: ctx.actor.subject, at: new Date().toISOString() };
|
|
149
|
+
return andThen(keyAudit.revokeApiKey(revoke), (revokedAt) => ({ ok: true, revokedAt }));
|
|
150
|
+
});
|
|
151
|
+
});
|
|
211
152
|
}
|
|
212
153
|
function assertMemberKeyRevokesSelf(ctx, keyId) {
|
|
213
154
|
if (ctx.actor.role !== 'admin' && !ctx.actor.viaAuthResolver && keyIdOfSubject(ctx.actor.subject) !== keyId) {
|
|
@@ -217,110 +158,29 @@ function assertMemberKeyRevokesSelf(ctx, keyId) {
|
|
|
217
158
|
function keyOwnerOf(record) {
|
|
218
159
|
return record ? { tenantId: record.tenantId, revokedAt: record.revokedAt, role: record.role, ownerSubject: record.ownerSubject ?? null } : undefined;
|
|
219
160
|
}
|
|
220
|
-
/** The
|
|
221
|
-
|
|
222
|
-
const keyAudit = requireGroup(store, 'keyAudit');
|
|
223
|
-
assertMemberKeyRevokesSelf(ctx, keyId);
|
|
224
|
-
assertMayRevoke(ctx, keyId, keyOwnerOf(await store.findApiKey(keyId)));
|
|
225
|
-
const revokedAt = await keyAudit.revokeApiKey({ tenantId: ctx.tenantId, keyId, actor: ctx.actor.subject, at: new Date().toISOString() });
|
|
226
|
-
forgetVerifiedKey(keyId);
|
|
227
|
-
return { ok: true, revokedAt };
|
|
228
|
-
}
|
|
229
|
-
/** The auth_revoke row carries the KEY ROW's tenant, as cmdAuthRevoke does, and is skipped for an already-revoked key. */
|
|
230
|
-
function revokeOnHippoDb(ctx, keyId) {
|
|
231
|
-
assertMemberKeyRevokesSelf(ctx, keyId);
|
|
232
|
-
const db = openHippoDb(ctx.hippoRoot);
|
|
233
|
-
try {
|
|
234
|
-
const row = selectApiKeyOwner(db, keyId);
|
|
235
|
-
assertMayRevoke(ctx, keyId, row);
|
|
236
|
-
let revokedAt;
|
|
237
|
-
let alreadyRevoked = false;
|
|
238
|
-
if (row.revokedAt) {
|
|
239
|
-
alreadyRevoked = true;
|
|
240
|
-
revokedAt = row.revokedAt;
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
revokeApiKey(db, keyId);
|
|
244
|
-
revokedAt = selectApiKeyOwner(db, keyId)?.revokedAt ?? new Date().toISOString();
|
|
245
|
-
}
|
|
246
|
-
if (!alreadyRevoked) {
|
|
247
|
-
try {
|
|
248
|
-
appendAuditEvent(db, {
|
|
249
|
-
tenantId: row.tenantId, // KEY's tenant, not ctx.tenantId.
|
|
250
|
-
actor: ctx.actor.subject,
|
|
251
|
-
op: 'auth_revoke',
|
|
252
|
-
targetId: keyId,
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
catch (error) {
|
|
256
|
-
// Audit must not crash a successful revoke.
|
|
257
|
-
reportAuditWriteFailure('auth_revoke', String(error), keyId);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
return { ok: true, revokedAt };
|
|
261
|
-
}
|
|
262
|
-
finally {
|
|
263
|
-
closeHippoDb(db);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* The tenant that owns `keyId`, or undefined for an unknown key. Host admin only: it reads across tenants,
|
|
268
|
-
* so the local CLI can run revoke and grant in the key's own tenant.
|
|
269
|
-
*/
|
|
161
|
+
/** The tenant that owns `keyId`, or undefined for an unknown key. Host admin only: it reads across tenants,
|
|
162
|
+
* so the local CLI can run revoke and grant in the key's own tenant. */
|
|
270
163
|
export function authKeyTenant(ctx, keyId) {
|
|
271
164
|
if (!ctx.actor.hostAdmin) {
|
|
272
165
|
throw new ForbiddenError('Only the host admin can look up a key across tenants');
|
|
273
166
|
}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
return selectApiKeyOwner(db, keyId)?.tenantId;
|
|
277
|
-
}
|
|
278
|
-
finally {
|
|
279
|
-
closeHippoDb(db);
|
|
280
|
-
}
|
|
167
|
+
// Synchronous for the CLI, so it reads hippo.db whatever store ctx names.
|
|
168
|
+
return sqliteSyncStore(ctx.hippoRoot).findApiKey(keyId)?.tenantId;
|
|
281
169
|
}
|
|
282
170
|
/** Grant `keyId` read access to one restricted `scope`. Admin only. */
|
|
283
171
|
export function authGrant(ctx, keyId, scope) {
|
|
284
|
-
return
|
|
172
|
+
return changeGrant(ctx, keyId, scope, 'auth_grant');
|
|
285
173
|
}
|
|
286
174
|
/** Revoke `keyId`'s grant on `scope`. Same authorization and lookup rules as authGrant. */
|
|
287
175
|
export function authUngrant(ctx, keyId, scope) {
|
|
288
|
-
return
|
|
176
|
+
return changeGrant(ctx, keyId, scope, 'auth_ungrant');
|
|
289
177
|
}
|
|
290
|
-
|
|
178
|
+
/** hippo.db only: both callers are synchronous published functions, so no store's Promise can answer them. */
|
|
179
|
+
function changeGrant(ctx, keyId, scope, op) {
|
|
291
180
|
if (ctx.actor.role !== 'admin') {
|
|
292
181
|
throw new ForbiddenError('Only an admin key can change scope grants');
|
|
293
182
|
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
const row = selectApiKeyOwner(db, keyId);
|
|
297
|
-
if (!row || row.tenantId !== ctx.tenantId) {
|
|
298
|
-
throw new NotFoundError(`Unknown key_id: ${keyId}`);
|
|
299
|
-
}
|
|
300
|
-
if (op === 'auth_grant' && row.revokedAt) {
|
|
301
|
-
throw new ConflictError(`${keyId} is revoked; a grant on it would never apply`);
|
|
302
|
-
}
|
|
303
|
-
if (op === 'auth_grant' && /^personal:/i.test(scope)) {
|
|
304
|
-
throw new BadRequestError(`${scope} is a personal scope: only its owner reads it, and no grant can change that`);
|
|
305
|
-
}
|
|
306
|
-
if (!isRestrictedScope(scope)) {
|
|
307
|
-
throw new BadRequestError(`${scope} is not a restricted scope; it is already readable by default`);
|
|
308
|
-
}
|
|
309
|
-
if (op === 'auth_grant')
|
|
310
|
-
grantScope(db, keyId, scope);
|
|
311
|
-
else
|
|
312
|
-
ungrantScope(db, keyId, scope);
|
|
313
|
-
try {
|
|
314
|
-
appendAuditEvent(db, { tenantId: ctx.tenantId, actor: ctx.actor.subject, op, targetId: keyId, metadata: { scope } });
|
|
315
|
-
}
|
|
316
|
-
catch (err) {
|
|
317
|
-
// Audit must not undo a grant change that already committed; surface it instead.
|
|
318
|
-
reportAuditWriteFailure(op, String(err), keyId);
|
|
319
|
-
}
|
|
320
|
-
return { ok: true };
|
|
321
|
-
}
|
|
322
|
-
finally {
|
|
323
|
-
closeHippoDb(db);
|
|
324
|
-
}
|
|
183
|
+
changeScopeGrant(ctx.hippoRoot, { tenantId: ctx.tenantId, keyId, scope, op, actor: ctx.actor.subject });
|
|
184
|
+
return { ok: true };
|
|
325
185
|
}
|
|
326
186
|
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { HippoConfig } from '../core/config.js';
|
|
2
|
+
export declare const autoSleepInFlight: Set<string>;
|
|
3
|
+
export interface AutoSleepDue {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
count: number;
|
|
6
|
+
threshold: number;
|
|
7
|
+
due: boolean;
|
|
8
|
+
}
|
|
9
|
+
/** Counts only when enabled: the count opens the store. */
|
|
10
|
+
export declare function autoSleepDue(hippoRoot: string, tenantId: string, config: HippoConfig['autoSleep']): AutoSleepDue;
|
|
11
|
+
/** One run per store at a time; `allowed` is the caller's own gate. Consolidation is host-wide, so only the host tenant may start it. */
|
|
12
|
+
export declare function startAutoSleepIfDue(hippoRoot: string, tenantId: string, config: HippoConfig['autoSleep'], allowed: boolean): void;
|
|
13
|
+
//# sourceMappingURL=auto-sleep.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// When a write starts a background sleep; the MCP remember tool and the session-close hook share it.
|
|
2
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
3
|
+
import { countCreatedSinceLastSleep } from '../store/index-and-stats.js';
|
|
4
|
+
import { consolidate } from '../consolidate/sleep.js';
|
|
5
|
+
import { outsideRequestStores, runWithRequestStores, scopedBusyWait } from '../db/index.js';
|
|
6
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
7
|
+
export const autoSleepInFlight = new Set();
|
|
8
|
+
/** Counts only when enabled: the count opens the store. */
|
|
9
|
+
export function autoSleepDue(hippoRoot, tenantId, config) {
|
|
10
|
+
const { enabled, threshold } = config;
|
|
11
|
+
const count = enabled ? countCreatedSinceLastSleep(hippoRoot, tenantId) : 0;
|
|
12
|
+
return { enabled, count, threshold, due: enabled && count >= threshold };
|
|
13
|
+
}
|
|
14
|
+
/** One run per store at a time; `allowed` is the caller's own gate. Consolidation is host-wide, so only the host tenant may start it. */
|
|
15
|
+
export function startAutoSleepIfDue(hippoRoot, tenantId, config, allowed) {
|
|
16
|
+
if (!allowed ||
|
|
17
|
+
!config.enabled ||
|
|
18
|
+
tenantId !== resolveTenantId({}) ||
|
|
19
|
+
autoSleepInFlight.has(hippoRoot) ||
|
|
20
|
+
!autoSleepDue(hippoRoot, tenantId, config).due)
|
|
21
|
+
return;
|
|
22
|
+
autoSleepInFlight.add(hippoRoot);
|
|
23
|
+
// Fire-and-forget (never block the response); an unhandled rejection would kill the server, so log it.
|
|
24
|
+
// Its own scope: the call's closes a handle the sleep still holds across its pauses, but the caller's lock wait carries over.
|
|
25
|
+
const busyWaitMs = scopedBusyWait();
|
|
26
|
+
outsideRequestStores(() => runWithRequestStores(() => consolidate(hippoRoot), { busyWaitMs }))
|
|
27
|
+
.catch((err) => {
|
|
28
|
+
log.error(`auto-sleep consolidate failed (tenant ${tenantId}): ${errorMessage(err)}`, errorFields(err));
|
|
29
|
+
})
|
|
30
|
+
.finally(() => autoSleepInFlight.delete(hippoRoot));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=auto-sleep.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** A minimal age reference: a memory id plus its ISO-8601 creation timestamp
|
|
2
|
-
* (MemoryEntry.created, canonical ISO per the src/memory.ts invariant). */
|
|
2
|
+
* (MemoryEntry.created, canonical ISO per the src/core/memory.ts invariant). */
|
|
3
3
|
export interface AgeRef {
|
|
4
4
|
id: string;
|
|
5
5
|
created: string;
|
|
@@ -41,25 +41,12 @@ export interface DetectAvailabilityBiasOpts {
|
|
|
41
41
|
/** Minimum older-passed-over count required to fire. Default 3. */
|
|
42
42
|
minOlderPassedOver?: number;
|
|
43
43
|
}
|
|
44
|
-
export declare const DEFAULT_RECENCY_WINDOW_MS
|
|
44
|
+
export declare const DEFAULT_RECENCY_WINDOW_MS = 86400000;
|
|
45
45
|
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
|
-
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* Returns an AvailabilityHint when ALL of the following hold:
|
|
53
|
-
* 1. topK.length >= minReturned AND pool.length >= minPool (enough signal);
|
|
54
|
-
* 2. recentFraction > recentFractionThreshold (returned slice is recency-dominated);
|
|
55
|
-
* 3. poolMedianAgeDays > topKMedianAgeDays (the pool genuinely skews older,
|
|
56
|
-
* so recency is not just the corpus being young);
|
|
57
|
-
* 4. olderCandidatesPassedOver >= minOlderPassedOver (older matched memories
|
|
58
|
-
* actually existed and were not returned).
|
|
59
|
-
* Otherwise returns null.
|
|
60
|
-
*
|
|
61
|
-
* Entries with an unparseable `created` are dropped defensively so a malformed
|
|
62
|
-
* row cannot poison the medians with NaN.
|
|
63
|
-
*/
|
|
49
|
+
/** Returns an AvailabilityHint when the returned slice is recency-dominated, the pool skews older and older matches were passed over; else null.
|
|
50
|
+
* Entries with an unparseable `created` are dropped so a malformed row cannot poison the medians with NaN. */
|
|
64
51
|
export declare function detectAvailabilityBias(opts: DetectAvailabilityBiasOpts): AvailabilityHint | null;
|
|
65
52
|
//# sourceMappingURL=availability.d.ts.map
|
|
@@ -1,27 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// ---------------------------------------------------------------------------
|
|
4
|
-
//
|
|
5
|
-
// Flags when a recall's returned top-K is dominated by recent entries while
|
|
6
|
-
// substantially older relevant candidates in the same MATCHED pool were passed
|
|
7
|
-
// over. This is the availability / recency heuristic (Tversky-Kahneman): what
|
|
8
|
-
// is most mentally available (recent) gets over-weighted relative to what is
|
|
9
|
-
// most relevant. Hippo's substrate makes this measurable: every entry carries a
|
|
10
|
-
// creation timestamp, so we can compare the age distribution of what was
|
|
11
|
-
// RETURNED against the age distribution of the pool it was drawn from.
|
|
12
|
-
//
|
|
13
|
-
// Soft warning ONLY: this never filters, reorders, or suppresses a result. It surfaces
|
|
14
|
-
// a hint the calling agent may act on, like anchoringHint / planningFallacyHint / suppressionSummary.
|
|
15
|
-
//
|
|
16
|
-
// PURE: no I/O, no env reads. The env gate (HIPPO_AVAILABILITY=off) and the
|
|
17
|
-
// audit emission live in the callers (api.recall, cmdRecall, MCP), mirroring
|
|
18
|
-
// detectAnchoring in recall-history.ts.
|
|
19
|
-
export const DEFAULT_RECENCY_WINDOW_MS = 24 * 60 * 60 * 1000;
|
|
1
|
+
import { DAY_MS } from '../util/time.js';
|
|
2
|
+
export const DEFAULT_RECENCY_WINDOW_MS = DAY_MS;
|
|
20
3
|
export const DEFAULT_RECENT_FRACTION_THRESHOLD = 0.7;
|
|
21
4
|
export const DEFAULT_MIN_RETURNED = 3;
|
|
22
5
|
export const DEFAULT_MIN_POOL = 10;
|
|
23
6
|
export const DEFAULT_MIN_OLDER_PASSED_OVER = 3;
|
|
24
|
-
const MS_PER_DAY = 24 * 60 * 60 * 1000;
|
|
25
7
|
const MS_PER_HOUR = 60 * 60 * 1000;
|
|
26
8
|
function median(nums) {
|
|
27
9
|
if (nums.length === 0)
|
|
@@ -30,21 +12,13 @@ function median(nums) {
|
|
|
30
12
|
const mid = Math.floor(sorted.length / 2);
|
|
31
13
|
return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
|
|
32
14
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
*
|
|
40
|
-
* so recency is not just the corpus being young);
|
|
41
|
-
* 4. olderCandidatesPassedOver >= minOlderPassedOver (older matched memories
|
|
42
|
-
* actually existed and were not returned).
|
|
43
|
-
* Otherwise returns null.
|
|
44
|
-
*
|
|
45
|
-
* Entries with an unparseable `created` are dropped defensively so a malformed
|
|
46
|
-
* row cannot poison the medians with NaN.
|
|
47
|
-
*/
|
|
15
|
+
function parseTimestamps(refs) {
|
|
16
|
+
return refs
|
|
17
|
+
.map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
|
|
18
|
+
.filter((e) => Number.isFinite(e.ts));
|
|
19
|
+
}
|
|
20
|
+
/** Returns an AvailabilityHint when the returned slice is recency-dominated, the pool skews older and older matches were passed over; else null.
|
|
21
|
+
* Entries with an unparseable `created` are dropped so a malformed row cannot poison the medians with NaN. */
|
|
48
22
|
export function detectAvailabilityBias(opts) {
|
|
49
23
|
const now = opts.now ?? Date.now();
|
|
50
24
|
const recencyWindowMs = opts.recencyWindowMs ?? DEFAULT_RECENCY_WINDOW_MS;
|
|
@@ -52,24 +26,20 @@ export function detectAvailabilityBias(opts) {
|
|
|
52
26
|
const minReturned = opts.minReturned ?? DEFAULT_MIN_RETURNED;
|
|
53
27
|
const minPool = opts.minPool ?? DEFAULT_MIN_POOL;
|
|
54
28
|
const minOlderPassedOver = opts.minOlderPassedOver ?? DEFAULT_MIN_OLDER_PASSED_OVER;
|
|
55
|
-
const topK = opts.topK
|
|
56
|
-
|
|
57
|
-
.filter((e) => Number.isFinite(e.ts));
|
|
58
|
-
const pool = opts.pool
|
|
59
|
-
.map((e) => ({ id: e.id, ts: Date.parse(e.created) }))
|
|
60
|
-
.filter((e) => Number.isFinite(e.ts));
|
|
29
|
+
const topK = parseTimestamps(opts.topK);
|
|
30
|
+
const pool = parseTimestamps(opts.pool);
|
|
61
31
|
if (topK.length < minReturned || pool.length < minPool)
|
|
62
32
|
return null;
|
|
63
33
|
const recentCount = topK.filter((e) => now - e.ts <= recencyWindowMs).length;
|
|
64
34
|
const recentFraction = recentCount / topK.length;
|
|
65
35
|
if (recentFraction <= recentFractionThreshold)
|
|
66
36
|
return null;
|
|
67
|
-
const topKMedianAgeDays = median(topK.map((e) => (now - e.ts) /
|
|
68
|
-
const poolMedianAgeDays = median(pool.map((e) => (now - e.ts) /
|
|
37
|
+
const topKMedianAgeDays = median(topK.map((e) => (now - e.ts) / DAY_MS));
|
|
38
|
+
const poolMedianAgeDays = median(pool.map((e) => (now - e.ts) / DAY_MS));
|
|
69
39
|
if (poolMedianAgeDays <= topKMedianAgeDays)
|
|
70
40
|
return null;
|
|
71
41
|
const topKIds = new Set(topK.map((e) => e.id));
|
|
72
|
-
const olderCandidatesPassedOver = pool.filter((e) => !topKIds.has(e.id) && (now - e.ts) /
|
|
42
|
+
const olderCandidatesPassedOver = pool.filter((e) => !topKIds.has(e.id) && (now - e.ts) / DAY_MS > topKMedianAgeDays).length;
|
|
73
43
|
if (olderCandidatesPassedOver < minOlderPassedOver)
|
|
74
44
|
return null;
|
|
75
45
|
const pct = Math.round(recentFraction * 100);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { execFileSync } from 'child_process';
|
|
2
|
+
const MAX_DIFF_TERMS = 10;
|
|
2
3
|
const SKIPPED_PATH_TERMS = ['src', 'dist', 'test', 'tests', 'node_modules', 'index'];
|
|
3
4
|
// stderr is dropped because git's warnings (line-ending notices, for one) would otherwise become query terms.
|
|
4
5
|
function readGit(args) {
|
|
@@ -13,7 +14,7 @@ export function autoDetectContext() {
|
|
|
13
14
|
.split('\n')
|
|
14
15
|
.flatMap((f) => f.replace(/[/\\.]/g, ' ').split(/\s+/))
|
|
15
16
|
.filter((t) => t.length > 2 && !SKIPPED_PATH_TERMS.includes(t))
|
|
16
|
-
.slice(0,
|
|
17
|
+
.slice(0, MAX_DIFF_TERMS);
|
|
17
18
|
if (terms.length > 0)
|
|
18
19
|
return terms.join(' ');
|
|
19
20
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type MemoryEntry } from '
|
|
2
|
-
import { type SessionHandoff } from '
|
|
3
|
-
import type { SessionEvent, TaskSnapshot } from '
|
|
4
|
-
import type { AssembleCost, AssembleResult, AssembledContextItem, ContextCost, ContextResultEntry, DrillDownChild, DrillDownCost, DrillDownResult } from './
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type SessionHandoff } from '../core/handoff.js';
|
|
3
|
+
import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
|
|
4
|
+
import type { AssembleCost, AssembleResult, AssembledContextItem, ContextCost, ContextResultEntry, DrillDownChild, DrillDownCost, DrillDownResult } from './index.js';
|
|
5
5
|
export declare function snapshotText(s: TaskSnapshot): string;
|
|
6
6
|
export declare function handoffText(h: SessionHandoff): string;
|
|
7
7
|
/** Needs at least one event; the header reads the latest. */
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// The strings a context block prints. The budget prices these same strings, so selection and print cannot drift.
|
|
2
|
-
import { calculateStrength, confidenceFacets, confidenceLabel } from '
|
|
3
|
-
import { evalNow } from '
|
|
4
|
-
import { estimateTokens } from '
|
|
5
|
-
import { renderAmbientSummary } from '
|
|
6
|
-
import { formatHandoffEvidenceLine } from '
|
|
2
|
+
import { calculateStrength, confidenceFacets, confidenceLabel } from '../core/memory.js';
|
|
3
|
+
import { evalNow } from '../core/ablation.js';
|
|
4
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
5
|
+
import { renderAmbientSummary } from '../core/ambient.js';
|
|
6
|
+
import { formatHandoffEvidenceLine } from '../core/handoff.js';
|
|
7
|
+
import { DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
7
8
|
export function snapshotText(s) {
|
|
8
9
|
return [
|
|
9
10
|
'## Active Task Snapshot\n',
|
|
@@ -78,7 +79,7 @@ export function contextLine(item, framing, showStrength, now, strengthPct = Math
|
|
|
78
79
|
const label = confidenceLabel(e, now);
|
|
79
80
|
const confTag = `[${label.text}]${label.warn ? ' ⚠️' : ''}`;
|
|
80
81
|
if (framing === 'observe') {
|
|
81
|
-
const dateStr = new Date(e.created).toISOString().slice(0,
|
|
82
|
+
const dateStr = new Date(e.created).toISOString().slice(0, DATE_PREFIX_CHARS);
|
|
82
83
|
// Verified rules print without the date prefix.
|
|
83
84
|
if (confidenceFacets(e, now).tier === 'verified')
|
|
84
85
|
return `- **${confTag} ${globalPrefix}${e.content}**${tagStr}${strengthStr}`;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { AmbientLoadResult } from '../store/candidates.js';
|
|
2
|
-
import { type MemoryEntry } from '../memory.js';
|
|
3
|
-
import type { ContextReads, HippoStore } from '../store
|
|
4
|
-
import { type HippoConfig } from '../config.js';
|
|
5
|
-
import type { ProjectRef } from '../project-identity.js';
|
|
6
|
-
import type { DeliveryObserver } from '../delivery-recorder.js';
|
|
2
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
3
|
+
import type { ContextReads, HippoStore } from '../store/index.js';
|
|
4
|
+
import { type HippoConfig } from '../core/config.js';
|
|
5
|
+
import type { ProjectRef } from '../core/project-identity.js';
|
|
6
|
+
import type { DeliveryObserver } from '../store/delivery-recorder.js';
|
|
7
7
|
import type { ContextCost, ContextOpts, ContextResultEntry } from './context-types.js';
|
|
8
8
|
import type { Context } from './types.js';
|
|
9
9
|
/** One store getContext reads rows from: its base search and its context reads. */
|