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
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { CHURN_STALE_TAG } from './memory.js';
|
|
1
|
+
import { addTagToEntries, writeEntriesSeparately } from '../store/entry-writes.js';
|
|
2
|
+
import { confirmedOutcomeTimes } from '../store/audit.js';
|
|
3
|
+
import { chunked, loadAllEntries, loadEntriesByIds } from '../store/entry-reads.js';
|
|
4
|
+
import { CHURN_STALE_TAG } from '../core/memory.js';
|
|
6
5
|
import { GitReadError, gitLsFilesAtHead, fetchChurnWindowLog, gitGrepPresence, resolveCommitBefore, packageScriptsAt, } from './churn-git.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
*/
|
|
6
|
+
const HEADLINE_CHARS = 60;
|
|
7
|
+
/** Extract what was replaced/removed from a commit message.
|
|
8
|
+
* Returns null if the commit isn't a breaking/migration change. */
|
|
11
9
|
export function extractInvalidationTarget(message) {
|
|
12
10
|
// Strip conventional commit prefix (e.g., "feat(scope): ")
|
|
13
11
|
const body = message.replace(/^[a-z]+(\([^)]*\))?:\s*/i, '').trim();
|
|
@@ -44,26 +42,38 @@ export function extractInvalidationTarget(message) {
|
|
|
44
42
|
}
|
|
45
43
|
return null;
|
|
46
44
|
}
|
|
47
|
-
/**
|
|
48
|
-
*
|
|
49
|
-
* - Halves half_life_days
|
|
50
|
-
* - Sets confidence to 'stale'
|
|
51
|
-
* - Adds 'invalidated' tag
|
|
52
|
-
* - Skips pinned memories (reported in skippedPinned)
|
|
53
|
-
*
|
|
54
|
-
* Tag matching is EXACT (2026-06-09 incident): the FULL pattern must equal a
|
|
55
|
-
* tag. Token-level matching applies to content only, so a pattern that merely
|
|
56
|
-
* CONTAINS a common tag word ("hippo") can no longer mass-weaken every memory
|
|
57
|
-
* carrying that tag. Both callers (the CLI `invalidate` command and the
|
|
58
|
-
* auto-learn-from-git path) inherit this contract.
|
|
59
|
-
*/
|
|
45
|
+
/** Find memories that reference the invalidated pattern and weaken them (halve half_life_days, confidence 'stale', add 'invalidated' tag; pinned are skipped).
|
|
46
|
+
* Tag matching is EXACT: the FULL pattern must equal a tag, so a pattern merely containing a common tag word cannot mass-weaken every memory with that tag. */
|
|
60
47
|
export function invalidateMatching(hippoRoot, target, tenantId, options) {
|
|
61
|
-
//
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
48
|
+
// tenantId opt-in: when set, only that tenant's memories are weakened; undefined is host-wide.
|
|
49
|
+
// options.onlyId filters this tenant-scoped list rather than looking up an id directly, so another tenant's id is invisible here.
|
|
50
|
+
const { result, weakened } = weakenMatches(loadAllEntries(hippoRoot, tenantId), target, options);
|
|
51
|
+
writeEntriesSeparately(hippoRoot, weakened);
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
/** invalidateMatching for a batch: matches against `live`, the caller's list of the tenant's rows, and keeps it current.
|
|
55
|
+
* Each match is read again before it is weakened, so a row another writer changed since the list was read is never written back stale. */
|
|
56
|
+
export function invalidateMatchingAmong(hippoRoot, live, target, tenantId) {
|
|
57
|
+
const seen = weakenMatches(live, target, { dryRun: true }).result;
|
|
58
|
+
const ids = [...seen.targets, ...seen.skippedPinned];
|
|
59
|
+
// loadEntriesByIds reads at most 500 ids a call.
|
|
60
|
+
const fresh = new Map(chunked(ids, 500).flatMap((chunk) => loadEntriesByIds(hippoRoot, chunk, tenantId)).map((entry) => [entry.id, entry]));
|
|
61
|
+
const { result, weakened } = weakenMatches(ids.flatMap((id) => fresh.get(id) ?? []), target);
|
|
62
|
+
writeEntriesSeparately(hippoRoot, weakened);
|
|
63
|
+
const byId = new Map(weakened.map((entry) => [entry.id, entry]));
|
|
64
|
+
for (let i = 0; i < live.length; i++)
|
|
65
|
+
live[i] = byId.get(live[i].id) ?? live[i];
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
function referencesPattern(entry, fromTokens, exactTag) {
|
|
69
|
+
const contentTokens = invalidationTokenize(entry.content);
|
|
70
|
+
const tagTokens = entry.tags.map(t => t.toLowerCase());
|
|
71
|
+
const tokenMatch = matchScore(fromTokens, contentTokens);
|
|
72
|
+
const tagMatch = tagTokens.includes(exactTag);
|
|
73
|
+
return tokenMatch >= 0.5 || tagMatch;
|
|
74
|
+
}
|
|
75
|
+
/** The match pass: weakens each unpinned match in place and returns them, writing nothing. */
|
|
76
|
+
function weakenMatches(entries, target, options) {
|
|
67
77
|
const fromTokens = invalidationTokenize(target.from);
|
|
68
78
|
const exactTag = target.from.toLowerCase().trim();
|
|
69
79
|
const dryRun = options?.dryRun === true;
|
|
@@ -80,15 +90,8 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
|
|
|
80
90
|
if (entry.id !== options.onlyId)
|
|
81
91
|
continue;
|
|
82
92
|
}
|
|
83
|
-
else
|
|
84
|
-
|
|
85
|
-
const tagTokens = entry.tags.map(t => t.toLowerCase());
|
|
86
|
-
// Check if the memory references the old pattern
|
|
87
|
-
const tokenMatch = matchScore(fromTokens, contentTokens);
|
|
88
|
-
const tagMatch = tagTokens.includes(exactTag);
|
|
89
|
-
if (!(tokenMatch >= 0.5 || tagMatch))
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
93
|
+
else if (!referencesPattern(entry, fromTokens, exactTag))
|
|
94
|
+
continue;
|
|
92
95
|
// Pinned check runs AFTER matching so pinned would-be targets are
|
|
93
96
|
// observable in skippedPinned (pattern mode and onlyId mode alike).
|
|
94
97
|
if (entry.pinned) {
|
|
@@ -99,7 +102,7 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
|
|
|
99
102
|
result.targets.push(entry.id);
|
|
100
103
|
result.preview.push({
|
|
101
104
|
id: entry.id,
|
|
102
|
-
headline: entry.content.replace(/\s+/g, ' ').slice(0,
|
|
105
|
+
headline: entry.content.replace(/\s+/g, ' ').slice(0, HEADLINE_CHARS),
|
|
103
106
|
});
|
|
104
107
|
if (dryRun)
|
|
105
108
|
continue;
|
|
@@ -110,21 +113,7 @@ export function invalidateMatching(hippoRoot, target, tenantId, options) {
|
|
|
110
113
|
}
|
|
111
114
|
weakened.push(entry);
|
|
112
115
|
}
|
|
113
|
-
|
|
114
|
-
return result;
|
|
115
|
-
}
|
|
116
|
-
/** Each row commits alone, as a run of writeEntry calls would, but the store opens once. */
|
|
117
|
-
function writeEntriesOnOneHandle(hippoRoot, entries) {
|
|
118
|
-
if (entries.length === 0)
|
|
119
|
-
return;
|
|
120
|
-
const db = openStore(hippoRoot);
|
|
121
|
-
try {
|
|
122
|
-
for (const entry of entries)
|
|
123
|
-
writeEntryOn(db, hippoRoot, entry);
|
|
124
|
-
}
|
|
125
|
-
finally {
|
|
126
|
-
closeHippoDb(db);
|
|
127
|
-
}
|
|
116
|
+
return { result, weakened };
|
|
128
117
|
}
|
|
129
118
|
const STOPWORDS = new Set([
|
|
130
119
|
'the', 'an', 'is', 'it', 'in', 'on', 'at', 'to', 'for', 'of', 'by',
|
|
@@ -219,22 +208,6 @@ function resolveTrackedPath(token, repoRoot, projectName, index) {
|
|
|
219
208
|
}
|
|
220
209
|
return null;
|
|
221
210
|
}
|
|
222
|
-
// Anchor SQL runs on its own handle (closed in finally); queryAuditEvents is NOT
|
|
223
|
-
// reused here because its 10k-row cap would silently miss old confirmations.
|
|
224
|
-
function queryConfirmedAt(hippoRoot, tenantId) {
|
|
225
|
-
const db = openHippoDb(hippoRoot);
|
|
226
|
-
try {
|
|
227
|
-
// SAFETY: the SELECT list above is exactly target_id and ts; no other shape reaches this cast.
|
|
228
|
-
const rows = db.prepare(`SELECT target_id, MAX(ts) AS ts FROM audit_log
|
|
229
|
-
WHERE tenant_id = ? AND op = 'outcome' AND target_id IS NOT NULL
|
|
230
|
-
AND json_extract(metadata_json, '$.good') = 1
|
|
231
|
-
GROUP BY target_id`).all(tenantId);
|
|
232
|
-
return new Map(rows.map((r) => [r.target_id, r.ts]));
|
|
233
|
-
}
|
|
234
|
-
finally {
|
|
235
|
-
closeHippoDb(db);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
211
|
function emptyChurnResult(dryRun, skippedPinned = [], error) {
|
|
239
212
|
const result = { checked: 0, marked: 0, alreadyMarked: 0, skippedPinned, dryRun, preview: [] };
|
|
240
213
|
if (error !== undefined)
|
|
@@ -262,25 +235,8 @@ function collectChurnCandidates(entries, opts) {
|
|
|
262
235
|
}
|
|
263
236
|
return { candidates, skippedPinned };
|
|
264
237
|
}
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
let windowLog = [];
|
|
268
|
-
if (needs.paths) {
|
|
269
|
-
const minAnchor = candidates.reduce((min, c) => {
|
|
270
|
-
const a = anchorOf(c.entry);
|
|
271
|
-
return min === '' || a < min ? a : min;
|
|
272
|
-
}, '');
|
|
273
|
-
windowLog = fetchChurnWindowLog(repoRoot, minAnchor);
|
|
274
|
-
}
|
|
275
|
-
const touchedInWindow = new Set();
|
|
276
|
-
for (const c of windowLog)
|
|
277
|
-
for (const f of c.files)
|
|
278
|
-
touchedInWindow.add(f.path);
|
|
279
|
-
const trackedIndex = buildTrackedIndex(new Set([...headFiles, ...touchedInWindow]));
|
|
280
|
-
const headIndex = buildTrackedIndex(headFiles);
|
|
281
|
-
const presentAtHeadSymbols = needs.symbols
|
|
282
|
-
? gitGrepPresence(repoRoot, [...new Set(candidates.flatMap((c) => c.refs.symbols))], 'HEAD')
|
|
283
|
-
: new Set();
|
|
238
|
+
/** The per-commit lookups of a ChurnGitView; each asks git once per commit and remembers the answer. */
|
|
239
|
+
function churnCommitLookups(repoRoot) {
|
|
284
240
|
const anchorCommitCache = new Map();
|
|
285
241
|
const resolveAnchorCommit = (anchorIso) => {
|
|
286
242
|
if (!anchorCommitCache.has(anchorIso)) {
|
|
@@ -299,7 +255,6 @@ function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
|
|
|
299
255
|
}
|
|
300
256
|
return known;
|
|
301
257
|
};
|
|
302
|
-
const headScripts = needs.scripts ? packageScriptsAt(repoRoot, 'HEAD') : null;
|
|
303
258
|
const scriptsAtCommit = new Map();
|
|
304
259
|
const scriptsAt = (hash) => {
|
|
305
260
|
if (!scriptsAtCommit.has(hash)) {
|
|
@@ -307,7 +262,29 @@ function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
|
|
|
307
262
|
}
|
|
308
263
|
return scriptsAtCommit.get(hash);
|
|
309
264
|
};
|
|
310
|
-
return {
|
|
265
|
+
return { resolveAnchorCommit, symbolsPresentAt, scriptsAt };
|
|
266
|
+
}
|
|
267
|
+
function loadChurnGitView(repoRoot, projectName, candidates, anchorOf, needs) {
|
|
268
|
+
const headFiles = gitLsFilesAtHead(repoRoot);
|
|
269
|
+
let windowLog = [];
|
|
270
|
+
if (needs.paths) {
|
|
271
|
+
const minAnchor = candidates.reduce((min, c) => {
|
|
272
|
+
const a = anchorOf(c.entry);
|
|
273
|
+
return min === '' || a < min ? a : min;
|
|
274
|
+
}, '');
|
|
275
|
+
windowLog = fetchChurnWindowLog(repoRoot, minAnchor);
|
|
276
|
+
}
|
|
277
|
+
const touchedInWindow = new Set();
|
|
278
|
+
for (const c of windowLog)
|
|
279
|
+
for (const f of c.files)
|
|
280
|
+
touchedInWindow.add(f.path);
|
|
281
|
+
const trackedIndex = buildTrackedIndex(new Set([...headFiles, ...touchedInWindow]));
|
|
282
|
+
const headIndex = buildTrackedIndex(headFiles);
|
|
283
|
+
const presentAtHeadSymbols = needs.symbols
|
|
284
|
+
? gitGrepPresence(repoRoot, [...new Set(candidates.flatMap((c) => c.refs.symbols))], 'HEAD')
|
|
285
|
+
: new Set();
|
|
286
|
+
const headScripts = needs.scripts ? packageScriptsAt(repoRoot, 'HEAD') : null;
|
|
287
|
+
return { repoRoot, projectName, windowLog, trackedIndex, headIndex, presentAtHeadSymbols, headScripts, ...churnCommitLookups(repoRoot) };
|
|
311
288
|
}
|
|
312
289
|
function pathEvidence(git, paths, anchorTime) {
|
|
313
290
|
for (const rawPath of paths) {
|
|
@@ -362,27 +339,34 @@ function churnEvidence(git, refs, anchor) {
|
|
|
362
339
|
}
|
|
363
340
|
function tagChurnStale(hippoRoot, tenantId, toTag, confirmedAt) {
|
|
364
341
|
// The git calls above can take seconds; a good outcome landing meanwhile moves the anchor past the evidence.
|
|
365
|
-
const confirmedNow =
|
|
342
|
+
const confirmedNow = confirmedOutcomeTimes(hippoRoot, tenantId);
|
|
366
343
|
const unconfirmed = toTag.filter((stale) => confirmedNow.get(stale.id) === confirmedAt.get(stale.id));
|
|
367
344
|
if (unconfirmed.length === 0)
|
|
368
345
|
return;
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
346
|
+
addTagToEntries(hippoRoot, tenantId, unconfirmed.map((stale) => stale.id), CHURN_STALE_TAG);
|
|
347
|
+
}
|
|
348
|
+
/** Counts every candidate's evidence into `result` and returns the rows still to tag, writing nothing. */
|
|
349
|
+
function recordChurnEvidence(git, candidates, anchorOf, result) {
|
|
350
|
+
const toTag = [];
|
|
351
|
+
for (const { entry, refs } of candidates) {
|
|
352
|
+
result.checked++;
|
|
353
|
+
const evidence = churnEvidence(git, refs, anchorOf(entry));
|
|
354
|
+
if (!evidence)
|
|
355
|
+
continue;
|
|
356
|
+
const headline = entry.content.replace(/\s+/g, ' ').slice(0, HEADLINE_CHARS);
|
|
357
|
+
if (entry.tags.includes(CHURN_STALE_TAG)) {
|
|
358
|
+
result.alreadyMarked++;
|
|
359
|
+
result.preview.push({ id: entry.id, headline, evidence, already: true });
|
|
360
|
+
continue;
|
|
379
361
|
}
|
|
362
|
+
result.marked++;
|
|
363
|
+
result.preview.push({ id: entry.id, headline, evidence, already: false });
|
|
364
|
+
toTag.push(entry);
|
|
380
365
|
}
|
|
381
|
-
|
|
382
|
-
closeHippoDb(db);
|
|
383
|
-
}
|
|
366
|
+
return toTag;
|
|
384
367
|
}
|
|
385
|
-
/** Flags memories whose named file/symbol/script changed or disappeared since storage (or last
|
|
368
|
+
/** Flags memories whose named file/symbol/script changed or disappeared since storage (or last
|
|
369
|
+
* confirmation); only adds/removes CHURN_STALE_TAG, never confidence/half-life/strength. */
|
|
386
370
|
export function detectChurnStale(hippoRoot, repoRoot, opts) {
|
|
387
371
|
const dryRun = opts.dryRun === true;
|
|
388
372
|
if (!opts.projectName)
|
|
@@ -391,7 +375,7 @@ export function detectChurnStale(hippoRoot, repoRoot, opts) {
|
|
|
391
375
|
const { candidates, skippedPinned } = collectChurnCandidates(entries, opts);
|
|
392
376
|
if (candidates.length === 0)
|
|
393
377
|
return emptyChurnResult(dryRun, skippedPinned);
|
|
394
|
-
const confirmedAt =
|
|
378
|
+
const confirmedAt = confirmedOutcomeTimes(hippoRoot, opts.tenantId);
|
|
395
379
|
// Compared as epoch ms, not strings: imported rows may carry offsets or other ISO forms.
|
|
396
380
|
const anchorOf = (entry) => {
|
|
397
381
|
const confirmed = confirmedAt.get(entry.id);
|
|
@@ -409,25 +393,8 @@ export function detectChurnStale(hippoRoot, repoRoot, opts) {
|
|
|
409
393
|
const result = { checked: 0, marked: 0, alreadyMarked: 0, skippedPinned, dryRun, preview: [] };
|
|
410
394
|
try {
|
|
411
395
|
const git = loadChurnGitView(repoRoot, opts.legacyName ?? opts.projectName, candidates, anchorOf, needs);
|
|
412
|
-
// Collected here
|
|
413
|
-
|
|
414
|
-
// candidate tagged while a later one aborts the run untagged.
|
|
415
|
-
const toTag = [];
|
|
416
|
-
for (const { entry, refs } of candidates) {
|
|
417
|
-
result.checked++;
|
|
418
|
-
const evidence = churnEvidence(git, refs, anchorOf(entry));
|
|
419
|
-
if (!evidence)
|
|
420
|
-
continue;
|
|
421
|
-
const headline = entry.content.replace(/\s+/g, ' ').slice(0, 60);
|
|
422
|
-
if (entry.tags.includes(CHURN_STALE_TAG)) {
|
|
423
|
-
result.alreadyMarked++;
|
|
424
|
-
result.preview.push({ id: entry.id, headline, evidence, already: true });
|
|
425
|
-
continue;
|
|
426
|
-
}
|
|
427
|
-
result.marked++;
|
|
428
|
-
result.preview.push({ id: entry.id, headline, evidence, already: false });
|
|
429
|
-
toTag.push(entry);
|
|
430
|
-
}
|
|
396
|
+
// Collected here and written only after every candidate's evidence is computed, so a GitReadError mid-loop cannot leave an earlier candidate tagged.
|
|
397
|
+
const toTag = recordChurnEvidence(git, candidates, anchorOf, result);
|
|
431
398
|
if (!dryRun && toTag.length > 0)
|
|
432
399
|
tagChurnStale(hippoRoot, opts.tenantId, toTag, confirmedAt);
|
|
433
400
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ToolCall } from './protocol.js';
|
|
2
|
-
export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string
|
|
2
|
+
export declare function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }: ToolCall): Promise<string>;
|
|
3
3
|
export declare function runStatusTool({ hippoRoot, config, tenantId }: ToolCall): string;
|
|
4
4
|
export declare function runConflictsTool(call: ToolCall): string;
|
|
5
5
|
export declare function runResolveTool({ args, ctx, hippoRoot, tenantId }: ToolCall): string;
|
package/dist/mcp/admin-tools.js
CHANGED
|
@@ -1,36 +1,28 @@
|
|
|
1
1
|
// Store health and admin tool handlers: base rates, status, conflicts, resolve, share and peers.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { canTouchScope, passesScopeFilterForRecall, personalScopeOf } from '../recall-scope.js';
|
|
12
|
-
import { selectEntriesByIds } from '../store/entry-reads.js';
|
|
13
|
-
import { selectMemoryReach } from '../store/tenant-lookup.js';
|
|
2
|
+
import { evalNow } from '../core/ablation.js';
|
|
3
|
+
import { loadStrengthTallies } from '../store/candidates.js';
|
|
4
|
+
import { countOpenConflicts, listTouchableConflicts, resolveConflict } from '../store/conflicts.js';
|
|
5
|
+
import { shareMemory, listPeers } from '../sharing/share.js';
|
|
6
|
+
import { requireGroup, storeFor } from '../store/index.js';
|
|
7
|
+
import { NotFoundError } from '../core/api-errors.js';
|
|
8
|
+
import { classifyOriginProject } from '../core/project-identity.js';
|
|
9
|
+
import { canTouchScope, passesScopeFilterForRecall, personalScopeOf } from '../store/recall-scope.js';
|
|
10
|
+
import { chunked, loadEntriesByIds, readEntry } from '../store/entry-reads.js';
|
|
14
11
|
import { mcpActor } from './protocol.js';
|
|
15
|
-
import { isJsonString } from '../json.js';
|
|
12
|
+
import { isJsonString } from '../util/json.js';
|
|
13
|
+
import { DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
14
|
+
const BASERATE_DECIMALS = 3;
|
|
16
15
|
const NOT_RESOLVED = 'Could not resolve. Check the conflict ID and --keep value.';
|
|
17
16
|
/** The scope of memory `id`, null when it has none or does not exist. */
|
|
18
17
|
function memoryScope(hippoRoot, id) {
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
return selectMemoryReach(db, id)?.scope ?? null;
|
|
22
|
-
}
|
|
23
|
-
finally {
|
|
24
|
-
closeHippoDb(db);
|
|
25
|
-
}
|
|
18
|
+
return readEntry(hippoRoot, id)?.scope ?? null;
|
|
26
19
|
}
|
|
27
|
-
export function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
|
|
28
|
-
// Text-only reply, matching the other MCP tools; the
|
|
29
|
-
// and emits the audit, so call sites cannot drift.
|
|
20
|
+
export async function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
|
|
21
|
+
// Text-only reply, matching the other MCP tools; the group's read writes the audit row, so no surface can skip it.
|
|
30
22
|
const classTag = String(args.class_tag || '').trim();
|
|
31
23
|
if (!classTag)
|
|
32
24
|
return 'No class_tag provided. Usage: pass class_tag matching a class used in past predictions (e.g. "migration-effort").';
|
|
33
|
-
const baserate =
|
|
25
|
+
const baserate = await requireGroup(storeFor({ hippoRoot, store: ctx?.store }), 'predictions').predictionBaserate(tenantId, classTag, ctx?.actor ?? 'mcp');
|
|
34
26
|
if (baserate.nClosed === 0) {
|
|
35
27
|
return `No closed predictions in class "${classTag}" yet. Create one via hippo_predict (or 'hippo predict ...' CLI) and close it with hippo_predict_close once the actual outcome is known. Base rates need closed predictions with numeric actual_value to compute.`;
|
|
36
28
|
}
|
|
@@ -38,37 +30,26 @@ export function runPredictBaserateTool({ args, ctx, hippoRoot, tenantId }) {
|
|
|
38
30
|
lines.push(`n_closed: ${baserate.nClosed}`);
|
|
39
31
|
lines.push(`n_ratio_eligible: ${baserate.nRatioEligible}`);
|
|
40
32
|
if (baserate.meanEstimate !== null)
|
|
41
|
-
lines.push(`mean_estimate: ${baserate.meanEstimate.toFixed(
|
|
33
|
+
lines.push(`mean_estimate: ${baserate.meanEstimate.toFixed(BASERATE_DECIMALS)}`);
|
|
42
34
|
if (baserate.meanActual !== null)
|
|
43
|
-
lines.push(`mean_actual: ${baserate.meanActual.toFixed(
|
|
35
|
+
lines.push(`mean_actual: ${baserate.meanActual.toFixed(BASERATE_DECIMALS)}`);
|
|
44
36
|
if (baserate.meanRatio !== null)
|
|
45
|
-
lines.push(`mean_ratio: ${baserate.meanRatio.toFixed(
|
|
37
|
+
lines.push(`mean_ratio: ${baserate.meanRatio.toFixed(BASERATE_DECIMALS)}x`);
|
|
46
38
|
if (baserate.p50Ratio !== null)
|
|
47
|
-
lines.push(`p50_ratio: ${baserate.p50Ratio.toFixed(
|
|
39
|
+
lines.push(`p50_ratio: ${baserate.p50Ratio.toFixed(BASERATE_DECIMALS)}x`);
|
|
48
40
|
if (baserate.mae !== null)
|
|
49
|
-
lines.push(`mae: ${baserate.mae.toFixed(
|
|
41
|
+
lines.push(`mae: ${baserate.mae.toFixed(BASERATE_DECIMALS)}`);
|
|
50
42
|
return lines.join('\n');
|
|
51
43
|
}
|
|
52
44
|
export function runStatusTool({ hippoRoot, config, tenantId }) {
|
|
53
|
-
//
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
let totalStrength = 0;
|
|
58
|
-
for (const e of entries) {
|
|
59
|
-
const s = calculateStrength(e, now);
|
|
60
|
-
totalStrength += s;
|
|
61
|
-
if (s < 0.1 && !e.pinned)
|
|
62
|
-
atRisk++;
|
|
63
|
-
}
|
|
64
|
-
const avgStrength = entries.length > 0 ? (totalStrength / entries.length).toFixed(2) : '0';
|
|
65
|
-
const pinned = entries.filter((e) => e.pinned).length;
|
|
66
|
-
const errors = entries.filter((e) => e.tags.includes('error')).length;
|
|
67
|
-
const conflicts = listMemoryConflicts(hippoRoot, 'open', tenantId).length;
|
|
45
|
+
// honors HIPPO_FAKE_NOW (eval-only; see ablation.ts)
|
|
46
|
+
const tallies = loadStrengthTallies(hippoRoot, tenantId, evalNow(), 0.1);
|
|
47
|
+
const avgStrength = tallies.total > 0 ? (tallies.strengthSum / tallies.total).toFixed(2) : '0';
|
|
48
|
+
const conflicts = countOpenConflicts(hippoRoot, tenantId);
|
|
68
49
|
return [
|
|
69
|
-
`Memories: ${
|
|
50
|
+
`Memories: ${tallies.total} (${tallies.pinned} pinned, ${tallies.errors} errors)`,
|
|
70
51
|
`Avg strength: ${avgStrength}`,
|
|
71
|
-
`At risk (<0.1): ${atRisk}`,
|
|
52
|
+
`At risk (<0.1): ${tallies.atRisk}`,
|
|
72
53
|
`Open conflicts: ${conflicts}`,
|
|
73
54
|
`Half-life default: ${config.defaultHalfLifeDays}d`,
|
|
74
55
|
].join('\n');
|
|
@@ -76,19 +57,15 @@ export function runStatusTool({ hippoRoot, config, tenantId }) {
|
|
|
76
57
|
/** Pairs whose two rows the caller could recall: its repo or user-global, and no scope it was not asked for. */
|
|
77
58
|
function recallablePairs(call, conflicts, project) {
|
|
78
59
|
const own = personalScopeOf(mcpActor(call.ctx));
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
finally {
|
|
90
|
-
closeHippoDb(db);
|
|
91
|
-
}
|
|
60
|
+
const ids = [...new Set(conflicts.flatMap((c) => [c.memory_a_id, c.memory_b_id]))];
|
|
61
|
+
// loadEntriesByIds reads at most one chunk of ids per call.
|
|
62
|
+
const rows = new Map(chunked(ids).flatMap((chunk) => loadEntriesByIds(call.hippoRoot, chunk, call.tenantId)).map((row) => [row.id, row]));
|
|
63
|
+
const shown = (id) => {
|
|
64
|
+
const row = rows.get(id);
|
|
65
|
+
return row !== undefined && classifyOriginProject(row.origin_project, project) !== 'cross-project'
|
|
66
|
+
&& passesScopeFilterForRecall(row.scope ?? null, undefined, own);
|
|
67
|
+
};
|
|
68
|
+
return conflicts.filter((c) => shown(c.memory_a_id) && shown(c.memory_b_id));
|
|
92
69
|
}
|
|
93
70
|
export function runConflictsTool(call) {
|
|
94
71
|
const { ctx, hippoRoot, tenantId } = call;
|
|
@@ -129,10 +106,8 @@ export function runShareTool({ args, ctx, hippoRoot, tenantId }) {
|
|
|
129
106
|
// Checked before shareMemory, whose personal-row refusal would tell another person the id exists.
|
|
130
107
|
if (!canTouchScope(mcpActor(ctx), memoryScope(hippoRoot, shareId)))
|
|
131
108
|
throw new NotFoundError(`Memory not found: ${shareId}`);
|
|
132
|
-
// Pass tenantId so shareMemory's readEntry filters by tenant.
|
|
133
|
-
//
|
|
134
|
-
// id and copy the row to the global store. The 'Memory not found'
|
|
135
|
-
// error matches the cross-tenant deny shape elsewhere in the code.
|
|
109
|
+
// Pass tenantId so shareMemory's readEntry filters by tenant; otherwise a Bearer for tenant A could share tenant B's id to the global store.
|
|
110
|
+
// The 'Memory not found' error matches the cross-tenant deny shape elsewhere.
|
|
136
111
|
const shared = shareMemory(hippoRoot, shareId, { force, tenantId });
|
|
137
112
|
if (!shared)
|
|
138
113
|
return 'Transfer score too low. Use force=true to override.';
|
|
@@ -143,6 +118,6 @@ export function runPeersTool({ tenantId }) {
|
|
|
143
118
|
const peers = listPeers(undefined, tenantId);
|
|
144
119
|
if (peers.length === 0)
|
|
145
120
|
return 'No peers found.';
|
|
146
|
-
return peers.map((p) => `${p.project}: ${p.count} memories (latest: ${p.latest.slice(0,
|
|
121
|
+
return peers.map((p) => `${p.project}: ${p.count} memories (latest: ${p.latest.slice(0, DATE_PREFIX_CHARS)})`).join('\n');
|
|
147
122
|
}
|
|
148
123
|
//# sourceMappingURL=admin-tools.js.map
|
package/dist/mcp/format.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { SearchResult } from '../search
|
|
1
|
+
import type { SearchResult } from '../core/search-types.js';
|
|
2
2
|
import type { SessionEvent, TaskSnapshot } from '../store/rows.js';
|
|
3
|
-
import type { ContextCost, ContinuityBlock, RecallResult, RecallResultItem } from '../api.js';
|
|
4
|
-
import { type SessionHandoff } from '../handoff.js';
|
|
5
|
-
import { detectAnchoring } from '../recall-history.js';
|
|
6
|
-
import { detectAvailabilityBias } from '../availability.js';
|
|
3
|
+
import type { ContextCost, ContinuityBlock, RecallResult, RecallResultItem } from '../api/index.js';
|
|
4
|
+
import { type SessionHandoff } from '../core/handoff.js';
|
|
5
|
+
import { detectAnchoring } from '../api/recall-history.js';
|
|
6
|
+
import { detectAvailabilityBias } from '../api/availability.js';
|
|
7
7
|
export declare function formatContinuityBlock(block: ContinuityBlock): string;
|
|
8
8
|
export declare function formatMemories(results: ReadonlyArray<Pick<SearchResult, 'entry'>>): string;
|
|
9
9
|
export interface RenderedRecall {
|
package/dist/mcp/format.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// Text the MCP recall and context tools print, and what each printed piece costs the token budget.
|
|
2
|
-
import { confidenceLabel } from '../memory.js';
|
|
3
|
-
import { formatHandoffEvidenceLine } from '../handoff.js';
|
|
4
|
-
import { printedTokens } from '../context-render.js';
|
|
5
|
-
import { estimateTokens } from '../token-
|
|
2
|
+
import { confidenceLabel } from '../core/memory.js';
|
|
3
|
+
import { formatHandoffEvidenceLine } from '../core/handoff.js';
|
|
4
|
+
import { printedTokens } from '../api/context-render.js';
|
|
5
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
6
|
+
const MCP_PREVIEW_CHARS = 200;
|
|
6
7
|
// ── Format helpers ──
|
|
7
8
|
function handoffLines(h) {
|
|
8
9
|
const lines = [`- Summary: ${h.summary}`];
|
|
@@ -24,7 +25,7 @@ function handoffLines(h) {
|
|
|
24
25
|
}
|
|
25
26
|
function trailLines(events) {
|
|
26
27
|
return events.map((e) => {
|
|
27
|
-
const preview = e.content.length >
|
|
28
|
+
const preview = e.content.length > MCP_PREVIEW_CHARS ? e.content.slice(0, MCP_PREVIEW_CHARS) + '…' : e.content;
|
|
28
29
|
return `- [${e.event_type}] ${preview}`;
|
|
29
30
|
});
|
|
30
31
|
}
|
|
@@ -110,7 +111,7 @@ export function tailSection(rows) {
|
|
|
110
111
|
const lines = ['', '## Fresh tail / substituted summaries'];
|
|
111
112
|
for (const r of rows) {
|
|
112
113
|
const tag = r.isSummary ? '[summary]' : '[tail]';
|
|
113
|
-
const head = r.content.length >
|
|
114
|
+
const head = r.content.length > MCP_PREVIEW_CHARS ? r.content.slice(0, MCP_PREVIEW_CHARS) + '…' : r.content;
|
|
114
115
|
if (r.isSummary && r.substitutedFor && r.substitutedFor.length > 0) {
|
|
115
116
|
lines.push(`- ${tag} ${r.id} (covers ${r.substitutedFor.length} rows): ${head}`);
|
|
116
117
|
}
|
package/dist/mcp/framing.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** What of a refused frame has not arrived yet: a byte count when its header declared one, else the rest of its line. */
|
|
2
|
+
export type FrameRemainder = number | 'line';
|
|
1
3
|
export type FrameResult = {
|
|
2
4
|
kind: 'message';
|
|
3
5
|
body: string;
|
|
@@ -5,6 +7,10 @@ export type FrameResult = {
|
|
|
5
7
|
} | {
|
|
6
8
|
kind: 'skip';
|
|
7
9
|
rest: Buffer;
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'oversize';
|
|
12
|
+
rest: Buffer;
|
|
13
|
+
remainder: FrameRemainder;
|
|
8
14
|
} | {
|
|
9
15
|
kind: 'incomplete';
|
|
10
16
|
};
|
package/dist/mcp/framing.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// MCP stdio transport framing: newline-delimited JSON-RPC, no embedded newlines
|
|
2
2
|
// (https://modelcontextprotocol.io/specification/.../basic/transports#stdio). Legacy LSP-style
|
|
3
3
|
// `Content-Length` framing is also accepted so a printf-and-pipe smoke test still works.
|
|
4
|
+
import { MAX_BODY_BYTES } from '../util/http-util.js';
|
|
4
5
|
const HEADER_DELIM = Buffer.from('\r\n\r\n');
|
|
6
|
+
const EMPTY = Buffer.alloc(0);
|
|
5
7
|
export function parseFrame(buffer) {
|
|
6
8
|
// Strip leading whitespace/newlines between messages.
|
|
7
9
|
let start = 0;
|
|
@@ -17,13 +19,17 @@ export function parseFrame(buffer) {
|
|
|
17
19
|
if (trimmed[0] === 0x43 /* 'C' */ || trimmed[0] === 0x63 /* 'c' */) {
|
|
18
20
|
const headerEnd = trimmed.indexOf(HEADER_DELIM);
|
|
19
21
|
if (headerEnd === -1)
|
|
20
|
-
return { kind: 'incomplete' };
|
|
22
|
+
return trimmed.length > MAX_BODY_BYTES ? { kind: 'oversize', rest: EMPTY, remainder: 'line' } : { kind: 'incomplete' };
|
|
21
23
|
const header = trimmed.subarray(0, headerEnd).toString('utf-8');
|
|
22
24
|
const match = header.match(/Content-Length:\s*(\d+)/i);
|
|
23
25
|
if (!match)
|
|
24
26
|
return { kind: 'skip', rest: Buffer.from(trimmed.subarray(headerEnd + 4)) };
|
|
25
27
|
const contentLength = parseInt(match[1], 10);
|
|
26
28
|
const bodyStart = headerEnd + 4;
|
|
29
|
+
if (contentLength > MAX_BODY_BYTES) {
|
|
30
|
+
const end = bodyStart + contentLength;
|
|
31
|
+
return { kind: 'oversize', rest: Buffer.from(trimmed.subarray(Math.min(end, trimmed.length))), remainder: Math.max(0, end - trimmed.length) };
|
|
32
|
+
}
|
|
27
33
|
if (trimmed.length < bodyStart + contentLength)
|
|
28
34
|
return { kind: 'incomplete' };
|
|
29
35
|
const body = trimmed.subarray(bodyStart, bodyStart + contentLength).toString('utf-8');
|
|
@@ -32,9 +38,11 @@ export function parseFrame(buffer) {
|
|
|
32
38
|
// Newline-delimited JSON (MCP spec).
|
|
33
39
|
const newlineIdx = trimmed.indexOf(0x0a);
|
|
34
40
|
if (newlineIdx === -1)
|
|
35
|
-
return { kind: 'incomplete' };
|
|
36
|
-
const line = trimmed.subarray(0, newlineIdx).toString('utf-8').trimEnd();
|
|
41
|
+
return trimmed.length > MAX_BODY_BYTES ? { kind: 'oversize', rest: EMPTY, remainder: 'line' } : { kind: 'incomplete' };
|
|
37
42
|
const rest = Buffer.from(trimmed.subarray(newlineIdx + 1));
|
|
43
|
+
if (newlineIdx > MAX_BODY_BYTES)
|
|
44
|
+
return { kind: 'oversize', rest, remainder: 0 };
|
|
45
|
+
const line = trimmed.subarray(0, newlineIdx).toString('utf-8').trimEnd();
|
|
38
46
|
if (!line)
|
|
39
47
|
return { kind: 'skip', rest };
|
|
40
48
|
return { kind: 'message', body: line, rest };
|