hippo-memory 1.69.0 → 1.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +5 -5
- package/dist/agent-memories/claude-code.js +25 -12
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +26 -14
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +3 -2
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +5 -3
- package/dist/agent-memories/sync.js +34 -38
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +9 -46
- package/dist/api/assemble.js +44 -54
- package/dist/api/audit.d.ts +8 -7
- package/dist/api/audit.js +15 -21
- package/dist/api/auth.d.ts +17 -39
- package/dist/api/auth.js +76 -216
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +4 -17
- package/dist/{availability.js → api/availability.js} +14 -44
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +39 -48
- package/dist/api/context-types.d.ts +15 -40
- package/dist/api/context.d.ts +7 -26
- package/dist/api/context.js +67 -97
- package/dist/api/dormant.d.ts +7 -23
- package/dist/api/dormant.js +40 -128
- package/dist/api/drill-down.d.ts +9 -48
- package/dist/api/drill-down.js +41 -90
- package/dist/api/forget.d.ts +5 -33
- package/dist/api/forget.js +17 -73
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +28 -0
- package/dist/api/index.js +31 -0
- package/dist/api/instruction-detect.js +85 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +21 -0
- package/dist/api/ledger-db.js +81 -0
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +38 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +16 -31
- package/dist/api/promote.js +38 -123
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +11 -11
- package/dist/{prompt-hook.js → api/prompt-hook.js} +42 -60
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +120 -0
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +64 -0
- package/dist/api/recall-history.js +159 -0
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +7 -8
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +60 -48
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +101 -316
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +92 -91
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +27 -12
- package/dist/api/remember.js +42 -46
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -9
- package/dist/api/sleep-run.js +78 -94
- package/dist/api/sleep.d.ts +10 -29
- package/dist/api/tokens.d.ts +5 -12
- package/dist/api/tokens.js +12 -31
- package/dist/api/types.d.ts +8 -31
- package/dist/api/types.js +5 -23
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +5 -13
- package/dist/capture/command.js +57 -60
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +8 -16
- package/dist/capture/compact.js +56 -47
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +143 -157
- package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +1 -1
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +18 -14
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +2 -6
- package/dist/{session-digest.js → capture/session-digest.js} +29 -29
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +72 -92
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +28 -0
- package/dist/cli/audit-prune.js +40 -0
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +92 -88
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +69 -53
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +76 -202
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +55 -54
- package/dist/cli/client.d.ts +28 -0
- package/dist/{client.js → cli/client.js} +25 -44
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +40 -0
- package/dist/cli/context.d.ts +1 -13
- package/dist/cli/context.js +51 -77
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +153 -145
- package/dist/cli/correction-latency.d.ts +24 -0
- package/dist/{correction-latency.js → cli/correction-latency.js} +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +226 -222
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +70 -52
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +129 -253
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +56 -42
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +39 -21
- package/dist/cli/flag-values.d.ts +30 -0
- package/dist/cli/flag-values.js +120 -0
- package/dist/cli/flags.d.ts +304 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/github.d.ts +14 -0
- package/dist/cli/github.js +184 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +76 -75
- package/dist/cli/hook-runtime.d.ts +31 -0
- package/dist/cli/hook-runtime.js +139 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +153 -126
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +101 -0
- package/dist/cli/last-sleep.d.ts +3 -1
- package/dist/cli/last-sleep.js +12 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +41 -42
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +66 -0
- package/dist/cli/owner-validation.d.ts +18 -0
- package/dist/cli/owner-validation.js +33 -0
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +98 -306
- package/dist/cli/print.d.ts +15 -0
- package/dist/cli/print.js +82 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -51
- package/dist/cli/provenance-coverage.d.ts +14 -0
- package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +2 -6
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/cli/recall.d.ts +2 -6
- package/dist/cli/recall.js +128 -253
- package/dist/cli/refine-llm.d.ts +35 -0
- package/dist/cli/refine-llm.js +128 -0
- package/dist/cli/remember.d.ts +4 -6
- package/dist/cli/remember.js +193 -230
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +4 -17
- package/dist/{scheduler.js → cli/scheduler.js} +22 -22
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +46 -7
- package/dist/cli/session-hooks.d.ts +11 -19
- package/dist/cli/session-hooks.js +263 -258
- package/dist/cli/setup.d.ts +4 -3
- package/dist/cli/setup.js +55 -37
- package/dist/cli/shared.d.ts +14 -118
- package/dist/cli/shared.js +26 -400
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +46 -74
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +3 -8
- package/dist/cli/sleep.js +34 -91
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +86 -131
- package/dist/{stdin.d.ts → cli/stdin.d.ts} +4 -6
- package/dist/{stdin.js → cli/stdin.js} +8 -9
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +125 -122
- package/dist/cli/usage.js +13 -5
- package/dist/cli.d.ts +69 -167
- package/dist/cli.js +187 -296
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +6 -26
- package/dist/connectors/github/backfill.js +42 -114
- package/dist/connectors/github/deletion.d.ts +6 -21
- package/dist/connectors/github/deletion.js +17 -64
- package/dist/connectors/github/dlq.d.ts +12 -91
- package/dist/connectors/github/dlq.js +23 -140
- package/dist/connectors/github/ingest.d.ts +4 -37
- package/dist/connectors/github/ingest.js +24 -93
- package/dist/connectors/github/octokit-client.d.ts +5 -17
- package/dist/connectors/github/octokit-client.js +29 -25
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +4 -26
- package/dist/connectors/github/tenant-routing.js +13 -61
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +4 -16
- package/dist/connectors/github/types.js +17 -27
- package/dist/connectors/github/webhook.d.ts +5 -18
- package/dist/connectors/github/webhook.js +86 -105
- package/dist/connectors/slack/backfill.d.ts +5 -18
- package/dist/connectors/slack/backfill.js +9 -42
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +9 -68
- package/dist/connectors/slack/dlq.js +26 -136
- package/dist/connectors/slack/ingest.d.ts +4 -18
- package/dist/connectors/slack/ingest.js +26 -91
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -18
- package/dist/connectors/slack/tenant-routing.js +11 -31
- package/dist/connectors/slack/transform.d.ts +3 -19
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +4 -10
- package/dist/connectors/slack/types.js +5 -16
- package/dist/connectors/slack/web-client.js +34 -28
- package/dist/connectors/slack/webhook.d.ts +5 -21
- package/dist/connectors/slack/webhook.js +80 -108
- package/dist/connectors/slack/workspaces.d.ts +8 -41
- package/dist/connectors/slack/workspaces.js +8 -58
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +10 -18
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +6 -29
- package/dist/{dag.js → consolidate/dag.js} +49 -131
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +35 -41
- package/dist/consolidate/dedupe.d.ts +29 -0
- package/dist/consolidate/dedupe.js +103 -0
- package/dist/consolidate/flush-units.d.ts +5 -6
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +34 -0
- package/dist/consolidate/half-life-migration.js +89 -0
- package/dist/consolidate/llm-passes.js +12 -29
- package/dist/consolidate/memory-value-weights.d.ts +8 -0
- package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +2 -13
- package/dist/consolidate/memory-value.d.ts +45 -0
- package/dist/consolidate/memory-value.js +164 -0
- package/dist/consolidate/merge.js +65 -83
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +4 -3
- package/dist/consolidate/physics-pass.js +46 -48
- package/dist/consolidate/replay.d.ts +9 -0
- package/dist/consolidate/replay.js +84 -0
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +2 -9
- package/dist/consolidate/sleep.js +69 -151
- package/dist/consolidate/trace.d.ts +19 -0
- package/dist/{trace.js → consolidate/trace.js} +7 -24
- package/dist/consolidate/traces.js +40 -51
- package/dist/core/ablation.d.ts +15 -0
- package/dist/core/ablation.js +49 -0
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.d.ts → core/ambient.d.ts} +1 -8
- package/dist/{ambient.js → core/ambient.js} +13 -18
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/{capture-contract.js → core/capture-contract.js} +67 -1
- package/dist/{card.d.ts → core/card.d.ts} +4 -1
- package/dist/{card.js → core/card.js} +8 -0
- package/dist/core/compare.d.ts +32 -0
- package/dist/core/compare.js +70 -0
- package/dist/{config.d.ts → core/config.d.ts} +14 -28
- package/dist/{config.js → core/config.js} +101 -75
- package/dist/{handoff.d.ts → core/handoff.d.ts} +1 -7
- package/dist/core/handoff.js +81 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +2 -2
- package/dist/core/memory.d.ts +183 -0
- package/dist/core/memory.js +380 -0
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/{physics-config.d.ts → core/physics-config.d.ts} +1 -4
- package/dist/{physics-config.js → core/physics-config.js} +3 -8
- package/dist/{physics.d.ts → core/physics.d.ts} +16 -62
- package/dist/{physics.js → core/physics.js} +60 -122
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +17 -63
- package/dist/{project-identity.js → core/project-identity.js} +22 -55
- package/dist/{project-remote.js → core/project-remote.js} +17 -6
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/{salience.d.ts → core/salience.d.ts} +1 -7
- package/dist/{salience.js → core/salience.js} +36 -27
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +7 -7
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +11 -10
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +110 -104
- package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +2 -1
- package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +1 -0
- package/dist/{dashboard.js → dashboard/dashboard.js} +172 -55
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +19 -2
- package/dist/db/busy.js +88 -14
- package/dist/db/connect.d.ts +11 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +28 -33
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -36
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +31 -29
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +5 -8
- package/dist/db/migrations/v22.js +28 -38
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +25 -22
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +23 -32
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +23 -31
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +10 -21
- package/dist/db/migrations/v40.js +8 -14
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +11 -1
- package/dist/db/open.js +37 -4
- package/dist/db/physics-state.d.ts +23 -0
- package/dist/{physics-state.js → db/physics-state.js} +34 -52
- package/dist/db/raw-archive-mirror-cleanup.d.ts +5 -0
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +10 -20
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +6 -2
- package/dist/{vector-store.js → db/vector-store.js} +83 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +176 -152
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +5 -4
- package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +15 -53
- package/dist/{eval-stats.js → eval/eval-stats.js} +24 -51
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +3 -14
- package/dist/{eval-suite.js → eval/eval-suite.js} +99 -57
- package/dist/{eval.d.ts → eval/eval.d.ts} +7 -25
- package/dist/{eval.js → eval/eval.js} +35 -55
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -6
- package/dist/{judgment.js → eval/judgment.js} +23 -20
- package/dist/extensions/openclaw-plugin/index.js +2 -3
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +10 -32
- package/dist/{graph-extract.js → graph/extract.js} +40 -81
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +9 -22
- package/dist/{graph-recall.js → graph/recall.js} +65 -108
- package/dist/graph/stream.d.ts +38 -0
- package/dist/{graph-stream.js → graph/stream.js} +20 -41
- package/dist/graph/view.d.ts +50 -0
- package/dist/graph/view.js +265 -0
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +16 -17
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +16 -16
- package/dist/{cli → hooks}/hook-blocks.d.ts +6 -2
- package/dist/{cli → hooks}/hook-blocks.js +38 -125
- package/dist/hooks/json-hooks.d.ts +5 -37
- package/dist/hooks/json-hooks.js +49 -179
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +44 -103
- package/dist/hooks/shared.d.ts +8 -21
- package/dist/hooks/shared.js +30 -25
- package/dist/importers/core.d.ts +13 -42
- package/dist/importers/core.js +48 -64
- package/dist/importers/markdown-parse.d.ts +9 -32
- package/dist/importers/markdown-parse.js +10 -44
- package/dist/importers/markdown.js +5 -13
- package/dist/importers/sources.js +57 -81
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +95 -172
- package/dist/index.d.ts +26 -22
- package/dist/index.js +25 -21
- package/dist/learn/autolearn.d.ts +29 -0
- package/dist/{autolearn.js → learn/autolearn.js} +26 -51
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +123 -0
- package/dist/learn/forward-claim-detector.d.ts +12 -0
- package/dist/learn/forward-claim-detector.js +60 -0
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +10 -18
- package/dist/{invalidation.js → learn/invalidation.js} +92 -125
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +39 -64
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +10 -35
- package/dist/mcp/protocol.d.ts +14 -36
- package/dist/mcp/protocol.js +10 -19
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +70 -52
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +71 -85
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +6 -17
- package/dist/mcp/session-state.d.ts +2 -3
- package/dist/mcp/session-state.js +7 -13
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +112 -38
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +7 -5
- package/dist/objects/customer-notes.d.ts +44 -0
- package/dist/objects/customer-notes.js +71 -0
- package/dist/objects/decisions.d.ts +41 -0
- package/dist/objects/decisions.js +63 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/objects/incidents.d.ts +45 -0
- package/dist/objects/incidents.js +96 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/objects/policies.d.ts +60 -0
- package/dist/objects/policies.js +102 -0
- package/dist/objects/processes.d.ts +43 -0
- package/dist/objects/processes.js +92 -0
- package/dist/objects/project-briefs.d.ts +63 -0
- package/dist/objects/project-briefs.js +194 -0
- package/dist/objects/skills.d.ts +51 -0
- package/dist/objects/skills.js +110 -0
- package/dist/postinstall.js +10 -21
- package/dist/predictions/planning-fallacy.d.ts +14 -109
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +28 -76
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +18 -28
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +36 -52
- package/dist/rerankers/llm.d.ts +2 -13
- package/dist/rerankers/llm.js +42 -59
- package/dist/rerankers/outage-warning.d.ts +8 -0
- package/dist/rerankers/outage-warning.js +32 -0
- package/dist/rerankers/remote.d.ts +4 -0
- package/dist/rerankers/remote.js +25 -0
- package/dist/rerankers/types.d.ts +3 -15
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -3
- package/dist/search/boosts.js +36 -15
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +6 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +9 -8
- package/dist/search/path-context.d.ts +11 -0
- package/dist/{path-context.js → search/path-context.js} +8 -19
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +25 -22
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/rrf.d.ts +15 -0
- package/dist/search/rrf.js +36 -0
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +10 -3
- package/dist/search/vector.js +51 -15
- package/dist/server/auth.d.ts +10 -29
- package/dist/server/auth.js +57 -42
- package/dist/server/boot.d.ts +5 -0
- package/dist/server/boot.js +432 -0
- package/dist/server/client-ip.d.ts +8 -20
- package/dist/server/client-ip.js +23 -34
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +9 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +20 -5
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +44 -68
- package/dist/server/rate-limit.d.ts +21 -0
- package/dist/{rate-limit.js → server/rate-limit.js} +4 -13
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +14 -12
- package/dist/server/request.js +71 -28
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +202 -0
- package/dist/server/routes/admin.js +29 -30
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +35 -105
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +45 -115
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +44 -105
- package/dist/server/routes/memories.js +21 -43
- package/dist/server/routes/object-routes.d.ts +35 -0
- package/dist/server/routes/object-routes.js +72 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +42 -134
- package/dist/server/routes/predictions.js +35 -63
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +44 -134
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +41 -120
- package/dist/server/routes/recall.js +21 -44
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +40 -138
- package/dist/server/server-detect.d.ts +28 -0
- package/dist/server/server-detect.js +156 -0
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +73 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +35 -14
- package/dist/server/validation.d.ts +6 -5
- package/dist/server/validation.js +16 -34
- package/dist/server.d.ts +39 -61
- package/dist/server.js +26 -569
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +5 -6
- package/dist/{project-merge.js → sharing/project-merge.js} +34 -51
- package/dist/sharing/scope.d.ts +7 -0
- package/dist/{scope.js → sharing/scope.js} +5 -12
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +11 -16
- package/dist/store/audit-event.d.ts +15 -17
- package/dist/store/audit-event.js +9 -16
- package/dist/{audit.d.ts → store/audit.d.ts} +29 -8
- package/dist/{audit.js → store/audit.js} +95 -18
- package/dist/{auth.d.ts → store/auth.d.ts} +19 -36
- package/dist/{auth.js → store/auth.js} +108 -99
- package/dist/store/candidates.d.ts +41 -13
- package/dist/store/candidates.js +141 -60
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +5 -4
- package/dist/{card-detail.js → store/card-detail.js} +3 -2
- package/dist/{store-cards.d.ts → store/cards.d.ts} +26 -16
- package/dist/{store-cards.js → store/cards.js} +133 -248
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +26 -26
- package/dist/store/conflicts.js +194 -222
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +88 -0
- package/dist/store/delete-and-batch.d.ts +27 -51
- package/dist/store/delete-and-batch.js +100 -92
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +16 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +60 -38
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +44 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/store/dormant.d.ts +105 -0
- package/dist/store/dormant.js +241 -0
- package/dist/store/embeddings/index.d.ts +36 -0
- package/dist/{embeddings.js → store/embeddings/index.js} +104 -224
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +69 -75
- package/dist/store/embeddings/provider.d.ts +40 -0
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +78 -91
- package/dist/store/entry-reads.d.ts +66 -63
- package/dist/store/entry-reads.js +159 -121
- package/dist/store/entry-row.d.ts +14 -37
- package/dist/store/entry-row.js +37 -45
- package/dist/store/entry-writes.d.ts +40 -17
- package/dist/store/entry-writes.js +105 -41
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/store/goals.d.ts +96 -0
- package/dist/store/goals.js +260 -0
- package/dist/store/graph-queue.d.ts +13 -0
- package/dist/store/graph-queue.js +70 -0
- package/dist/store/graph-reads.d.ts +41 -0
- package/dist/{graph/read.js → store/graph-reads.js} +72 -162
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +71 -14
- package/dist/{graph/rows.js → store/graph-rows.js} +20 -12
- package/dist/store/graph-view-rows.d.ts +13 -0
- package/dist/store/graph-view-rows.js +68 -0
- package/dist/store/graph-writes.d.ts +33 -0
- package/dist/store/graph-writes.js +232 -0
- package/dist/store/half-life.d.ts +35 -0
- package/dist/store/half-life.js +75 -0
- package/dist/store/handoffs.d.ts +6 -12
- package/dist/store/handoffs.js +54 -63
- package/dist/store/index-and-stats.d.ts +14 -20
- package/dist/store/index-and-stats.js +74 -119
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +3 -7
- package/dist/store/markdown.js +25 -23
- package/dist/store/mirrors.d.ts +7 -13
- package/dist/store/mirrors.js +52 -47
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +30 -36
- package/dist/store/planning-fallacy-evidence.d.ts +14 -0
- package/dist/store/planning-fallacy-evidence.js +52 -0
- package/dist/store/port.d.ts +649 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +25 -52
- package/dist/{predictions/store.js → store/predictions.js} +88 -184
- package/dist/{quality-repair.js → store/quality-repair.js} +27 -57
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/store/raw-archive.d.ts +14 -0
- package/dist/{raw-archive.js → store/raw-archive.js} +20 -31
- package/dist/store/recall-scope.d.ts +78 -0
- package/dist/{recall-scope.js → store/recall-scope.js} +23 -84
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -81
- package/dist/{recall-trace.js → store/recall-trace.js} +41 -122
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +150 -0
- package/dist/store/rejection.d.ts +54 -0
- package/dist/{rejection.js → store/rejection.js} +16 -67
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +11 -22
- package/dist/store/rows.js +52 -43
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +22 -42
- package/dist/store/search-rows.js +55 -78
- package/dist/store/sessions.d.ts +23 -49
- package/dist/store/sessions.js +96 -118
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +61 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +29 -0
- package/dist/store/sqlite/executor.js +287 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +39 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +221 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +316 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +23 -0
- package/dist/store/sqlite/store.js +294 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +135 -0
- package/dist/store/sqlite/worker-ops.js +93 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +79 -0
- package/dist/store/summaries.d.ts +11 -72
- package/dist/store/summaries.js +47 -186
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/{summary-dirty.js → store/summary-dirty.js} +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +11 -0
- package/dist/store/tenant.js +28 -0
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +14 -51
- package/dist/{token-ledger.js → store/token-ledger.js} +51 -129
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +18 -0
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +11 -26
- package/dist/store/working-memory.js +118 -0
- package/dist/{yaml.d.ts → store/yaml.d.ts} +1 -5
- package/dist/{yaml.js → store/yaml.js} +2 -6
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +19 -37
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +65 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +58 -0
- package/dist/util/atomic-write.d.ts +4 -0
- package/dist/util/atomic-write.js +138 -0
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +12 -0
- package/dist/util/crash-handlers.js +72 -0
- package/dist/{env.d.ts → util/env.d.ts} +27 -7
- package/dist/{env.js → util/env.js} +33 -8
- package/dist/{home-path.d.ts → util/home-path.d.ts} +2 -1
- package/dist/util/home-path.js +69 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +8 -2
- package/dist/util/http-retry.js +103 -0
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +7 -3
- package/dist/{log.js → util/log.js} +36 -11
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +28 -0
- package/dist/util/request-scope.js +48 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +5 -30
- package/dist/{secret-detect.js → util/secret-detect.js} +17 -42
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +15 -0
- package/dist/util/token-text.js +20 -0
- package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +2 -0
- package/dist/util/transcript-tail.js +49 -0
- package/dist/util/version.d.ts +11 -0
- package/dist/util/version.js +26 -0
- package/extensions/openclaw-plugin/index.ts +2 -6
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/ablation.d.ts +0 -102
- package/dist/ablation.js +0 -136
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/audit-prune.d.ts +0 -62
- package/dist/audit-prune.js +0 -107
- package/dist/autolearn.d.ts +0 -56
- package/dist/client.d.ts +0 -48
- package/dist/compare.d.ts +0 -86
- package/dist/compare.js +0 -117
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/connectors/github/cli-impl.js +0 -227
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/correction-latency.d.ts +0 -36
- package/dist/customer-notes.d.ts +0 -96
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.d.ts +0 -94
- package/dist/decisions.js +0 -326
- package/dist/dedupe.d.ts +0 -75
- package/dist/dedupe.js +0 -169
- package/dist/dormant.d.ts +0 -93
- package/dist/dormant.js +0 -137
- package/dist/embedding-provider.d.ts +0 -77
- package/dist/embeddings.d.ts +0 -101
- package/dist/extract.js +0 -133
- package/dist/forward-claim-detector.d.ts +0 -36
- package/dist/forward-claim-detector.js +0 -112
- package/dist/goals.d.ts +0 -173
- package/dist/goals.js +0 -448
- package/dist/graph/read.d.ts +0 -73
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/graph-stream.d.ts +0 -70
- package/dist/graph-view.d.ts +0 -73
- package/dist/graph-view.js +0 -333
- package/dist/half-life-migration.d.ts +0 -63
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/http-retry.js +0 -51
- package/dist/incidents.d.ts +0 -103
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/memory-value-weights.d.ts +0 -19
- package/dist/memory-value.d.ts +0 -113
- package/dist/memory-value.js +0 -250
- package/dist/memory.d.ts +0 -294
- package/dist/memory.js +0 -522
- package/dist/owner-validation.d.ts +0 -42
- package/dist/owner-validation.js +0 -56
- package/dist/path-context.d.ts +0 -24
- package/dist/physics-state.d.ts +0 -39
- package/dist/policies.d.ts +0 -151
- package/dist/policies.js +0 -434
- package/dist/processes.d.ts +0 -108
- package/dist/processes.js +0 -371
- package/dist/project-briefs.d.ts +0 -128
- package/dist/project-briefs.js +0 -523
- package/dist/provenance-coverage.d.ts +0 -18
- package/dist/rate-limit.d.ts +0 -34
- package/dist/raw-archive-mirror-cleanup.d.ts +0 -20
- package/dist/raw-archive.d.ts +0 -24
- package/dist/recall-history.d.ts +0 -131
- package/dist/recall-history.js +0 -227
- package/dist/recall-scope.d.ts +0 -138
- package/dist/refine-llm.d.ts +0 -61
- package/dist/refine-llm.js +0 -167
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/rejection.d.ts +0 -100
- package/dist/replay.d.ts +0 -41
- package/dist/replay.js +0 -122
- package/dist/rrf.d.ts +0 -43
- package/dist/rrf.js +0 -61
- package/dist/scope.d.ts +0 -14
- package/dist/server-detect.d.ts +0 -72
- package/dist/server-detect.js +0 -222
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/shared.d.ts +0 -186
- package/dist/shared.js +0 -540
- package/dist/skills.d.ts +0 -101
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store/vector-writes.d.ts +0 -6
- package/dist/store/vector-writes.js +0 -59
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- package/dist/tenant.d.ts +0 -25
- package/dist/tenant.js +0 -43
- package/dist/trace.d.ts +0 -34
- package/dist/transcript-tail.js +0 -48
- package/dist/version.d.ts +0 -26
- package/dist/version.js +0 -41
- package/dist/working-memory.js +0 -154
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{quality-repair.d.ts → store/quality-repair.d.ts} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/mcp/request.js
CHANGED
|
@@ -1,28 +1,24 @@
|
|
|
1
1
|
// Transport-agnostic request handling: tool dispatch table, tool execution and the JSON-RPC method switch.
|
|
2
|
-
import { log } from '../log.js';
|
|
3
|
-
import { STORE_NOT_PORTED_MESSAGE } from '../http-util.js';
|
|
4
|
-
import { getGlobalRoot, initGlobal } from '../
|
|
5
|
-
import { loadConfig } from '../config.js';
|
|
6
|
-
import { resolveTenantId } from '../tenant.js';
|
|
7
|
-
import { rethrowIfSqliteBlocked, runWithRequestStores } from '../db.js';
|
|
8
|
-
import { hasGroup, storeFor } from '../store
|
|
9
|
-
import { estimateTokens } from '../token-
|
|
10
|
-
import { PACKAGE_VERSION } from '../version.js';
|
|
2
|
+
import { errorMessage, log } from '../util/log.js';
|
|
3
|
+
import { STORE_NOT_PORTED_MESSAGE } from '../util/http-util.js';
|
|
4
|
+
import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
|
|
5
|
+
import { loadConfig } from '../core/config.js';
|
|
6
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
7
|
+
import { rethrowIfSqliteBlocked, runWithRequestStores } from '../db/index.js';
|
|
8
|
+
import { hasGroup, storeFor } from '../store/index.js';
|
|
9
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
10
|
+
import { PACKAGE_VERSION } from '../util/version.js';
|
|
11
11
|
import { validateToolArgs } from './tool-args.js';
|
|
12
12
|
import { RecallRequestError } from '../api/recall-request.js';
|
|
13
|
-
import { findHippoRoot
|
|
13
|
+
import { findHippoRoot } from './protocol.js';
|
|
14
14
|
import { TOOLS, TOOLS_BY_NAME, ARGS_CHECKED_BY_API } from './tools.js';
|
|
15
15
|
import { runRecallTool, runAssembleTool, runDrillTool, runContextTool } from './recall-tools.js';
|
|
16
16
|
import { runRememberTool, runOutcomeTool, runLearnTool } from './memory-tools.js';
|
|
17
17
|
import { runPredictBaserateTool, runStatusTool, runConflictsTool, runResolveTool, runShareTool, runPeersTool } from './admin-tools.js';
|
|
18
18
|
import { sharedStoreRefusal } from './shared-gate.js';
|
|
19
|
-
import { isJsonString } from '../json.js';
|
|
20
|
-
/**
|
|
21
|
-
*
|
|
22
|
-
* create the global store instead of failing every tool call, and say so on
|
|
23
|
-
* stderr (stdout carries the protocol). `hippo init` in a project later adds
|
|
24
|
-
* a project store, which then takes precedence.
|
|
25
|
-
*/
|
|
19
|
+
import { isJsonString, isJsonObject } from '../util/json.js';
|
|
20
|
+
/** Zero-install first run (`npx -y hippo-memory mcp`, no store anywhere): create the global store instead of failing every tool call, and say so on stderr
|
|
21
|
+
* (stdout carries the protocol). A later `hippo init` project store takes precedence. */
|
|
26
22
|
function createGlobalStoreOnFirstRun() {
|
|
27
23
|
initGlobal();
|
|
28
24
|
const root = getGlobalRoot();
|
|
@@ -34,10 +30,7 @@ const MCP_TOKEN_SURFACES = new Map([
|
|
|
34
30
|
['hippo_recall', 'mcp_recall'],
|
|
35
31
|
['hippo_context', 'mcp_context'],
|
|
36
32
|
]);
|
|
37
|
-
/**
|
|
38
|
-
* Record the memory text a recall or context tool returned. Best-effort: a
|
|
39
|
-
* ledger failure never fails the tool call. Other tools are not recorded.
|
|
40
|
-
*/
|
|
33
|
+
/** Records the memory text a recall or context tool returned; best-effort (a ledger failure never fails the call), other tools are not recorded. */
|
|
41
34
|
export async function recordMcpTokens(toolName, output, ctx) {
|
|
42
35
|
const surface = MCP_TOKEN_SURFACES.get(toolName);
|
|
43
36
|
if (!surface || !output)
|
|
@@ -56,14 +49,14 @@ export async function recordMcpTokens(toolName, output, ctx) {
|
|
|
56
49
|
}
|
|
57
50
|
catch (err) {
|
|
58
51
|
rethrowIfSqliteBlocked(err);
|
|
59
|
-
log.warnThenDebug('mcp-token-ledger', `token ledger write failed; the tool reply is unaffected: ${
|
|
52
|
+
log.warnThenDebug('mcp-token-ledger', `token ledger write failed; the tool reply is unaffected: ${errorMessage(err)}`);
|
|
60
53
|
}
|
|
61
54
|
}
|
|
62
55
|
const TOOL_HANDLERS = new Map([
|
|
63
56
|
['hippo_recall', { handler: runRecallTool, storeReady: 'base' }],
|
|
64
|
-
['hippo_assemble', { handler: runAssembleTool }],
|
|
65
|
-
['hippo_drill', { handler: runDrillTool }],
|
|
66
|
-
['hippo_predict_baserate', { handler: runPredictBaserateTool }],
|
|
57
|
+
['hippo_assemble', { handler: runAssembleTool, storeReady: 'dagReads' }],
|
|
58
|
+
['hippo_drill', { handler: runDrillTool, storeReady: 'dagReads' }],
|
|
59
|
+
['hippo_predict_baserate', { handler: runPredictBaserateTool, storeReady: 'predictions' }],
|
|
67
60
|
['hippo_remember', { handler: runRememberTool, storeReady: 'entryWrites' }],
|
|
68
61
|
['hippo_outcome', { handler: runOutcomeTool, storeReady: 'entryWrites' }],
|
|
69
62
|
['hippo_context', { handler: runContextTool, storeReady: 'contextReads' }],
|
|
@@ -84,16 +77,12 @@ function runsOn(store, toolName) {
|
|
|
84
77
|
return group !== undefined && hasGroup(store, group);
|
|
85
78
|
}
|
|
86
79
|
async function executeTool(name, args, ctx) {
|
|
87
|
-
//
|
|
88
|
-
//
|
|
89
|
-
// from the Bearer token (or the loopback fallback). The stdio path
|
|
90
|
-
// continues to walk from cwd / fall back to the global root, and to
|
|
91
|
-
// resolve tenant from HIPPO_TENANT.
|
|
80
|
+
// With a transport context (HTTP), trust it: hippoRoot comes from the server's bound opts and tenantId from the Bearer (or loopback fallback).
|
|
81
|
+
// Stdio walks from cwd / the global root and resolves tenant from HIPPO_TENANT.
|
|
92
82
|
const hippoRoot = ctx?.hippoRoot ?? findHippoRoot() ?? createGlobalStoreOnFirstRun();
|
|
93
83
|
const config = loadConfig(hippoRoot);
|
|
94
|
-
// Every store read
|
|
95
|
-
//
|
|
96
|
-
// ctx.tenantId so an HTTP Bearer for tenant B doesn't drop to HIPPO_TENANT.
|
|
84
|
+
// Every store read here is tenant-isolated, resolved once per tool call; prefer the transport's ctx.tenantId so an HTTP Bearer for tenant B
|
|
85
|
+
// does not drop to HIPPO_TENANT.
|
|
97
86
|
const tenantId = ctx?.tenantId ?? resolveTenantId({});
|
|
98
87
|
const handler = TOOL_HANDLERS.get(name)?.handler;
|
|
99
88
|
// handleMcpRequest rejects names missing from TOOLS, so reaching here means TOOLS and this table drifted apart.
|
|
@@ -110,13 +99,53 @@ function invalidArgs(id, toolName, problems) {
|
|
|
110
99
|
result: { content: [{ type: 'text', text: `Invalid arguments for ${toolName}: ${problems.join('; ')}` }], isError: true },
|
|
111
100
|
};
|
|
112
101
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
102
|
+
async function callTool(id, params, ctx) {
|
|
103
|
+
const nameValue = params?.name;
|
|
104
|
+
const toolName = isJsonString(nameValue) ? nameValue : '';
|
|
105
|
+
const tool = TOOLS_BY_NAME.get(toolName);
|
|
106
|
+
if (!tool) {
|
|
107
|
+
return { jsonrpc: '2.0', id, error: { code: -32602, message: `Unknown tool: ${toolName.slice(0, 128)}` } };
|
|
108
|
+
}
|
|
109
|
+
// The same refusal a ported tool gives when it reaches hippo.db, so a client handles one shape.
|
|
110
|
+
const other = otherStore(ctx);
|
|
111
|
+
if (other && !runsOn(other, toolName)) {
|
|
112
|
+
return { jsonrpc: '2.0', id, error: { code: -32603, message: STORE_NOT_PORTED_MESSAGE } };
|
|
113
|
+
}
|
|
114
|
+
const refusal = sharedStoreRefusal(toolName, ctx);
|
|
115
|
+
if (refusal !== undefined)
|
|
116
|
+
return { jsonrpc: '2.0', id, result: { content: [{ type: 'text', text: refusal }], isError: true } };
|
|
117
|
+
const argumentsValue = params?.arguments;
|
|
118
|
+
if (argumentsValue !== undefined && argumentsValue !== null && !isJsonObject(argumentsValue)) {
|
|
119
|
+
return { jsonrpc: '2.0', id, error: { code: -32602, message: `${toolName}: arguments must be an object` } };
|
|
120
|
+
}
|
|
121
|
+
const toolArgs = isJsonObject(argumentsValue) ? argumentsValue : {};
|
|
122
|
+
const problems = validateToolArgs(tool.inputSchema, toolArgs, ARGS_CHECKED_BY_API.get(toolName));
|
|
123
|
+
if (problems.length > 0)
|
|
124
|
+
return invalidArgs(id, toolName, problems);
|
|
125
|
+
let output;
|
|
126
|
+
try {
|
|
127
|
+
// One handle per store for the tool and its ledger row; stdio interleaves calls, so each gets its own scope.
|
|
128
|
+
output = await runWithRequestStores(async () => {
|
|
129
|
+
const text = await executeTool(toolName, toolArgs, ctx);
|
|
130
|
+
await recordMcpTokens(toolName, text, ctx);
|
|
131
|
+
return text;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
if (!(err instanceof RecallRequestError))
|
|
136
|
+
throw err;
|
|
137
|
+
return invalidArgs(id, toolName, [err.message]);
|
|
138
|
+
}
|
|
139
|
+
return {
|
|
140
|
+
jsonrpc: '2.0',
|
|
141
|
+
id,
|
|
142
|
+
result: {
|
|
143
|
+
content: [{ type: 'text', text: output || 'Done.' }],
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/** Transport-agnostic MCP dispatcher: the stdio loop and the HTTP/SSE transport route every JSON-RPC message through it. Returns null for notifications.
|
|
148
|
+
* Errors thrown by `executeTool` are the caller's problem: wrap with try/catch on the transport side. */
|
|
120
149
|
export async function handleMcpRequest(req, ctx) {
|
|
121
150
|
const { id, method, params } = req;
|
|
122
151
|
switch (method) {
|
|
@@ -136,51 +165,8 @@ export async function handleMcpRequest(req, ctx) {
|
|
|
136
165
|
const other = otherStore(ctx);
|
|
137
166
|
return { jsonrpc: '2.0', id, result: { tools: other ? TOOLS.filter((t) => runsOn(other, t.name)) : TOOLS } };
|
|
138
167
|
}
|
|
139
|
-
case 'tools/call':
|
|
140
|
-
|
|
141
|
-
const toolName = isJsonString(nameValue) ? nameValue : '';
|
|
142
|
-
const tool = TOOLS_BY_NAME.get(toolName);
|
|
143
|
-
if (!tool) {
|
|
144
|
-
return { jsonrpc: '2.0', id, error: { code: -32602, message: `Unknown tool: ${toolName.slice(0, 128)}` } };
|
|
145
|
-
}
|
|
146
|
-
// The same refusal a ported tool gives when it reaches hippo.db, so a client handles one shape.
|
|
147
|
-
const other = otherStore(ctx);
|
|
148
|
-
if (other && !runsOn(other, toolName)) {
|
|
149
|
-
return { jsonrpc: '2.0', id, error: { code: -32603, message: STORE_NOT_PORTED_MESSAGE } };
|
|
150
|
-
}
|
|
151
|
-
const refusal = sharedStoreRefusal(toolName, ctx);
|
|
152
|
-
if (refusal !== undefined)
|
|
153
|
-
return { jsonrpc: '2.0', id, result: { content: [{ type: 'text', text: refusal }], isError: true } };
|
|
154
|
-
const argumentsValue = params?.arguments;
|
|
155
|
-
if (argumentsValue !== undefined && argumentsValue !== null && !isJsonObjectRecord(argumentsValue)) {
|
|
156
|
-
return { jsonrpc: '2.0', id, error: { code: -32602, message: `${toolName}: arguments must be an object` } };
|
|
157
|
-
}
|
|
158
|
-
const toolArgs = isJsonObjectRecord(argumentsValue) ? argumentsValue : {};
|
|
159
|
-
const problems = validateToolArgs(tool.inputSchema, toolArgs, ARGS_CHECKED_BY_API.get(toolName));
|
|
160
|
-
if (problems.length > 0)
|
|
161
|
-
return invalidArgs(id, toolName, problems);
|
|
162
|
-
let output;
|
|
163
|
-
try {
|
|
164
|
-
// One handle per store for the tool and its ledger row; stdio interleaves calls, so each gets its own scope.
|
|
165
|
-
output = await runWithRequestStores(async () => {
|
|
166
|
-
const text = await executeTool(toolName, toolArgs, ctx);
|
|
167
|
-
await recordMcpTokens(toolName, text, ctx);
|
|
168
|
-
return text;
|
|
169
|
-
});
|
|
170
|
-
}
|
|
171
|
-
catch (err) {
|
|
172
|
-
if (!(err instanceof RecallRequestError))
|
|
173
|
-
throw err;
|
|
174
|
-
return invalidArgs(id, toolName, [err.message]);
|
|
175
|
-
}
|
|
176
|
-
return {
|
|
177
|
-
jsonrpc: '2.0',
|
|
178
|
-
id,
|
|
179
|
-
result: {
|
|
180
|
-
content: [{ type: 'text', text: output || 'Done.' }],
|
|
181
|
-
},
|
|
182
|
-
};
|
|
183
|
-
}
|
|
168
|
+
case 'tools/call':
|
|
169
|
+
return callTool(id, params, ctx);
|
|
184
170
|
default:
|
|
185
171
|
// Notifications (no id) must not receive a response
|
|
186
172
|
if (method.startsWith('notifications/'))
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
* Exposes hippo memory as MCP tools over stdio transport.
|
|
6
|
-
* Uses the programmatic API directly (no child process spawning).
|
|
7
|
-
*
|
|
8
|
-
* Usage: hippo mcp (or npx hippo-memory mcp)
|
|
9
|
-
*/
|
|
10
|
-
export { __resetSessionRecallHistoryMcp } from './session-state.js';
|
|
2
|
+
/** Hippo Memory MCP server: exposes hippo memory as MCP tools over stdio via the programmatic API (no child process). Usage: hippo mcp (or npx hippo-memory
|
|
3
|
+
* mcp). */
|
|
4
|
+
export { _resetSessionRecallHistoryMcpForTests } from './session-state.js';
|
|
11
5
|
export { findHippoRoot, mcpErrorResponse, type McpRequest, type McpResponse, type McpContext } from './protocol.js';
|
|
12
6
|
export { handleMcpRequest } from './request.js';
|
|
13
7
|
export { startStdioLoop } from './stdio.js';
|
package/dist/mcp/server.js
CHANGED
|
@@ -1,25 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
|
|
5
|
-
* Exposes hippo memory as MCP tools over stdio transport.
|
|
6
|
-
* Uses the programmatic API directly (no child process spawning).
|
|
7
|
-
*
|
|
8
|
-
* Usage: hippo mcp (or npx hippo-memory mcp)
|
|
9
|
-
*/
|
|
10
|
-
export { __resetSessionRecallHistoryMcp } from './session-state.js';
|
|
2
|
+
/** Hippo Memory MCP server: exposes hippo memory as MCP tools over stdio via the programmatic API (no child process). Usage: hippo mcp (or npx hippo-memory
|
|
3
|
+
* mcp). */
|
|
4
|
+
export { _resetSessionRecallHistoryMcpForTests } from './session-state.js';
|
|
11
5
|
export { findHippoRoot, mcpErrorResponse } from './protocol.js';
|
|
12
6
|
export { handleMcpRequest } from './request.js';
|
|
13
7
|
export { startStdioLoop } from './stdio.js';
|
|
14
|
-
import { envMcpStdio } from '../env.js';
|
|
8
|
+
import { envMcpStdio } from '../util/env.js';
|
|
15
9
|
import { startStdioLoop } from './stdio.js';
|
|
16
|
-
// Auto-start
|
|
17
|
-
//
|
|
18
|
-
// module (e.g. src/server.ts wiring up the HTTP/SSE transport) will NOT
|
|
19
|
-
// trigger the stdio loop. The cli imports this file specifically to start
|
|
20
|
-
// stdio; that import is also `import.meta.url === main`-equivalent because
|
|
21
|
-
// it's executed as the program, so we keep a fallback: if HIPPO_MCP_STDIO=1
|
|
22
|
-
// or argv1 ends in /mcp/server.js we start.
|
|
10
|
+
// Auto-start only as the main module (node dist/mcp/server.js or the cli's import('./mcp/server.js')); importing it elsewhere (the HTTP/SSE wiring) must not
|
|
11
|
+
// start stdio. Fallback: HIPPO_MCP_STDIO=1 or argv1 ending in /mcp/server.js also starts it.
|
|
23
12
|
const isMainModule = (() => {
|
|
24
13
|
try {
|
|
25
14
|
const argv1 = process.argv[1] ?? '';
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
/** Test-only: reset the MCP recall rings. Call from beforeEach. */
|
|
2
|
-
export declare function
|
|
3
|
-
export declare const MAX_RECALL_CLIENTS = 4096;
|
|
2
|
+
export declare function _resetSessionRecallHistoryMcpForTests(): void;
|
|
4
3
|
export declare const lastRecalledIds: Map<string, string[]>;
|
|
5
|
-
export
|
|
4
|
+
export { autoSleepInFlight } from '../api/auto-sleep.js';
|
|
6
5
|
export declare function resolveClientKey(ctx: {
|
|
7
6
|
clientKey?: string;
|
|
8
7
|
tenantId: string;
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
// Per-process state the MCP tools share across calls: recall rings, last recalled ids, auto-sleep runs.
|
|
2
|
+
import { DEFAULT_TENANT_ID } from '../util/env.js';
|
|
2
3
|
import { resetSessionRings } from '../api/recall-record.js';
|
|
3
4
|
/** Test-only: reset the MCP recall rings. Call from beforeEach. */
|
|
4
|
-
export function
|
|
5
|
+
export function _resetSessionRecallHistoryMcpForTests() {
|
|
5
6
|
resetSessionRings('mcp');
|
|
6
7
|
}
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
|
|
10
|
-
// poison each other's outcome feedback. The key is `ctx.clientKey` when the
|
|
11
|
-
// transport supplies one (HTTP-MCP via src/server.ts builds
|
|
12
|
-
// hash(bearer+remoteAddr)); stdio and any caller without a clientKey falls
|
|
13
|
-
// back to `'stdio-${pid}'` (one process = one client) or
|
|
14
|
-
// `${tenantId}:default` if a McpContext is constructed in tests without a
|
|
15
|
-
// pid-bound transport.
|
|
16
|
-
export const MAX_RECALL_CLIENTS = 4096;
|
|
8
|
+
// Last recalled IDs per client for outcome feedback, so two HTTP-MCP clients on one tenant cannot poison each other: key is `ctx.clientKey` (hash of
|
|
9
|
+
// bearer+remoteAddr over HTTP), else 'stdio-${pid}', else `${tenantId}:default` for a McpContext built in tests.
|
|
10
|
+
const MAX_RECALL_CLIENTS = 4096;
|
|
17
11
|
// The caller names the project half of each key, so a set past the cap drops the client that recalled longest ago.
|
|
18
12
|
class RecentRecalls extends Map {
|
|
19
13
|
set(key, ids) {
|
|
@@ -26,9 +20,9 @@ class RecentRecalls extends Map {
|
|
|
26
20
|
}
|
|
27
21
|
}
|
|
28
22
|
export const lastRecalledIds = new RecentRecalls();
|
|
29
|
-
export
|
|
23
|
+
export { autoSleepInFlight } from '../api/auto-sleep.js';
|
|
30
24
|
export function resolveClientKey(ctx) {
|
|
31
|
-
const base = ctx?.clientKey ? ctx.clientKey : `stdio-${process.pid}:${ctx?.tenantId ||
|
|
25
|
+
const base = ctx?.clientKey ? ctx.clientKey : `stdio-${process.pid}:${ctx?.tenantId || DEFAULT_TENANT_ID}`;
|
|
32
26
|
return ctx?.project ? `${base}:${ctx.project.name}` : base;
|
|
33
27
|
}
|
|
34
28
|
//# sourceMappingURL=session-state.js.map
|
package/dist/mcp/shared-gate.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Which MCP tools run on a shared store, and which need the caller's project first.
|
|
2
|
-
import { isSharedStore } from '../config.js';
|
|
2
|
+
import { isSharedStore } from '../core/config.js';
|
|
3
3
|
// A shared store holds many repos' rows, so a memory tool needs the caller's project and four tools never run.
|
|
4
4
|
const OFF_ON_SHARED = new Map([
|
|
5
5
|
['hippo_learn', "reads the server's git history"],
|
package/dist/mcp/stdio.d.ts
CHANGED
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* (cli.ts `hippo mcp`, or running this file directly) should call this.
|
|
4
|
-
* src/server.ts imports `handleMcpRequest` without invoking this, so the
|
|
5
|
-
* HTTP daemon does not steal stdin or exit when its parent closes a pipe.
|
|
6
|
-
*/
|
|
1
|
+
/** Wires stdin/stdout to the dispatcher; idempotent. Only the entrypoint (cli.ts `hippo mcp`, or this file run directly) should call it, so the HTTP daemon
|
|
2
|
+
* (which imports `handleMcpRequest`) does not steal stdin or exit when its parent closes a pipe. */
|
|
7
3
|
export declare function startStdioLoop(): void;
|
|
8
4
|
//# sourceMappingURL=stdio.d.ts.map
|
package/dist/mcp/stdio.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
// Stdio transport: newline-delimited JSON-RPC frames in on stdin, replies out on stdout.
|
|
2
|
-
import {
|
|
2
|
+
import { exitAfterFlush, installCrashHandlers } from '../util/crash-handlers.js';
|
|
3
|
+
import { errorFields, errorMessage, log } from '../util/log.js';
|
|
4
|
+
import { requestDeadlineMs } from '../server/deadline.js';
|
|
3
5
|
import { parseFrame } from './framing.js';
|
|
4
|
-
import { mcpErrorResponse
|
|
6
|
+
import { mcpErrorResponse } from './protocol.js';
|
|
5
7
|
import { handleMcpRequest } from './request.js';
|
|
6
|
-
import { isJsonString } from '../json.js';
|
|
8
|
+
import { isJsonNumber, isJsonString, isJsonObject } from '../util/json.js';
|
|
9
|
+
import { randomUUID } from 'node:crypto';
|
|
10
|
+
import { currentRequestId, runWithRequestId } from '../util/request-scope.js';
|
|
7
11
|
// MCP stdio transport spec: messages are newline-delimited JSON-RPC, no embedded newlines.
|
|
8
12
|
// https://modelcontextprotocol.io/specification/.../basic/transports#stdio
|
|
9
13
|
function send(msg) {
|
|
@@ -11,9 +15,85 @@ function send(msg) {
|
|
|
11
15
|
}
|
|
12
16
|
// ── Stdio transport ──
|
|
13
17
|
let buffer = Buffer.alloc(0);
|
|
18
|
+
// The part of a refused frame still on its way, dropped as it arrives so it is never buffered or read as a new frame.
|
|
19
|
+
let refused = 0;
|
|
20
|
+
function withoutRefused(chunk) {
|
|
21
|
+
if (refused === 'line') {
|
|
22
|
+
const newline = chunk.indexOf(0x0a);
|
|
23
|
+
if (newline === -1)
|
|
24
|
+
return chunk.subarray(chunk.length);
|
|
25
|
+
refused = 0;
|
|
26
|
+
return chunk.subarray(newline + 1);
|
|
27
|
+
}
|
|
28
|
+
const dropped = Math.min(refused, chunk.length);
|
|
29
|
+
refused -= dropped;
|
|
30
|
+
return chunk.subarray(dropped);
|
|
31
|
+
}
|
|
14
32
|
// Only method is checked: handleMcpRequest narrows params where it reads them, as the HTTP transport does.
|
|
15
33
|
function isRoutableRequest(v) {
|
|
16
|
-
return
|
|
34
|
+
return isJsonObject(v) && isJsonString(v.method);
|
|
35
|
+
}
|
|
36
|
+
/** A frame that parsed but names no method: with an id it is a request owed an answer; without one it is a notification, which JSON-RPC forbids answering. */
|
|
37
|
+
function answerUnroutable(frame) {
|
|
38
|
+
const id = isJsonObject(frame) ? frame.id : undefined;
|
|
39
|
+
if (isJsonString(id) || isJsonNumber(id)) {
|
|
40
|
+
send({ jsonrpc: '2.0', id, error: { code: -32600, message: 'Invalid Request: method must be a string' } });
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
log.warn('mcp: dropped a frame with no method and no id; it cannot be routed or answered');
|
|
44
|
+
}
|
|
45
|
+
/** How long stdin's end waits for calls still running, so a client that closes right after its last request still gets the reply. */
|
|
46
|
+
const STDIN_END_DRAIN_MS = 5000;
|
|
47
|
+
// Calls dispatched and not yet answered, each with the method the drain names if it is still running at the bound.
|
|
48
|
+
const inFlight = new Map();
|
|
49
|
+
function track(method, call) {
|
|
50
|
+
inFlight.set(call, method);
|
|
51
|
+
void call.finally(() => inFlight.delete(call));
|
|
52
|
+
}
|
|
53
|
+
async function exitWhenDrained() {
|
|
54
|
+
if (inFlight.size > 0) {
|
|
55
|
+
let bound;
|
|
56
|
+
const timedOut = new Promise((resolve) => { bound = setTimeout(resolve, STDIN_END_DRAIN_MS); });
|
|
57
|
+
await Promise.race([Promise.allSettled(inFlight.keys()), timedOut]);
|
|
58
|
+
clearTimeout(bound);
|
|
59
|
+
}
|
|
60
|
+
for (const method of inFlight.values()) {
|
|
61
|
+
log.warn(`mcp: ${method} was still running ${STDIN_END_DRAIN_MS} ms after stdin closed; exiting without its reply`, { method });
|
|
62
|
+
}
|
|
63
|
+
exitAfterFlush(0);
|
|
64
|
+
}
|
|
65
|
+
// The code the MCP SDKs give a request that timed out.
|
|
66
|
+
const REQUEST_TIMEOUT_CODE = -32001;
|
|
67
|
+
/** The method, with the tool's name for a tool call, so a timeout names what ran. */
|
|
68
|
+
function callName(req) {
|
|
69
|
+
const tool = req.params?.name;
|
|
70
|
+
return isJsonString(tool) ? `${req.method} ${tool.slice(0, 128)}` : req.method;
|
|
71
|
+
}
|
|
72
|
+
/** Answers `req` with one timeout error at the deadline a served request has. The returned function stops the timer and says whether that answer went out, so a later reply is dropped. */
|
|
73
|
+
function watchDeadline(req, owedReply) {
|
|
74
|
+
const ms = requestDeadlineMs();
|
|
75
|
+
if (ms === 0)
|
|
76
|
+
return () => false;
|
|
77
|
+
let expired = false;
|
|
78
|
+
const timer = setTimeout(() => {
|
|
79
|
+
expired = true;
|
|
80
|
+
const name = callName(req);
|
|
81
|
+
log.warn(`mcp: ${name} did not answer within ${ms} ms; it keeps running and its reply will be dropped`, { method: req.method });
|
|
82
|
+
if (!owedReply)
|
|
83
|
+
return;
|
|
84
|
+
const requestId = currentRequestId();
|
|
85
|
+
const message = `Request timed out: ${name} did not finish within ${ms} ms; a write it started may or may not be saved`;
|
|
86
|
+
const error = { code: REQUEST_TIMEOUT_CODE, message };
|
|
87
|
+
if (requestId !== undefined)
|
|
88
|
+
error.data = { requestId };
|
|
89
|
+
send({ jsonrpc: '2.0', id: req.id, error });
|
|
90
|
+
}, ms);
|
|
91
|
+
// Stdin and the call keep the process alive; this timer alone must not.
|
|
92
|
+
timer.unref();
|
|
93
|
+
return () => {
|
|
94
|
+
clearTimeout(timer);
|
|
95
|
+
return expired;
|
|
96
|
+
};
|
|
17
97
|
}
|
|
18
98
|
function dispatch(body) {
|
|
19
99
|
let parsed;
|
|
@@ -25,56 +105,50 @@ function dispatch(body) {
|
|
|
25
105
|
send({ jsonrpc: '2.0', id: null, error: { code: -32700, message: 'Parse error' } });
|
|
26
106
|
return;
|
|
27
107
|
}
|
|
28
|
-
|
|
29
|
-
|
|
108
|
+
if (!isRoutableRequest(parsed)) {
|
|
109
|
+
answerUnroutable(parsed);
|
|
30
110
|
return;
|
|
111
|
+
}
|
|
31
112
|
const req = parsed;
|
|
32
113
|
if (req.method.startsWith('notifications/')) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
114
|
+
const stopWatching = watchDeadline(req, false);
|
|
115
|
+
track(req.method, handleMcpRequest(req).then(() => { }).catch((err) => {
|
|
116
|
+
log.error(`mcp notification ${req.method} failed: ${errorMessage(err)}`, errorFields(err));
|
|
117
|
+
}).finally(stopWatching));
|
|
36
118
|
return;
|
|
37
119
|
}
|
|
38
|
-
|
|
120
|
+
// A frame with no id is a notification under any method name, and JSON-RPC forbids answering one.
|
|
121
|
+
const timedOut = watchDeadline(req, isJsonString(req.id) || isJsonNumber(req.id));
|
|
122
|
+
track(req.method, handleMcpRequest(req).then((resp) => { if (!timedOut() && resp)
|
|
39
123
|
send(resp); }).catch((err) => {
|
|
40
|
-
|
|
41
|
-
|
|
124
|
+
if (timedOut())
|
|
125
|
+
log.debug(`mcp: ${callName(req)} failed after its timeout reply: ${errorMessage(err)}`);
|
|
126
|
+
else
|
|
127
|
+
send(mcpErrorResponse(req.id, err));
|
|
128
|
+
}));
|
|
42
129
|
}
|
|
43
|
-
/**
|
|
44
|
-
*
|
|
45
|
-
* (cli.ts `hippo mcp`, or running this file directly) should call this.
|
|
46
|
-
* src/server.ts imports `handleMcpRequest` without invoking this, so the
|
|
47
|
-
* HTTP daemon does not steal stdin or exit when its parent closes a pipe.
|
|
48
|
-
*/
|
|
130
|
+
/** Wires stdin/stdout to the dispatcher; idempotent. Only the entrypoint (cli.ts `hippo mcp`, or this file run directly) should call it, so the HTTP daemon
|
|
131
|
+
* (which imports `handleMcpRequest`) does not steal stdin or exit when its parent closes a pipe. */
|
|
49
132
|
export function startStdioLoop() {
|
|
50
133
|
process.stdin.on('data', (chunk) => {
|
|
51
|
-
buffer = Buffer.concat([buffer, chunk]);
|
|
134
|
+
buffer = Buffer.concat([buffer, withoutRefused(chunk)]);
|
|
52
135
|
while (true) {
|
|
53
136
|
const result = parseFrame(buffer);
|
|
54
137
|
if (result.kind === 'incomplete')
|
|
55
138
|
break;
|
|
56
139
|
buffer = result.rest;
|
|
140
|
+
if (result.kind === 'oversize') {
|
|
141
|
+
refused = result.remainder;
|
|
142
|
+
log.warn('mcp: refused a frame over the size cap with a parse error');
|
|
143
|
+
send({ jsonrpc: '2.0', id: null, error: { code: -32700, message: 'Parse error: frame exceeds 1MB' } });
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
// One id per frame, so the error reply and every line logged for the call name the same request.
|
|
57
147
|
if (result.kind === 'message')
|
|
58
|
-
dispatch(result.body);
|
|
148
|
+
runWithRequestId(randomUUID(), () => dispatch(result.body));
|
|
59
149
|
}
|
|
60
150
|
});
|
|
61
|
-
process.stdin.on('end', () =>
|
|
62
|
-
|
|
63
|
-
const crash = (kind, err) => {
|
|
64
|
-
log.error(`mcp ${kind}: ${err instanceof Error ? err.message : String(err)}`, errorFields(err));
|
|
65
|
-
exitAfterFlush(1);
|
|
66
|
-
};
|
|
67
|
-
process.on('uncaughtException', (err) => crash('uncaught exception', err));
|
|
68
|
-
process.on('unhandledRejection', (err) => crash('unhandled rejection', err));
|
|
69
|
-
}
|
|
70
|
-
/** Exit once stdout and stderr have drained, so the last reply and the crash log reach the client; capped at 1 s. */
|
|
71
|
-
function exitAfterFlush(code) {
|
|
72
|
-
process.exitCode = code;
|
|
73
|
-
let pending = 2;
|
|
74
|
-
const done = () => { if (--pending === 0)
|
|
75
|
-
process.exit(code); };
|
|
76
|
-
process.stdout.write('', done);
|
|
77
|
-
process.stderr.write('', done);
|
|
78
|
-
setTimeout(() => process.exit(code), 1000).unref();
|
|
151
|
+
process.stdin.on('end', () => { void exitWhenDrained(); });
|
|
152
|
+
installCrashHandlers('mcp');
|
|
79
153
|
}
|
|
80
154
|
//# sourceMappingURL=stdio.js.map
|
package/dist/mcp/tool-args.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// Hand-written for the JSON Schema subset the hippo tool definitions use, so the MCP server needs no validator dependency.
|
|
2
|
+
const ARG_PREVIEW_CHARS = 40;
|
|
2
3
|
function isArgString(v) {
|
|
3
4
|
return typeof v === 'string';
|
|
4
5
|
}
|
|
@@ -23,7 +24,7 @@ function describeValue(v) {
|
|
|
23
24
|
if (Array.isArray(v))
|
|
24
25
|
return 'array';
|
|
25
26
|
if (isArgString(v))
|
|
26
|
-
return JSON.stringify(v.length >
|
|
27
|
+
return JSON.stringify(v.length > ARG_PREVIEW_CHARS ? `${v.slice(0, ARG_PREVIEW_CHARS)}...` : v);
|
|
27
28
|
if (isArgNumber(v) || isArgBoolean(v))
|
|
28
29
|
return String(v);
|
|
29
30
|
return 'object';
|
package/dist/mcp/tools.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Tool definitions and input schemas served by tools/list.
|
|
2
|
-
import { DEFAULT_RECALL_BUDGET } from '../search
|
|
2
|
+
import { DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
3
3
|
import { DEFAULT_ASSEMBLE_BUDGET } from '../api/assemble.js';
|
|
4
|
-
import { MAX_ID_LEN } from '../http-util.js';
|
|
4
|
+
import { MAX_ID_LEN } from '../util/http-util.js';
|
|
5
|
+
import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
|
|
6
|
+
import { DEFAULT_CONFIG } from '../core/config.js';
|
|
5
7
|
// ── Tool definitions ──
|
|
6
8
|
// HTTP sets no budget cap; 25x the recall default leaves room for large-context clients while bounding one call's work.
|
|
7
9
|
const MAX_BUDGET_TOKENS = 25 * DEFAULT_RECALL_BUDGET;
|
|
@@ -43,7 +45,7 @@ export const TOOLS = [
|
|
|
43
45
|
},
|
|
44
46
|
scorer_window: {
|
|
45
47
|
type: 'number',
|
|
46
|
-
description:
|
|
48
|
+
description: `How many of the top-ranked memories the fresh-tail and summarize-overflow appendix is worked out against. The main list ranks the whole tenant store, so scorer_window does not narrow it. Default ${DEFAULT_SEARCH_CANDIDATE_LIMIT}. Rejected as RecallContractError code=invalid_scorer_window if 0/negative/non-finite/non-numeric.`,
|
|
47
49
|
},
|
|
48
50
|
session_id: {
|
|
49
51
|
type: 'string',
|
|
@@ -138,7 +140,7 @@ export const TOOLS = [
|
|
|
138
140
|
},
|
|
139
141
|
{
|
|
140
142
|
name: 'hippo_outcome',
|
|
141
|
-
description:
|
|
143
|
+
description: "Report whether recalled memories were useful. Good outcomes slow a memory's decay and bad ones speed it up, in proportion to its record. Call after completing work.",
|
|
142
144
|
inputSchema: {
|
|
143
145
|
type: 'object',
|
|
144
146
|
properties: {
|
|
@@ -160,7 +162,7 @@ export const TOOLS = [
|
|
|
160
162
|
type: 'number',
|
|
161
163
|
minimum: 0,
|
|
162
164
|
maximum: MAX_BUDGET_TOKENS,
|
|
163
|
-
description: `Max tokens (default: config.defaultContextBudget,
|
|
165
|
+
description: `Max tokens (default: config.defaultContextBudget, ${DEFAULT_CONFIG.defaultContextBudget}; max ${MAX_BUDGET_TOKENS})`,
|
|
164
166
|
},
|
|
165
167
|
scope: {
|
|
166
168
|
type: 'string',
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** customer_note object: many discrete notes per free-form `customer` column (no entities FK yet), each with its own supersede chain.
|
|
2
|
+
* The `customer_notes` table is the source of truth; the memory mirror (memory_id NULLABLE, ON DELETE SET NULL) is for recall. */
|
|
3
|
+
import type { KeysetPosition } from '../util/keyset.js';
|
|
4
|
+
import type { SavableDescriptor } from './descriptor.js';
|
|
5
|
+
import type { CustomerNote, NoteStatus } from '../store/object-types.js';
|
|
6
|
+
export type { CustomerNote, NoteStatus } from '../store/object-types.js';
|
|
7
|
+
export declare const VALID_NOTE_STATES: ReadonlySet<NoteStatus>;
|
|
8
|
+
/** Field caps (untrusted at the HTTP/SDK boundary). note is a body, so a larger cap
|
|
9
|
+
* than the 4096 short-field convention. */
|
|
10
|
+
export declare const MAX_CUSTOMER_LEN = 256;
|
|
11
|
+
export declare const MAX_NOTE_LEN = 8192;
|
|
12
|
+
export declare const MAX_CHANGE_SUMMARY_LEN = 4096;
|
|
13
|
+
export interface SaveCustomerNoteOpts {
|
|
14
|
+
customer: string;
|
|
15
|
+
note: string;
|
|
16
|
+
/** The delta note for a supersession; ignored (stored NULL) on a fresh create. */
|
|
17
|
+
changeSummary?: string;
|
|
18
|
+
/** Table id of an ACTIVE note this new version supersedes. */
|
|
19
|
+
supersedesNoteId?: number;
|
|
20
|
+
/** Extra memory tags merged after ['customer_note', 'customer:<lc>']. */
|
|
21
|
+
extraTags?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface ListCustomerNotesOpts {
|
|
24
|
+
status?: NoteStatus;
|
|
25
|
+
/** Filter to a single customer. */
|
|
26
|
+
customer?: string;
|
|
27
|
+
limit?: number;
|
|
28
|
+
/** Resume after this row: the position the previous page ended on. */
|
|
29
|
+
after?: KeysetPosition;
|
|
30
|
+
}
|
|
31
|
+
export declare const CUSTOMER_NOTE: SavableDescriptor<'customer_note', SaveCustomerNoteOpts>;
|
|
32
|
+
/** Create a customer_note, or a new version superseding an existing one, in the `objects` store group's one transaction.
|
|
33
|
+
* The mirror carries a `customer:<lc>` tag so scope-aware recall treats the note as entity-local. */
|
|
34
|
+
export declare function saveCustomerNote(hippoRoot: string, tenantId: string, opts: SaveCustomerNoteOpts, actor?: string): CustomerNote;
|
|
35
|
+
/** Close (retire) an active note; CAS on status='active', 0 changes means not-found or not-active. */
|
|
36
|
+
export declare function closeCustomerNote(hippoRoot: string, tenantId: string, id: number, actor?: string): CustomerNote;
|
|
37
|
+
export declare function loadCustomerNoteById(hippoRoot: string, tenantId: string, id: number): CustomerNote | null;
|
|
38
|
+
export declare function loadCustomerNotes(hippoRoot: string, tenantId: string, opts?: ListCustomerNotesOpts): CustomerNote[];
|
|
39
|
+
/** All ACTIVE notes for a customer, newest first. Returns a LIST, unlike project_brief's single-or-null
|
|
40
|
+
* loadActiveBriefForRepo: a customer accrues many notes. */
|
|
41
|
+
export declare function loadActiveNotesForCustomer(hippoRoot: string, tenantId: string, customer: string, opts?: {
|
|
42
|
+
limit?: number;
|
|
43
|
+
}): CustomerNote[];
|
|
44
|
+
//# sourceMappingURL=customer-notes.d.ts.map
|