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
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Bounds on the scrypt work a bearer key check may start: how many derive at once, and how many one address starts for one key id.
|
|
2
|
+
import { HttpError } from '../util/http-util.js';
|
|
3
|
+
import { createRateLimiter } from './rate-limit.js';
|
|
4
|
+
// libuv runs scrypt on a pool of four threads by default, so two stay free for file and DNS work.
|
|
5
|
+
const MAX_IN_FLIGHT = 2;
|
|
6
|
+
// Four rounds of two, so a burst of unproved keys waits its turn and no wait is longer than four derivations.
|
|
7
|
+
const MAX_WAITING = 8;
|
|
8
|
+
// Room for a mistyped or rotated secret; a secret is 160 random bits, so this bounds CPU, not guessing.
|
|
9
|
+
const KEY_ADDRESS_BURST = 5;
|
|
10
|
+
// One more try every 12 s: past its burst, an address starts at most five derivations a minute for one key id.
|
|
11
|
+
const KEY_ADDRESS_TRIES_PER_SEC = 5 / 60;
|
|
12
|
+
export function keyCheckBounds(maxKeys) {
|
|
13
|
+
// A bucket idle for a full refill is back at its burst, so dropping it then gives nothing away.
|
|
14
|
+
const idleEvictMs = (KEY_ADDRESS_BURST / KEY_ADDRESS_TRIES_PER_SEC) * 1000;
|
|
15
|
+
const perKeyAddress = createRateLimiter({ ratePerSec: KEY_ADDRESS_TRIES_PER_SEC, burst: KEY_ADDRESS_BURST, idleEvictMs, maxKeys });
|
|
16
|
+
let inFlight = 0;
|
|
17
|
+
const waiting = [];
|
|
18
|
+
return {
|
|
19
|
+
admit(keyId, address) {
|
|
20
|
+
// Each answers in the words an existing limit uses: the request limit's for a full queue, the address's scrypt bucket's for spent tries.
|
|
21
|
+
if (inFlight >= MAX_IN_FLIGHT && waiting.length >= MAX_WAITING)
|
|
22
|
+
throw new HttpError(429, 'rate limit exceeded', 1);
|
|
23
|
+
if (!perKeyAddress.check(`${keyId}\u0000${address}`)) {
|
|
24
|
+
throw new HttpError(429, 'too many key checks from this address', perKeyAddress.retryAfterSec);
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
async run(derive) {
|
|
28
|
+
if (inFlight < MAX_IN_FLIGHT)
|
|
29
|
+
inFlight++;
|
|
30
|
+
else
|
|
31
|
+
await new Promise((resolve) => { waiting.push(resolve); });
|
|
32
|
+
try {
|
|
33
|
+
return await derive();
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
// A waiter takes over this slot, so the count stays put across the handover and nothing slips in between.
|
|
37
|
+
const next = waiting.shift();
|
|
38
|
+
if (next)
|
|
39
|
+
next();
|
|
40
|
+
else
|
|
41
|
+
inFlight--;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=key-check-bounds.js.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { Server, ServerResponse } from 'node:http';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
export declare function setKeepAliveTimeouts(server: Server): void;
|
|
3
|
+
export declare const DEFAULT_SHUTDOWN_DRAIN_MS = 5000;
|
|
4
|
+
/** How long a signal or crash shutdown may run before the process is ended without it. */
|
|
5
|
+
export declare function shutdownBoundMs(drainMs: number): number;
|
|
6
|
+
/** Stops accepting, ends streams at once (they never finish on their own), gives other in-flight requests up to `drainMs`, then closes what is left. */
|
|
6
7
|
export declare function drainAndClose(server: Server, inflight: ReadonlySet<ServerResponse>, drainMs: number): Promise<void>;
|
|
7
8
|
//# sourceMappingURL=lifecycle.d.ts.map
|
package/dist/server/lifecycle.js
CHANGED
|
@@ -1,8 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { bodyDeadlineMs } from '../util/http-util.js';
|
|
2
|
+
import { log } from '../util/log.js';
|
|
3
|
+
// Node's own default, named so the three socket deadlines read together. It times the request arriving, never the handler, so a 10 minute sleep is not cut.
|
|
4
|
+
const REQUEST_RECEIVE_TIMEOUT_MS = 300_000;
|
|
5
|
+
export function setKeepAliveTimeouts(server) {
|
|
6
|
+
// The default 5s keepAliveTimeout closes idle sockets just as clients reuse them (ECONNRESET).
|
|
7
|
+
// headersTimeout must stay ABOVE keepAliveTimeout + keepAliveTimeoutBuffer (1s), or it closes idle reused sockets itself.
|
|
8
|
+
server.keepAliveTimeout = 65_000;
|
|
9
|
+
server.headersTimeout = 70_000;
|
|
10
|
+
// Never below what a raised body deadline allows, or Node's bare 408 would come before the route's own.
|
|
11
|
+
server.requestTimeout = Math.max(REQUEST_RECEIVE_TIMEOUT_MS, server.headersTimeout + bodyDeadlineMs());
|
|
12
|
+
}
|
|
13
|
+
export const DEFAULT_SHUTDOWN_DRAIN_MS = 5000;
|
|
14
|
+
// Past the request drain, a stop only waits for each store thread to end its statement and close: seconds at most, so longer means a thread that will not end.
|
|
15
|
+
const STORE_CLOSE_GRACE_MS = 10_000;
|
|
16
|
+
/** How long a signal or crash shutdown may run before the process is ended without it. */
|
|
17
|
+
export function shutdownBoundMs(drainMs) {
|
|
18
|
+
return drainMs + STORE_CLOSE_GRACE_MS;
|
|
19
|
+
}
|
|
20
|
+
/** Stops accepting, ends streams at once (they never finish on their own), gives other in-flight requests up to `drainMs`, then closes what is left. */
|
|
6
21
|
export async function drainAndClose(server, inflight, drainMs) {
|
|
7
22
|
const closed = new Promise((resolve, reject) => {
|
|
8
23
|
server.close((err) => (err ? reject(err) : resolve()));
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
-
import type {
|
|
3
|
-
import { type McpContext } from '../mcp/server.js';
|
|
4
|
-
import type { CallerProject } from '../prompt-hook.js';
|
|
2
|
+
import type { CallerProject } from '../api/prompt-hook.js';
|
|
5
3
|
import type { ResolvedServeOpts } from './types.js';
|
|
6
4
|
/** On a shared store, the caller's project from X-Hippo-Project and the comma-separated X-Hippo-Project-Aliases; any other store ignores both. */
|
|
7
5
|
export declare function callerProjectFromHeaders(req: IncomingMessage, hippoRoot: string): CallerProject | undefined;
|
|
8
|
-
export declare function mcpContextFor(ctx: Context, clientKey: string, autoSleep: McpContext['autoSleep'], project?: CallerProject): McpContext;
|
|
9
6
|
export declare function handleMcpPost(req: IncomingMessage, res: ServerResponse, opts: ResolvedServeOpts): Promise<void>;
|
|
10
7
|
export declare function handleMcpStream(req: IncomingMessage, res: ServerResponse, opts: ResolvedServeOpts, streamSlots: Map<string, number>): Promise<void>;
|
|
11
8
|
//# sourceMappingURL=mcp-http.d.ts.map
|
package/dist/server/mcp-http.js
CHANGED
|
@@ -1,51 +1,29 @@
|
|
|
1
1
|
// MCP over HTTP: POST /mcp and the GET /mcp/stream SSE keepalive.
|
|
2
|
-
import { envMcpSseHeartbeatMs, envMcpSseMaxAgeSec, envMcpSseMaxStreams } from '../env.js';
|
|
2
|
+
import { envMcpSseHeartbeatMs, envMcpSseMaxAgeSec, envMcpSseMaxStreams } from '../util/env.js';
|
|
3
3
|
import { createHash } from 'node:crypto';
|
|
4
|
-
import { isSharedStore } from '../config.js';
|
|
4
|
+
import { isSharedStore } from '../core/config.js';
|
|
5
5
|
import { handleMcpRequest, mcpErrorResponse } from '../mcp/server.js';
|
|
6
|
-
import { HttpError,
|
|
7
|
-
import { assertCallerProject } from '../project-identity.js';
|
|
6
|
+
import { HttpError, readBody, sendJson } from '../util/http-util.js';
|
|
7
|
+
import { assertCallerProject } from '../core/project-identity.js';
|
|
8
8
|
import { buildContextWithAuth, heartbeatVerdict, readAuthHeader, requireAuth } from './auth.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { isJsonString } from '../json.js';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
* Token is hashed (sha256, 16-hex-char prefix) so we never log or persist
|
|
18
|
-
* the raw bearer. Combined with remoteAddress so two clients sharing a key
|
|
19
|
-
* (e.g. on a shared Postman environment) are still separable in the common
|
|
20
|
-
* case. 'noauth' covers loopback no-auth and is acceptable because that
|
|
21
|
-
* path is single-host single-user.
|
|
22
|
-
*/
|
|
9
|
+
import { clientLimitKey, subscriberKey } from './client-ip.js';
|
|
10
|
+
import { noteAccess } from './request.js';
|
|
11
|
+
import { isJsonString, isJsonObject } from '../util/json.js';
|
|
12
|
+
import { FINGERPRINT_HEX_CHARS } from '../util/token-text.js';
|
|
13
|
+
const DEFAULT_SSE_HEARTBEAT_MS = 60000;
|
|
14
|
+
const DEFAULT_SSE_MAX_AGE_SEC = 3600;
|
|
15
|
+
/** Per-client key for MCP state isolation under HTTP-MCP (scopes `lastRecalledIds`): sha256 of the token (16 hex chars, so the raw bearer is never logged)
|
|
16
|
+
* plus remoteAddress, so clients sharing a key stay separable; 'noauth' covers loopback no-auth, which is single-host single-user. */
|
|
23
17
|
function buildMcpClientKey(req) {
|
|
24
18
|
const auth = readAuthHeader(req);
|
|
25
19
|
const tokenHash = auth.kind === 'bearer'
|
|
26
|
-
? createHash('sha256').update(auth.token).digest('hex').slice(0,
|
|
20
|
+
? createHash('sha256').update(auth.token).digest('hex').slice(0, FINGERPRINT_HEX_CHARS)
|
|
27
21
|
: 'noauth';
|
|
28
|
-
const addr = req.socket.remoteAddress ?? 'unknown';
|
|
22
|
+
const addr = subscriberKey(req.socket.remoteAddress ?? 'unknown');
|
|
29
23
|
return `http:${tokenHash}:${addr}`;
|
|
30
24
|
}
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
// Two routes implement an MCP HTTP transport alongside the stdio one. Both
|
|
34
|
-
// dispatch to the same `handleMcpRequest` as the stdio loop in src/mcp/server.ts.
|
|
35
|
-
//
|
|
36
|
-
// POST /mcp — Send a JSON-RPC request, get a JSON-RPC response synchronously
|
|
37
|
-
// in the body. Content-type: application/json both ways.
|
|
38
|
-
// GET /mcp/stream — Open an SSE stream for server-initiated messages.
|
|
39
|
-
// v1 simplification: this stream is keepalive-only. Clients
|
|
40
|
-
// that need server-pushed notifications/progress will see
|
|
41
|
-
// only `: ping` comments every 30s. All real responses come
|
|
42
|
-
// back synchronously on POST /mcp. This matches the
|
|
43
|
-
// "synchronous JSON in body" leg of the MCP HTTP spec and
|
|
44
|
-
// is enough for `tools/list` / `tools/call` round-trips.
|
|
45
|
-
// Server-initiated SSE messages will be wired in a later task.
|
|
46
|
-
//
|
|
47
|
-
// Auth: same as /v1/* — Bearer token validated via `requireAuth`, with the
|
|
48
|
-
// loopback no-auth fallback. SSE check runs once at stream-open.
|
|
25
|
+
// MCP-over-HTTP/SSE: POST /mcp answers a JSON-RPC request synchronously; GET /mcp/stream is a keepalive-only SSE stream (`: ping` every 30s) in v1.
|
|
26
|
+
// Both dispatch to handleMcpRequest as stdio does. Auth matches /v1/* (Bearer via `requireAuth`, loopback fallback); SSE is checked once at stream-open.
|
|
49
27
|
// Percent-encoded by the client, so any lowercase Unicode name fits a Latin-1 header.
|
|
50
28
|
const HEADER_PIECE = /^[A-Za-z0-9\-_.!~*'()%]+$/;
|
|
51
29
|
function decodeHeaderPiece(raw, header) {
|
|
@@ -77,7 +55,7 @@ export function callerProjectFromHeaders(req, hippoRoot) {
|
|
|
77
55
|
assertCallerProject({ name, aliases });
|
|
78
56
|
return { name, legacyName: name, aliases };
|
|
79
57
|
}
|
|
80
|
-
|
|
58
|
+
function mcpContextFor(ctx, clientKey, autoSleep, project) {
|
|
81
59
|
const mcpCtx = {
|
|
82
60
|
hippoRoot: ctx.hippoRoot,
|
|
83
61
|
tenantId: ctx.tenantId,
|
|
@@ -98,12 +76,10 @@ export function mcpContextFor(ctx, clientKey, autoSleep, project) {
|
|
|
98
76
|
return mcpCtx;
|
|
99
77
|
}
|
|
100
78
|
export async function handleMcpPost(req, res, opts) {
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
// Without this, executeTool would walk from cwd via findHippoRoot() and
|
|
104
|
-
// pull tenant from HIPPO_TENANT, dropping a valid Bearer for tenant B
|
|
105
|
-
// back to whatever the env says.
|
|
79
|
+
// Same Context the /v1/* routes use, so MCP tool calls inherit the bound hippoRoot and the auth-resolved tenantId/actor; otherwise executeTool would walk
|
|
80
|
+
// from cwd and read HIPPO_TENANT, dropping a valid Bearer for tenant B to the env's tenant.
|
|
106
81
|
const ctx = await buildContextWithAuth(req, opts);
|
|
82
|
+
noteAccess(req, { tenant: ctx.tenantId });
|
|
107
83
|
const project = callerProjectFromHeaders(req, ctx.hippoRoot);
|
|
108
84
|
const raw = await readBody(req);
|
|
109
85
|
let mcpReq;
|
|
@@ -113,19 +89,18 @@ export async function handleMcpPost(req, res, opts) {
|
|
|
113
89
|
catch {
|
|
114
90
|
throw new HttpError(400, 'invalid JSON-RPC body');
|
|
115
91
|
}
|
|
116
|
-
if (!
|
|
92
|
+
if (!isJsonObject(mcpReq) || !isJsonString(mcpReq.method)) {
|
|
117
93
|
throw new HttpError(400, 'JSON-RPC body must include a method string');
|
|
118
94
|
}
|
|
119
|
-
// SAFETY: validated above as a plain JSON object
|
|
120
|
-
//
|
|
121
|
-
// safely defaulted inside handleMcpRequest's JSON-RPC dispatch.
|
|
95
|
+
// SAFETY: validated above as a plain JSON object with a string method; the other McpRequest wire fields (jsonrpc, id, params) are checked or defaulted in
|
|
96
|
+
// handleMcpRequest.
|
|
122
97
|
const rpcReq = mcpReq;
|
|
123
98
|
let mcpRes;
|
|
124
99
|
try {
|
|
125
100
|
mcpRes = await handleMcpRequest(rpcReq, mcpContextFor(ctx, buildMcpClientKey(req), opts.autoSleep, project));
|
|
126
101
|
}
|
|
127
102
|
catch (err) {
|
|
128
|
-
mcpRes = mcpErrorResponse(rpcReq.id, err
|
|
103
|
+
mcpRes = mcpErrorResponse(rpcReq.id, err);
|
|
129
104
|
}
|
|
130
105
|
if (mcpRes === null) {
|
|
131
106
|
// Notification — no body, 202 Accepted.
|
|
@@ -141,8 +116,8 @@ const DEFAULT_MAX_STREAMS_PER_CLIENT = 8;
|
|
|
141
116
|
function streamSlotKey(req) {
|
|
142
117
|
const auth = readAuthHeader(req);
|
|
143
118
|
if (auth.kind === 'bearer')
|
|
144
|
-
return `key:${createHash('sha256').update(auth.token).digest('hex').slice(0,
|
|
145
|
-
return `ip:${
|
|
119
|
+
return `key:${createHash('sha256').update(auth.token).digest('hex').slice(0, FINGERPRINT_HEX_CHARS)}`;
|
|
120
|
+
return `ip:${clientLimitKey(req)}`;
|
|
146
121
|
}
|
|
147
122
|
/** Takes a stream slot or throws 429; the slot is released once, when the response closes. */
|
|
148
123
|
function acquireStreamSlot(req, res, slots) {
|
|
@@ -174,15 +149,13 @@ export async function handleMcpStream(req, res, opts, streamSlots) {
|
|
|
174
149
|
// Initial ping so smoke tests can confirm the stream is live without
|
|
175
150
|
// waiting for the first keepalive interval.
|
|
176
151
|
res.write(': ping\n\n');
|
|
177
|
-
// SSE hardening:
|
|
178
|
-
//
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
const heartbeatMs = envMcpSseHeartbeatMs() ?? 60000;
|
|
185
|
-
const maxAgeMs = (envMcpSseMaxAgeSec() ?? 3600) * 1000;
|
|
152
|
+
// SSE hardening: the heartbeat re-validates the bearer (MCP_SSE_HEARTBEAT_MS, default 60000) and closes with 'auth_revoked' if the key was revoked or
|
|
153
|
+
// rotated; MCP_SSE_MAX_AGE_SEC (default 3600) caps stream lifetime and closes with 'max_age_exceeded'.
|
|
154
|
+
keepStreamAlive(req, res, opts);
|
|
155
|
+
}
|
|
156
|
+
function keepStreamAlive(req, res, opts) {
|
|
157
|
+
const heartbeatMs = envMcpSseHeartbeatMs() ?? DEFAULT_SSE_HEARTBEAT_MS;
|
|
158
|
+
const maxAgeMs = (envMcpSseMaxAgeSec() ?? DEFAULT_SSE_MAX_AGE_SEC) * 1000;
|
|
186
159
|
const startedAt = Date.now();
|
|
187
160
|
let closed = false;
|
|
188
161
|
let checking = false;
|
|
@@ -190,14 +163,7 @@ export async function handleMcpStream(req, res, opts, streamSlots) {
|
|
|
190
163
|
if (closed)
|
|
191
164
|
return;
|
|
192
165
|
closed = true;
|
|
193
|
-
|
|
194
|
-
res.write(`event: closed\ndata: ${JSON.stringify({ reason })}\n\n`);
|
|
195
|
-
}
|
|
196
|
-
catch { /* socket already gone */ }
|
|
197
|
-
try {
|
|
198
|
-
res.end();
|
|
199
|
-
}
|
|
200
|
-
catch { /* socket already gone */ }
|
|
166
|
+
endStreamWithReason(res, reason);
|
|
201
167
|
};
|
|
202
168
|
const ping = setInterval(() => {
|
|
203
169
|
if (closed) {
|
|
@@ -239,4 +205,14 @@ export async function handleMcpStream(req, res, opts, streamSlots) {
|
|
|
239
205
|
clearInterval(ping);
|
|
240
206
|
});
|
|
241
207
|
}
|
|
208
|
+
function endStreamWithReason(res, reason) {
|
|
209
|
+
try {
|
|
210
|
+
res.write(`event: closed\ndata: ${JSON.stringify({ reason })}\n\n`);
|
|
211
|
+
}
|
|
212
|
+
catch { /* socket already gone */ }
|
|
213
|
+
try {
|
|
214
|
+
res.end();
|
|
215
|
+
}
|
|
216
|
+
catch { /* socket already gone */ }
|
|
217
|
+
}
|
|
242
218
|
//# sourceMappingURL=mcp-http.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Per-key token-bucket rate limiter for inbound /v1/* requests, bounding api-key-id enumeration. Dependency-free; the injectable `now` makes it
|
|
2
|
+
* unit-testable. */
|
|
3
|
+
export interface RateLimiter {
|
|
4
|
+
/** Consume one token for `key`: true if allowed, false if the bucket is exhausted; `now` (epoch ms) is injectable for deterministic tests. */
|
|
5
|
+
check(key: string, now?: number): boolean;
|
|
6
|
+
readonly retryAfterSec: number;
|
|
7
|
+
}
|
|
8
|
+
export interface RateLimiterOpts {
|
|
9
|
+
/** Sustained refill rate in tokens per second. */
|
|
10
|
+
ratePerSec: number;
|
|
11
|
+
/** Bucket capacity — the largest burst a fresh client may spend at once. */
|
|
12
|
+
burst: number;
|
|
13
|
+
/** A bucket untouched for this many ms is dropped by the throttled sweep. */
|
|
14
|
+
idleEvictMs: number;
|
|
15
|
+
/** Hard cap on tracked keys; the least-recently-used key is evicted on overflow. */
|
|
16
|
+
maxKeys: number;
|
|
17
|
+
}
|
|
18
|
+
/** Token-bucket limiter with bounded memory: a sweep (at most once per `idleEvictMs`) drops idle buckets and a `maxKeys` cap evicts the least-recently-used
|
|
19
|
+
* key, so a client rotating source addresses cannot grow the map without bound. */
|
|
20
|
+
export declare function createRateLimiter(opts: RateLimiterOpts): RateLimiter;
|
|
21
|
+
//# sourceMappingURL=rate-limit.d.ts.map
|
|
@@ -1,16 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
* client that drains its bucket is denied until it refills. Dependency-free
|
|
6
|
-
* and unit-testable in isolation via the injectable `now`.
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Build a token-bucket limiter. Memory is bounded two ways: a sweep (throttled
|
|
10
|
-
* to once per `idleEvictMs`) drops idle buckets, and a hard `maxKeys` cap evicts
|
|
11
|
-
* the least-recently-used key, so a client rotating source addresses cannot
|
|
12
|
-
* grow the map without bound between sweeps.
|
|
13
|
-
*/
|
|
1
|
+
/** Per-key token-bucket rate limiter for inbound /v1/* requests, bounding api-key-id enumeration. Dependency-free; the injectable `now` makes it
|
|
2
|
+
* unit-testable. */
|
|
3
|
+
/** Token-bucket limiter with bounded memory: a sweep (at most once per `idleEvictMs`) drops idle buckets and a `maxKeys` cap evicts the least-recently-used
|
|
4
|
+
* key, so a client rotating source addresses cannot grow the map without bound. */
|
|
14
5
|
export function createRateLimiter(opts) {
|
|
15
6
|
const { ratePerSec, burst, idleEvictMs, maxKeys } = opts;
|
|
16
7
|
const buckets = new Map();
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HippoStore } from '../store/index.js';
|
|
2
|
+
export type ReadyProbe = () => Promise<boolean>;
|
|
3
|
+
/** The shared probe for a served store, so every request to that server draws on one remembered answer. */
|
|
4
|
+
export declare function readyProbeFor(store: HippoStore, readiness: {
|
|
5
|
+
ping(): Promise<void>;
|
|
6
|
+
}, now?: () => number): ReadyProbe;
|
|
7
|
+
//# sourceMappingURL=ready.d.ts.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { SERVER_DB_WAIT_MS, runWithRequestStores } from '../db/index.js';
|
|
2
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
3
|
+
// A prober must never see a 429, so the store read is bounded by remembering its answer instead of rate-limiting the route.
|
|
4
|
+
const READY_WINDOW_MS = 1000;
|
|
5
|
+
/** True when the store answered; one read per window whatever the caller count, and a failed read is remembered for the same window. */
|
|
6
|
+
function createReadyProbe(readiness, now = Date.now) {
|
|
7
|
+
let answer;
|
|
8
|
+
let inFlight;
|
|
9
|
+
async function read() {
|
|
10
|
+
let ok = true;
|
|
11
|
+
try {
|
|
12
|
+
await runWithRequestStores(() => readiness.ping(), { busyWaitMs: SERVER_DB_WAIT_MS });
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
log.warn(`GET /ready: the store did not answer: ${errorMessage(err)}`, errorFields(err));
|
|
16
|
+
ok = false;
|
|
17
|
+
}
|
|
18
|
+
answer = { at: now(), ok };
|
|
19
|
+
return ok;
|
|
20
|
+
}
|
|
21
|
+
return () => {
|
|
22
|
+
if (answer !== undefined && now() - answer.at < READY_WINDOW_MS)
|
|
23
|
+
return Promise.resolve(answer.ok);
|
|
24
|
+
inFlight ??= read().finally(() => { inFlight = undefined; });
|
|
25
|
+
return inFlight;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const probes = new WeakMap();
|
|
29
|
+
/** The shared probe for a served store, so every request to that server draws on one remembered answer. */
|
|
30
|
+
export function readyProbeFor(store, readiness, now = Date.now) {
|
|
31
|
+
let probe = probes.get(store);
|
|
32
|
+
if (probe === undefined) {
|
|
33
|
+
probe = createReadyProbe(readiness, now);
|
|
34
|
+
probes.set(store, probe);
|
|
35
|
+
}
|
|
36
|
+
return probe;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ready.js.map
|
package/dist/server/request.d.ts
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
-
/** The caller's `X-Request-Id` when it is a short plain token, else a fresh UUID. */
|
|
3
|
-
export declare function resolveRequestId(header: string | string[] | undefined): string;
|
|
4
2
|
/** One line per failed request; 4xx is the caller's mistake, a busy 503 is back-pressure and a 501 is a route not on this store, so none logs as an error. */
|
|
5
|
-
export declare function logRequestFailure<E>(req: IncomingMessage, err: E,
|
|
3
|
+
export declare function logRequestFailure<E>(req: IncomingMessage, err: E, status: number): void;
|
|
6
4
|
/** The status and client message for a failed request; a held write lock is a retryable 503, never a 500. */
|
|
7
5
|
export declare function replyFor<E>(err: E): {
|
|
8
6
|
status: number;
|
|
9
7
|
message: string;
|
|
10
8
|
};
|
|
9
|
+
/** What the route layer learned about a request, for its access line. */
|
|
10
|
+
interface AccessNote {
|
|
11
|
+
route?: string;
|
|
12
|
+
tenant?: string;
|
|
13
|
+
}
|
|
14
|
+
/** Names the matched route (the table's pattern, never the path sent) or the caller's tenant for the request's access line. */
|
|
15
|
+
export declare function noteAccess(req: IncomingMessage, note: AccessNote): void;
|
|
16
|
+
/** The route name the request's access line carries, for a line about the same request logged after its reply. */
|
|
17
|
+
export declare function accessRouteOf(req: IncomingMessage): string;
|
|
18
|
+
/** The request's id, after stamping the headers every reply carries and starting the slow-request watchdog and the access line. */
|
|
19
|
+
export declare function openRequest(req: IncomingMessage, res: ServerResponse, slowWarnMs?: number): string;
|
|
11
20
|
export declare function sendError(res: ServerResponse, status: number, message: string): void;
|
|
12
21
|
interface ParsedRoute {
|
|
13
22
|
method: string;
|
|
@@ -16,15 +25,8 @@ interface ParsedRoute {
|
|
|
16
25
|
}
|
|
17
26
|
export declare function parseRequest(req: IncomingMessage): ParsedRoute;
|
|
18
27
|
export declare function matchPath(pattern: string, path: string): Record<string, string> | null;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* Reject URL-encoded slashes in path segments BEFORE the URL parser decodes
|
|
22
|
-
* them — otherwise `%2F` becomes `/`, path-split runs, and the route either
|
|
23
|
-
* silently 404s or matches the wrong template.
|
|
24
|
-
*
|
|
25
|
-
* Only the PATHNAME is scanned (split on the first `?`), so recall queries
|
|
26
|
-
* containing URLs like `?q=https%3A%2F%2Fexample.com` are not rejected.
|
|
27
|
-
*/
|
|
28
|
+
/** Rejects URL-encoded slashes in path segments BEFORE the URL parser decodes them (`%2F` would become `/` and 404 or match the wrong template).
|
|
29
|
+
* Only the PATHNAME is scanned, so recall queries like `?q=https%3A%2F%2Fexample.com` are not rejected. */
|
|
28
30
|
export declare function rejectEncodedSlash(rawUrl: string): void;
|
|
29
31
|
export {};
|
|
30
32
|
//# sourceMappingURL=request.d.ts.map
|
package/dist/server/request.js
CHANGED
|
@@ -1,29 +1,87 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { isStoreBusy, STORE_BUSY_MESSAGE } from '../db.js';
|
|
3
|
-
import { errorFields, log } from '../log.js';
|
|
4
|
-
import { HttpError, mapApiError, sendJson } from '../http-util.js';
|
|
2
|
+
import { isStoreBusy, STORE_BUSY_MESSAGE } from '../db/index.js';
|
|
3
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
4
|
+
import { HttpError, mapApiError, sendJson } from '../util/http-util.js';
|
|
5
5
|
// The caller's id lands in a response header and in logs, so only a short plain token is echoed back.
|
|
6
6
|
const REQUEST_ID_RE = /^[A-Za-z0-9._:-]{1,128}$/;
|
|
7
7
|
/** The caller's `X-Request-Id` when it is a short plain token, else a fresh UUID. */
|
|
8
|
-
|
|
8
|
+
function resolveRequestId(header) {
|
|
9
9
|
const value = Array.isArray(header) ? undefined : header;
|
|
10
10
|
return value && REQUEST_ID_RE.test(value) ? value : randomUUID();
|
|
11
11
|
}
|
|
12
12
|
/** One line per failed request; 4xx is the caller's mistake, a busy 503 is back-pressure and a 501 is a route not on this store, so none logs as an error. */
|
|
13
|
-
export function logRequestFailure(req, err,
|
|
14
|
-
const message =
|
|
13
|
+
export function logRequestFailure(req, err, status) {
|
|
14
|
+
const message = errorMessage(err);
|
|
15
15
|
const line = `${req.method ?? 'GET'} ${(req.url ?? '/').split('?')[0]} failed: ${message}`;
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
// A 5xx that tells the caller when to retry is back-pressure too.
|
|
17
|
+
if (isStoreBusy(err) || (status >= 500 && err instanceof HttpError && err.retryAfterSec !== undefined))
|
|
18
|
+
log.warn(line, { status });
|
|
18
19
|
else if (status >= 500 && status !== 501)
|
|
19
|
-
log.error(line, {
|
|
20
|
+
log.error(line, { status, ...errorFields(err) });
|
|
20
21
|
else
|
|
21
|
-
log.info(line, {
|
|
22
|
+
log.info(line, { status });
|
|
22
23
|
}
|
|
23
24
|
/** The status and client message for a failed request; a held write lock is a retryable 503, never a 500. */
|
|
24
25
|
export function replyFor(err) {
|
|
25
26
|
return isStoreBusy(err) ? { status: 503, message: STORE_BUSY_MESSAGE } : mapApiError(err);
|
|
26
27
|
}
|
|
28
|
+
// Above the 30 s body deadline and the 5 s resolver deadline, so a request those govern is answered before it is called slow.
|
|
29
|
+
const SLOW_REQUEST_WARN_MS = 60_000;
|
|
30
|
+
/** Logs one warn when `res` has sent nothing after `afterMs`. It never ends the request
|
|
31
|
+
* or touches the reply; the timer goes when the reply finishes or the socket closes. */
|
|
32
|
+
function watchSlowRequest(req, res, requestId, afterMs = SLOW_REQUEST_WARN_MS) {
|
|
33
|
+
const startedAt = Date.now();
|
|
34
|
+
const timer = setTimeout(() => {
|
|
35
|
+
// A reply already under way is a stream doing its job, not a stuck request.
|
|
36
|
+
if (res.headersSent)
|
|
37
|
+
return;
|
|
38
|
+
log.warn(`${req.method ?? 'GET'} ${(req.url ?? '/').split('?')[0]} is still running`, { requestId, elapsedMs: Date.now() - startedAt });
|
|
39
|
+
}, afterMs);
|
|
40
|
+
// The watchdog alone must never keep the process alive.
|
|
41
|
+
timer.unref();
|
|
42
|
+
const clear = () => clearTimeout(timer);
|
|
43
|
+
res.once('finish', clear);
|
|
44
|
+
res.once('close', clear);
|
|
45
|
+
}
|
|
46
|
+
const accessNotes = new WeakMap();
|
|
47
|
+
// A path that matched no route is caller data, so the access line never repeats it.
|
|
48
|
+
const UNMATCHED_ROUTE = 'unmatched';
|
|
49
|
+
/** Names the matched route (the table's pattern, never the path sent) or the caller's tenant for the request's access line. */
|
|
50
|
+
export function noteAccess(req, note) {
|
|
51
|
+
const held = accessNotes.get(req);
|
|
52
|
+
if (held)
|
|
53
|
+
Object.assign(held, note);
|
|
54
|
+
}
|
|
55
|
+
/** The route name the request's access line carries, for a line about the same request logged after its reply. */
|
|
56
|
+
export function accessRouteOf(req) {
|
|
57
|
+
return accessNotes.get(req)?.route ?? UNMATCHED_ROUTE;
|
|
58
|
+
}
|
|
59
|
+
/** One info line per finished request. A path id and a query string can both hold caller data, so the line carries neither. */
|
|
60
|
+
function logAccessWhenFinished(req, res, requestId) {
|
|
61
|
+
const note = {};
|
|
62
|
+
accessNotes.set(req, note);
|
|
63
|
+
const startedAt = performance.now();
|
|
64
|
+
res.once('finish', () => {
|
|
65
|
+
log.info('request', {
|
|
66
|
+
requestId,
|
|
67
|
+
method: req.method ?? 'GET',
|
|
68
|
+
route: note.route ?? UNMATCHED_ROUTE,
|
|
69
|
+
status: res.statusCode,
|
|
70
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
71
|
+
tenant: note.tenant,
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/** The request's id, after stamping the headers every reply carries and starting the slow-request watchdog and the access line. */
|
|
76
|
+
export function openRequest(req, res, slowWarnMs) {
|
|
77
|
+
const requestId = resolveRequestId(req.headers['x-request-id']);
|
|
78
|
+
res.setHeader('X-Request-Id', requestId);
|
|
79
|
+
// Memory text is caller-written, so no browser may guess a reply into HTML or script.
|
|
80
|
+
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
81
|
+
watchSlowRequest(req, res, requestId, slowWarnMs);
|
|
82
|
+
logAccessWhenFinished(req, res, requestId);
|
|
83
|
+
return requestId;
|
|
84
|
+
}
|
|
27
85
|
export function sendError(res, status, message) {
|
|
28
86
|
sendJson(res, status, { error: message });
|
|
29
87
|
}
|
|
@@ -44,14 +102,7 @@ export function parseRequest(req) {
|
|
|
44
102
|
query: url.searchParams,
|
|
45
103
|
};
|
|
46
104
|
}
|
|
47
|
-
/**
|
|
48
|
-
* Lightweight pattern matcher for /v1/memories/:id/<action>. Avoids pulling
|
|
49
|
-
* in a router dependency for the half-dozen patterns we actually use.
|
|
50
|
-
*
|
|
51
|
-
* Returns null if `path` does not match `pattern`. Otherwise returns an object
|
|
52
|
-
* mapping each :param name to its value. Path segments are exact-matched
|
|
53
|
-
* except for parameter slots.
|
|
54
|
-
*/
|
|
105
|
+
/** Pattern matcher for /v1/memories/:id/<action> (no router dependency); null if `path` does not match, else each :param name mapped to its value. */
|
|
55
106
|
function decodePathSegment(segment) {
|
|
56
107
|
try {
|
|
57
108
|
return decodeURIComponent(segment);
|
|
@@ -82,16 +133,8 @@ export function matchPath(pattern, path) {
|
|
|
82
133
|
}
|
|
83
134
|
return params;
|
|
84
135
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Reject URL-encoded slashes in path segments BEFORE the URL parser decodes
|
|
89
|
-
* them — otherwise `%2F` becomes `/`, path-split runs, and the route either
|
|
90
|
-
* silently 404s or matches the wrong template.
|
|
91
|
-
*
|
|
92
|
-
* Only the PATHNAME is scanned (split on the first `?`), so recall queries
|
|
93
|
-
* containing URLs like `?q=https%3A%2F%2Fexample.com` are not rejected.
|
|
94
|
-
*/
|
|
136
|
+
/** Rejects URL-encoded slashes in path segments BEFORE the URL parser decodes them (`%2F` would become `/` and 404 or match the wrong template).
|
|
137
|
+
* Only the PATHNAME is scanned, so recall queries like `?q=https%3A%2F%2Fexample.com` are not rejected. */
|
|
95
138
|
export function rejectEncodedSlash(rawUrl) {
|
|
96
139
|
const queryIdx = rawUrl.indexOf('?');
|
|
97
140
|
const pathname = queryIdx === -1 ? rawUrl : rawUrl.slice(0, queryIdx);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AddonRoute, ResolvedServeOpts, RouteRequest } from './types.js';
|
|
2
|
+
import type { JsonValue } from '../util/json.js';
|
|
3
|
+
export declare function isPublicRoute(method: string, path: string): boolean;
|
|
4
|
+
/** Run the first /v1 route whose method and path match. */
|
|
5
|
+
export declare function dispatchV1Route(r: RouteRequest, method: string, path: string): Promise<boolean>;
|
|
6
|
+
/** Boot-time check: an add-on path must be plain, unique and not one core serves, so no add-on shadows a core route or hides from dispatch. */
|
|
7
|
+
export declare function assertAddonRoutes(routes: readonly AddonRoute[]): void;
|
|
8
|
+
/** Boot-time check and serialization: a public path that a core GET route serves would open that route to anyone. */
|
|
9
|
+
export declare function assertPublicJson(publicJson: Readonly<Record<string, JsonValue>>): ReadonlyMap<string, string>;
|
|
10
|
+
/** Core authenticates and parses before the handler runs, so an add-on route gets the same 401, 400 and 501 as a core one. */
|
|
11
|
+
export declare function dispatchAddonRoute({ req, res, opts }: RouteRequest, method: string, path: string): Promise<boolean>;
|
|
12
|
+
/** No auth, body read or store access, so a caller with no key gets it under any store. */
|
|
13
|
+
export declare function dispatchPublicJson({ req, res, opts }: RouteRequest, method: string, path: string): boolean;
|
|
14
|
+
export declare function assertSqliteStore(opts: ResolvedServeOpts): void;
|
|
15
|
+
//# sourceMappingURL=route-table.d.ts.map
|