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/project-briefs.js
DELETED
|
@@ -1,523 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Project_brief first-class object.
|
|
3
|
-
*
|
|
4
|
-
* A `project_brief` is the living, repo-scoped summary of a repository's state: a
|
|
5
|
-
* `summary` body scoped to a `repo`, evolving via the supersede delta lifecycle.
|
|
6
|
-
* "Auto-refreshes from receipts" is scoped to a DETERMINISTIC (no-LLM) assembler:
|
|
7
|
-
* `refreshBrief` gathers the repo's recent receipts (memory rows tagged
|
|
8
|
-
* `path:<repo>`) and assembles them into the brief body. The distinguishing
|
|
9
|
-
* capability is therefore the refresh assembler (analog of skill's export
|
|
10
|
-
* renderer), not an LLM/async pipeline (deferred).
|
|
11
|
-
*
|
|
12
|
-
* Reuses the skill/process supersede machinery verbatim (superseded_by self-FK +
|
|
13
|
-
* CAS + INSERT-preflight + server-derived version + change_summary + supersede
|
|
14
|
-
* tenant-match trigger). It DROPS skill's `skill_name`/`trigger_text` and ADDS
|
|
15
|
-
* `repo` (the repo-scoping dimension) + `summary` (the brief body).
|
|
16
|
-
*
|
|
17
|
-
* The `project_briefs` table is the source of truth (survives memory decay); the
|
|
18
|
-
* memory mirror is for recall. memory_id is NULLABLE with ON DELETE SET NULL.
|
|
19
|
-
*
|
|
20
|
-
* Lifecycle: active -> superseded (a newer version replaces it) or active ->
|
|
21
|
-
* closed (retired).
|
|
22
|
-
*/
|
|
23
|
-
import { BadRequestError, ConflictError, NotFoundError } from './api-errors.js';
|
|
24
|
-
import { openHippoDb, closeHippoDb } from './db.js';
|
|
25
|
-
import { writeEntry } from './store/entry-writes.js';
|
|
26
|
-
import { assertTenantId } from './tenant.js';
|
|
27
|
-
import { scopeAdmitSql } from './recall-scope.js';
|
|
28
|
-
import { markGraphDirty, removeGraphEntitiesForObject } from './graph/write.js';
|
|
29
|
-
import { createMemory, Layer } from './memory.js';
|
|
30
|
-
import { appendAuditEvent } from './audit.js';
|
|
31
|
-
import { objectHalfLifeDays } from './half-life-migration.js';
|
|
32
|
-
import { keysetAfter } from './keyset.js';
|
|
33
|
-
import { escapeLike } from './escape.js';
|
|
34
|
-
export const VALID_BRIEF_STATES = new Set([
|
|
35
|
-
'active',
|
|
36
|
-
'superseded',
|
|
37
|
-
'closed',
|
|
38
|
-
]);
|
|
39
|
-
/** Field caps (untrusted at the HTTP/SDK boundary). summary is a body, so a larger
|
|
40
|
-
* cap than the 4096 short-field convention. */
|
|
41
|
-
export const MAX_REPO_LEN = 256;
|
|
42
|
-
export const MAX_BRIEF_SUMMARY_LEN = 8192;
|
|
43
|
-
export const MAX_CHANGE_SUMMARY_LEN = 4096;
|
|
44
|
-
/** Bound the receipts gathered per refresh (a refresh reads memories; cap the scan
|
|
45
|
-
* + the rendered body). Realistic repos have far fewer recent receipts than this. */
|
|
46
|
-
export const MAX_BRIEF_RECEIPTS = 50;
|
|
47
|
-
/** Truncate each receipt's headline in the assembled digest. */
|
|
48
|
-
export const MAX_RECEIPT_HEADLINE_LEN = 200;
|
|
49
|
-
// ---------------------------------------------------------------------------
|
|
50
|
-
// Validation
|
|
51
|
-
// ---------------------------------------------------------------------------
|
|
52
|
-
/**
|
|
53
|
-
* Validate + normalise brief fields. `repo` is trimmed and MUST be a single line
|
|
54
|
-
* (no newlines): it becomes a path tag on the refresh match AND an H1 heading in
|
|
55
|
-
* the assembled digest. `summary` is kept verbatim (operator content) but capped.
|
|
56
|
-
* Returns the normalised repo.
|
|
57
|
-
*/
|
|
58
|
-
function validateBriefFields(repo, summary, changeSummary) {
|
|
59
|
-
const normalizedRepo = (repo ?? '').trim();
|
|
60
|
-
if (normalizedRepo.length === 0)
|
|
61
|
-
throw new BadRequestError('saveProjectBrief: repo is required');
|
|
62
|
-
if (/[\r\n]/.test(normalizedRepo)) {
|
|
63
|
-
throw new BadRequestError('saveProjectBrief: repo must be a single line (no newlines)');
|
|
64
|
-
}
|
|
65
|
-
if (normalizedRepo.length > MAX_REPO_LEN) {
|
|
66
|
-
throw new BadRequestError(`saveProjectBrief: repo exceeds the ${MAX_REPO_LEN}-char cap`);
|
|
67
|
-
}
|
|
68
|
-
if (!summary || summary.trim().length === 0) {
|
|
69
|
-
throw new BadRequestError('saveProjectBrief: summary is required');
|
|
70
|
-
}
|
|
71
|
-
if (summary.length > MAX_BRIEF_SUMMARY_LEN) {
|
|
72
|
-
throw new BadRequestError(`saveProjectBrief: summary exceeds the ${MAX_BRIEF_SUMMARY_LEN}-char cap`);
|
|
73
|
-
}
|
|
74
|
-
if (changeSummary !== undefined && changeSummary.length > MAX_CHANGE_SUMMARY_LEN) {
|
|
75
|
-
throw new BadRequestError(`saveProjectBrief: changeSummary exceeds the ${MAX_CHANGE_SUMMARY_LEN}-char cap`);
|
|
76
|
-
}
|
|
77
|
-
return { repo: normalizedRepo };
|
|
78
|
-
}
|
|
79
|
-
function rowToProjectBrief(row) {
|
|
80
|
-
return {
|
|
81
|
-
id: row.id,
|
|
82
|
-
memoryId: row.memory_id,
|
|
83
|
-
tenantId: row.tenant_id,
|
|
84
|
-
repo: row.repo,
|
|
85
|
-
summary: row.summary,
|
|
86
|
-
version: row.version,
|
|
87
|
-
// SAFETY: row.status is DB-constrained to BriefStatus values; every INSERT/
|
|
88
|
-
// UPDATE in this file writes only the literal 'active' | 'superseded' | 'closed'.
|
|
89
|
-
status: row.status,
|
|
90
|
-
supersededBy: row.superseded_by,
|
|
91
|
-
supersededAt: row.superseded_at,
|
|
92
|
-
changeSummary: row.change_summary,
|
|
93
|
-
closedAt: row.closed_at,
|
|
94
|
-
createdAt: row.created_at,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
const BRIEF_COLS = `
|
|
98
|
-
id, memory_id, tenant_id, repo, summary, version, status,
|
|
99
|
-
superseded_by, superseded_at, change_summary, closed_at, created_at
|
|
100
|
-
`;
|
|
101
|
-
/** Recall-surface content for the memory mirror: repo + summary. Named (mirrors
|
|
102
|
-
* buildSkillContent) so the recall surface is deterministic + unit-testable. */
|
|
103
|
-
function buildBriefContent(repo, summary) {
|
|
104
|
-
return `${repo}\n\n${summary}`;
|
|
105
|
-
}
|
|
106
|
-
// Preflight the supersede target BEFORE inserting the new row (so the new
|
|
107
|
-
// autoincrement id can never be its own supersede target); read the
|
|
108
|
-
// predecessor version in the same SELECT for server-derived versioning.
|
|
109
|
-
// Mirrors saveSkill / saveProcess.
|
|
110
|
-
function preflightBriefSupersede(db, tenantId, supersedesId) {
|
|
111
|
-
// SAFETY: SELECT projects exactly status, version; .get() returns that
|
|
112
|
-
// shape for the matching row, or undefined when no brief/tenant pair matches.
|
|
113
|
-
const pred = db.prepare(`SELECT status, version FROM project_briefs WHERE id = ? AND tenant_id = ?`).get(supersedesId, tenantId);
|
|
114
|
-
if (!pred) {
|
|
115
|
-
throw new NotFoundError(`saveProjectBrief: brief ${supersedesId} to supersede not found for tenant ${tenantId}`);
|
|
116
|
-
}
|
|
117
|
-
if (pred.status !== 'active') {
|
|
118
|
-
throw new ConflictError(`saveProjectBrief: brief ${supersedesId} is not active (status='${pred.status}'); only active briefs can be superseded.`);
|
|
119
|
-
}
|
|
120
|
-
return pred.version + 1;
|
|
121
|
-
}
|
|
122
|
-
function insertBriefRow(db, memoryId, w, version) {
|
|
123
|
-
const result = db.prepare(`
|
|
124
|
-
INSERT INTO project_briefs(
|
|
125
|
-
memory_id, tenant_id, repo, summary, version,
|
|
126
|
-
status, superseded_by, superseded_at, change_summary, closed_at, created_at
|
|
127
|
-
) VALUES (?, ?, ?, ?, ?, 'active', NULL, NULL, ?, NULL, ?)
|
|
128
|
-
`).run(memoryId, w.tenantId, w.repo, w.summary, version, w.changeSummary, w.now);
|
|
129
|
-
return Number(result.lastInsertRowid ?? 0);
|
|
130
|
-
}
|
|
131
|
-
function supersedeBriefRow(db, w, supersedesId, briefId, version) {
|
|
132
|
-
const sup = db.prepare(`
|
|
133
|
-
UPDATE project_briefs
|
|
134
|
-
SET status = 'superseded', superseded_by = ?, superseded_at = ?
|
|
135
|
-
WHERE id = ? AND tenant_id = ? AND status = 'active' AND id != ?
|
|
136
|
-
`).run(briefId, w.now, supersedesId, w.tenantId, briefId);
|
|
137
|
-
if (sup.changes === 0) {
|
|
138
|
-
throw new ConflictError(`saveProjectBrief: brief ${supersedesId} could not be superseded (no longer active or self-reference).`);
|
|
139
|
-
}
|
|
140
|
-
appendAuditEvent(db, {
|
|
141
|
-
tenantId: w.tenantId,
|
|
142
|
-
actor: w.actor,
|
|
143
|
-
op: 'project_brief_supersede',
|
|
144
|
-
targetId: String(supersedesId),
|
|
145
|
-
metadata: {
|
|
146
|
-
brief_id: supersedesId,
|
|
147
|
-
superseded_by: briefId,
|
|
148
|
-
new_version: version,
|
|
149
|
-
refreshed: w.isRefresh,
|
|
150
|
-
...w.refreshAuditExtra,
|
|
151
|
-
},
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
/** The afterWrite body: preflight, INSERT, supersede, reload, create audit, all in one SAVEPOINT. */
|
|
155
|
-
function writeBriefRow(db, memoryId, w) {
|
|
156
|
-
const version = w.supersedesId !== undefined ? preflightBriefSupersede(db, w.tenantId, w.supersedesId) : 1;
|
|
157
|
-
const briefId = insertBriefRow(db, memoryId, w, version);
|
|
158
|
-
if (w.supersedesId !== undefined)
|
|
159
|
-
supersedeBriefRow(db, w, w.supersedesId, briefId, version);
|
|
160
|
-
// SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
|
|
161
|
-
// columns; .get() returns that row, or undefined only if the
|
|
162
|
-
// just-inserted id can't be found.
|
|
163
|
-
const row = db.prepare(`SELECT ${BRIEF_COLS} FROM project_briefs WHERE id = ?`)
|
|
164
|
-
.get(briefId);
|
|
165
|
-
if (!row)
|
|
166
|
-
throw new Error('saveProjectBrief: failed to reload saved brief row');
|
|
167
|
-
// GDPR-light metadata: ids + flags only, no brief text.
|
|
168
|
-
appendAuditEvent(db, {
|
|
169
|
-
tenantId: w.tenantId,
|
|
170
|
-
actor: w.actor,
|
|
171
|
-
op: 'project_brief_create',
|
|
172
|
-
targetId: String(briefId),
|
|
173
|
-
metadata: {
|
|
174
|
-
brief_id: briefId,
|
|
175
|
-
repo: w.repo,
|
|
176
|
-
version,
|
|
177
|
-
refreshed: w.isRefresh,
|
|
178
|
-
...w.refreshAuditExtra,
|
|
179
|
-
},
|
|
180
|
-
});
|
|
181
|
-
return row;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Create a project_brief (or a new version that supersedes an existing one). Writes
|
|
185
|
-
* the memory mirror + the project_briefs row atomically inside writeEntry's
|
|
186
|
-
* SAVEPOINT. When supersedesBriefId is given, the referenced ACTIVE row is
|
|
187
|
-
* preflighted (status + version) BEFORE the INSERT, then CAS-UPDATEd -> superseded
|
|
188
|
-
* in the same SAVEPOINT; the new version = predecessor.version + 1 (server-derived).
|
|
189
|
-
*/
|
|
190
|
-
export function saveProjectBrief(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
191
|
-
assertTenantId('saveProjectBrief', tenantId);
|
|
192
|
-
const { repo } = validateBriefFields(opts.repo, opts.summary, opts.changeSummary);
|
|
193
|
-
const isSupersede = opts.supersedesBriefId !== undefined;
|
|
194
|
-
const changeSummary = isSupersede ? (opts.changeSummary ?? null) : null;
|
|
195
|
-
const isRefresh = opts.refreshReceiptCount !== undefined;
|
|
196
|
-
const refreshAuditExtra = {};
|
|
197
|
-
if (isRefresh)
|
|
198
|
-
refreshAuditExtra.receipt_count = opts.refreshReceiptCount;
|
|
199
|
-
const now = new Date().toISOString();
|
|
200
|
-
const content = buildBriefContent(repo, opts.summary);
|
|
201
|
-
const tags = ['project_brief', ...(opts.extraTags ?? [])];
|
|
202
|
-
const mem = createMemory(content, {
|
|
203
|
-
tags,
|
|
204
|
-
layer: Layer.Semantic,
|
|
205
|
-
confidence: 'verified',
|
|
206
|
-
source: 'project_brief',
|
|
207
|
-
baseHalfLifeDays: objectHalfLifeDays(hippoRoot),
|
|
208
|
-
tenantId,
|
|
209
|
-
});
|
|
210
|
-
const w = {
|
|
211
|
-
tenantId,
|
|
212
|
-
actor,
|
|
213
|
-
repo,
|
|
214
|
-
summary: opts.summary,
|
|
215
|
-
changeSummary,
|
|
216
|
-
supersedesId: opts.supersedesBriefId,
|
|
217
|
-
isRefresh,
|
|
218
|
-
refreshAuditExtra,
|
|
219
|
-
now,
|
|
220
|
-
};
|
|
221
|
-
let savedRow;
|
|
222
|
-
writeEntry(hippoRoot, mem, {
|
|
223
|
-
actor,
|
|
224
|
-
afterWrite: (db, memoryId) => {
|
|
225
|
-
savedRow = writeBriefRow(db, memoryId, w);
|
|
226
|
-
},
|
|
227
|
-
// afterCommit covers refreshBrief (delegates here) + brief new/supersede.
|
|
228
|
-
afterCommit: () => markGraphDirty(hippoRoot, tenantId, mem.id),
|
|
229
|
-
});
|
|
230
|
-
if (!savedRow) {
|
|
231
|
-
throw new Error('saveProjectBrief: afterWrite did not populate the row');
|
|
232
|
-
}
|
|
233
|
-
return rowToProjectBrief(savedRow);
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Close (retire) an active brief. CAS guard WHERE status='active'; 0 changes
|
|
237
|
-
* distinguishes not-found from not-active. A superseded row is terminal.
|
|
238
|
-
*/
|
|
239
|
-
export function closeProjectBrief(hippoRoot, tenantId, id, actor = 'cli') {
|
|
240
|
-
assertTenantId('closeProjectBrief', tenantId);
|
|
241
|
-
const now = new Date().toISOString();
|
|
242
|
-
const db = openHippoDb(hippoRoot);
|
|
243
|
-
try {
|
|
244
|
-
db.exec('BEGIN IMMEDIATE');
|
|
245
|
-
try {
|
|
246
|
-
const updateResult = db.prepare(`
|
|
247
|
-
UPDATE project_briefs
|
|
248
|
-
SET status = 'closed', closed_at = ?
|
|
249
|
-
WHERE id = ? AND tenant_id = ? AND status = 'active'
|
|
250
|
-
`).run(now, id, tenantId);
|
|
251
|
-
if (updateResult.changes === 0) {
|
|
252
|
-
// SAFETY: SELECT projects exactly the status column; .get() returns that
|
|
253
|
-
// shape, or undefined when the id/tenant pair doesn't exist.
|
|
254
|
-
const existing = db.prepare(`SELECT status FROM project_briefs WHERE id = ? AND tenant_id = ?`).get(id, tenantId);
|
|
255
|
-
if (!existing) {
|
|
256
|
-
throw new NotFoundError(`closeProjectBrief: brief ${id} not found for tenant ${tenantId}`);
|
|
257
|
-
}
|
|
258
|
-
throw new ConflictError(`closeProjectBrief: brief ${id} is not active (status='${existing.status}'); only active briefs can be closed.`);
|
|
259
|
-
}
|
|
260
|
-
// SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
|
|
261
|
-
// columns; .get() returns that row for the just-updated id, or undefined
|
|
262
|
-
// only in an impossible race since the UPDATE above already matched it.
|
|
263
|
-
const row = db.prepare(`SELECT ${BRIEF_COLS} FROM project_briefs WHERE id = ? AND tenant_id = ?`)
|
|
264
|
-
.get(id, tenantId);
|
|
265
|
-
if (!row)
|
|
266
|
-
throw new NotFoundError(`closeProjectBrief: brief ${id} not found after UPDATE`);
|
|
267
|
-
appendAuditEvent(db, {
|
|
268
|
-
tenantId,
|
|
269
|
-
actor,
|
|
270
|
-
op: 'project_brief_close',
|
|
271
|
-
targetId: String(id),
|
|
272
|
-
metadata: { brief_id: id },
|
|
273
|
-
});
|
|
274
|
-
db.exec('COMMIT');
|
|
275
|
-
const closed = rowToProjectBrief(row);
|
|
276
|
-
// Closing removes the object from the graph. Remove its rows DIRECTLY (deterministic),
|
|
277
|
-
// not only via an enqueued rebuild whose queue item is lost if the mirror is later
|
|
278
|
-
// forgotten (the queue row cascade-deletes with the memory), which would leave the closed
|
|
279
|
-
// object stale and could block that forget. Still enqueue when a mirror exists
|
|
280
|
-
// so a concurrent rebuild re-derives consistently (harmless if it also runs).
|
|
281
|
-
removeGraphEntitiesForObject(hippoRoot, tenantId, 'project', closed.id);
|
|
282
|
-
if (closed.memoryId) {
|
|
283
|
-
markGraphDirty(hippoRoot, tenantId, closed.memoryId);
|
|
284
|
-
}
|
|
285
|
-
return closed;
|
|
286
|
-
}
|
|
287
|
-
catch (e) {
|
|
288
|
-
try {
|
|
289
|
-
db.exec('ROLLBACK');
|
|
290
|
-
}
|
|
291
|
-
catch {
|
|
292
|
-
// Ignore rollback failures — the throw below is what matters.
|
|
293
|
-
}
|
|
294
|
-
throw e;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
finally {
|
|
298
|
-
closeHippoDb(db);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
export function loadProjectBriefById(hippoRoot, tenantId, id) {
|
|
302
|
-
assertTenantId('loadProjectBriefById', tenantId);
|
|
303
|
-
const db = openHippoDb(hippoRoot);
|
|
304
|
-
try {
|
|
305
|
-
// SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
|
|
306
|
-
// columns; .get() returns that row, or undefined when the id/tenant pair
|
|
307
|
-
// doesn't exist.
|
|
308
|
-
const row = db.prepare(`SELECT ${BRIEF_COLS} FROM project_briefs WHERE id = ? AND tenant_id = ?`)
|
|
309
|
-
.get(id, tenantId);
|
|
310
|
-
return row ? rowToProjectBrief(row) : null;
|
|
311
|
-
}
|
|
312
|
-
finally {
|
|
313
|
-
closeHippoDb(db);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
export function loadProjectBriefs(hippoRoot, tenantId, opts = {}) {
|
|
317
|
-
assertTenantId('loadProjectBriefs', tenantId);
|
|
318
|
-
const limit = opts.limit ?? 100;
|
|
319
|
-
const after = keysetAfter('created_at', 'id', opts.after);
|
|
320
|
-
if (opts.status && !VALID_BRIEF_STATES.has(opts.status)) {
|
|
321
|
-
throw new BadRequestError(`loadProjectBriefs: status must be one of ${Array.from(VALID_BRIEF_STATES).join('|')}; got ${opts.status}`);
|
|
322
|
-
}
|
|
323
|
-
const db = openHippoDb(hippoRoot);
|
|
324
|
-
try {
|
|
325
|
-
const clauses = ['tenant_id = ?'];
|
|
326
|
-
const params = [tenantId];
|
|
327
|
-
if (opts.status) {
|
|
328
|
-
clauses.push('status = ?');
|
|
329
|
-
params.push(opts.status);
|
|
330
|
-
}
|
|
331
|
-
if (opts.repo) {
|
|
332
|
-
clauses.push('repo = ?');
|
|
333
|
-
params.push(opts.repo);
|
|
334
|
-
}
|
|
335
|
-
params.push(...after.params, limit);
|
|
336
|
-
// SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow columns
|
|
337
|
-
// regardless of the dynamic WHERE clause built above; .all() returns rows
|
|
338
|
-
// in that shape.
|
|
339
|
-
const rows = db.prepare(`
|
|
340
|
-
SELECT ${BRIEF_COLS} FROM project_briefs
|
|
341
|
-
WHERE ${clauses.join(' AND ')}${after.sql}
|
|
342
|
-
ORDER BY created_at DESC, id DESC
|
|
343
|
-
LIMIT ?
|
|
344
|
-
`).all(...params);
|
|
345
|
-
return rows.map(rowToProjectBrief);
|
|
346
|
-
}
|
|
347
|
-
finally {
|
|
348
|
-
closeHippoDb(db);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* The repo's CURRENT active brief, or null. By convention there is one active brief
|
|
353
|
-
* per (tenant, repo); if an operator created more than one (the DB does not prevent
|
|
354
|
-
* it, consistent with every other first-class object), the MOST-RECENT active row wins.
|
|
355
|
-
*/
|
|
356
|
-
export function loadActiveBriefForRepo(hippoRoot, tenantId, repo) {
|
|
357
|
-
assertTenantId('loadActiveBriefForRepo', tenantId);
|
|
358
|
-
const db = openHippoDb(hippoRoot);
|
|
359
|
-
try {
|
|
360
|
-
// SAFETY: SELECT ${BRIEF_COLS} projects exactly the ProjectBriefRow
|
|
361
|
-
// columns; .get() returns that row, or undefined when no active brief
|
|
362
|
-
// exists for this tenant/repo.
|
|
363
|
-
const row = db.prepare(`
|
|
364
|
-
SELECT ${BRIEF_COLS} FROM project_briefs
|
|
365
|
-
WHERE tenant_id = ? AND repo = ? AND status = 'active'
|
|
366
|
-
ORDER BY created_at DESC, id DESC
|
|
367
|
-
LIMIT 1
|
|
368
|
-
`).get(tenantId, repo);
|
|
369
|
-
return row ? rowToProjectBrief(row) : null;
|
|
370
|
-
}
|
|
371
|
-
finally {
|
|
372
|
-
closeHippoDb(db);
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
// ---------------------------------------------------------------------------
|
|
376
|
-
// Refresh assembler (the distinguishing deliverable)
|
|
377
|
-
// ---------------------------------------------------------------------------
|
|
378
|
-
/** Single-line headline for a receipt: first non-empty line, newline-stripped,
|
|
379
|
-
* truncated. Deterministic + safe for the markdown bullet list. */
|
|
380
|
-
function receiptHeadline(content) {
|
|
381
|
-
const firstLine = (content ?? '').split(/\r?\n/).find((l) => l.trim().length > 0) ?? '';
|
|
382
|
-
const trimmed = firstLine.trim();
|
|
383
|
-
return trimmed.length > MAX_RECEIPT_HEADLINE_LEN
|
|
384
|
-
? `${trimmed.slice(0, MAX_RECEIPT_HEADLINE_LEN)}...`
|
|
385
|
-
: trimmed;
|
|
386
|
-
}
|
|
387
|
-
/** The repo's receipt rows, newest first, capped at MAX_BRIEF_RECEIPTS. */
|
|
388
|
-
function loadBriefReceipts(hippoRoot, tenantId, normalizedRepo) {
|
|
389
|
-
const tag = `path:${normalizedRepo.toLowerCase()}`;
|
|
390
|
-
const likeParam = `%"${escapeLike(tag)}"%`;
|
|
391
|
-
const deny = scopeAdmitSql('');
|
|
392
|
-
const db = openHippoDb(hippoRoot);
|
|
393
|
-
try {
|
|
394
|
-
// SAFETY: SELECT projects exactly id, created, source, content (the
|
|
395
|
-
// ReceiptRow columns); .all() returns rows in that shape.
|
|
396
|
-
return db.prepare(`
|
|
397
|
-
SELECT id, created, source, content FROM memories
|
|
398
|
-
WHERE tenant_id = ?
|
|
399
|
-
AND source != 'project_brief'
|
|
400
|
-
AND LOWER(tags_json) LIKE ? ESCAPE '\\'
|
|
401
|
-
AND ${deny.sql}
|
|
402
|
-
ORDER BY created DESC, id DESC
|
|
403
|
-
LIMIT ?
|
|
404
|
-
`).all(tenantId, likeParam, ...deny.params, MAX_BRIEF_RECEIPTS);
|
|
405
|
-
}
|
|
406
|
-
finally {
|
|
407
|
-
closeHippoDb(db);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
// NOTE on ordering: the `id DESC` tiebreak is lexical on a random-ish memory id
|
|
411
|
-
// (e.g. `sem_<hex>`), NOT chronological — within the same `created` timestamp the
|
|
412
|
-
// order is stable-but-arbitrary, not insertion order. `created DESC` is the real
|
|
413
|
-
// recency ordering.
|
|
414
|
-
//
|
|
415
|
-
// Budget-aware assembly: the digest is the
|
|
416
|
-
// brief `summary`, which saveProjectBrief caps at MAX_BRIEF_SUMMARY_LEN. The
|
|
417
|
-
// receipt/headline caps (50 x ~200) could otherwise build an ~11KB body that the
|
|
418
|
-
// store then REJECTS, breaking refresh for inputs within the advertised caps. So
|
|
419
|
-
// include receipt lines newest-first only while they fit under the cap (reserving
|
|
420
|
-
// slack for the header + an omission footer), and note the omitted remainder.
|
|
421
|
-
function fitReceiptLines(receipts) {
|
|
422
|
-
const buildReceiptLine = (r) => `- ${(r.created ?? '').slice(0, 10)} [${r.source}] ${receiptHeadline(r.content)}`;
|
|
423
|
-
const receiptLines = [];
|
|
424
|
-
if (receipts.length > 0) {
|
|
425
|
-
// Header + "## Recent receipts" + a worst-case omission footer cost; keep slack
|
|
426
|
-
// so the joined markdown stays <= MAX_BRIEF_SUMMARY_LEN even after the footer.
|
|
427
|
-
const SLACK = 400;
|
|
428
|
-
let bodyBudget = MAX_BRIEF_SUMMARY_LEN - SLACK;
|
|
429
|
-
for (const r of receipts) {
|
|
430
|
-
const line = buildReceiptLine(r);
|
|
431
|
-
if (line.length + 1 > bodyBudget)
|
|
432
|
-
break;
|
|
433
|
-
receiptLines.push(line);
|
|
434
|
-
bodyBudget -= line.length + 1;
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
return receiptLines;
|
|
438
|
-
}
|
|
439
|
-
function renderBriefDigest(normalizedRepo, receiptCount, receiptLines) {
|
|
440
|
-
const omitted = receiptCount - receiptLines.length;
|
|
441
|
-
const lines = [];
|
|
442
|
-
lines.push(`# Project Brief: ${normalizedRepo}`);
|
|
443
|
-
lines.push('');
|
|
444
|
-
lines.push(omitted > 0
|
|
445
|
-
? `_Auto-assembled from ${receiptLines.length} of ${receiptCount} receipt(s)._`
|
|
446
|
-
: `_Auto-assembled from ${receiptCount} receipt(s)._`);
|
|
447
|
-
lines.push('');
|
|
448
|
-
lines.push('## Recent receipts');
|
|
449
|
-
lines.push('');
|
|
450
|
-
if (receiptCount === 0) {
|
|
451
|
-
lines.push(`_No receipts found for ${normalizedRepo}._`);
|
|
452
|
-
}
|
|
453
|
-
else {
|
|
454
|
-
lines.push(...receiptLines);
|
|
455
|
-
if (omitted > 0) {
|
|
456
|
-
lines.push('');
|
|
457
|
-
lines.push(`_... ${omitted} more receipt(s) omitted (summary cap)._`);
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
// Belt-and-suspenders: the budget loop keeps us under the cap, but hard-clamp the
|
|
461
|
-
// joined string so the store's NOT-NULL/<=cap contract can never be violated even
|
|
462
|
-
// for a pathological single oversized line.
|
|
463
|
-
let markdown = lines.join('\n');
|
|
464
|
-
if (markdown.length > MAX_BRIEF_SUMMARY_LEN) {
|
|
465
|
-
markdown = markdown.slice(0, MAX_BRIEF_SUMMARY_LEN);
|
|
466
|
-
}
|
|
467
|
-
return markdown;
|
|
468
|
-
}
|
|
469
|
-
/**
|
|
470
|
-
* Assemble the repo's recent receipts into a deterministic markdown digest, and
|
|
471
|
-
* return it WITH the receipt count (the count feeds refreshBrief's change_summary +
|
|
472
|
-
* audit metadata). NO LLM. Always returns a non-empty, valid summary (a brief
|
|
473
|
-
* `summary` is NOT NULL), including the zero-receipts case.
|
|
474
|
-
*
|
|
475
|
-
* A "receipt" = a tenant memory row carrying the repo's `path:<repo>` tag. The
|
|
476
|
-
* brief's OWN memory mirror (source='project_brief') is excluded so a brief never
|
|
477
|
-
* becomes its own receipt on the next refresh. The match is against the JSON-array
|
|
478
|
-
* serialization (each element is a double-quoted string `"path:hippo"`); the
|
|
479
|
-
* surrounding quotes are load-bearing — they stop `hip` matching `path:hippo`.
|
|
480
|
-
* `repo` is LIKE-escaped + parameterized (operator-supplied; security.md).
|
|
481
|
-
*/
|
|
482
|
-
export function assembleBriefFromReceipts(hippoRoot, tenantId, repo) {
|
|
483
|
-
assertTenantId('assembleBriefFromReceipts', tenantId);
|
|
484
|
-
const normalizedRepo = (repo ?? '').trim();
|
|
485
|
-
if (normalizedRepo.length === 0) {
|
|
486
|
-
throw new BadRequestError('assembleBriefFromReceipts: repo is required');
|
|
487
|
-
}
|
|
488
|
-
const receipts = loadBriefReceipts(hippoRoot, tenantId, normalizedRepo);
|
|
489
|
-
const markdown = renderBriefDigest(normalizedRepo, receipts.length, fitReceiptLines(receipts));
|
|
490
|
-
return { markdown, receiptCount: receipts.length };
|
|
491
|
-
}
|
|
492
|
-
/**
|
|
493
|
-
* Auto-refresh the repo's brief from its receipts: assemble the digest, then create
|
|
494
|
-
* a new version. If the repo already has an active brief it is superseded (the
|
|
495
|
-
* change_summary records the auto-refresh + the audit metadata carries
|
|
496
|
-
* `refreshed: true`); otherwise a v1 is created. Returns the new brief.
|
|
497
|
-
*
|
|
498
|
-
* The assemble (a read of `memories`) happens BEFORE writeEntry opens its SAVEPOINT;
|
|
499
|
-
* a concurrent receipt write landing between the read and the brief write simply
|
|
500
|
-
* appears in the NEXT refresh — the brief is a derived snapshot, not a transactional
|
|
501
|
-
* aggregate, so no consistency invariant is violated.
|
|
502
|
-
*/
|
|
503
|
-
export function refreshBrief(hippoRoot, tenantId, repo, actor = 'cli') {
|
|
504
|
-
assertTenantId('refreshBrief', tenantId);
|
|
505
|
-
const normalizedRepo = (repo ?? '').trim();
|
|
506
|
-
if (normalizedRepo.length === 0)
|
|
507
|
-
throw new BadRequestError('refreshBrief: repo is required');
|
|
508
|
-
const { markdown, receiptCount } = assembleBriefFromReceipts(hippoRoot, tenantId, normalizedRepo);
|
|
509
|
-
const active = loadActiveBriefForRepo(hippoRoot, tenantId, normalizedRepo);
|
|
510
|
-
return saveProjectBrief(hippoRoot, tenantId, {
|
|
511
|
-
repo: normalizedRepo,
|
|
512
|
-
summary: markdown,
|
|
513
|
-
changeSummary: active ? `auto-refresh from ${receiptCount} receipt(s)` : undefined,
|
|
514
|
-
supersedesBriefId: active ? active.id : undefined,
|
|
515
|
-
refreshReceiptCount: receiptCount,
|
|
516
|
-
// Tag the refreshed brief's mirror as repo-local so path-aware recall boosts
|
|
517
|
-
// it like the manual `brief new`/`supersede` paths do.
|
|
518
|
-
// Safe vs self-recursion: assembleBriefFromReceipts excludes
|
|
519
|
-
// source='project_brief', so the brief never becomes its own receipt.
|
|
520
|
-
extraTags: [`path:${normalizedRepo.toLowerCase()}`],
|
|
521
|
-
}, actor);
|
|
522
|
-
}
|
|
523
|
-
//# sourceMappingURL=project-briefs.js.map
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { MemoryEntry } from './memory.js';
|
|
2
|
-
export interface ProvenanceCoverage {
|
|
3
|
-
rawTotal: number;
|
|
4
|
-
rawWithEnvelope: number;
|
|
5
|
-
coverage: number;
|
|
6
|
-
gaps: Array<{
|
|
7
|
-
id: string;
|
|
8
|
-
missing: ('owner' | 'artifact_ref')[];
|
|
9
|
-
}>;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Provenance coverage gate: every `kind='raw'` row must carry both `owner`
|
|
13
|
-
* and `artifact_ref`. Distilled / superseded / archived rows are excluded —
|
|
14
|
-
* those are derivative or terminal, not source receipts. Coverage of 1.0 on
|
|
15
|
-
* a non-empty raw set is the ship gate from the Company Brain scorecard.
|
|
16
|
-
*/
|
|
17
|
-
export declare function buildProvenanceCoverage(entries: MemoryEntry[]): ProvenanceCoverage;
|
|
18
|
-
//# sourceMappingURL=provenance-coverage.d.ts.map
|
package/dist/rate-limit.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Per-key token-bucket rate limiter for inbound /v1/* requests.
|
|
3
|
-
*
|
|
4
|
-
* Bounds api-key-id enumeration: a
|
|
5
|
-
* client that drains its bucket is denied until it refills. Dependency-free
|
|
6
|
-
* and unit-testable in isolation via the injectable `now`.
|
|
7
|
-
*/
|
|
8
|
-
export interface RateLimiter {
|
|
9
|
-
/**
|
|
10
|
-
* Consume one token for `key`. Returns true if the request is allowed,
|
|
11
|
-
* false if the key's bucket is exhausted. `now` (epoch ms) is injectable
|
|
12
|
-
* for deterministic tests.
|
|
13
|
-
*/
|
|
14
|
-
check(key: string, now?: number): boolean;
|
|
15
|
-
readonly retryAfterSec: number;
|
|
16
|
-
}
|
|
17
|
-
export interface RateLimiterOpts {
|
|
18
|
-
/** Sustained refill rate in tokens per second. */
|
|
19
|
-
ratePerSec: number;
|
|
20
|
-
/** Bucket capacity — the largest burst a fresh client may spend at once. */
|
|
21
|
-
burst: number;
|
|
22
|
-
/** A bucket untouched for this many ms is dropped by the throttled sweep. */
|
|
23
|
-
idleEvictMs: number;
|
|
24
|
-
/** Hard cap on tracked keys; the least-recently-used key is evicted on overflow. */
|
|
25
|
-
maxKeys: number;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Build a token-bucket limiter. Memory is bounded two ways: a sweep (throttled
|
|
29
|
-
* to once per `idleEvictMs`) drops idle buckets, and a hard `maxKeys` cap evicts
|
|
30
|
-
* the least-recently-used key, so a client rotating source addresses cannot
|
|
31
|
-
* grow the map without bound between sweeps.
|
|
32
|
-
*/
|
|
33
|
-
export declare function createRateLimiter(opts: RateLimiterOpts): RateLimiter;
|
|
34
|
-
//# sourceMappingURL=rate-limit.d.ts.map
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { DatabaseSyncLike } from './db.js';
|
|
2
|
-
/**
|
|
3
|
-
* Path A backfill cleanup: existing raw_archive rows that were archived BEFORE
|
|
4
|
-
* commit 70180b5 left their markdown mirrors at <hippoRoot>/<layer>/<id>.md
|
|
5
|
-
* with original content intact. The DB is already redacted via migration v20;
|
|
6
|
-
* this function deletes those filesystem mirrors so RTBF holds for historical
|
|
7
|
-
* archives too.
|
|
8
|
-
*
|
|
9
|
-
* Per-row tracking via raw_archive.mirror_cleaned_at (added in v21):
|
|
10
|
-
* - SELECT only rows WHERE mirror_cleaned_at IS NULL.
|
|
11
|
-
* - On success (every layer either deleted or didn't exist), UPDATE the row
|
|
12
|
-
* with the cleanup timestamp.
|
|
13
|
-
* - On any unlink failure, leave mirror_cleaned_at NULL so the next
|
|
14
|
-
* openHippoDb call retries. Warn (capped at MAX_WARN_LOGS rows per call).
|
|
15
|
-
*
|
|
16
|
-
* Steady-state cost is one SELECT returning empty after every row has been
|
|
17
|
-
* cleaned successfully.
|
|
18
|
-
*/
|
|
19
|
-
export declare function cleanupArchivedMirrors(hippoRoot: string, db: DatabaseSyncLike): void;
|
|
20
|
-
//# sourceMappingURL=raw-archive-mirror-cleanup.d.ts.map
|
package/dist/raw-archive.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { DatabaseSyncLike } from './db.js';
|
|
2
|
-
export interface ArchiveOpts {
|
|
3
|
-
reason: string;
|
|
4
|
-
who: string;
|
|
5
|
-
/**
|
|
6
|
-
* Optional hook invoked inside the same SAVEPOINT as the archive INSERT/DELETE,
|
|
7
|
-
* after the audit row is appended and before RELEASE. Used by the Slack
|
|
8
|
-
* deletion connector to mark the deletion event seen atomically — a crash
|
|
9
|
-
* mid-archive must not leave the deletion event untracked. Throwing rolls
|
|
10
|
-
* back the entire archive (including the audit row).
|
|
11
|
-
*/
|
|
12
|
-
afterArchive?: (db: DatabaseSyncLike, archivedMemoryId: string) => void;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* The only legitimate path to remove a `kind='raw'` row from `memories`.
|
|
16
|
-
*
|
|
17
|
-
* Snapshots the full row into `raw_archive`, flips `kind` to `'archived'` so the
|
|
18
|
-
* append-only trigger lets the delete through, then deletes the row. All in one
|
|
19
|
-
* write scope, which nests inside an outer transaction (e.g. batchWriteAndDelete).
|
|
20
|
-
*
|
|
21
|
-
* Throws if the row does not exist or is not `kind='raw'`. Returns the archived_at it wrote.
|
|
22
|
-
*/
|
|
23
|
-
export declare function archiveRawMemory(db: DatabaseSyncLike, id: string, opts: ArchiveOpts): string;
|
|
24
|
-
//# sourceMappingURL=raw-archive.d.ts.map
|