hippo-memory 1.68.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 +6 -3
- 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.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- 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 +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- 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 +4 -13
- package/dist/api/forget.js +13 -35
- 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 +9 -46
- package/dist/api/outcome.js +15 -57
- 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 +7 -18
- package/dist/api/promote.js +30 -152
- 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 +12 -13
- package/dist/api/remember.js +38 -27
- 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 +59 -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.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- 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.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- 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 +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- 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 +8 -3
- 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 -82
- 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 -48
- 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 -90
- 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} +16 -3
- package/dist/core/capture-contract.js +149 -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} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -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.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -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 +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- 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.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- 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 +65 -63
- 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 +21 -20
- 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} +3 -2
- 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 +41 -50
- package/dist/server.js +26 -560
- 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 +12 -6
- package/dist/store/audit-event.js +6 -5
- 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 +6 -3
- package/dist/store/handoffs.js +70 -31
- 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 +8 -4
- package/dist/store/open.js +34 -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} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- 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 +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- 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/sqlite/entry-writes-group.js +170 -0
- 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} +17 -2
- package/dist/{env.js → util/env.js} +22 -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/capture-contract.js +0 -49
- 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-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /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/{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
|
*
|
|
@@ -18,7 +20,7 @@ export interface ArchiveOpts {
|
|
|
18
20
|
* append-only trigger lets the delete through, then deletes the row. All in one
|
|
19
21
|
* write scope, which nests inside an outer transaction (e.g. batchWriteAndDelete).
|
|
20
22
|
*
|
|
21
|
-
* Throws if the row does not exist or is not `kind='raw'`.
|
|
23
|
+
* Throws if the row does not exist or is not `kind='raw'`. Returns the archived_at it wrote.
|
|
22
24
|
*/
|
|
23
|
-
export declare function archiveRawMemory(db: DatabaseSyncLike, id: string, opts: ArchiveOpts):
|
|
25
|
+
export declare function archiveRawMemory(db: DatabaseSyncLike, id: string, opts: ArchiveOpts): string;
|
|
24
26
|
//# sourceMappingURL=raw-archive.d.ts.map
|
|
@@ -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
|
|
@@ -34,6 +38,7 @@ function moveRowToArchive(db, id, row, opts) {
|
|
|
34
38
|
// Archived text must be unsearchable at commit, so a failed purge fails (and rolls back) the whole archive.
|
|
35
39
|
if (isFtsAvailable(db))
|
|
36
40
|
db.prepare(`DELETE FROM memories_fts WHERE id = ?`).run(id);
|
|
41
|
+
return archivedAt;
|
|
37
42
|
}
|
|
38
43
|
// Emit the archive_raw audit event inside the SAVEPOINT so the audit row is
|
|
39
44
|
// committed atomically with the row deletion. Use the row's own tenant_id
|
|
@@ -62,14 +67,14 @@ function auditArchive(db, id, row, opts) {
|
|
|
62
67
|
* append-only trigger lets the delete through, then deletes the row. All in one
|
|
63
68
|
* write scope, which nests inside an outer transaction (e.g. batchWriteAndDelete).
|
|
64
69
|
*
|
|
65
|
-
* Throws if the row does not exist or is not `kind='raw'`.
|
|
70
|
+
* Throws if the row does not exist or is not `kind='raw'`. Returns the archived_at it wrote.
|
|
66
71
|
*/
|
|
67
72
|
export function archiveRawMemory(db, id, opts) {
|
|
68
73
|
const row = loadRawRow(db, id);
|
|
69
74
|
// A SAVEPOINT when already inside a transaction (e.g. batchWriteAndDelete), so a throw here
|
|
70
75
|
// rolls back only this archive.
|
|
71
|
-
withWriteScope(db, 'archive_raw', () => {
|
|
72
|
-
moveRowToArchive(db, id, row, opts);
|
|
76
|
+
return withWriteScope(db, 'archive_raw', () => {
|
|
77
|
+
const archivedAt = moveRowToArchive(db, id, row, opts);
|
|
73
78
|
auditArchive(db, id, row, opts);
|
|
74
79
|
// Archiving a child under a level-2 summary marks the parent dirty, inside the
|
|
75
80
|
// SAVEPOINT so the dirty-mark commits atomically with the archive.
|
|
@@ -84,6 +89,7 @@ export function archiveRawMemory(db, id, opts) {
|
|
|
84
89
|
if (opts.afterArchive) {
|
|
85
90
|
opts.afterArchive(db, id);
|
|
86
91
|
}
|
|
92
|
+
return archivedAt;
|
|
87
93
|
});
|
|
88
94
|
}
|
|
89
95
|
//# sourceMappingURL=raw-archive.js.map
|
|
@@ -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
|
|
@@ -60,6 +60,8 @@ export declare function assertClientScope(scope: string | null | undefined): voi
|
|
|
60
60
|
export declare function canTouchScope(actor: {
|
|
61
61
|
owner?: string;
|
|
62
62
|
}, scope: string | null): boolean;
|
|
63
|
+
/** canTouchScope for a caller known by its own personal scope, as a store method receives it. */
|
|
64
|
+
export declare function ownScopeTouches(ownScope: string | null, scope: string | null): boolean;
|
|
63
65
|
/**
|
|
64
66
|
* Recall-side scope filter — the canonical JS half of the recall default-deny
|
|
65
67
|
* rule (the SQL half lives in `loadSearchRows` via `loadRecallSearchEntries`).
|
|
@@ -68,11 +70,6 @@ export declare function canTouchScope(actor: {
|
|
|
68
70
|
* - When `requested` is undefined/empty: default-deny on any
|
|
69
71
|
* `<source>:private:*` scope and on the `RECALL_DEFAULT_DENY_SCOPES`
|
|
70
72
|
* quarantine buckets. `null` and public scopes pass, and so does `ownScope`, the caller's own personal scope.
|
|
71
|
-
*
|
|
72
|
-
* @internal Exported for test parity with
|
|
73
|
-
* `RECALL_DEFAULT_DENY_SCOPES` (single-source-of-truth verification). NOT part
|
|
74
|
-
* of the public API surface; not re-exported from `src/index.ts`. Subject to
|
|
75
|
-
* change without semver bump.
|
|
76
73
|
*/
|
|
77
74
|
export declare function passesScopeFilterForRecall(scope: string | null, requested: string | undefined, ownScope?: string | null): boolean;
|
|
78
75
|
export interface SqlFragment {
|
|
@@ -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
|
|
@@ -83,7 +83,11 @@ export function assertClientScope(scope) {
|
|
|
83
83
|
}
|
|
84
84
|
/** True when `actor` may change or delete a row in `scope`: any non-personal scope, or its own personal one. */
|
|
85
85
|
export function canTouchScope(actor, scope) {
|
|
86
|
-
return
|
|
86
|
+
return ownScopeTouches(personalScopeOf(actor), scope);
|
|
87
|
+
}
|
|
88
|
+
/** canTouchScope for a caller known by its own personal scope, as a store method receives it. */
|
|
89
|
+
export function ownScopeTouches(ownScope, scope) {
|
|
90
|
+
return !isPersonalScope(scope) || scope === ownScope;
|
|
87
91
|
}
|
|
88
92
|
/**
|
|
89
93
|
* Recall-side scope filter — the canonical JS half of the recall default-deny
|
|
@@ -93,11 +97,6 @@ export function canTouchScope(actor, scope) {
|
|
|
93
97
|
* - When `requested` is undefined/empty: default-deny on any
|
|
94
98
|
* `<source>:private:*` scope and on the `RECALL_DEFAULT_DENY_SCOPES`
|
|
95
99
|
* quarantine buckets. `null` and public scopes pass, and so does `ownScope`, the caller's own personal scope.
|
|
96
|
-
*
|
|
97
|
-
* @internal Exported for test parity with
|
|
98
|
-
* `RECALL_DEFAULT_DENY_SCOPES` (single-source-of-truth verification). NOT part
|
|
99
|
-
* of the public API surface; not re-exported from `src/index.ts`. Subject to
|
|
100
|
-
* change without semver bump.
|
|
101
100
|
*/
|
|
102
101
|
export function passesScopeFilterForRecall(scope, requested, ownScope) {
|
|
103
102
|
if (requested !== undefined && requested !== '') {
|