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
|
@@ -1,13 +1,16 @@
|
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
1
2
|
import type { HippoIndex, LegacyStats } from './rows.js';
|
|
2
3
|
/** Load the derived index from SQLite. Read-only: index.json is only ever written by `rebuildIndex`. */
|
|
3
4
|
export declare function loadIndex(hippoRoot: string): HippoIndex;
|
|
5
|
+
/** The last recall's ids and its trace alone, for a caller that needs no index entry. */
|
|
6
|
+
export declare function loadLastRecall(hippoRoot: string): Pick<HippoIndex, 'last_retrieval_ids' | 'last_trace_id'>;
|
|
4
7
|
/**
|
|
5
8
|
* Persist mutable index metadata. Entry rows themselves are derived from SQLite.
|
|
6
9
|
*
|
|
7
10
|
* `last_retrieval_ids` and `last_trace_id` commit in one transaction: callers fold a fresh trace id
|
|
8
11
|
* into the index and rely on both keys moving together. index.json is left to `rebuildIndex`.
|
|
9
12
|
*/
|
|
10
|
-
export declare function saveIndex(hippoRoot: string, index: HippoIndex): void;
|
|
13
|
+
export declare function saveIndex(hippoRoot: string, index: Pick<HippoIndex, 'last_retrieval_ids' | 'last_trace_id'>): void;
|
|
11
14
|
/**
|
|
12
15
|
* Rebuild mirrors from SQLite, importing any legacy markdown files not already present.
|
|
13
16
|
*/
|
|
@@ -17,6 +20,8 @@ export declare function updateStats(hippoRoot: string, delta: {
|
|
|
17
20
|
recalled?: number;
|
|
18
21
|
forgotten?: number;
|
|
19
22
|
}): void;
|
|
23
|
+
/** updateStats on the caller's open store, so a loop of writes opens the store once. */
|
|
24
|
+
export declare function updateStatsOn(db: DatabaseSyncLike, hippoRoot: string, delta: Parameters<typeof updateStats>[1]): void;
|
|
20
25
|
export declare function updateStatsUnlessBusy(hippoRoot: string, delta: Parameters<typeof updateStats>[1], committed: string): void;
|
|
21
26
|
export declare function loadStats(hippoRoot: string): LegacyStats;
|
|
22
27
|
export declare function appendConsolidationRun(hippoRoot: string, run: {
|
|
@@ -36,6 +41,8 @@ export interface SessionDecayContext {
|
|
|
36
41
|
/** Average interval between recent sleep cycles, in days. 0 if < 2 cycles. */
|
|
37
42
|
avgSessionIntervalDays: number;
|
|
38
43
|
}
|
|
44
|
+
/** Timestamp of the latest consolidation run, or undefined when there is none. */
|
|
45
|
+
export declare function lastConsolidationAt(db: DatabaseSyncLike): string | undefined;
|
|
39
46
|
/**
|
|
40
47
|
* Load the session decay context from the store.
|
|
41
48
|
* Uses consolidation_runs timestamps to compute session intervals.
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { closeHippoDb, setMeta, isSqliteBusy, pruneConsolidationRuns, getMeta } from '../db.js';
|
|
2
|
-
import { RejectedValueError } from '
|
|
3
|
-
import { log } from '../log.js';
|
|
1
|
+
import { closeHippoDb, withWriteScope, setMeta, isSqliteBusy, pruneConsolidationRuns, getMeta } from '../db/index.js';
|
|
2
|
+
import { RejectedValueError } from './rejection.js';
|
|
3
|
+
import { log } from '../util/log.js';
|
|
4
4
|
import { audit } from './audit-event.js';
|
|
5
5
|
import { stampOriginProjectForImport, upsertEntryRow } from './entry-row.js';
|
|
6
|
-
import { buildIndexFromDb, syncMirrorFiles, writeIndexMirror, writeStatsMirror, buildStatsFromDb } from './mirrors.js';
|
|
6
|
+
import { buildIndexFromDb, readLastRecall, syncMirrorFiles, writeIndexMirror, writeStatsMirror, buildStatsFromDb } from './mirrors.js';
|
|
7
7
|
import { openStore, loadLegacyEntriesFromMarkdown } from './open.js';
|
|
8
|
+
import { DAY_MS } from '../util/time.js';
|
|
8
9
|
/** Load the derived index from SQLite. Read-only: index.json is only ever written by `rebuildIndex`. */
|
|
9
10
|
export function loadIndex(hippoRoot) {
|
|
10
11
|
const db = openStore(hippoRoot);
|
|
@@ -15,6 +16,16 @@ export function loadIndex(hippoRoot) {
|
|
|
15
16
|
closeHippoDb(db);
|
|
16
17
|
}
|
|
17
18
|
}
|
|
19
|
+
/** The last recall's ids and its trace alone, for a caller that needs no index entry. */
|
|
20
|
+
export function loadLastRecall(hippoRoot) {
|
|
21
|
+
const db = openStore(hippoRoot);
|
|
22
|
+
try {
|
|
23
|
+
return readLastRecall(db);
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
closeHippoDb(db);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
18
29
|
/**
|
|
19
30
|
* Persist mutable index metadata. Entry rows themselves are derived from SQLite.
|
|
20
31
|
*
|
|
@@ -24,19 +35,10 @@ export function loadIndex(hippoRoot) {
|
|
|
24
35
|
export function saveIndex(hippoRoot, index) {
|
|
25
36
|
const db = openStore(hippoRoot);
|
|
26
37
|
try {
|
|
27
|
-
db
|
|
28
|
-
try {
|
|
38
|
+
withWriteScope(db, 'save_index', () => {
|
|
29
39
|
setMeta(db, 'last_retrieval_ids', JSON.stringify(index.last_retrieval_ids ?? []));
|
|
30
40
|
setMeta(db, 'last_trace_id', index.last_trace_id ?? '');
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
try {
|
|
35
|
-
db.exec('ROLLBACK');
|
|
36
|
-
}
|
|
37
|
-
catch { /* already rolled back; keep the original error */ }
|
|
38
|
-
throw error;
|
|
39
|
-
}
|
|
41
|
+
});
|
|
40
42
|
}
|
|
41
43
|
finally {
|
|
42
44
|
closeHippoDb(db);
|
|
@@ -52,8 +54,7 @@ export function rebuildIndex(hippoRoot) {
|
|
|
52
54
|
const existingIds = new Set(db.prepare(`SELECT id FROM memories`).all().map((row) => row.id));
|
|
53
55
|
const legacyEntries = loadLegacyEntriesFromMarkdown(hippoRoot).filter((entry) => !existingIds.has(entry.id));
|
|
54
56
|
if (legacyEntries.length > 0) {
|
|
55
|
-
db
|
|
56
|
-
try {
|
|
57
|
+
withWriteScope(db, 'rebuild_index', () => {
|
|
57
58
|
// Guard with per-row skip, like bootstrapLegacyStore: a stale markdown mirror could resurrect a
|
|
58
59
|
// rejected value here. Refusal audit is written inline because nothing rolls back on a skip.
|
|
59
60
|
let rejectedCount = 0;
|
|
@@ -66,7 +67,7 @@ export function rebuildIndex(hippoRoot) {
|
|
|
66
67
|
catch (err) {
|
|
67
68
|
if (err instanceof RejectedValueError) {
|
|
68
69
|
rejectedCount++;
|
|
69
|
-
audit(db, 'reject_refusal', err.entryId, { digest: err.digest, reason: err.reason }, 'cli', err.tenantId);
|
|
70
|
+
audit(db, 'reject_refusal', { targetId: err.entryId, metadata: { digest: err.digest, reason: err.reason }, actor: 'cli', tenantId: err.tenantId });
|
|
70
71
|
continue;
|
|
71
72
|
}
|
|
72
73
|
throw err;
|
|
@@ -75,15 +76,7 @@ export function rebuildIndex(hippoRoot) {
|
|
|
75
76
|
if (rejectedCount > 0) {
|
|
76
77
|
log.warn(`rebuildIndex: skipped ${rejectedCount} rejected value(s) found in legacy mirrors`);
|
|
77
78
|
}
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
try {
|
|
82
|
-
db.exec('ROLLBACK');
|
|
83
|
-
}
|
|
84
|
-
catch { /* ignore if no active txn */ }
|
|
85
|
-
throw err;
|
|
86
|
-
}
|
|
79
|
+
});
|
|
87
80
|
}
|
|
88
81
|
syncMirrorFiles(hippoRoot, db);
|
|
89
82
|
const index = buildIndexFromDb(db);
|
|
@@ -97,30 +90,34 @@ export function rebuildIndex(hippoRoot) {
|
|
|
97
90
|
export function updateStats(hippoRoot, delta) {
|
|
98
91
|
const db = openStore(hippoRoot);
|
|
99
92
|
try {
|
|
100
|
-
|
|
101
|
-
// named: the read-modify-write this replaces both lost increments to a
|
|
102
|
-
// concurrent writer and stamped stale values over the untouched two.
|
|
103
|
-
const increments = [
|
|
104
|
-
['total_remembered', delta.remembered ?? 0],
|
|
105
|
-
['total_recalled', delta.recalled ?? 0],
|
|
106
|
-
['total_forgotten', delta.forgotten ?? 0],
|
|
107
|
-
];
|
|
108
|
-
for (const [key, amount] of increments) {
|
|
109
|
-
if (amount === 0)
|
|
110
|
-
continue;
|
|
111
|
-
// Both binds are the same string: node:sqlite binds a JS number as REAL,
|
|
112
|
-
// which would store "1.0" into this TEXT column instead of "1".
|
|
113
|
-
db.prepare(`
|
|
114
|
-
INSERT INTO meta(key, value) VALUES(?, ?)
|
|
115
|
-
ON CONFLICT(key) DO UPDATE SET value = CAST(meta.value AS INTEGER) + CAST(? AS INTEGER)
|
|
116
|
-
`).run(key, String(amount), String(amount));
|
|
117
|
-
}
|
|
118
|
-
writeStatsMirror(hippoRoot, buildStatsFromDb(db));
|
|
93
|
+
updateStatsOn(db, hippoRoot, delta);
|
|
119
94
|
}
|
|
120
95
|
finally {
|
|
121
96
|
closeHippoDb(db);
|
|
122
97
|
}
|
|
123
98
|
}
|
|
99
|
+
/** updateStats on the caller's open store, so a loop of writes opens the store once. */
|
|
100
|
+
export function updateStatsOn(db, hippoRoot, delta) {
|
|
101
|
+
// One atomic statement per counter, and only for counters the caller
|
|
102
|
+
// named: the read-modify-write this replaces both lost increments to a
|
|
103
|
+
// concurrent writer and stamped stale values over the untouched two.
|
|
104
|
+
const increments = [
|
|
105
|
+
['total_remembered', delta.remembered ?? 0],
|
|
106
|
+
['total_recalled', delta.recalled ?? 0],
|
|
107
|
+
['total_forgotten', delta.forgotten ?? 0],
|
|
108
|
+
];
|
|
109
|
+
for (const [key, amount] of increments) {
|
|
110
|
+
if (amount === 0)
|
|
111
|
+
continue;
|
|
112
|
+
// Both binds are the same string: node:sqlite binds a JS number as REAL,
|
|
113
|
+
// which would store "1.0" into this TEXT column instead of "1".
|
|
114
|
+
db.prepare(`
|
|
115
|
+
INSERT INTO meta(key, value) VALUES(?, ?)
|
|
116
|
+
ON CONFLICT(key) DO UPDATE SET value = CAST(meta.value AS INTEGER) + CAST(? AS INTEGER)
|
|
117
|
+
`).run(key, String(amount), String(amount));
|
|
118
|
+
}
|
|
119
|
+
writeStatsMirror(hippoRoot, buildStatsFromDb(db));
|
|
120
|
+
}
|
|
124
121
|
export function updateStatsUnlessBusy(hippoRoot, delta, committed) {
|
|
125
122
|
try {
|
|
126
123
|
updateStats(hippoRoot, delta);
|
|
@@ -155,7 +152,7 @@ export function appendConsolidationRun(hippoRoot, run) {
|
|
|
155
152
|
export function countCreatedSinceLastSleep(hippoRoot, tenantId, now = new Date()) {
|
|
156
153
|
const db = openStore(hippoRoot);
|
|
157
154
|
try {
|
|
158
|
-
const dayAgo = new Date(now.getTime() -
|
|
155
|
+
const dayAgo = new Date(now.getTime() - DAY_MS).toISOString();
|
|
159
156
|
const row = db.prepare(`SELECT COUNT(*) AS n FROM memories WHERE tenant_id = ?
|
|
160
157
|
AND created > MAX(?, COALESCE((SELECT MAX(timestamp) FROM consolidation_runs), ''))`).get(tenantId, dayAgo);
|
|
161
158
|
return row.n;
|
|
@@ -164,6 +161,12 @@ export function countCreatedSinceLastSleep(hippoRoot, tenantId, now = new Date()
|
|
|
164
161
|
closeHippoDb(db);
|
|
165
162
|
}
|
|
166
163
|
}
|
|
164
|
+
/** Timestamp of the latest consolidation run, or undefined when there is none. */
|
|
165
|
+
export function lastConsolidationAt(db) {
|
|
166
|
+
// SAFETY: row's shape matches the single `timestamp` column named in the SELECT.
|
|
167
|
+
const row = db.prepare(`SELECT timestamp FROM consolidation_runs ORDER BY timestamp DESC, id DESC LIMIT 1`).get();
|
|
168
|
+
return row?.timestamp;
|
|
169
|
+
}
|
|
167
170
|
/**
|
|
168
171
|
* Load the session decay context from the store.
|
|
169
172
|
* Uses consolidation_runs timestamps to compute session intervals.
|
|
@@ -185,7 +188,7 @@ export function loadSessionDecayContext(hippoRoot) {
|
|
|
185
188
|
totalInterval += timestamps[i] - timestamps[i - 1];
|
|
186
189
|
}
|
|
187
190
|
const avgMs = totalInterval / (timestamps.length - 1);
|
|
188
|
-
const avgDays = avgMs /
|
|
191
|
+
const avgDays = avgMs / DAY_MS;
|
|
189
192
|
return { sleepCount, avgSessionIntervalDays: Math.max(0, avgDays) };
|
|
190
193
|
}
|
|
191
194
|
finally {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { AmbientCandidateRequest, ContextReads, EntryRemoval, EntryTarget, EntryWrite, EntryWrites, HippoStore, KeyAudit, KeyListQuery, KeyMint, KeyRevoke, KeyWrites, OutcomeWrite, RawArchive, RecallSearchArgs, RecallWrites, SelfKeyMint, StoreGroup, StoreGroups, SupersedeWrite, VectorBackfillQuery, VectorReads, VectorRowWrite, VectorWrite, VectorWriteResult, VectorWrites, } from './port.js';
|
|
2
|
+
export { hasGroup, requireGroup } from './port.js';
|
|
3
|
+
export * from './sqlite/store.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type DatabaseSyncLike } from '../db.js';
|
|
2
|
-
import type { KeyRevoke } from '
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { KeyRevoke } from './port.js';
|
|
3
3
|
/** The revoke and its audit row commit together, so a failed audit write leaves the key live and the caller sees the error. */
|
|
4
4
|
export declare function revokeKeyAt(db: DatabaseSyncLike, revoke: KeyRevoke): string;
|
|
5
5
|
export declare function auditHighIdAt(db: DatabaseSyncLike): number;
|
package/dist/store/key-audit.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// hippo.db's half of the KeyAudit store group.
|
|
2
|
-
import { NotFoundError } from '../api-errors.js';
|
|
3
|
-
import { appendAuditEvent } from '
|
|
4
|
-
import { revokeApiKey } from '
|
|
5
|
-
import { withWriteScope } from '../db.js';
|
|
2
|
+
import { NotFoundError } from '../core/api-errors.js';
|
|
3
|
+
import { appendAuditEvent } from './audit.js';
|
|
4
|
+
import { revokeApiKey } from './auth.js';
|
|
5
|
+
import { withWriteScope } from '../db/index.js';
|
|
6
6
|
import { selectApiKeyOwner } from './tenant-lookup.js';
|
|
7
7
|
/** The revoke and its audit row commit together, so a failed audit write leaves the key live and the caller sees the error. */
|
|
8
8
|
export function revokeKeyAt(db, revoke) {
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import {
|
|
3
|
-
import type { KeyMint, SelfKeyMint } from '../store-port.js';
|
|
4
|
-
/** The auth_create row a mint writes; the plaintext never reaches it. */
|
|
5
|
-
export declare function createAuditOf({ key, actor, metadata }: KeyMint): AppendAuditOpts;
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { KeyMint, SelfKeyMint } from './port.js';
|
|
6
3
|
export declare function createKeyAt(db: DatabaseSyncLike, mint: KeyMint): void;
|
|
7
4
|
/** IMMEDIATE takes the write lock before the count, so two mints for one owner cannot both see room under the cap. */
|
|
8
5
|
export declare function createSelfKeyAt(db: DatabaseSyncLike, mint: SelfKeyMint): string[];
|
|
6
|
+
/** One grant or ungrant of a restricted scope on a key of `tenantId`, and the actor of its audit row. */
|
|
7
|
+
export interface ScopeGrantChange {
|
|
8
|
+
readonly tenantId: string;
|
|
9
|
+
readonly keyId: string;
|
|
10
|
+
readonly scope: string;
|
|
11
|
+
readonly op: 'auth_grant' | 'auth_ungrant';
|
|
12
|
+
readonly actor: string;
|
|
13
|
+
}
|
|
14
|
+
/** The key is checked under the write lock, and the change and its audit row commit together, so a failed audit write leaves the grants as they were. */
|
|
15
|
+
export declare function changeScopeGrantAt(db: DatabaseSyncLike, { tenantId, keyId, scope, op, actor }: ScopeGrantChange): void;
|
|
9
16
|
//# sourceMappingURL=key-writes.d.ts.map
|
package/dist/store/key-writes.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
// hippo.db's half of the KeyWrites store group.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { BadRequestError, ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
3
|
+
import { appendAuditEvent } from './audit.js';
|
|
4
|
+
import { grantScope, insertApiKey, listLiveOwnedKeyIds, revokeApiKey, ungrantScope } from './auth.js';
|
|
5
|
+
import { withWriteScope } from '../db/index.js';
|
|
6
|
+
import { isRestrictedScope } from './recall-scope.js';
|
|
7
|
+
import { selectApiKeyOwner } from './tenant-lookup.js';
|
|
5
8
|
/** The auth_create row a mint writes; the plaintext never reaches it. */
|
|
6
|
-
|
|
9
|
+
function createAuditOf({ key, actor, metadata }) {
|
|
7
10
|
return { tenantId: key.tenantId, actor, op: 'auth_create', targetId: key.keyId, metadata };
|
|
8
11
|
}
|
|
9
12
|
export function createKeyAt(db, mint) {
|
|
@@ -27,4 +30,27 @@ export function createSelfKeyAt(db, mint) {
|
|
|
27
30
|
return replaced;
|
|
28
31
|
});
|
|
29
32
|
}
|
|
33
|
+
/** The key is checked under the write lock, and the change and its audit row commit together, so a failed audit write leaves the grants as they were. */
|
|
34
|
+
export function changeScopeGrantAt(db, { tenantId, keyId, scope, op, actor }) {
|
|
35
|
+
withWriteScope(db, 'change_scope_grant', () => {
|
|
36
|
+
const row = selectApiKeyOwner(db, keyId);
|
|
37
|
+
if (!row || row.tenantId !== tenantId) {
|
|
38
|
+
throw new NotFoundError(`Unknown key_id: ${keyId}`);
|
|
39
|
+
}
|
|
40
|
+
if (op === 'auth_grant' && row.revokedAt) {
|
|
41
|
+
throw new ConflictError(`${keyId} is revoked; a grant on it would never apply`);
|
|
42
|
+
}
|
|
43
|
+
if (op === 'auth_grant' && /^personal:/i.test(scope)) {
|
|
44
|
+
throw new BadRequestError(`${scope} is a personal scope: only its owner reads it, and no grant can change that`);
|
|
45
|
+
}
|
|
46
|
+
if (!isRestrictedScope(scope)) {
|
|
47
|
+
throw new BadRequestError(`${scope} is not a restricted scope; it is already readable by default`);
|
|
48
|
+
}
|
|
49
|
+
if (op === 'auth_grant')
|
|
50
|
+
grantScope(db, keyId, scope);
|
|
51
|
+
else
|
|
52
|
+
ungrantScope(db, keyId, scope);
|
|
53
|
+
appendAuditEvent(db, { tenantId, actor, op, targetId: keyId, metadata: { scope } });
|
|
54
|
+
});
|
|
55
|
+
}
|
|
30
56
|
//# sourceMappingURL=key-writes.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DeliveryEventInput } from './delivery-recorder.js';
|
|
2
|
+
import { type LastSent, type TokenSurface, type TokenUse } from './token-ledger.js';
|
|
3
|
+
/** Stores one delivery event and returns its id, or null when the write failed. */
|
|
4
|
+
export type DeliveryWrite = (input: DeliveryEventInput) => number | null;
|
|
5
|
+
/** The token rows of one turn and the delivery event that follows them. */
|
|
6
|
+
export interface LedgerTurn {
|
|
7
|
+
readonly uses: readonly TokenUse[];
|
|
8
|
+
/** Makes each row its own attempt: a failed one is reported here and the rest still run. Without it the first failure throws. */
|
|
9
|
+
readonly onRowError?: <E>(error: E) => void;
|
|
10
|
+
/** Runs after the rows with a writer on their connection, so the delivery event costs no second open. */
|
|
11
|
+
readonly delivery?: (write: DeliveryWrite) => void;
|
|
12
|
+
}
|
|
13
|
+
/** Books a turn's token rows, then its delivery event, on one connection. */
|
|
14
|
+
export declare function recordLedgerTurn(hippoRoot: string, turn: LedgerTurn): void;
|
|
15
|
+
/** What the session last sent on `surface`, or null, as lastSentState reads it. */
|
|
16
|
+
export declare function lastSentOnSurface(hippoRoot: string, tenantId: string, sessionId: string | null | undefined, surface: TokenSurface): LastSent | null;
|
|
17
|
+
//# sourceMappingURL=ledger-turn.d.ts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { lastSentState, recordTokenUse } from './token-ledger.js';
|
|
2
|
+
import { onHandle } from './open.js';
|
|
3
|
+
import { writeDeliveryEventOnHandle } from './recall-trace.js';
|
|
4
|
+
/** Books a turn's token rows, then its delivery event, on one connection. */
|
|
5
|
+
export function recordLedgerTurn(hippoRoot, turn) {
|
|
6
|
+
const { onRowError } = turn;
|
|
7
|
+
onHandle(hippoRoot, (db) => {
|
|
8
|
+
for (const use of turn.uses) {
|
|
9
|
+
if (onRowError === undefined) {
|
|
10
|
+
recordTokenUse(db, use);
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
recordTokenUse(db, use);
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
onRowError(error);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
turn.delivery?.((input) => writeDeliveryEventOnHandle(db, input));
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/** What the session last sent on `surface`, or null, as lastSentState reads it. */
|
|
24
|
+
export function lastSentOnSurface(hippoRoot, tenantId, sessionId, surface) {
|
|
25
|
+
return onHandle(hippoRoot, (db) => lastSentState(db, tenantId, sessionId, surface));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ledger-turn.js.map
|
package/dist/store/markdown.d.ts
CHANGED
package/dist/store/markdown.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FALLBACK_HALF_LIFE_DAYS, DEFAULT_SCHEMA_FIT } from '../core/memory.js';
|
|
2
|
+
import { dumpFrontmatter, parseFrontmatter } from './yaml.js';
|
|
2
3
|
/**
|
|
3
4
|
* Serialize a MemoryEntry to markdown with YAML frontmatter.
|
|
4
5
|
*/
|
|
@@ -66,11 +67,11 @@ export function deserializeEntry(raw) {
|
|
|
66
67
|
last_retrieved: String(data['last_retrieved'] ?? new Date().toISOString()),
|
|
67
68
|
retrieval_count: Number(data['retrieval_count'] ?? 0),
|
|
68
69
|
strength: Number(data['strength'] ?? 1.0),
|
|
69
|
-
half_life_days: Number(data['half_life_days'] ??
|
|
70
|
+
half_life_days: Number(data['half_life_days'] ?? FALLBACK_HALF_LIFE_DAYS),
|
|
70
71
|
layer: data['layer'],
|
|
71
72
|
tags: normalizeStringArray(data['tags']),
|
|
72
73
|
emotional_valence: data['emotional_valence'] ?? 'neutral',
|
|
73
|
-
schema_fit: Number(data['schema_fit'] ??
|
|
74
|
+
schema_fit: Number(data['schema_fit'] ?? DEFAULT_SCHEMA_FIT),
|
|
74
75
|
source: String(data['source'] ?? 'cli'),
|
|
75
76
|
outcome_score: data['outcome_score'] === null || data['outcome_score'] === undefined ? null : Number(data['outcome_score']),
|
|
76
77
|
outcome_positive: Number(data['outcome_positive'] ?? 0),
|
package/dist/store/mirrors.d.ts
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import { Layer, type MemoryEntry } from '../memory.js';
|
|
2
|
-
import { openHippoDb } from '../db.js';
|
|
1
|
+
import { Layer, type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { openHippoDb } from '../db/index.js';
|
|
3
3
|
import { type TaskSnapshot, type SessionEvent, type HippoIndex, type LegacyStats } from './rows.js';
|
|
4
4
|
export declare function layerDir(root: string, layer: Layer): string;
|
|
5
|
+
/** Makes the mirror folders on a store's first open in this process; a writer makes its own folder if one goes missing later. */
|
|
5
6
|
export declare function ensureMirrorDirectories(hippoRoot: string): void;
|
|
6
7
|
export declare function writeActiveTaskMirror(hippoRoot: string, tenantId: string, snapshot: TaskSnapshot): void;
|
|
7
8
|
export declare function removeActiveTaskMirror(hippoRoot: string, tenantId: string): void;
|
|
8
9
|
export declare function writeRecentSessionMirror(hippoRoot: string, tenantId: string, events: SessionEvent[]): void;
|
|
9
10
|
export declare function writeMarkdownMirror(hippoRoot: string, entry: MemoryEntry): void;
|
|
10
11
|
export declare function removeEntryMirrors(hippoRoot: string, id: string): void;
|
|
11
|
-
/**
|
|
12
|
-
* Mirror paths for `id` still on disk, walked like `removeEntryMirrors`, so a failed purge
|
|
13
|
-
* with no reaper to retry it can name the stuck file.
|
|
14
|
-
*/
|
|
15
|
-
export declare function getExistingEntryMirrorPaths(hippoRoot: string, id: string): string[];
|
|
16
12
|
/**
|
|
17
13
|
* Best-effort mirror purge. Retries the unlink once (most failures are transient locks); the reaper only
|
|
18
14
|
* scans `raw_archive`, so a non-raw id's second failure logs the leftover path(s) to delete by hand.
|
|
@@ -23,6 +19,8 @@ export declare function purgeMirrorBestEffort(hippoRoot: string, id: string, isR
|
|
|
23
19
|
/** Derive the current `HippoIndex` from SQLite. Exported for `rebuildIndex`
|
|
24
20
|
* (the only index.json writer) and the longmemeval benchmark. */
|
|
25
21
|
export declare function buildIndexFromDb(db: ReturnType<typeof openHippoDb>): HippoIndex;
|
|
22
|
+
/** The last recall's ids and its trace, the two meta keys saveIndex writes together. */
|
|
23
|
+
export declare function readLastRecall(db: ReturnType<typeof openHippoDb>): Pick<HippoIndex, 'last_retrieval_ids' | 'last_trace_id'>;
|
|
26
24
|
export declare function buildStatsFromDb(db: ReturnType<typeof openHippoDb>): LegacyStats;
|
|
27
25
|
/** Write the `index.json` mirror file for an already-derived index. Exported for
|
|
28
26
|
* `rebuildIndex` (the only index.json writer) and the longmemeval benchmark. */
|
package/dist/store/mirrors.js
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { Layer } from '../memory.js';
|
|
4
|
-
import { dumpFrontmatter } from '
|
|
5
|
-
import { getMeta } from '../db.js';
|
|
6
|
-
import {
|
|
3
|
+
import { Layer } from '../core/memory.js';
|
|
4
|
+
import { dumpFrontmatter } from './yaml.js';
|
|
5
|
+
import { getMeta } from '../db/index.js';
|
|
6
|
+
import { oncePerStore } from '../db/connect.js';
|
|
7
|
+
import { errorMessage, log } from '../util/log.js';
|
|
7
8
|
import { parseJsonArray, INDEX_VERSION, parseLastTraceId, MEMORY_SELECT_COLUMNS, rowToEntry, rowToMemoryConflict, } from './rows.js';
|
|
8
9
|
import { serializeEntry } from './markdown.js';
|
|
10
|
+
const SCORE_DECIMALS = 3;
|
|
9
11
|
export function layerDir(root, layer) {
|
|
10
12
|
return path.join(root, layer);
|
|
11
13
|
}
|
|
14
|
+
// Owner-only wherever a mirror folder is made, at open or by a writer that finds it gone.
|
|
15
|
+
const MIRROR_FOLDER = { recursive: true, mode: 0o700 };
|
|
16
|
+
/** Makes the mirror folders on a store's first open in this process; a writer makes its own folder if one goes missing later. */
|
|
12
17
|
export function ensureMirrorDirectories(hippoRoot) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
path.join(hippoRoot, 'conflicts'),
|
|
19
|
-
];
|
|
20
|
-
for (const dir of dirs) {
|
|
21
|
-
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
22
|
-
}
|
|
18
|
+
oncePerStore(hippoRoot, 'mirror-folders', () => {
|
|
19
|
+
for (const sub of ['buffer', 'episodic', 'semantic', 'conflicts']) {
|
|
20
|
+
fs.mkdirSync(path.join(hippoRoot, sub), MIRROR_FOLDER);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
23
|
}
|
|
24
24
|
// Tenant-scoped mirror file paths. The single-tenant 'default' deployment
|
|
25
25
|
// keeps the original `active-task.md` / `recent-session.md` filenames for
|
|
@@ -61,7 +61,7 @@ export function writeActiveTaskMirror(hippoRoot, tenantId, snapshot) {
|
|
|
61
61
|
if (snapshot.session_id) {
|
|
62
62
|
body.push(`## Session`, snapshot.session_id, '');
|
|
63
63
|
}
|
|
64
|
-
fs.mkdirSync(path.dirname(filePath),
|
|
64
|
+
fs.mkdirSync(path.dirname(filePath), MIRROR_FOLDER);
|
|
65
65
|
fs.writeFileSync(filePath, `${fm}\n\n${body.join('\n')}`, 'utf8');
|
|
66
66
|
}
|
|
67
67
|
export function removeActiveTaskMirror(hippoRoot, tenantId) {
|
|
@@ -99,12 +99,12 @@ export function writeRecentSessionMirror(hippoRoot, tenantId, events) {
|
|
|
99
99
|
lines.push(`- [${event.created_at}] (${event.event_type}) ${event.content}`);
|
|
100
100
|
}
|
|
101
101
|
lines.push('');
|
|
102
|
-
fs.mkdirSync(path.dirname(filePath),
|
|
102
|
+
fs.mkdirSync(path.dirname(filePath), MIRROR_FOLDER);
|
|
103
103
|
fs.writeFileSync(filePath, `${fm}\n\n${lines.join('\n')}`, 'utf8');
|
|
104
104
|
}
|
|
105
105
|
function writeConflictMirrors(hippoRoot, conflicts) {
|
|
106
106
|
const conflictDir = path.join(hippoRoot, 'conflicts');
|
|
107
|
-
fs.mkdirSync(conflictDir,
|
|
107
|
+
fs.mkdirSync(conflictDir, MIRROR_FOLDER);
|
|
108
108
|
const keep = new Set();
|
|
109
109
|
for (const conflict of conflicts) {
|
|
110
110
|
const filename = `conflict_${conflict.id}.md`;
|
|
@@ -125,7 +125,7 @@ function writeConflictMirrors(hippoRoot, conflicts) {
|
|
|
125
125
|
`- Memory A: ${conflict.memory_a_id}`,
|
|
126
126
|
`- Memory B: ${conflict.memory_b_id}`,
|
|
127
127
|
`- Reason: ${conflict.reason}`,
|
|
128
|
-
`- Score: ${conflict.score.toFixed(
|
|
128
|
+
`- Score: ${conflict.score.toFixed(SCORE_DECIMALS)}`,
|
|
129
129
|
`- Status: ${conflict.status}`,
|
|
130
130
|
'',
|
|
131
131
|
].join('\n');
|
|
@@ -142,7 +142,7 @@ function writeConflictMirrors(hippoRoot, conflicts) {
|
|
|
142
142
|
export function writeMarkdownMirror(hippoRoot, entry) {
|
|
143
143
|
removeEntryMirrors(hippoRoot, entry.id);
|
|
144
144
|
const dir = layerDir(hippoRoot, entry.layer);
|
|
145
|
-
fs.mkdirSync(dir,
|
|
145
|
+
fs.mkdirSync(dir, MIRROR_FOLDER);
|
|
146
146
|
fs.writeFileSync(path.join(dir, `${entry.id}.md`), serializeEntry(entry), 'utf8');
|
|
147
147
|
}
|
|
148
148
|
// Every layer, Trace included: `writeMarkdownMirror` writes any layer, and a stale trace mirror
|
|
@@ -159,7 +159,7 @@ export function removeEntryMirrors(hippoRoot, id) {
|
|
|
159
159
|
* Mirror paths for `id` still on disk, walked like `removeEntryMirrors`, so a failed purge
|
|
160
160
|
* with no reaper to retry it can name the stuck file.
|
|
161
161
|
*/
|
|
162
|
-
|
|
162
|
+
function getExistingEntryMirrorPaths(hippoRoot, id) {
|
|
163
163
|
// Layer list kept in lockstep with removeEntryMirrors.
|
|
164
164
|
return [Layer.Buffer, Layer.Episodic, Layer.Semantic, Layer.Trace]
|
|
165
165
|
.map((layer) => path.join(layerDir(hippoRoot, layer), `${id}.md`))
|
|
@@ -182,7 +182,7 @@ export function purgeMirrorBestEffort(hippoRoot, id, isRaw, logPrefix) {
|
|
|
182
182
|
return true;
|
|
183
183
|
}
|
|
184
184
|
catch (secondErr) {
|
|
185
|
-
const msg =
|
|
185
|
+
const msg = errorMessage(secondErr);
|
|
186
186
|
if (isRaw) {
|
|
187
187
|
log.error(`${logPrefix}: mirror cleanup failed for ${id} (will retry via reaper on next open): ${msg}`);
|
|
188
188
|
}
|
|
@@ -217,14 +217,16 @@ export function buildIndexFromDb(db) {
|
|
|
217
217
|
pinned: Boolean(row.pinned),
|
|
218
218
|
};
|
|
219
219
|
}
|
|
220
|
+
return { version: INDEX_VERSION, entries, ...readLastRecall(db) };
|
|
221
|
+
}
|
|
222
|
+
/** The last recall's ids and its trace, the two meta keys saveIndex writes together. */
|
|
223
|
+
export function readLastRecall(db) {
|
|
220
224
|
// Read both lockstep keys in ONE statement: two autocommit SELECTs could straddle a concurrent
|
|
221
225
|
// saveIndex and hand back a mismatched last_retrieval_ids / last_trace_id pair.
|
|
222
226
|
// SAFETY: lockstepRows' shape matches the key/value columns named above.
|
|
223
227
|
const lockstepRows = db.prepare(`SELECT key, value FROM meta WHERE key IN ('last_retrieval_ids', 'last_trace_id')`).all();
|
|
224
228
|
const lockstep = new Map(lockstepRows.map((r) => [r.key, r.value]));
|
|
225
229
|
return {
|
|
226
|
-
version: INDEX_VERSION,
|
|
227
|
-
entries,
|
|
228
230
|
last_retrieval_ids: parseJsonArray(lockstep.get('last_retrieval_ids') ?? '[]'),
|
|
229
231
|
last_trace_id: parseLastTraceId(lockstep.get('last_trace_id') ?? ''),
|
|
230
232
|
};
|
|
@@ -250,7 +252,19 @@ export function writeIndexMirror(hippoRoot, index) {
|
|
|
250
252
|
mirrorBestEffort('index.json', () => fs.writeFileSync(path.join(hippoRoot, 'index.json'), JSON.stringify(index, null, 2), 'utf8'));
|
|
251
253
|
}
|
|
252
254
|
export function writeStatsMirror(hippoRoot, stats) {
|
|
253
|
-
mirrorBestEffort('stats.json', () =>
|
|
255
|
+
mirrorBestEffort('stats.json', () => overwriteInPlace(path.join(hippoRoot, 'stats.json'), JSON.stringify(stats, null, 2)));
|
|
256
|
+
}
|
|
257
|
+
// A truncate waits for the file's last write to reach the disk, so a file rewritten on every recall keeps its blocks.
|
|
258
|
+
function overwriteInPlace(file, text) {
|
|
259
|
+
const bytes = Buffer.from(text, 'utf8');
|
|
260
|
+
const fd = fs.openSync(file, fs.constants.O_WRONLY | fs.constants.O_CREAT, 0o666);
|
|
261
|
+
try {
|
|
262
|
+
fs.writeSync(fd, bytes, 0, bytes.length, 0);
|
|
263
|
+
fs.ftruncateSync(fd, bytes.length);
|
|
264
|
+
}
|
|
265
|
+
finally {
|
|
266
|
+
fs.closeSync(fd);
|
|
267
|
+
}
|
|
254
268
|
}
|
|
255
269
|
/** Mirrors are derived from SQLite and written after COMMIT, so a failed write warns instead of failing a committed change. */
|
|
256
270
|
export function mirrorBestEffort(what, write) {
|
|
@@ -258,7 +272,7 @@ export function mirrorBestEffort(what, write) {
|
|
|
258
272
|
write();
|
|
259
273
|
}
|
|
260
274
|
catch (err) {
|
|
261
|
-
log.warn(`${what} not refreshed (${
|
|
275
|
+
log.warn(`${what} not refreshed (${errorMessage(err)}); the database write succeeded`);
|
|
262
276
|
}
|
|
263
277
|
}
|
|
264
278
|
export function syncMirrorFiles(hippoRoot, db) {
|