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,156 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, unlinkSync, renameSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { envHealthProbeMs } from '../util/env.js';
|
|
4
|
+
// Pidfile sits directly inside hippoRoot (the `.hippo` directory itself, as for openHippoDb), i.e. `${hippoRoot}/server.pid`.
|
|
5
|
+
const PIDFILE = 'server.pid';
|
|
6
|
+
/** How long detectServer waits for the `/health` probe before treating the pidfile as stale; short because it fires only when a pidfile exists with a live
|
|
7
|
+
* pid on loopback. HIPPO_HEALTH_PROBE_MS overrides it. */
|
|
8
|
+
const HEALTH_PROBE_TIMEOUT_MS = 300;
|
|
9
|
+
/** Hard cap on the /health body detectServer buffers: a real payload is well under 1 KB, so a larger body means the process on the recorded port is not
|
|
10
|
+
* hippo. */
|
|
11
|
+
const HEALTH_BODY_MAX_BYTES = 64 * 1024;
|
|
12
|
+
/** Loopback hosts a recorded pidfile url may point at (serve() only binds these); any other host is malformed or forged and is not probed. */
|
|
13
|
+
const PIDFILE_LOOPBACK_HOSTS = new Set(['127.0.0.1', '::1', 'localhost']);
|
|
14
|
+
/** False when the pidfile's pid is dead or its url could not be one serve() wrote. */
|
|
15
|
+
function isLiveLoopbackTarget(info) {
|
|
16
|
+
// Signal 0 throws if the pid is dead or owned by another user we cannot signal; either way, treat as stale.
|
|
17
|
+
// process.kill(pid, 0) works cross-platform for the dead-pid case (OpenProcess + GetExitCodeProcess on Windows).
|
|
18
|
+
try {
|
|
19
|
+
process.kill(info.pid, 0);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
// The pid may have been reused and the recorded url is read from a forgeable file; serve() only binds loopback, so a url that is not http on a loopback
|
|
25
|
+
// host and the recorded port is malformed or forged. Reject it before probing, since the probe and any routed request can carry HIPPO_API_KEY.
|
|
26
|
+
let probeUrl;
|
|
27
|
+
try {
|
|
28
|
+
probeUrl = new URL(info.url);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
return (probeUrl.protocol === 'http:' &&
|
|
34
|
+
PIDFILE_LOOPBACK_HOSTS.has(probeUrl.hostname.replace(/^\[(.*)\]$/, '$1')) &&
|
|
35
|
+
probeUrl.port === String(info.port));
|
|
36
|
+
}
|
|
37
|
+
/** The whole body as text, or null once it passes HEALTH_BODY_MAX_BYTES (the stream is then cancelled). */
|
|
38
|
+
async function readCappedBody(body) {
|
|
39
|
+
// Read the body under a hard byte cap: the process on info.url may not be hippo (pid reuse), so its response is untrusted and never goes unbounded into a
|
|
40
|
+
// parser.
|
|
41
|
+
const reader = body.getReader();
|
|
42
|
+
const decoder = new TextDecoder();
|
|
43
|
+
let raw = '';
|
|
44
|
+
let received = 0;
|
|
45
|
+
for (;;) {
|
|
46
|
+
const { done, value } = await reader.read();
|
|
47
|
+
if (done)
|
|
48
|
+
break;
|
|
49
|
+
received += value.byteLength;
|
|
50
|
+
if (received > HEALTH_BODY_MAX_BYTES) {
|
|
51
|
+
await reader.cancel();
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
raw += decoder.decode(value, { stream: true });
|
|
55
|
+
}
|
|
56
|
+
raw += decoder.decode();
|
|
57
|
+
return raw;
|
|
58
|
+
}
|
|
59
|
+
/** True when /health on info.url reports the pidfile's started_at; unlinks the pidfile on any definitive mismatch. */
|
|
60
|
+
async function healthMatchesPidfile(hippoRoot, info) {
|
|
61
|
+
// Confirm the answering process is this server by matching /health `started_at` against the pidfile; refusal, non-200 or a malformed body unlink the
|
|
62
|
+
// pidfile as stale. A probe timeout is ambiguous (a live but busy server can miss the 300ms window), so it returns null WITHOUT unlinking.
|
|
63
|
+
try {
|
|
64
|
+
const res = await fetch(`${info.url}/health`, {
|
|
65
|
+
signal: AbortSignal.timeout(envHealthProbeMs() ?? HEALTH_PROBE_TIMEOUT_MS),
|
|
66
|
+
});
|
|
67
|
+
if (!res.ok || !res.body) {
|
|
68
|
+
removePidfile(hippoRoot);
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const raw = await readCappedBody(res.body);
|
|
72
|
+
if (raw === null) {
|
|
73
|
+
removePidfile(hippoRoot);
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
const body = JSON.parse(raw);
|
|
77
|
+
if (body.started_at !== info.started_at) {
|
|
78
|
+
removePidfile(hippoRoot);
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
catch (err) {
|
|
84
|
+
// A timeout is ambiguous (the server may be busy), so keep the pidfile; any other failure (refused, malformed body) is definitive: unlink as stale.
|
|
85
|
+
// SAFETY: err's shape is unknown (catch clause); reading an optional .name property structurally is safe regardless of the actual type.
|
|
86
|
+
if (err?.name !== 'TimeoutError') {
|
|
87
|
+
removePidfile(hippoRoot);
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Returns the pidfile's ServerInfo if a live hippo server answers on the recorded url, else null (best-effort unlinking of missing/stale/malformed pidfiles).
|
|
93
|
+
* `process.kill(pid, 0)` rules out dead pids; GET /health must then return the pidfile's `started_at` (pids get reused). Probes only if the pid is live. */
|
|
94
|
+
export async function detectServer(hippoRoot) {
|
|
95
|
+
const path = join(hippoRoot, PIDFILE);
|
|
96
|
+
if (!existsSync(path))
|
|
97
|
+
return null;
|
|
98
|
+
let info;
|
|
99
|
+
try {
|
|
100
|
+
info = JSON.parse(readFileSync(path, 'utf8'));
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
removePidfile(hippoRoot);
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
if (!isLiveLoopbackTarget(info)) {
|
|
107
|
+
removePidfile(hippoRoot);
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
return (await healthMatchesPidfile(hippoRoot, info)) ? info : null;
|
|
111
|
+
}
|
|
112
|
+
/** Atomically writes the pidfile (process-scoped temp file, then rename; atomic on POSIX and NTFS). `startedAt` comes from the caller (`serve()`) so the
|
|
113
|
+
* pidfile and GET /health carry the same timestamp, which detectServer's liveness probe compares. */
|
|
114
|
+
export function writePidfile(hippoRoot, opts) {
|
|
115
|
+
const path = join(hippoRoot, PIDFILE);
|
|
116
|
+
const tmp = `${path}.tmp.${process.pid}`;
|
|
117
|
+
const info = {
|
|
118
|
+
schema: 1,
|
|
119
|
+
pid: process.pid,
|
|
120
|
+
port: opts.port,
|
|
121
|
+
url: opts.url,
|
|
122
|
+
started_at: opts.startedAt,
|
|
123
|
+
};
|
|
124
|
+
writeFileSync(tmp, JSON.stringify(info));
|
|
125
|
+
renameSync(tmp, path);
|
|
126
|
+
}
|
|
127
|
+
/** Best-effort pidfile removal, silent on any error so shutdown paths can call it. Identity-blind: a shutdown that must not clobber a newer server's pidfile
|
|
128
|
+
* uses removePidfileIfOwned. */
|
|
129
|
+
export function removePidfile(hippoRoot) {
|
|
130
|
+
const path = join(hippoRoot, PIDFILE);
|
|
131
|
+
try {
|
|
132
|
+
unlinkSync(path);
|
|
133
|
+
}
|
|
134
|
+
catch { /* already gone or undeletable; the next detectServer probe re-checks */ }
|
|
135
|
+
}
|
|
136
|
+
/** Removes the pidfile ONLY when both `pid` and `started_at` match `owner`, so an older shutting-down server cannot orphan a newer one; never throws.
|
|
137
|
+
* Anything unreadable or malformed is "not provably mine" and left alone (detectServer unlinks it). Returns true iff removed. */
|
|
138
|
+
export function removePidfileIfOwned(hippoRoot, owner) {
|
|
139
|
+
const path = join(hippoRoot, PIDFILE);
|
|
140
|
+
try {
|
|
141
|
+
const info = JSON.parse(readFileSync(path, 'utf8'));
|
|
142
|
+
// A literal JSON `null` parses cleanly but throws on property access;
|
|
143
|
+
// that lands in the catch below, which is the intended "not mine" path.
|
|
144
|
+
if (info.pid !== owner.pid || info.started_at !== owner.startedAt) {
|
|
145
|
+
return false; // a different server owns the pidfile now
|
|
146
|
+
}
|
|
147
|
+
unlinkSync(path);
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// Missing, unreadable, malformed, or non-object pidfile, or an unlink
|
|
152
|
+
// failure: none is a provable own-removal, so report not-removed.
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=server-detect.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Entry of the process that runs one POST /v1/sleep; sleep-offload.ts starts it and nothing imports it.
|
|
2
|
+
// The sleep module alone: the api barrel loads far more than one sleep needs, and every sleep pays for the start.
|
|
3
|
+
import { sleep } from '../api/sleep.js';
|
|
4
|
+
import { isStoreBusy, runWithRequestStores, SERVER_DB_WAIT_MS } from '../db/index.js';
|
|
5
|
+
import { errorMessage } from '../util/log.js';
|
|
6
|
+
function failed(err) {
|
|
7
|
+
return { ok: false, busy: isStoreBusy(err), message: errorMessage(err), stack: err instanceof Error ? err.stack : undefined };
|
|
8
|
+
}
|
|
9
|
+
process.once('message', (message) => {
|
|
10
|
+
// SAFETY: sleep-offload.ts is the only writer on this channel and sends exactly one SleepJob.
|
|
11
|
+
const job = message;
|
|
12
|
+
const ctx = { hippoRoot: job.hippoRoot, tenantId: job.tenantId, actor: job.actor };
|
|
13
|
+
// The server's own request scope and lock wait, so a busy store answers as it did when sleep ran in the server.
|
|
14
|
+
runWithRequestStores(() => sleep(ctx, job.opts), { busyWaitMs: SERVER_DB_WAIT_MS })
|
|
15
|
+
.then((result) => ({ ok: true, result }), failed)
|
|
16
|
+
// Exit only once the reply is written, or the parent could see the process end first.
|
|
17
|
+
.then((reply) => process.send?.(reply, () => process.exit(0)));
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=sleep-child.js.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type Actor, type Context, type SleepOpts, type SleepResult } from '../api/index.js';
|
|
2
|
+
/** What the child needs to rebuild the request's context; the store handle itself cannot cross a process boundary. */
|
|
3
|
+
export interface SleepJob {
|
|
4
|
+
readonly hippoRoot: string;
|
|
5
|
+
readonly tenantId: string;
|
|
6
|
+
readonly actor: Actor;
|
|
7
|
+
readonly opts: SleepOpts;
|
|
8
|
+
}
|
|
9
|
+
export type SleepReply = {
|
|
10
|
+
readonly ok: true;
|
|
11
|
+
readonly result: SleepResult;
|
|
12
|
+
} | {
|
|
13
|
+
readonly ok: false;
|
|
14
|
+
readonly busy: boolean;
|
|
15
|
+
readonly message: string;
|
|
16
|
+
readonly stack?: string;
|
|
17
|
+
};
|
|
18
|
+
/** `sleep` for the HTTP route: same result and errors, run outside the serving process and stopped at the deadline (10 minutes, or HIPPO_SLEEP_TIMEOUT_MS). */
|
|
19
|
+
export declare function sleepInChild(ctx: Context, opts: SleepOpts): Promise<SleepResult>;
|
|
20
|
+
//# sourceMappingURL=sleep-offload.d.ts.map
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// POST /v1/sleep runs its consolidation in a child process, so the server keeps answering and a stuck run can be stopped.
|
|
2
|
+
import { spawn } from 'node:child_process';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { sleep } from '../api/index.js';
|
|
5
|
+
import { StoreBusyError } from '../db/index.js';
|
|
6
|
+
import { envSleepTimeoutMs } from '../util/env.js';
|
|
7
|
+
import { HttpError } from '../util/http-util.js';
|
|
8
|
+
const DEFAULT_SLEEP_DEADLINE_MS = 600_000;
|
|
9
|
+
// Resolved from the package root, so a server run from TypeScript source starts the same built file.
|
|
10
|
+
const CHILD_ENTRY = fileURLToPath(new URL('../../dist/server/sleep-child.js', import.meta.url));
|
|
11
|
+
function failureOf(reply, code, signal) {
|
|
12
|
+
if (!reply || reply.ok)
|
|
13
|
+
return new Error(`sleep process ended without an answer (code ${code}, signal ${signal})`);
|
|
14
|
+
// A lock the child could not get is the same retryable 503 an in-process sleep gave.
|
|
15
|
+
if (reply.busy)
|
|
16
|
+
return new StoreBusyError(reply.message);
|
|
17
|
+
const failure = new Error(reply.message);
|
|
18
|
+
if (reply.stack)
|
|
19
|
+
failure.stack = reply.stack;
|
|
20
|
+
return failure;
|
|
21
|
+
}
|
|
22
|
+
function runInChild(job) {
|
|
23
|
+
const deadlineMs = envSleepTimeoutMs() ?? DEFAULT_SLEEP_DEADLINE_MS;
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
// The child's stderr is the server's log, so Node's SQLite notice would repeat there on every sleep.
|
|
26
|
+
const child = spawn(process.execPath, ['--disable-warning=ExperimentalWarning', CHILD_ENTRY], {
|
|
27
|
+
stdio: ['ignore', 'inherit', 'inherit', 'ipc'],
|
|
28
|
+
windowsHide: true
|
|
29
|
+
});
|
|
30
|
+
let reply;
|
|
31
|
+
let timedOut = false;
|
|
32
|
+
// SIGKILL because the child is inside synchronous SQLite work and cannot run a handler; the OS drops its write lock.
|
|
33
|
+
const timer = setTimeout(() => { timedOut = true; child.kill('SIGKILL'); }, deadlineMs);
|
|
34
|
+
child.once('message', (message) => {
|
|
35
|
+
// SAFETY: sleep-child.ts is the only writer on this channel and sends exactly one SleepReply.
|
|
36
|
+
reply = message;
|
|
37
|
+
});
|
|
38
|
+
child.once('error', (err) => { clearTimeout(timer); reject(err); });
|
|
39
|
+
// 'close' and not 'exit': it waits for the channel to drain, so the reply is in hand and the child's store handles are gone.
|
|
40
|
+
child.once('close', (code, signal) => {
|
|
41
|
+
clearTimeout(timer);
|
|
42
|
+
if (timedOut)
|
|
43
|
+
reject(new HttpError(504, `sleep did not finish within ${deadlineMs} ms and was stopped; the next sleep carries on from there`));
|
|
44
|
+
else if (reply?.ok)
|
|
45
|
+
resolve(reply.result);
|
|
46
|
+
else
|
|
47
|
+
reject(failureOf(reply, code, signal));
|
|
48
|
+
});
|
|
49
|
+
child.send(job);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
let turn = Promise.resolve();
|
|
53
|
+
// One running and one waiting: each further sleep would only hold a request open behind work the waiting one already covers.
|
|
54
|
+
const MAX_SLEEPS_IN_LINE = 2;
|
|
55
|
+
const SLEEP_RETRY_AFTER_SEC = 30;
|
|
56
|
+
let inLine = 0;
|
|
57
|
+
/** `sleep` for the HTTP route: same result and errors, run outside the serving process and stopped at the deadline (10 minutes, or HIPPO_SLEEP_TIMEOUT_MS). */
|
|
58
|
+
export function sleepInChild(ctx, opts) {
|
|
59
|
+
// The child reopens the store by path, which only SQLite has; any other store keeps sleep's own refusal.
|
|
60
|
+
if (ctx.store && ctx.store.kind !== 'sqlite')
|
|
61
|
+
return sleep(ctx, opts);
|
|
62
|
+
if (inLine >= MAX_SLEEPS_IN_LINE) {
|
|
63
|
+
return Promise.reject(new HttpError(503, 'a sleep is already running and another is waiting; retry when one has finished', SLEEP_RETRY_AFTER_SEC));
|
|
64
|
+
}
|
|
65
|
+
inLine += 1;
|
|
66
|
+
const job = { hippoRoot: ctx.hippoRoot, tenantId: ctx.tenantId, actor: ctx.actor, opts };
|
|
67
|
+
// One sleep at a time, as on the server's single thread: a second request waits its turn and does not fight the first for the write lock.
|
|
68
|
+
const run = turn.then(() => runInChild(job));
|
|
69
|
+
// A failed sleep reaches its own request through `run`; the queue only needs to know the turn is over.
|
|
70
|
+
turn = run.then(() => undefined, () => undefined).finally(() => { inLine -= 1; });
|
|
71
|
+
return run;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=sleep-offload.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type RequestListener, type Server } from 'node:http';
|
|
2
|
+
import type { ServeOpts } from './types.js';
|
|
3
|
+
export declare function createListener(tls: ServeOpts['tls'], onRequest: RequestListener): Server;
|
|
4
|
+
/** Said once at boot: a non-loopback bind without TLS sends every key and memory over the network as plain text. */
|
|
5
|
+
export declare function warnIfCleartext(host: string, tls: ServeOpts['tls'], loopbackHosts: ReadonlySet<string>): void;
|
|
6
|
+
//# sourceMappingURL=tls.d.ts.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// The serve() listener: node:https when a certificate is given, else node:http and a boot warning off loopback.
|
|
2
|
+
import { createServer as createHttpServer } from 'node:http';
|
|
3
|
+
import { createServer as createHttpsServer } from 'node:https';
|
|
4
|
+
import { errorMessage, log } from '../util/log.js';
|
|
5
|
+
export function createListener(tls, onRequest) {
|
|
6
|
+
if (!tls)
|
|
7
|
+
return createHttpServer(onRequest);
|
|
8
|
+
try {
|
|
9
|
+
// Explicit so the floor does not move with the runtime's default.
|
|
10
|
+
return createHttpsServer({ cert: tls.cert, key: tls.key, minVersion: 'TLSv1.2' }, onRequest);
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
// OpenSSL's own text names no file, so the operator would not know which input was refused.
|
|
14
|
+
throw new Error(`hippo serve: the TLS certificate or key was refused: ${errorMessage(err)}`, { cause: err });
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Said once at boot: a non-loopback bind without TLS sends every key and memory over the network as plain text. */
|
|
18
|
+
export function warnIfCleartext(host, tls, loopbackHosts) {
|
|
19
|
+
if (tls || loopbackHosts.has(host))
|
|
20
|
+
return;
|
|
21
|
+
log.warn(`serve: listening on ${host} without TLS, so API keys and memory text travel in cleartext unless a TLS-terminating proxy sits in front. ` +
|
|
22
|
+
'To serve HTTPS directly, pass --tls-cert and --tls-key (or set HIPPO_TLS_CERT and HIPPO_TLS_KEY).');
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=tls.js.map
|
package/dist/server/types.d.ts
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
|
-
import type { Context } from '../api.js';
|
|
3
|
-
import type { JsonValue } from '../json.js';
|
|
4
|
-
import type { RateLimiter } from '
|
|
5
|
-
import type { HippoStore, StoreGroup } from '../store
|
|
2
|
+
import type { Context } from '../api/index.js';
|
|
3
|
+
import type { JsonValue } from '../util/json.js';
|
|
4
|
+
import type { RateLimiter } from './rate-limit.js';
|
|
5
|
+
import type { HippoStore, StoreGroup } from '../store/index.js';
|
|
6
6
|
export interface ServerHandle {
|
|
7
7
|
port: number;
|
|
8
8
|
url: string;
|
|
9
9
|
stop: () => Promise<void>;
|
|
10
|
-
/** Introspection-only: the underlying node:http Server,
|
|
11
|
-
*
|
|
12
|
-
* into serve()'s closure. Additive field — do not depend on it for control
|
|
13
|
-
* flow outside tests. */
|
|
10
|
+
/** Introspection-only: the underlying node:http Server, so tests can assert keep-alive/headers timeout hardening without reaching into serve()'s closure.
|
|
11
|
+
* Do not use for control flow. */
|
|
14
12
|
server?: import('node:http').Server;
|
|
15
13
|
}
|
|
16
14
|
/** Identity an {@link AuthResolver} vouches for. The core sanitises it before use. */
|
|
17
15
|
export interface ResolvedBearer {
|
|
18
16
|
tenantId: string;
|
|
19
17
|
subject: string;
|
|
20
|
-
/** Not 'admin' means 'member'. Admin is tenant-only, yet can mint member API keys (POST /v1/auth/keys);
|
|
18
|
+
/** Not 'admin' means 'member'. Admin is tenant-only, yet can mint member API keys (POST /v1/auth/keys);
|
|
19
|
+
* an add-on revokes them through the exported authRevoke when the IdP deprovisions the minter. */
|
|
21
20
|
role: 'admin' | 'member';
|
|
22
21
|
scopes?: readonly string[];
|
|
23
22
|
}
|
|
@@ -28,7 +27,8 @@ export interface AddonCall {
|
|
|
28
27
|
readonly ctx: Context;
|
|
29
28
|
readonly body: Readonly<Record<string, JsonValue>>;
|
|
30
29
|
}
|
|
31
|
-
/** A POST /v1 route an add-on mounts through serve(): core authenticates and parses first, then sends the
|
|
30
|
+
/** A POST /v1 route an add-on mounts through serve(): core authenticates and parses first, then sends the
|
|
31
|
+
* returned value as 200 JSON. Under another store it runs only when that store has its `storeReady` group. */
|
|
32
32
|
export interface AddonRoute {
|
|
33
33
|
readonly path: string;
|
|
34
34
|
readonly handler: (call: AddonCall) => Promise<JsonValue>;
|
|
@@ -46,15 +46,26 @@ export interface ServeOpts {
|
|
|
46
46
|
authResolverTimeoutMs?: number;
|
|
47
47
|
port?: number;
|
|
48
48
|
host?: string;
|
|
49
|
-
/** Stop and exit on SIGINT/SIGTERM
|
|
49
|
+
/** Stop and exit on SIGINT/SIGTERM, and drain then exit 1 on an uncaught exception or unhandled rejection. A stop still running
|
|
50
|
+
* 10 s past `shutdownDrainMs` ends the process with a failure exit. Only `hippo serve` owns the process, so only it sets this. */
|
|
50
51
|
handleSignals?: boolean;
|
|
51
52
|
/** How long stop() lets in-flight requests finish before closing their sockets; defaults to 5000 ms. */
|
|
52
53
|
shutdownDrainMs?: number;
|
|
54
|
+
/** How long a request may stay unanswered before one warn names it; the request itself is left alone. Defaults to 60000 ms. */
|
|
55
|
+
slowRequestWarnMs?: number;
|
|
53
56
|
/** Defaults to hippo.db under `hippoRoot`. A store of another kind runs only the routes ported to it; its caller closes it. */
|
|
54
57
|
store?: HippoStore;
|
|
55
58
|
autoSleep?: false;
|
|
56
59
|
routes?: readonly AddonRoute[];
|
|
57
60
|
mintBodyDeadlineMs?: number;
|
|
61
|
+
/** Tests only: shortens the wait for a signed webhook's body, which defaults to 10 s. */
|
|
62
|
+
webhookBodyDeadlineMs?: number;
|
|
63
|
+
/** PEM certificate and key: serve() then answers HTTPS only. Unset means cleartext
|
|
64
|
+
* HTTP, which needs a TLS-terminating proxy in front on any non-loopback bind. */
|
|
65
|
+
tls?: {
|
|
66
|
+
cert: string | Buffer;
|
|
67
|
+
key: string | Buffer;
|
|
68
|
+
};
|
|
58
69
|
/** Static JSON served to anyone at GET <path>; built once at boot and never authenticated, so it must hold nothing secret. */
|
|
59
70
|
publicJson?: Readonly<Record<string, JsonValue>>;
|
|
60
71
|
/** Request limits: perCaller after auth; perAddress replaces HIPPO_V1_RPS when set, 'off' disables it; failedAuthPerAddress guards scrypt. */
|
|
@@ -77,11 +88,20 @@ export interface RouteRequest {
|
|
|
77
88
|
opts: ResolvedServeOpts;
|
|
78
89
|
query: URLSearchParams;
|
|
79
90
|
}
|
|
80
|
-
/**
|
|
91
|
+
/** A route's store status: a `storeReady` group, a `sqliteOnly` reason, or neither while it waits for a group; never both. */
|
|
92
|
+
type StoreStatus = {
|
|
93
|
+
storeReady?: StoreGroup;
|
|
94
|
+
sqliteOnly?: never;
|
|
95
|
+
} | {
|
|
96
|
+
sqliteOnly: string;
|
|
97
|
+
storeReady?: never;
|
|
98
|
+
};
|
|
99
|
+
/** One /v1 route: an exact path, a matchPath pattern, or a regex, each paired with one method's handler. Under another store it runs only with its
|
|
100
|
+
* store's `storeReady` group; `loop: 'off'` runs its SQLite work on a worker thread, so the handler opens no hippo.db on the server thread. */
|
|
81
101
|
export type Route = {
|
|
82
102
|
method: string;
|
|
83
|
-
|
|
84
|
-
} & ({
|
|
103
|
+
loop?: 'off';
|
|
104
|
+
} & StoreStatus & ({
|
|
85
105
|
path: string;
|
|
86
106
|
handler: (r: RouteRequest) => Promise<void>;
|
|
87
107
|
} | {
|
|
@@ -91,4 +111,5 @@ export type Route = {
|
|
|
91
111
|
regex: RegExp;
|
|
92
112
|
handler: (r: RouteRequest, match: RegExpMatchArray) => Promise<void>;
|
|
93
113
|
});
|
|
114
|
+
export {};
|
|
94
115
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import type { IncomingMessage } from 'node:http';
|
|
2
|
-
import type { Context, RememberOpts } from '../api.js';
|
|
3
|
-
import { type JsonValue } from '../json.js';
|
|
4
|
-
export declare function isJsonNumber(value: JsonValue | undefined): value is number;
|
|
5
|
-
export declare function isJsonBoolean(value: JsonValue | undefined): value is boolean;
|
|
2
|
+
import type { Context, RememberOpts } from '../api/index.js';
|
|
3
|
+
import { type JsonValue } from '../util/json.js';
|
|
6
4
|
export declare function isSetMember<T extends string>(set: ReadonlySet<T>, value: string): value is T;
|
|
5
|
+
export declare const MAX_SHORT_FIELD_LEN = 4096;
|
|
6
|
+
export declare const MAX_LIST_LIMIT = 1000;
|
|
7
7
|
export declare function parseListLimit(limitRaw: string | null, defaultLimit?: number, maxLimit?: number): number;
|
|
8
|
-
/** `_authed` is proof the caller passed auth, so a full-size body is read only for
|
|
8
|
+
/** `_authed` is proof the caller passed auth, so a full-size body is read only for
|
|
9
|
+
* an authenticated caller; the key mint reads first under its own small cap. */
|
|
9
10
|
export declare function parseJsonBody(req: IncomingMessage, _authed: Context): Promise<Record<string, JsonValue>>;
|
|
10
11
|
export declare function parseJsonObjectText(raw: string): Record<string, JsonValue>;
|
|
11
12
|
export declare function getString(obj: Record<string, JsonValue>, key: string): string | undefined;
|
|
@@ -1,27 +1,17 @@
|
|
|
1
|
-
import { HttpError,
|
|
2
|
-
import { isJsonString } from '../json.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
export function isJsonBoolean(value) {
|
|
7
|
-
return typeof value === 'boolean';
|
|
8
|
-
}
|
|
9
|
-
// Runtime membership check for a `ReadonlySet<T>` of string-literal union
|
|
10
|
-
// members, used at every `body` field validated against a VALID_* set below.
|
|
11
|
-
// Set<T>.has(value: T) itself gives no narrowing (its parameter type is T,
|
|
12
|
-
// not a type predicate) so callers previously needed a separate `as T` cast
|
|
13
|
-
// at both the check and the later usage; this helper is the one place that
|
|
14
|
-
// assertion lives, so downstream call sites narrow via the `value is T`
|
|
15
|
-
// return instead of re-asserting.
|
|
1
|
+
import { HttpError, MAX_ID_LEN, readBody } from '../util/http-util.js';
|
|
2
|
+
import { isJsonString, isJsonObject } from '../util/json.js';
|
|
3
|
+
// Runtime membership check for a `ReadonlySet<T>` of string-literal members: Set<T>.has gives no narrowing, so this is the one place the `as T` assertion lives
|
|
4
|
+
// and callers narrow via the `value is T` return.
|
|
16
5
|
export function isSetMember(set, value) {
|
|
17
|
-
// SAFETY: `value as T` is discarded unless `set.has` (the real runtime
|
|
18
|
-
// check) confirms membership; the `value is T` return type is what
|
|
19
|
-
// performs the actual narrowing for callers.
|
|
6
|
+
// SAFETY: `value as T` is discarded unless `set.has` (the real runtime check) confirms membership; the `value is T` return type does the narrowing.
|
|
20
7
|
return set.has(value);
|
|
21
8
|
}
|
|
9
|
+
// Cap for short free-text HTTP fields (names, text, context, change summaries) on the object routes.
|
|
10
|
+
export const MAX_SHORT_FIELD_LEN = 4096;
|
|
22
11
|
// Number.isInteger, not isFinite: SQLite `LIMIT ?` rejects "1.5" with a 500.
|
|
23
12
|
// Shared by every first-class-object list route so the guard cannot drift.
|
|
24
|
-
export
|
|
13
|
+
export const MAX_LIST_LIMIT = 1000;
|
|
14
|
+
export function parseListLimit(limitRaw, defaultLimit = 100, maxLimit = MAX_LIST_LIMIT) {
|
|
25
15
|
if (limitRaw === null)
|
|
26
16
|
return defaultLimit;
|
|
27
17
|
const limit = Number(limitRaw);
|
|
@@ -30,7 +20,8 @@ export function parseListLimit(limitRaw, defaultLimit = 100, maxLimit = 1000) {
|
|
|
30
20
|
}
|
|
31
21
|
return limit;
|
|
32
22
|
}
|
|
33
|
-
/** `_authed` is proof the caller passed auth, so a full-size body is read only for
|
|
23
|
+
/** `_authed` is proof the caller passed auth, so a full-size body is read only for
|
|
24
|
+
* an authenticated caller; the key mint reads first under its own small cap. */
|
|
34
25
|
export async function parseJsonBody(req, _authed) {
|
|
35
26
|
return parseJsonObjectText(await readBody(req));
|
|
36
27
|
}
|
|
@@ -39,7 +30,7 @@ export function parseJsonObjectText(raw) {
|
|
|
39
30
|
return {};
|
|
40
31
|
try {
|
|
41
32
|
const parsed = JSON.parse(raw);
|
|
42
|
-
if (!
|
|
33
|
+
if (!isJsonObject(parsed)) {
|
|
43
34
|
throw new HttpError(400, 'request body must be a JSON object');
|
|
44
35
|
}
|
|
45
36
|
return parsed;
|
|
@@ -67,7 +58,7 @@ export function getCallerProject(body) {
|
|
|
67
58
|
const v = body.project;
|
|
68
59
|
if (v === undefined || v === null)
|
|
69
60
|
return undefined;
|
|
70
|
-
if (!
|
|
61
|
+
if (!isJsonObject(v) || !isJsonString(v.name)) {
|
|
71
62
|
throw new HttpError(400, 'project must be an object with a "name" string');
|
|
72
63
|
}
|
|
73
64
|
if (v.aliases === undefined)
|
|
@@ -77,18 +68,9 @@ export function getCallerProject(body) {
|
|
|
77
68
|
}
|
|
78
69
|
return { name: v.name, aliases: v.aliases };
|
|
79
70
|
}
|
|
80
|
-
/**
|
|
81
|
-
*
|
|
82
|
-
|
|
83
|
-
* ids with a useful 400 instead of silently falling through to "not found".
|
|
84
|
-
*
|
|
85
|
-
* Allowed charset matches all production id shapes Hippo emits: `mem_<hex>`,
|
|
86
|
-
* `sum_<hex>`, `sess-<id>`, Slack bot ids like `B01ABCD`, etc. The `:` and
|
|
87
|
-
* `.` are allowed for forward-compat. The `/` is intentionally absent —
|
|
88
|
-
* Hippo never emits ids with slashes, and `rejectEncodedSlash` already
|
|
89
|
-
* stops `%2F`-smuggled ones at the front door.
|
|
90
|
-
*/
|
|
91
|
-
const ID_SEGMENT_RE = /^[A-Za-z0-9_:.\-]+$/;
|
|
71
|
+
/** Charset + length validation for `:id` captures, called right after `matchPath` so empty/overlong/illegal ids get a 400, not "not found".
|
|
72
|
+
* Allows every production id shape (`mem_<hex>`, `sess-<id>`, Slack ids) plus `:` and `.`; no `/`, since `rejectEncodedSlash` stops `%2F` smuggling. */
|
|
73
|
+
const ID_SEGMENT_RE = /^[A-Za-z0-9_:.-]+$/;
|
|
92
74
|
export function validateIdSegment(id, fieldName) {
|
|
93
75
|
if (id.length === 0)
|
|
94
76
|
throw new HttpError(400, `${fieldName} is required`);
|
package/dist/server.d.ts
CHANGED
|
@@ -1,81 +1,59 @@
|
|
|
1
|
-
import { type Actor, authCreateSelf, type AuthCreateSelfOpts, type AuthCreateSelfResult, authRevoke, type AuthRevokeReply, type AuthRevokeResult, type Context } from './api.js';
|
|
2
|
-
import { ForbiddenError, NotFoundError } from './api-errors.js';
|
|
3
|
-
|
|
1
|
+
import { type Actor, authCreateSelf, type AuthCreateSelfOpts, type AuthCreateSelfResult, authRevoke, type AuthRevokeReply, type AuthRevokeResult, type Context } from './api/index.js';
|
|
2
|
+
import { ForbiddenError, NotFoundError } from './core/api-errors.js';
|
|
3
|
+
export { serve } from './server/boot.js';
|
|
4
4
|
export { authCreateSelf, authRevoke, ForbiddenError, NotFoundError, type AuthCreateSelfOpts, type AuthCreateSelfResult, type AuthRevokeReply, type AuthRevokeResult, type Context, type Actor, };
|
|
5
|
-
export { isCrossSite, LOOPBACK_HOST_HEADER } from './http-util.js';
|
|
5
|
+
export { isCrossSite, LOOPBACK_HOST_HEADER } from './util/http-util.js';
|
|
6
6
|
export { __resetSessionRecallHistoryHttp } from './server/routes/recall.js';
|
|
7
7
|
export { clientIpForRateLimit } from './server/client-ip.js';
|
|
8
8
|
export { isLoopback, isReservedActor } from './server/auth.js';
|
|
9
9
|
export type { AddonCall, AddonRoute, AuthResolver, RateLimitSpec, ResolvedBearer, ServeOpts, ServerHandle } from './server/types.js';
|
|
10
|
-
export { HttpError } from './http-util.js';
|
|
11
|
-
export { promptHookContext, type CallerProject } from './prompt-hook.js';
|
|
12
|
-
export type { JsonValue } from './json.js';
|
|
10
|
+
export { HttpError } from './util/http-util.js';
|
|
11
|
+
export { promptHookContext, type CallerProject } from './api/prompt-hook.js';
|
|
12
|
+
export type { JsonValue } from './util/json.js';
|
|
13
13
|
export { captureSessionTexts, type SessionCaptureRequest, type SessionCaptureResult } from './capture/session-texts.js';
|
|
14
|
-
export { hasGroup, sqliteStore, type AmbientCandidateRequest, type ContextReads, type EntryRemoval, type EntryTarget, type EntryWrite, type EntryWrites, type HippoStore, type KeyAudit, type KeyListQuery, type KeyMint, type KeyRevoke, type KeyWrites, type OutcomeWrite, type RawArchive, type RecallSearchArgs, type RecallWrites, type SelfKeyMint, type StoreGroup, type StoreGroups, type SupersedeWrite, type VectorReads, type VectorBackfillQuery, type VectorRowWrite, type VectorWrite, type VectorWriteResult, type VectorWrites, } from './store
|
|
15
|
-
export { entryAfterOutcome } from './memory.js';
|
|
16
|
-
export { rejectionDigest, RejectedValueError } from './rejection.js';
|
|
17
|
-
export { ownScopeTouches } from './recall-scope.js';
|
|
18
|
-
export { BadRequestError, ConflictError } from './api-errors.js';
|
|
14
|
+
export { hasGroup, sqliteStore, type AmbientCandidateRequest, type ContextReads, type EntryRemoval, type EntryTarget, type EntryWrite, type EntryWrites, type HippoStore, type KeyAudit, type KeyListQuery, type KeyMint, type KeyRevoke, type KeyWrites, type OutcomeWrite, type RawArchive, type RecallSearchArgs, type RecallWrites, type SelfKeyMint, type StoreGroup, type StoreGroups, type SupersedeWrite, type VectorReads, type VectorBackfillQuery, type VectorRowWrite, type VectorWrite, type VectorWriteResult, type VectorWrites, } from './store/index.js';
|
|
15
|
+
export { entryAfterOutcome } from './core/memory.js';
|
|
16
|
+
export { rejectionDigest, RejectedValueError } from './store/rejection.js';
|
|
17
|
+
export { ownScopeTouches } from './store/recall-scope.js';
|
|
18
|
+
export { BadRequestError, ConflictError } from './core/api-errors.js';
|
|
19
19
|
export type { HippoDbContext, StoreReply } from './api/types.js';
|
|
20
|
-
export type { ApiKeyListItem, ApiKeyListRow, ApiKeyRecord, ListApiKeysOpts, NewApiKey } from './auth.js';
|
|
21
|
-
export type { KeysetPosition } from './keyset.js';
|
|
22
|
-
export type { AppendAuditOpts, AuditEvent, ListAuditAfterOpts } from './audit.js';
|
|
20
|
+
export type { ApiKeyListItem, ApiKeyListRow, ApiKeyRecord, ListApiKeysOpts, NewApiKey } from './store/auth.js';
|
|
21
|
+
export type { KeysetPosition } from './util/keyset.js';
|
|
22
|
+
export type { AppendAuditOpts, AuditEvent, ListAuditAfterOpts } from './store/audit.js';
|
|
23
23
|
export type { ContinuityBlock } from './api/recall-types.js';
|
|
24
|
-
export type { ActiveGoals, GetActiveGoalsOpts, Goal, GoalRecallLogRow, RetrievalPolicy } from './goals.js';
|
|
25
|
-
export type { MemoryEntry } from './memory.js';
|
|
26
|
-
export type { ClassResolution, PlanningFallacyEvidence } from './
|
|
27
|
-
export type { PredictionBaserate } from './predictions
|
|
28
|
-
export type { RecallTraceInput } from './recall-trace.js';
|
|
24
|
+
export type { ActiveGoals, GetActiveGoalsOpts, Goal, GoalRecallLogRow, RetrievalPolicy } from './store/goals.js';
|
|
25
|
+
export type { MemoryEntry } from './core/memory.js';
|
|
26
|
+
export type { ClassResolution, PlanningFallacyEvidence } from './store/planning-fallacy-evidence.js';
|
|
27
|
+
export type { PredictionBaserate } from './store/predictions.js';
|
|
28
|
+
export type { RecallTraceInput } from './store/recall-trace.js';
|
|
29
29
|
export type { StrengthenOptions } from './store/entry-writes.js';
|
|
30
30
|
export type { OriginFilter, RecallScopeFilter, VectorCandidateSpec } from './store/search-rows.js';
|
|
31
31
|
export type { ContinuityKey } from './store/sessions.js';
|
|
32
32
|
export type { SessionEvent, TaskSnapshot } from './store/rows.js';
|
|
33
|
-
export type { SessionHandoff } from './handoff.js';
|
|
33
|
+
export type { SessionHandoff } from './core/handoff.js';
|
|
34
34
|
export type { AmbientLoadResult, AmbientRecallRequest, ContextCandidateFilter, RecentOrigins } from './store/candidates.js';
|
|
35
|
-
export type { AmbientStoreFilter } from './ambient
|
|
36
|
-
export type { AmbientTallies } from './ambient.js';
|
|
37
|
-
export type { TokenUse } from './token-ledger.js';
|
|
38
|
-
export type { EmbeddingIndexState } from './
|
|
39
|
-
export type { PhysicsParticle } from './physics.js';
|
|
40
|
-
export { StoreBusyError } from './db.js';
|
|
41
|
-
export { decodeVector, EMBEDDING_MODEL_META_KEY, encodeVector, rankVectorRows, type VectorMatch, type VectorRow } from './vector-store.js';
|
|
42
|
-
export { bufferToFloat32, float32ToBuffer } from './physics-state.js';
|
|
43
|
-
export { replacesIndex } from './
|
|
44
|
-
export { passesScopeFilterForRecall, RECALL_DEFAULT_DENY_SCOPES } from './recall-scope.js';
|
|
45
|
-
export { SECRET_TAGS } from './secret-detect.js';
|
|
46
|
-
export { tallyAmbientEntries } from './ambient.js';
|
|
47
|
-
export { ftsTermParts, rarestFtsQuery } from './prompt-recall.js';
|
|
48
|
-
export { OTHER_STORE_MARKER, OtherStoreFolderError, withSqliteAllowed } from './db.js';
|
|
49
|
-
export { authCreate, type AuthCreateOpts, type AuthCreateResult } from './api.js';
|
|
50
|
-
export { isSharedStore } from './config.js';
|
|
51
|
-
export { ownerOrSubject } from './api.js';
|
|
52
|
-
export { bindSessionOwner } from './session-owners.js';
|
|
35
|
+
export type { AmbientStoreFilter } from './store/ambient.js';
|
|
36
|
+
export type { AmbientTallies } from './core/ambient.js';
|
|
37
|
+
export type { TokenUse } from './store/token-ledger.js';
|
|
38
|
+
export type { EmbeddingIndexState } from './store/vector-index.js';
|
|
39
|
+
export type { PhysicsParticle } from './core/physics.js';
|
|
40
|
+
export { StoreBusyError } from './db/index.js';
|
|
41
|
+
export { decodeVector, EMBEDDING_MODEL_META_KEY, encodeVector, rankVectorRows, type VectorMatch, type VectorRow } from './db/vector-store.js';
|
|
42
|
+
export { bufferToFloat32, float32ToBuffer } from './db/physics-state.js';
|
|
43
|
+
export { replacesIndex } from './store/vector-index.js';
|
|
44
|
+
export { passesScopeFilterForRecall, RECALL_DEFAULT_DENY_SCOPES } from './store/recall-scope.js';
|
|
45
|
+
export { SECRET_TAGS } from './util/secret-detect.js';
|
|
46
|
+
export { tallyAmbientEntries } from './core/ambient.js';
|
|
47
|
+
export { ftsTermParts, rarestFtsQuery } from './core/prompt-recall.js';
|
|
48
|
+
export { OTHER_STORE_MARKER, OtherStoreFolderError, withSqliteAllowed } from './db/index.js';
|
|
49
|
+
export { authCreate, type AuthCreateOpts, type AuthCreateResult } from './api/index.js';
|
|
50
|
+
export { isSharedStore } from './core/config.js';
|
|
51
|
+
export { ownerOrSubject } from './api/index.js';
|
|
52
|
+
export { bindSessionOwner } from './api/session-owners.js';
|
|
53
53
|
export { preCompactForCaller, type CallerHookOutput, type CallerPreCompactRequest } from './capture/pre-compact-caller.js';
|
|
54
54
|
export { compactResumeForCaller, type CallerCompactResumeRequest } from './capture/compact-resume-caller.js';
|
|
55
55
|
export { saveCompactionItemsForCaller, type CallerItemsRequest, type CallerItemsResult } from './capture/compaction-items-caller.js';
|
|
56
56
|
export { captureFailureForCaller, type CallerFailureRequest, type CallerFailureResult } from './capture/failure-caller.js';
|
|
57
57
|
export { sessionEndHandoffForCaller, type CallerEvidence, type CallerSessionEndRequest, type CallerSessionEndResult } from './capture/session-end-caller.js';
|
|
58
58
|
export type { WorkingState } from './capture/working-state.js';
|
|
59
|
-
/**
|
|
60
|
-
* Boot the HTTP daemon on host:port and write the pidfile under hippoRoot.
|
|
61
|
-
*
|
|
62
|
-
* Refuses non-loopback hosts at boot unless
|
|
63
|
-
* HIPPO_REQUIRE_AUTH=1 is set. The auth middleware (buildContextWithAuth /
|
|
64
|
-
* requireAuth) has shipped and every route checks it except GET /health
|
|
65
|
-
* (public by design for platform health checks) and the two connector
|
|
66
|
-
* webhooks in PUBLIC_ROUTES, which are HMAC-gated by their own signing
|
|
67
|
-
* secrets and 404 when those secrets are unset, and any publicJson GET path. But the loopback
|
|
68
|
-
* no-auth fallback inside buildContextWithAuth still admits unauthenticated
|
|
69
|
-
* requests from a loopback remote address (unless they carry Forwarded,
|
|
70
|
-
* X-Forwarded-For/-Host/-Proto, X-Real-IP, Cf-Connecting-Ip or True-Client-Ip, which mark a same-host proxy and get
|
|
71
|
-
* a 401 like any keyless remote request), so binding to a non-loopback host
|
|
72
|
-
* is only safe once that fallback is disabled with HIPPO_REQUIRE_AUTH=1,
|
|
73
|
-
* which forces every request (loopback or not) through Bearer-token
|
|
74
|
-
* validation. Without that env var set, a non-loopback bind would expose the
|
|
75
|
-
* DB to the network with no auth, so we fail fast instead.
|
|
76
|
-
*
|
|
77
|
-
* Use port: 0 in tests to bind to an ephemeral port and read the actual
|
|
78
|
-
* port back via server.address() after listen.
|
|
79
|
-
*/
|
|
80
|
-
export declare function serve(opts: ServeOpts): Promise<ServerHandle>;
|
|
81
59
|
//# sourceMappingURL=server.d.ts.map
|