hippo-memory 1.69.0 → 1.70.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 +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- 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/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- 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} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- 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 +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -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/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- 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 +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- 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 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- 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 +1 -1
- package/dist/capture/command.js +54 -41
- 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 +4 -1
- package/dist/capture/compact.js +40 -22
- 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} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- 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} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- 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.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- 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.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- 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} +5 -5
- 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} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -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 +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- 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/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- 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} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- 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 +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- 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} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- 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 +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- 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 +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- 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 +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -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/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- 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 -1
- package/dist/search/boosts.js +34 -13
- 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/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -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} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- 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/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- 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 +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- 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 +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- 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 +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- 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/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- 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 +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- 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 +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- 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 +59 -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 +28 -0
- package/dist/store/sqlite/executor.js +286 -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 +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -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 +26 -0
- package/dist/store/sqlite/store.js +295 -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 +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- 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} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- 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 +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- 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 +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- 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} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- 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 +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- 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/api.d.ts +0 -26
- package/dist/api.js +0 -29
- 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/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- 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/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /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/{recall-history.d.ts → api/recall-history.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/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +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/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +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/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +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/{salience.d.ts → core/salience.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.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +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/{secret-detect.d.ts → util/secret-detect.d.ts} +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/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { StoreNotPortedError } from '../util/sqlite-blocked.js';
|
|
2
|
+
/** Tells a refusal from the row a write answered; no row carries a `refused` key. */
|
|
3
|
+
export function isObjectRefusal(written) {
|
|
4
|
+
return 'refused' in written;
|
|
5
|
+
}
|
|
6
|
+
export function hasGroup(store, group) {
|
|
7
|
+
return group === 'base' || store[group] !== undefined;
|
|
8
|
+
}
|
|
9
|
+
/** The group's methods; a store without them throws StoreNotPortedError, which answers 501 as any unported path does. */
|
|
10
|
+
export function requireGroup(store, group) {
|
|
11
|
+
const groups = store;
|
|
12
|
+
const methods = groups[group];
|
|
13
|
+
if (methods === undefined)
|
|
14
|
+
throw new StoreNotPortedError(store.kind, group);
|
|
15
|
+
return methods;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -22,7 +22,9 @@
|
|
|
22
22
|
* The planning-fallacy detector reads `loadPredictionsByClass` and computes
|
|
23
23
|
* per-class base rates from (estimate_value, actual_value) at query time.
|
|
24
24
|
*/
|
|
25
|
-
import { type
|
|
25
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
26
|
+
import { type KeysetPosition } from '../util/keyset.js';
|
|
27
|
+
import type { PredictionSave } from './port.js';
|
|
26
28
|
export type ClosureState = 'open' | 'closed' | 'closed-unknown';
|
|
27
29
|
export declare const VALID_CLOSURE_STATES: ReadonlySet<ClosureState>;
|
|
28
30
|
export interface Prediction {
|
|
@@ -72,6 +74,10 @@ export interface ListPredictionsOpts {
|
|
|
72
74
|
* structured store used by the planning-fallacy detector.
|
|
73
75
|
*/
|
|
74
76
|
export declare function savePrediction(hippoRoot: string, tenantId: string, opts: SavePredictionOpts, actor?: string): Prediction;
|
|
77
|
+
/** The memory row that mirrors a claim into recall, built here alone so every store keeps the same row for it. */
|
|
78
|
+
export declare function predictionMirror(tenantId: string, claim: SavePredictionOpts, baseHalfLifeDays: number): MemoryEntry;
|
|
79
|
+
/** The store port's save on hippo.db: the mirror goes in as the port's writeEntry has it, tenant check included, and its predictions row shares that write scope, so neither lands alone. */
|
|
80
|
+
export declare function writePrediction(hippoRoot: string, tenantId: string, save: PredictionSave, actor: string): Prediction;
|
|
75
81
|
/**
|
|
76
82
|
* Close an existing open prediction. Updates the predictions row only;
|
|
77
83
|
* the memory mirror is NOT mutated in v1 (predictions table is canonical).
|
|
@@ -106,6 +112,11 @@ export interface PredictionBaserate {
|
|
|
106
112
|
* Empty when nClosed = 0. */
|
|
107
113
|
summary: string;
|
|
108
114
|
}
|
|
115
|
+
/** One closed prediction as the baserate reads it: both values set. */
|
|
116
|
+
export interface BaserateRow {
|
|
117
|
+
estimate_value: number;
|
|
118
|
+
actual_value: number;
|
|
119
|
+
}
|
|
109
120
|
/**
|
|
110
121
|
* Compute base-rate stats for closed predictions in a class for the
|
|
111
122
|
* planning-fallacy detector: Lovallo-Kahneman (2003) inside-vs-outside view.
|
|
@@ -120,9 +131,11 @@ export declare function computePredictionBaserate(hippoRoot: string, tenantId: s
|
|
|
120
131
|
/** False skips the predict_baserate audit so that channel only records deliberate
|
|
121
132
|
* baserate calls, not every recall the planning-fallacy orchestrator inspects. */
|
|
122
133
|
emitAudit?: boolean): PredictionBaserate;
|
|
134
|
+
/** A class's stats over its closed rows, summed in the order given. Every store computes them here, so no two can disagree on the arithmetic. */
|
|
135
|
+
export declare function predictionBaserateOf(classTag: string, rows: readonly BaserateRow[]): PredictionBaserate;
|
|
123
136
|
export declare function loadOpenPredictions(hippoRoot: string, tenantId: string, opts?: {
|
|
124
137
|
classTag?: string;
|
|
125
138
|
limit?: number;
|
|
126
139
|
after?: KeysetPosition;
|
|
127
140
|
}): Prediction[];
|
|
128
|
-
//# sourceMappingURL=
|
|
141
|
+
//# sourceMappingURL=predictions.d.ts.map
|
|
@@ -22,14 +22,15 @@
|
|
|
22
22
|
* The planning-fallacy detector reads `loadPredictionsByClass` and computes
|
|
23
23
|
* per-class base rates from (estimate_value, actual_value) at query time.
|
|
24
24
|
*/
|
|
25
|
-
import { BadRequestError, NotFoundError } from '../api-errors.js';
|
|
26
|
-
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
27
|
-
import {
|
|
28
|
-
import { assertTenantId } from '
|
|
29
|
-
import { createMemory, Layer } from '../memory.js';
|
|
30
|
-
import { appendAuditEvent } from '
|
|
31
|
-
import { loadConfig } from '../config.js';
|
|
32
|
-
import { keysetAfter } from '../keyset.js';
|
|
25
|
+
import { BadRequestError, NotFoundError } from '../core/api-errors.js';
|
|
26
|
+
import { openHippoDb, closeHippoDb, withWriteScope } from '../db/index.js';
|
|
27
|
+
import { writeEntryAt } from './sqlite/entry-writes-group.js';
|
|
28
|
+
import { assertTenantId } from './tenant.js';
|
|
29
|
+
import { createMemory, Layer } from '../core/memory.js';
|
|
30
|
+
import { appendAuditEvent } from './audit.js';
|
|
31
|
+
import { loadConfig } from '../core/config.js';
|
|
32
|
+
import { keysetAfter } from '../util/keyset.js';
|
|
33
|
+
const DEFAULT_PREDICTION_PAGE_SIZE = 100;
|
|
33
34
|
export const VALID_CLOSURE_STATES = new Set([
|
|
34
35
|
'open',
|
|
35
36
|
'closed',
|
|
@@ -74,25 +75,31 @@ export function savePrediction(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
|
74
75
|
throw new BadRequestError('savePrediction: classTag is required');
|
|
75
76
|
if (!opts.claimText)
|
|
76
77
|
throw new BadRequestError('savePrediction: claimText is required');
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
const mirror = predictionMirror(tenantId, opts, loadConfig(hippoRoot).defaultHalfLifeDays);
|
|
79
|
+
return writePrediction(hippoRoot, tenantId, { ...opts, mirror }, actor);
|
|
80
|
+
}
|
|
81
|
+
/** The memory row that mirrors a claim into recall, built here alone so every store keeps the same row for it. */
|
|
82
|
+
export function predictionMirror(tenantId, claim, baseHalfLifeDays) {
|
|
83
|
+
return createMemory(claim.claimText, {
|
|
84
|
+
tags: ['prediction', claim.classTag],
|
|
80
85
|
layer: Layer.Semantic,
|
|
81
86
|
confidence: 'observed',
|
|
82
87
|
source: 'prediction',
|
|
83
88
|
// SAFETY: 'distilled' is a valid MemoryKind literal (see memory.ts).
|
|
84
89
|
kind: 'distilled',
|
|
85
|
-
baseHalfLifeDays
|
|
90
|
+
baseHalfLifeDays,
|
|
86
91
|
tenantId,
|
|
87
92
|
});
|
|
93
|
+
}
|
|
94
|
+
/** The store port's save on hippo.db: the mirror goes in as the port's writeEntry has it, tenant check included, and its predictions row shares that write scope, so neither lands alone. */
|
|
95
|
+
export function writePrediction(hippoRoot, tenantId, save, actor) {
|
|
96
|
+
assertTenantId('savePrediction', tenantId);
|
|
97
|
+
const now = new Date().toISOString();
|
|
88
98
|
// Captured for the return value; populated inside afterWrite hook so the
|
|
89
99
|
// INSERT and the memory write share a SAVEPOINT.
|
|
90
100
|
let savedRow;
|
|
91
|
-
|
|
92
|
-
actor
|
|
93
|
-
afterWrite: (db, memoryId) => {
|
|
94
|
-
savedRow = insertPredictionRow(db, memoryId, tenantId, opts, now, actor);
|
|
95
|
-
},
|
|
101
|
+
writeEntryAt(hippoRoot, { entry: save.mirror, actor }, (db, memoryId) => {
|
|
102
|
+
savedRow = insertPredictionRow(db, memoryId, tenantId, save, { now, actor });
|
|
96
103
|
});
|
|
97
104
|
if (!savedRow) {
|
|
98
105
|
// Cannot reach here without the afterWrite throwing first; defensive.
|
|
@@ -100,8 +107,8 @@ export function savePrediction(hippoRoot, tenantId, opts, actor = 'cli') {
|
|
|
100
107
|
}
|
|
101
108
|
return rowToPrediction(savedRow);
|
|
102
109
|
}
|
|
103
|
-
|
|
104
|
-
|
|
110
|
+
function insertPredictionRow(db, memoryId, tenantId, opts, stamp) {
|
|
111
|
+
const { now, actor } = stamp;
|
|
105
112
|
const result = db.prepare(`
|
|
106
113
|
INSERT INTO predictions(
|
|
107
114
|
memory_id, tenant_id, class_tag, claim_text,
|
|
@@ -121,21 +128,24 @@ function insertPredictionRow(db, memoryId, tenantId, opts, now, actor) {
|
|
|
121
128
|
if (!row) {
|
|
122
129
|
throw new Error('Failed to reload saved prediction row');
|
|
123
130
|
}
|
|
131
|
+
auditPredictionCreate(db, { tenantId, actor, predictionId }, opts);
|
|
132
|
+
return row;
|
|
133
|
+
}
|
|
134
|
+
function auditPredictionCreate(db, who, opts) {
|
|
124
135
|
// GDPR-light audit metadata: prediction_id + class_tag + flags only.
|
|
125
136
|
// No claim_text in metadata; the predictions table holds it canonically.
|
|
126
137
|
appendAuditEvent(db, {
|
|
127
|
-
tenantId,
|
|
128
|
-
actor,
|
|
138
|
+
tenantId: who.tenantId,
|
|
139
|
+
actor: who.actor,
|
|
129
140
|
op: 'predict_create',
|
|
130
|
-
targetId: String(predictionId),
|
|
141
|
+
targetId: String(who.predictionId),
|
|
131
142
|
metadata: {
|
|
132
|
-
prediction_id: predictionId,
|
|
143
|
+
prediction_id: who.predictionId,
|
|
133
144
|
class_tag: opts.classTag,
|
|
134
145
|
has_estimate: opts.estimateValue !== undefined && opts.estimateValue !== null,
|
|
135
146
|
target_date: opts.targetDate ?? null,
|
|
136
147
|
},
|
|
137
148
|
});
|
|
138
|
-
return row;
|
|
139
149
|
}
|
|
140
150
|
/**
|
|
141
151
|
* Close an existing open prediction. Updates the predictions row only;
|
|
@@ -150,28 +160,16 @@ export function closePrediction(hippoRoot, tenantId, id, opts, actor = 'cli') {
|
|
|
150
160
|
const now = new Date().toISOString();
|
|
151
161
|
const db = openHippoDb(hippoRoot);
|
|
152
162
|
try {
|
|
153
|
-
db
|
|
154
|
-
|
|
155
|
-
const row = closeOpenPredictionRow(db, tenantId, id, opts, now, actor);
|
|
156
|
-
db.exec('COMMIT');
|
|
157
|
-
return rowToPrediction(row);
|
|
158
|
-
}
|
|
159
|
-
catch (e) {
|
|
160
|
-
try {
|
|
161
|
-
db.exec('ROLLBACK');
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
// Ignore rollback failures — the throw below is what matters.
|
|
165
|
-
}
|
|
166
|
-
throw e;
|
|
167
|
-
}
|
|
163
|
+
const row = withWriteScope(db, 'close_prediction', () => closeOpenPredictionRow(db, tenantId, id, opts, { now, actor }));
|
|
164
|
+
return rowToPrediction(row);
|
|
168
165
|
}
|
|
169
166
|
finally {
|
|
170
167
|
closeHippoDb(db);
|
|
171
168
|
}
|
|
172
169
|
}
|
|
173
170
|
/** Closes the row, reloads it and audits the close; the caller owns the transaction. */
|
|
174
|
-
function closeOpenPredictionRow(db, tenantId, id, opts,
|
|
171
|
+
function closeOpenPredictionRow(db, tenantId, id, opts, stamp) {
|
|
172
|
+
const { now, actor } = stamp;
|
|
175
173
|
// closure_state='open' in the WHERE stops a retried close from overwriting
|
|
176
174
|
// actual_value and auditing twice; zero changed rows means not found or already closed.
|
|
177
175
|
const updateResult = db.prepare(`
|
|
@@ -237,7 +235,7 @@ export function loadPredictionById(hippoRoot, tenantId, id) {
|
|
|
237
235
|
}
|
|
238
236
|
export function loadPredictionsByClass(hippoRoot, tenantId, classTag, opts = {}) {
|
|
239
237
|
assertTenantId('loadPredictionsByClass', tenantId);
|
|
240
|
-
const limit = opts.limit ??
|
|
238
|
+
const limit = opts.limit ?? DEFAULT_PREDICTION_PAGE_SIZE;
|
|
241
239
|
const after = keysetAfter('created_at', 'id', opts.after);
|
|
242
240
|
const db = openHippoDb(hippoRoot);
|
|
243
241
|
try {
|
|
@@ -290,7 +288,7 @@ export function loadAllPredictions(hippoRoot, tenantId, opts = {}) {
|
|
|
290
288
|
WHERE tenant_id = ?${after.sql}
|
|
291
289
|
ORDER BY created_at DESC, id DESC
|
|
292
290
|
LIMIT ?
|
|
293
|
-
`).all(tenantId, ...after.params, opts.limit ??
|
|
291
|
+
`).all(tenantId, ...after.params, opts.limit ?? DEFAULT_PREDICTION_PAGE_SIZE);
|
|
294
292
|
return rows.map(rowToPrediction);
|
|
295
293
|
}
|
|
296
294
|
finally {
|
|
@@ -316,6 +314,7 @@ emitAudit = true) {
|
|
|
316
314
|
throw new BadRequestError('computePredictionBaserate: classTag is required');
|
|
317
315
|
const db = openHippoDb(hippoRoot);
|
|
318
316
|
try {
|
|
317
|
+
// Ordered by id because the float sums differ with row order, and another store must reach the same figures.
|
|
319
318
|
// SAFETY: rows' shape matches the two columns named in the SELECT above.
|
|
320
319
|
const rows = db.prepare(`
|
|
321
320
|
SELECT estimate_value, actual_value
|
|
@@ -325,29 +324,12 @@ emitAudit = true) {
|
|
|
325
324
|
AND closure_state = 'closed'
|
|
326
325
|
AND estimate_value IS NOT NULL
|
|
327
326
|
AND actual_value IS NOT NULL
|
|
327
|
+
ORDER BY id
|
|
328
328
|
`).all(tenantId, classTag);
|
|
329
|
-
const
|
|
330
|
-
|
|
331
|
-
// Audit zero-result reads too — agents probing empty classes is
|
|
332
|
-
// a signal worth recording. Skipped when emitAudit=false: the orchestrator's own
|
|
333
|
-
// recall_autodebias_hint audit fires only when nClosed > 0, so no signal is lost.
|
|
334
|
-
if (emitAudit)
|
|
335
|
-
auditBaserateRead(db, tenantId, actor, classTag, 0);
|
|
336
|
-
return {
|
|
337
|
-
classTag,
|
|
338
|
-
nClosed: 0,
|
|
339
|
-
nRatioEligible: 0,
|
|
340
|
-
meanEstimate: null,
|
|
341
|
-
meanActual: null,
|
|
342
|
-
meanRatio: null,
|
|
343
|
-
p50Ratio: null,
|
|
344
|
-
mae: null,
|
|
345
|
-
summary: '',
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
const baserate = baserateFromRows(classTag, rows);
|
|
329
|
+
const baserate = predictionBaserateOf(classTag, rows);
|
|
330
|
+
// An empty class is audited too, since an agent probing one is a signal; the recall path passes false and audits its own hint.
|
|
349
331
|
if (emitAudit)
|
|
350
|
-
auditBaserateRead(db, tenantId, actor, classTag, nClosed);
|
|
332
|
+
auditBaserateRead(db, tenantId, actor, classTag, baserate.nClosed);
|
|
351
333
|
return baserate;
|
|
352
334
|
}
|
|
353
335
|
finally {
|
|
@@ -363,9 +345,12 @@ function auditBaserateRead(db, tenantId, actor, classTag, nClosed) {
|
|
|
363
345
|
metadata: { class_tag: classTag, n_closed: nClosed },
|
|
364
346
|
});
|
|
365
347
|
}
|
|
366
|
-
/**
|
|
367
|
-
function
|
|
348
|
+
/** A class's stats over its closed rows, summed in the order given. Every store computes them here, so no two can disagree on the arithmetic. */
|
|
349
|
+
export function predictionBaserateOf(classTag, rows) {
|
|
368
350
|
const nClosed = rows.length;
|
|
351
|
+
if (nClosed === 0) {
|
|
352
|
+
return { classTag, nClosed: 0, nRatioEligible: 0, meanEstimate: null, meanActual: null, meanRatio: null, p50Ratio: null, mae: null, summary: '' };
|
|
353
|
+
}
|
|
369
354
|
const ratioEligible = rows.filter((r) => r.estimate_value > 0);
|
|
370
355
|
const nRatioEligible = ratioEligible.length;
|
|
371
356
|
const meanEstimate = rows.reduce((s, r) => s + r.estimate_value, 0) / nClosed;
|
|
@@ -399,7 +384,7 @@ function baserateFromRows(classTag, rows) {
|
|
|
399
384
|
}
|
|
400
385
|
export function loadOpenPredictions(hippoRoot, tenantId, opts = {}) {
|
|
401
386
|
assertTenantId('loadOpenPredictions', tenantId);
|
|
402
|
-
const limit = opts.limit ??
|
|
387
|
+
const limit = opts.limit ?? DEFAULT_PREDICTION_PAGE_SIZE;
|
|
403
388
|
const after = keysetAfter('created_at', 'id', opts.after);
|
|
404
389
|
const db = openHippoDb(hippoRoot);
|
|
405
390
|
try {
|
|
@@ -434,4 +419,4 @@ export function loadOpenPredictions(hippoRoot, tenantId, opts = {}) {
|
|
|
434
419
|
closeHippoDb(db);
|
|
435
420
|
}
|
|
436
421
|
}
|
|
437
|
-
//# sourceMappingURL=
|
|
422
|
+
//# sourceMappingURL=predictions.js.map
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import type {
|
|
3
|
-
import { type KeysetPosition } from './keyset.js';
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { QuarantineApproval, QuarantineListQuery, QuarantineRejection, QuarantinedMemory } from './port.js';
|
|
4
3
|
export declare const QUARANTINE_SCOPE_PREFIX = "quarantine:private:";
|
|
5
4
|
/** Scope a quarantined memory is stored under; matches PRIVATE_SCOPE_RE so every default-deny site hides it. */
|
|
6
5
|
export declare function quarantineScopeFor(original: string | null): string;
|
|
7
|
-
export declare function isQuarantineScope(scope: string | null | undefined): boolean;
|
|
8
6
|
export type QuarantineStatus = 'pending' | 'approved' | 'rejected';
|
|
9
7
|
export interface QuarantineRow {
|
|
10
8
|
tenantId: string;
|
|
@@ -25,8 +23,10 @@ export interface RecordQuarantineOpts {
|
|
|
25
23
|
}
|
|
26
24
|
/** Insert the quarantine row + its audit event; caller runs this inside the memory's own write transaction. */
|
|
27
25
|
export declare function recordQuarantine(db: DatabaseSyncLike, opts: RecordQuarantineOpts): void;
|
|
28
|
-
|
|
29
|
-
export declare function
|
|
30
|
-
|
|
31
|
-
export declare function
|
|
26
|
+
/** A page of the tenant's records, each with its memory's content read in the same query batch. */
|
|
27
|
+
export declare function listQuarantinedAt(db: DatabaseSyncLike, tenantId: string, { status, limit, after }: QuarantineListQuery): QuarantinedMemory[];
|
|
28
|
+
/** Puts the memory back under its original scope; the scope guard refuses a row moved since it was quarantined. */
|
|
29
|
+
export declare function approveQuarantinedAt(db: DatabaseSyncLike, tenantId: string, id: string, actor: string): QuarantineApproval;
|
|
30
|
+
/** Marks the record rejected; the memory row is left as stored. */
|
|
31
|
+
export declare function rejectQuarantinedAt(db: DatabaseSyncLike, tenantId: string, id: string, actor: string): QuarantineRejection;
|
|
32
32
|
//# sourceMappingURL=quarantine.d.ts.map
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
// The memory_quarantine table: the review queue's rows, and the approve and reject writes with their audit rows.
|
|
2
2
|
import { appendAuditEvent } from './audit.js';
|
|
3
|
-
import {
|
|
3
|
+
import { withWriteScopeOr } from '../db/index.js';
|
|
4
|
+
import { keysetAfter } from '../util/keyset.js';
|
|
5
|
+
import { selectEntriesByIds } from './entry-reads.js';
|
|
4
6
|
export const QUARANTINE_SCOPE_PREFIX = 'quarantine:private:';
|
|
5
7
|
/** Scope a quarantined memory is stored under; matches PRIVATE_SCOPE_RE so every default-deny site hides it. */
|
|
6
8
|
export function quarantineScopeFor(original) {
|
|
7
9
|
return `${QUARANTINE_SCOPE_PREFIX}${original ?? 'unscoped'}`;
|
|
8
10
|
}
|
|
9
|
-
export function isQuarantineScope(scope) {
|
|
10
|
-
return scope != null && scope.startsWith(QUARANTINE_SCOPE_PREFIX);
|
|
11
|
-
}
|
|
12
11
|
const SELECT_COLUMNS = 'tenant_id, memory_id, original_scope, reason, status, quarantined_at, decided_at, decided_by';
|
|
13
12
|
function fromDbRow(row) {
|
|
14
13
|
return {
|
|
@@ -16,31 +15,19 @@ function fromDbRow(row) {
|
|
|
16
15
|
memoryId: row.memory_id,
|
|
17
16
|
originalScope: row.original_scope,
|
|
18
17
|
reason: row.reason,
|
|
19
|
-
// SAFETY: this module's
|
|
18
|
+
// SAFETY: the quarantine INSERT and this module's UPDATE statements are the only writers of status.
|
|
20
19
|
status: row.status,
|
|
21
20
|
quarantinedAt: row.quarantined_at,
|
|
22
21
|
decidedAt: row.decided_at,
|
|
23
22
|
decidedBy: row.decided_by,
|
|
24
23
|
};
|
|
25
24
|
}
|
|
26
|
-
|
|
27
|
-
export function recordQuarantine(db, opts) {
|
|
28
|
-
db.prepare(`INSERT INTO memory_quarantine (tenant_id, memory_id, original_scope, reason, status, quarantined_at)
|
|
29
|
-
VALUES (?, ?, ?, ?, 'pending', ?)`).run(opts.tenantId, opts.memoryId, opts.originalScope, opts.reason, new Date().toISOString());
|
|
30
|
-
appendAuditEvent(db, {
|
|
31
|
-
tenantId: opts.tenantId,
|
|
32
|
-
actor: opts.actor,
|
|
33
|
-
op: 'quarantine',
|
|
34
|
-
targetId: opts.memoryId,
|
|
35
|
-
metadata: { reason: opts.reason, originalScope: opts.originalScope },
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
export function getQuarantineRow(db, tenantId, memoryId) {
|
|
25
|
+
function getQuarantineRow(db, tenantId, memoryId) {
|
|
39
26
|
const row = db.prepare(`SELECT ${SELECT_COLUMNS} FROM memory_quarantine WHERE tenant_id = ? AND memory_id = ?`)
|
|
40
27
|
.get(tenantId, memoryId);
|
|
41
28
|
return row ? fromDbRow(row) : null;
|
|
42
29
|
}
|
|
43
|
-
|
|
30
|
+
function listQuarantineRows(db, tenantId, status = 'pending', limit = 100, afterRow) {
|
|
44
31
|
// A pending row whose memory was deleted (e.g. Slack message_deleted) is dead; keep its history, drop it from the queue.
|
|
45
32
|
const live = status === 'pending'
|
|
46
33
|
? ' AND EXISTS (SELECT 1 FROM memories m WHERE m.id = memory_quarantine.memory_id AND m.tenant_id = memory_quarantine.tenant_id)'
|
|
@@ -55,12 +42,67 @@ export function listQuarantineRows(db, tenantId, status = 'pending', limit = 100
|
|
|
55
42
|
// SAFETY: both branches select SELECT_COLUMNS, matching QuarantineDbRow's field set.
|
|
56
43
|
return rows.map(fromDbRow);
|
|
57
44
|
}
|
|
58
|
-
|
|
45
|
+
/** Insert the quarantine row + its audit event; caller runs this inside the memory's own write transaction. */
|
|
46
|
+
export function recordQuarantine(db, opts) {
|
|
47
|
+
db.prepare(`INSERT INTO memory_quarantine (tenant_id, memory_id, original_scope, reason, status, quarantined_at)
|
|
48
|
+
VALUES (?, ?, ?, ?, 'pending', ?)`).run(opts.tenantId, opts.memoryId, opts.originalScope, opts.reason, new Date().toISOString());
|
|
49
|
+
appendAuditEvent(db, {
|
|
50
|
+
tenantId: opts.tenantId,
|
|
51
|
+
actor: opts.actor,
|
|
52
|
+
op: 'quarantine',
|
|
53
|
+
targetId: opts.memoryId,
|
|
54
|
+
metadata: { reason: opts.reason, originalScope: opts.originalScope },
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function approveQuarantineRow(db, tenantId, memoryId, decidedBy) {
|
|
59
58
|
db.prepare(`UPDATE memory_quarantine SET status = 'approved', decided_at = ?, decided_by = ? WHERE tenant_id = ? AND memory_id = ?`)
|
|
60
59
|
.run(new Date().toISOString(), decidedBy, tenantId, memoryId);
|
|
61
60
|
}
|
|
62
|
-
|
|
61
|
+
function rejectQuarantineRow(db, tenantId, memoryId, decidedBy) {
|
|
63
62
|
db.prepare(`UPDATE memory_quarantine SET status = 'rejected', decided_at = ?, decided_by = ? WHERE tenant_id = ? AND memory_id = ?`)
|
|
64
63
|
.run(new Date().toISOString(), decidedBy, tenantId, memoryId);
|
|
65
64
|
}
|
|
65
|
+
/** A page of the tenant's records, each with its memory's content read in the same query batch. */
|
|
66
|
+
export function listQuarantinedAt(db, tenantId, { status, limit, after }) {
|
|
67
|
+
const rows = listQuarantineRows(db, tenantId, status, limit, after);
|
|
68
|
+
const entries = selectEntriesByIds(db, rows.map((row) => row.memoryId), tenantId);
|
|
69
|
+
return rows.map((row) => ({ ...row, content: entries.get(row.memoryId)?.content ?? null }));
|
|
70
|
+
}
|
|
71
|
+
/** The pending record, or why a decision on `id` is refused. */
|
|
72
|
+
function pendingOrRefusal(db, tenantId, id) {
|
|
73
|
+
const row = getQuarantineRow(db, tenantId, id);
|
|
74
|
+
if (!row)
|
|
75
|
+
return { outcome: 'not_quarantined' };
|
|
76
|
+
if (row.status !== 'pending')
|
|
77
|
+
return { outcome: 'already_decided', status: row.status };
|
|
78
|
+
return row;
|
|
79
|
+
}
|
|
80
|
+
/** Puts the memory back under its original scope; the scope guard refuses a row moved since it was quarantined. */
|
|
81
|
+
export function approveQuarantinedAt(db, tenantId, id, actor) {
|
|
82
|
+
return withWriteScopeOr(db, 'quarantine_approve', (rollback) => {
|
|
83
|
+
const row = pendingOrRefusal(db, tenantId, id);
|
|
84
|
+
if ('outcome' in row)
|
|
85
|
+
return rollback(row);
|
|
86
|
+
const quarantineScope = quarantineScopeFor(row.originalScope);
|
|
87
|
+
const updated = db
|
|
88
|
+
.prepare(`UPDATE memories SET scope = ? WHERE id = ? AND tenant_id = ? AND scope = ?`)
|
|
89
|
+
.run(row.originalScope, id, tenantId, quarantineScope);
|
|
90
|
+
if (Number(updated.changes ?? 0) !== 1)
|
|
91
|
+
return rollback({ outcome: 'scope_moved' });
|
|
92
|
+
approveQuarantineRow(db, tenantId, id, actor);
|
|
93
|
+
appendAuditEvent(db, { tenantId, actor, op: 'quarantine_approve', targetId: id, metadata: { originalScope: row.originalScope } });
|
|
94
|
+
return { outcome: 'approved' };
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
/** Marks the record rejected; the memory row is left as stored. */
|
|
98
|
+
export function rejectQuarantinedAt(db, tenantId, id, actor) {
|
|
99
|
+
return withWriteScopeOr(db, 'quarantine_reject', (rollback) => {
|
|
100
|
+
const row = pendingOrRefusal(db, tenantId, id);
|
|
101
|
+
if ('outcome' in row)
|
|
102
|
+
return rollback(row);
|
|
103
|
+
rejectQuarantineRow(db, tenantId, id, actor);
|
|
104
|
+
appendAuditEvent(db, { tenantId, actor, op: 'quarantine_reject', targetId: id, metadata: {} });
|
|
105
|
+
return { outcome: 'rejected' };
|
|
106
|
+
});
|
|
107
|
+
}
|
|
66
108
|
//# sourceMappingURL=quarantine.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DatabaseSyncLike } from '
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
2
|
export interface ArchiveOpts {
|
|
3
3
|
reason: string;
|
|
4
4
|
who: string;
|
|
@@ -11,6 +11,8 @@ export interface ArchiveOpts {
|
|
|
11
11
|
*/
|
|
12
12
|
afterArchive?: (db: DatabaseSyncLike, archivedMemoryId: string) => void;
|
|
13
13
|
}
|
|
14
|
+
/** Stamps the archived copy of `memoryId` as having its markdown mirror cleaned at `at`. */
|
|
15
|
+
export declare function markMirrorCleaned(db: DatabaseSyncLike, memoryId: string, at: string): void;
|
|
14
16
|
/**
|
|
15
17
|
* The only legitimate path to remove a `kind='raw'` row from `memories`.
|
|
16
18
|
*
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { BadRequestError, NotFoundError } from '
|
|
2
|
-
import { isFtsAvailable, withWriteScope } from '
|
|
1
|
+
import { BadRequestError, NotFoundError } from '../core/api-errors.js';
|
|
2
|
+
import { isFtsAvailable, withWriteScope } from '../db/index.js';
|
|
3
3
|
import { appendAuditEvent, reportAuditWriteFailure } from './audit.js';
|
|
4
4
|
import { markSummaryDirtyInTx } from './summary-dirty.js';
|
|
5
|
+
/** Stamps the archived copy of `memoryId` as having its markdown mirror cleaned at `at`. */
|
|
6
|
+
export function markMirrorCleaned(db, memoryId, at) {
|
|
7
|
+
db.prepare(`UPDATE raw_archive SET mirror_cleaned_at = ? WHERE memory_id = ?`).run(at, memoryId);
|
|
8
|
+
}
|
|
5
9
|
function loadRawRow(db, id) {
|
|
6
10
|
// SAFETY: SELECT * FROM memories returns every column of the memories table; only
|
|
7
11
|
// kind, tenant_id, and dag_parent_id are read below, all guaranteed present (possibly
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
* these for its own call sites AND re-exports them for back-compat
|
|
6
6
|
* (`api.isPrivateScope`, test imports of `passesScopeFilterForRecall`).
|
|
7
7
|
*/
|
|
8
|
-
import { ForbiddenError } from '
|
|
8
|
+
import { ForbiddenError } from '../core/api-errors.js';
|
|
9
9
|
/**
|
|
10
10
|
* Literal scopes excluded from recall by default-deny when the
|
|
11
11
|
* caller passes no `scope`. The SQL clause in `loadSearchRows` and the JS
|
|
12
|
-
* helper `passesScopeFilterForRecall` (src/api.ts) both read from this
|
|
12
|
+
* helper `passesScopeFilterForRecall` (src/api/index.ts) both read from this
|
|
13
13
|
* constant. Adding a deny scope is a one-place change.
|
|
14
14
|
*
|
|
15
15
|
* Regex-based denies (e.g. `<source>:private:*`) stay in
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
* these for its own call sites AND re-exports them for back-compat
|
|
6
6
|
* (`api.isPrivateScope`, test imports of `passesScopeFilterForRecall`).
|
|
7
7
|
*/
|
|
8
|
-
import { BadRequestError, ForbiddenError } from '
|
|
9
|
-
import { MAX_ID_LEN } from '
|
|
8
|
+
import { BadRequestError, ForbiddenError } from '../core/api-errors.js';
|
|
9
|
+
import { MAX_ID_LEN } from '../util/http-util.js';
|
|
10
10
|
/**
|
|
11
11
|
* Literal scopes excluded from recall by default-deny when the
|
|
12
12
|
* caller passes no `scope`. The SQL clause in `loadSearchRows` and the JS
|
|
13
|
-
* helper `passesScopeFilterForRecall` (src/api.ts) both read from this
|
|
13
|
+
* helper `passesScopeFilterForRecall` (src/api/index.ts) both read from this
|
|
14
14
|
* constant. Adding a deny scope is a one-place change.
|
|
15
15
|
*
|
|
16
16
|
* Regex-based denies (e.g. `<source>:private:*`) stay in
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
* swallowed (matches the api.ts ~2843 "audit emit failed" precedent — no
|
|
15
15
|
* new debug env var).
|
|
16
16
|
*/
|
|
17
|
-
import { type DatabaseSyncLike } from '
|
|
18
|
-
import type { RerankStep } from '
|
|
17
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
18
|
+
import type { RerankStep } from '../core/search-types.js';
|
|
19
19
|
import { type DeliveryEventInput } from './delivery-recorder.js';
|
|
20
20
|
/** One ranked result to persist alongside its trace row. */
|
|
21
21
|
export interface RecallTraceResultInput {
|
|
@@ -44,10 +44,10 @@ export interface RecallTraceInput {
|
|
|
44
44
|
* transaction, on the connection handed in. Fail-soft: never throws —
|
|
45
45
|
* logs to stderr and returns null on any failure.
|
|
46
46
|
*
|
|
47
|
-
* Connection policy
|
|
48
|
-
*
|
|
49
|
-
* `writeRecallTraceAtRoot` instead, since
|
|
50
|
-
* closed by the time tracing runs.
|
|
47
|
+
* Connection policy: api.recall and api.getContext reach this through
|
|
48
|
+
* `finishRecallAt`, on the handle that recall's other writes use. CLI
|
|
49
|
+
* cmdRecall goes through `writeRecallTraceAtRoot` instead, since its audit
|
|
50
|
+
* handle is already closed by the time tracing runs.
|
|
51
51
|
*/
|
|
52
52
|
export declare function writeRecallTrace(db: DatabaseSyncLike, input: RecallTraceInput): number | null;
|
|
53
53
|
/**
|
|
@@ -55,11 +55,10 @@ export declare function writeRecallTrace(db: DatabaseSyncLike, input: RecallTrac
|
|
|
55
55
|
* writes the trace, and closes. Returns the new trace id, or null on any
|
|
56
56
|
* failure (fail-soft).
|
|
57
57
|
*
|
|
58
|
-
* Used at
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* tests/api-recall-no-side-effects.test.ts).
|
|
58
|
+
* Used at CLI cmdRecall, where the block's own convention is per-call
|
|
59
|
+
* handles (writeEntry, saveIndex) and the earlier audit handle is already
|
|
60
|
+
* closed. NOT used by api.recall, which must reuse the caller's open handle
|
|
61
|
+
* (no-side-effects contract, tests/api-recall-no-side-effects.test.ts).
|
|
63
62
|
*
|
|
64
63
|
* This function does NOT touch the `last_trace_id` meta key: its own connection
|
|
65
64
|
* would commit apart from `saveIndex`, so a crash could advance one key alone. LOCKSTEP
|
|
@@ -68,8 +67,8 @@ export declare function writeRecallTrace(db: DatabaseSyncLike, input: RecallTrac
|
|
|
68
67
|
* `localIndex.last_trace_id` from the returned id, THEN call `saveIndex`
|
|
69
68
|
* once — `saveIndex` persists both meta keys in one transaction
|
|
70
69
|
* (store.ts). Call sites that trace WITHOUT advancing `last_retrieval_ids`
|
|
71
|
-
* (CLI cmdRecall's zero-result path
|
|
72
|
-
*
|
|
70
|
+
* (CLI cmdRecall's zero-result path) simply never touch `localIndex` at
|
|
71
|
+
* all, so they can't desync by construction.
|
|
73
72
|
*
|
|
74
73
|
* Fail-soft: never throws, including on connection failure.
|
|
75
74
|
*/
|
|
@@ -115,7 +114,7 @@ export declare function recordTraceOutcome(db: DatabaseSyncLike, input: RecordTr
|
|
|
115
114
|
export declare const DELIVERY_LEDGER_RETENTION_DAYS = 90;
|
|
116
115
|
/** Lock wait for the ledger's own connection: a busy store drops the row rather than slow the hook. */
|
|
117
116
|
export declare const DELIVERY_LEDGER_WAIT_MS = 50;
|
|
118
|
-
/** Two prompt-identical events without a host turn id this close
|
|
117
|
+
/** Two prompt-identical events without a host turn id, or two boundary events of one type, this close are one fire twice. */
|
|
119
118
|
export declare const DELIVERY_DUPLICATE_WINDOW_MS = 2000;
|
|
120
119
|
/** One stored `delivery_candidates` row. */
|
|
121
120
|
export interface DeliveryCandidateRow {
|