hippo-memory 1.69.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.js +3 -2
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +5 -5
- package/dist/api/context-select.js +37 -45
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +48 -61
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +2 -11
- package/dist/api/forget.js +13 -46
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +5 -42
- package/dist/api/outcome.js +15 -80
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +4 -15
- package/dist/api/promote.js +29 -106
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +10 -12
- package/dist/api/remember.js +29 -45
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +40 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.js +1 -1
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.js +6 -4
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +190 -184
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +41 -21
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +4 -2
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -83
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -49
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -91
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +13 -2
- package/dist/{capture-contract.js → core/capture-contract.js} +64 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +17 -5
- package/dist/{memory.js → core/memory.js} +110 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.js → core/prompt-recall.js} +1 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +1 -8
- package/dist/hooks/copilot.js +14 -15
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +1 -1
- package/dist/hooks/json-hooks.js +31 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +0 -4
- package/dist/hooks/shared.js +1 -5
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.js +7 -27
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +62 -60
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +12 -14
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +1 -1
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +39 -61
- package/dist/server.js +24 -568
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +11 -5
- package/dist/store/audit-event.js +5 -4
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +1 -1
- package/dist/store/handoffs.js +39 -30
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +6 -4
- package/dist/store/open.js +24 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +3 -1
- package/dist/{raw-archive.js → store/raw-archive.js} +6 -2
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +2 -2
- package/dist/{recall-scope.js → store/recall-scope.js} +3 -3
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +41 -28
- package/dist/store/sessions.d.ts +13 -2
- package/dist/store/sessions.js +79 -45
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/{entry-writes-group.js → sqlite/entry-writes-group.js} +73 -60
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +15 -2
- package/dist/{env.js → util/env.js} +20 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store/entry-writes-group.d.ts +0 -9
- package/dist/store-port.d.ts +0 -262
- package/dist/store-port.js +0 -178
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { simulate } from '../physics.js';
|
|
1
|
+
import { refreshParticleProperties } from '../db/physics-state.js';
|
|
2
|
+
import { loadStoredParticles, saveStoredParticles } from '../store/vector-writes.js';
|
|
3
|
+
import { simulate } from '../core/physics.js';
|
|
4
|
+
import { errorMessage } from '../util/log.js';
|
|
5
|
+
const STATS_DECIMALS = 4;
|
|
4
6
|
// -------------------------------------------------------------------------
|
|
5
7
|
// 2. Physics simulation pass
|
|
6
8
|
// -------------------------------------------------------------------------
|
|
7
9
|
export function physicsPass(run) {
|
|
8
10
|
if (run.dryRun)
|
|
9
11
|
return;
|
|
10
|
-
const { config, result
|
|
12
|
+
const { config, result } = run;
|
|
11
13
|
try {
|
|
12
14
|
const physicsEnabled = config.physics.enabled === true
|
|
13
15
|
|| (config.physics.enabled === 'auto');
|
|
14
|
-
if (physicsEnabled)
|
|
15
|
-
|
|
16
|
-
try {
|
|
17
|
-
const physicsMap = loadPhysicsState(db);
|
|
18
|
-
const particles = Array.from(physicsMap.values());
|
|
19
|
-
if (particles.length > 0) {
|
|
20
|
-
// Build entry lookup for property refresh
|
|
21
|
-
const entryMap = new Map(survivors.map(e => [e.id, e]));
|
|
22
|
-
refreshParticleProperties(particles, entryMap, run.now);
|
|
23
|
-
// Build conflict pairs from survivors
|
|
24
|
-
const conflictPairs = new Map();
|
|
25
|
-
for (const entry of survivors) {
|
|
26
|
-
if (entry.conflicts_with.length > 0) {
|
|
27
|
-
const set = conflictPairs.get(entry.id) ?? new Set();
|
|
28
|
-
for (const cid of entry.conflicts_with)
|
|
29
|
-
set.add(cid);
|
|
30
|
-
conflictPairs.set(entry.id, set);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
// Build half-life lookup
|
|
34
|
-
const halfLives = new Map();
|
|
35
|
-
for (const entry of survivors) {
|
|
36
|
-
halfLives.set(entry.id, entry.half_life_days);
|
|
37
|
-
}
|
|
38
|
-
const ctx = {
|
|
39
|
-
conflictPairs,
|
|
40
|
-
halfLives,
|
|
41
|
-
config: config.physics,
|
|
42
|
-
};
|
|
43
|
-
const stats = simulate(particles, ctx);
|
|
44
|
-
savePhysicsState(db, particles);
|
|
45
|
-
result.physicsSimulated = stats.particleCount;
|
|
46
|
-
result.details.push(` ⚛️ physics: ${stats.particleCount} particles, ` +
|
|
47
|
-
`avg vel ${stats.avgVelocityMagnitude.toFixed(4)}, ` +
|
|
48
|
-
`energy ${stats.energy.total.toFixed(4)}`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
finally {
|
|
52
|
-
closeHippoDb(db);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
16
|
+
if (physicsEnabled)
|
|
17
|
+
simulateStoredParticles(run);
|
|
55
18
|
}
|
|
56
19
|
catch (error) {
|
|
57
|
-
result.details.push(` ⚠️ physics simulation skipped: ${error
|
|
20
|
+
result.details.push(` ⚠️ physics simulation skipped: ${errorMessage(error)}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function simulateStoredParticles(run) {
|
|
24
|
+
const { result, survivors } = run;
|
|
25
|
+
const particles = loadStoredParticles(run.hippoRoot);
|
|
26
|
+
if (particles.length === 0)
|
|
27
|
+
return;
|
|
28
|
+
// Build entry lookup for property refresh
|
|
29
|
+
const entryMap = new Map(survivors.map(e => [e.id, e]));
|
|
30
|
+
refreshParticleProperties(particles, entryMap, run.now);
|
|
31
|
+
const stats = simulate(particles, survivorForces(run));
|
|
32
|
+
saveStoredParticles(run.hippoRoot, particles);
|
|
33
|
+
result.physicsSimulated = stats.particleCount;
|
|
34
|
+
result.details.push(` ⚛️ physics: ${stats.particleCount} particles, ` +
|
|
35
|
+
`avg vel ${stats.avgVelocityMagnitude.toFixed(STATS_DECIMALS)}, ` +
|
|
36
|
+
`energy ${stats.energy.total.toFixed(STATS_DECIMALS)}`);
|
|
37
|
+
}
|
|
38
|
+
function survivorForces(run) {
|
|
39
|
+
// Build conflict pairs from survivors
|
|
40
|
+
const conflictPairs = new Map();
|
|
41
|
+
for (const entry of run.survivors) {
|
|
42
|
+
if (entry.conflicts_with.length > 0) {
|
|
43
|
+
const set = conflictPairs.get(entry.id) ?? new Set();
|
|
44
|
+
for (const cid of entry.conflicts_with)
|
|
45
|
+
set.add(cid);
|
|
46
|
+
conflictPairs.set(entry.id, set);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Build half-life lookup
|
|
50
|
+
const halfLives = new Map();
|
|
51
|
+
for (const entry of run.survivors) {
|
|
52
|
+
halfLives.set(entry.id, entry.half_life_days);
|
|
58
53
|
}
|
|
54
|
+
return {
|
|
55
|
+
conflictPairs,
|
|
56
|
+
halfLives,
|
|
57
|
+
config: run.config.physics,
|
|
58
|
+
};
|
|
59
59
|
}
|
|
60
60
|
//# sourceMappingURL=physics-pass.js.map
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* - merge: collapses near-duplicate episodics into semantics
|
|
23
23
|
* - REPLAY: picks winners and rehearses them (this file)
|
|
24
24
|
*/
|
|
25
|
-
import { type MemoryEntry } from '
|
|
25
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
26
26
|
/**
|
|
27
27
|
* Priority score used to rank survivors for replay. Higher = more likely
|
|
28
28
|
* to be sampled. Pure function of the entry and current time.
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
* - merge: collapses near-duplicate episodics into semantics
|
|
23
23
|
* - REPLAY: picks winners and rehearses them (this file)
|
|
24
24
|
*/
|
|
25
|
-
import { isOutcomeSlowAblated } from '
|
|
26
|
-
import { resolveConfidence } from '
|
|
25
|
+
import { isOutcomeSlowAblated } from '../core/ablation.js';
|
|
26
|
+
import { resolveConfidence } from '../core/memory.js';
|
|
27
27
|
const VALENCE_WEIGHT = {
|
|
28
28
|
neutral: 1.0,
|
|
29
29
|
positive: 1.3,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { MemoryEntry, type DecayOptions } from '../memory.js';
|
|
2
|
-
import { type
|
|
3
|
-
import { type
|
|
4
|
-
import { loadConfig } from '../config.js';
|
|
1
|
+
import { MemoryEntry, type DecayOptions } from '../core/memory.js';
|
|
2
|
+
import { type DormantMove } from '../store/dormant.js';
|
|
3
|
+
import { type TombstoneChecks } from '../store/tombstone-checks.js';
|
|
4
|
+
import { loadConfig } from '../core/config.js';
|
|
5
5
|
export interface ConsolidationResult {
|
|
6
6
|
decayed: number;
|
|
7
7
|
removed: number;
|
|
8
8
|
/** Faded memories moved to the dormant store instead of deleted (config
|
|
9
|
-
* `dormant.enabled`; src/dormant.ts). Always 0 when that is off. */
|
|
9
|
+
* `dormant.enabled`; src/store/dormant.ts). Always 0 when that is off. */
|
|
10
10
|
dormant: number;
|
|
11
11
|
/** Dormant memories deleted for good this sleep because they outlived
|
|
12
12
|
* `dormant.retentionDays` without a restore. */
|
|
@@ -35,12 +35,6 @@ export interface ConsolidationResult {
|
|
|
35
35
|
}
|
|
36
36
|
export declare const REPLAY_COUNT_DEFAULT = 5;
|
|
37
37
|
export declare function keptAsWritten(entry: MemoryEntry): boolean;
|
|
38
|
-
/** The sleep's one tombstone-check handle: opened on first use, never under dryRun, closed once. */
|
|
39
|
-
interface LazyDb {
|
|
40
|
-
get: () => DatabaseSyncLike | null;
|
|
41
|
-
close: () => void;
|
|
42
|
-
}
|
|
43
|
-
export declare function lazyConsolidateDb(hippoRoot: string, dryRun: boolean): LazyDb;
|
|
44
38
|
/** Re-syncs the full-text index with `memories`; a store open that is already current no longer counts the two. */
|
|
45
39
|
export declare function syncFtsIndex(hippoRoot: string, dryRun: boolean, result: ConsolidationResult): void;
|
|
46
40
|
/** State every sleep stage reads or appends to; the pending lists are flushed at the end, each of `units` whole in one transaction. */
|
|
@@ -53,7 +47,8 @@ export interface SleepRun {
|
|
|
53
47
|
result: ConsolidationResult;
|
|
54
48
|
all: MemoryEntry[];
|
|
55
49
|
retirable: (entry: MemoryEntry) => boolean;
|
|
56
|
-
|
|
50
|
+
/** Auto-promote (1.4) and merge (3) write deterministic content through the guard's bypass, so both check tombstones here first. */
|
|
51
|
+
tombstones: TombstoneChecks;
|
|
57
52
|
survivors: MemoryEntry[];
|
|
58
53
|
pendingWrites: MemoryEntry[];
|
|
59
54
|
pendingDeletes: string[];
|
|
@@ -61,5 +56,4 @@ export interface SleepRun {
|
|
|
61
56
|
units: string[][];
|
|
62
57
|
}
|
|
63
58
|
export declare function newConsolidationResult(dryRun: boolean): ConsolidationResult;
|
|
64
|
-
export {};
|
|
65
59
|
//# sourceMappingURL=run.d.ts.map
|
package/dist/consolidate/run.js
CHANGED
|
@@ -1,46 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { NO_MERGE_TAGS } from '../shared.js';
|
|
1
|
+
import { ftsDrift } from '../store/entry-row.js';
|
|
2
|
+
import { NO_MERGE_TAGS } from '../sharing/shared.js';
|
|
3
3
|
export const REPLAY_COUNT_DEFAULT = 5;
|
|
4
4
|
export function keptAsWritten(entry) {
|
|
5
5
|
return entry.tags.some((tag) => NO_MERGE_TAGS.has(tag));
|
|
6
6
|
}
|
|
7
|
-
// Auto-promote (1.4) and merge (3) write deterministic content through the guard's bypass, so both
|
|
8
|
-
// need this tombstone check. Lazy so a sleep reaching neither never opens it; call it IMMEDIATELY
|
|
9
|
-
// before the try whose finally closes it, so a throw in any phase cannot leak the handle.
|
|
10
|
-
export function lazyConsolidateDb(hippoRoot, dryRun) {
|
|
11
|
-
let consolidateDbHandle = null;
|
|
12
|
-
let consolidateDbOpened = false;
|
|
13
|
-
const get = () => {
|
|
14
|
-
if (dryRun)
|
|
15
|
-
return null;
|
|
16
|
-
if (!consolidateDbOpened) {
|
|
17
|
-
consolidateDbHandle = openHippoDb(hippoRoot);
|
|
18
|
-
consolidateDbOpened = true;
|
|
19
|
-
}
|
|
20
|
-
return consolidateDbHandle;
|
|
21
|
-
};
|
|
22
|
-
const close = () => {
|
|
23
|
-
if (consolidateDbHandle)
|
|
24
|
-
closeHippoDb(consolidateDbHandle);
|
|
25
|
-
};
|
|
26
|
-
return { get, close };
|
|
27
|
-
}
|
|
28
7
|
/** Re-syncs the full-text index with `memories`; a store open that is already current no longer counts the two. */
|
|
29
8
|
export function syncFtsIndex(hippoRoot, dryRun, result) {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const counts = ftsRowCounts(db);
|
|
35
|
-
if (counts === null || counts.memories === counts.fts)
|
|
36
|
-
return;
|
|
37
|
-
if (!dryRun)
|
|
38
|
-
repairFtsDrift(db);
|
|
39
|
-
result.details.push(` 🔎 ${dryRun ? 'would re-sync' : 're-synced'} the full-text index (${counts.fts} indexed rows for ${counts.memories} memories)`);
|
|
40
|
-
}
|
|
41
|
-
finally {
|
|
42
|
-
closeHippoDb(db);
|
|
43
|
-
}
|
|
9
|
+
const counts = ftsDrift(hippoRoot, !dryRun);
|
|
10
|
+
if (counts === null)
|
|
11
|
+
return;
|
|
12
|
+
result.details.push(` 🔎 ${dryRun ? 'would re-sync' : 're-synced'} the full-text index (${counts.fts} indexed rows for ${counts.memories} memories)`);
|
|
44
13
|
}
|
|
45
14
|
export function newConsolidationResult(dryRun) {
|
|
46
15
|
return {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 2. Merge pass - find episodic entries with high text overlap, create semantic summaries
|
|
7
7
|
* 3. Stats tracking
|
|
8
8
|
*/
|
|
9
|
-
import { type WriteBudget } from '../write-budget.js';
|
|
9
|
+
import { type WriteBudget } from '../util/write-budget.js';
|
|
10
10
|
import { type ConsolidationResult } from './run.js';
|
|
11
11
|
/**
|
|
12
12
|
* Run a full consolidation pass.
|
|
@@ -6,28 +6,29 @@
|
|
|
6
6
|
* 2. Merge pass - find episodic entries with high text overlap, create semantic summaries
|
|
7
7
|
* 3. Stats tracking
|
|
8
8
|
*/
|
|
9
|
-
import { evalNow } from '../ablation.js';
|
|
10
|
-
import { canAutoDelete } from '../memory.js';
|
|
9
|
+
import { evalNow } from '../core/ablation.js';
|
|
10
|
+
import { canAutoDelete } from '../core/memory.js';
|
|
11
11
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
12
|
-
import {
|
|
13
|
-
import { openStore } from '../store/open.js';
|
|
12
|
+
import { commitInChunks, memoriesBackingObjects } from '../store/delete-and-batch.js';
|
|
14
13
|
import { appendConsolidationRun, loadSessionDecayContext, incrementSleepCount } from '../store/index-and-stats.js';
|
|
15
14
|
import { replaceDetectedConflicts } from '../store/conflicts.js';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { loadConfig } from '../config.js';
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
15
|
+
import { SLEEP_DB_WAIT_MS } from '../db/index.js';
|
|
16
|
+
import { expireDormantBefore } from '../store/dormant.js';
|
|
17
|
+
import { loadConfig } from '../core/config.js';
|
|
18
|
+
import { recordAuditEventsRowByRow, reportAuditWriteFailure } from '../store/audit.js';
|
|
19
|
+
import { lazyTombstoneChecks } from '../store/tombstone-checks.js';
|
|
20
|
+
import { migrateDefaultHalfLife, LEGACY_TYPED_HALF_LIFE } from './half-life-migration.js';
|
|
21
|
+
import { errorMessage, log } from '../util/log.js';
|
|
22
|
+
import { WRITE_BUDGET } from '../util/write-budget.js';
|
|
23
23
|
import { decayPass } from './decay.js';
|
|
24
24
|
import { familyUnits, groupFlush } from './flush-units.js';
|
|
25
25
|
import { retireHeldTexts, mergePass } from './merge.js';
|
|
26
26
|
import { detectConflicts } from './conflicts.js';
|
|
27
|
-
import {
|
|
27
|
+
import { newConsolidationResult, syncFtsIndex } from './run.js';
|
|
28
28
|
import { promoteSessionTraces, replayPass } from './traces.js';
|
|
29
29
|
import { llmPasses } from './llm-passes.js';
|
|
30
30
|
import { physicsPass } from './physics-pass.js';
|
|
31
|
+
import { DAY_MS } from '../util/time.js';
|
|
31
32
|
/**
|
|
32
33
|
* Run a full consolidation pass.
|
|
33
34
|
*/
|
|
@@ -47,18 +48,11 @@ export async function consolidate(hippoRoot, options = {}) {
|
|
|
47
48
|
// Retirable: auto-deletable (never pinned, raw or kept for good) and not backing a first-class object.
|
|
48
49
|
const retirable = (entry) => canAutoDelete(entry) && !backingObjects.has(entry.id);
|
|
49
50
|
const snapshot = new Map(structuredClone(all).map((e) => [e.id, e]));
|
|
50
|
-
// Load decay options from config + session context
|
|
51
51
|
const config = loadConfig(hippoRoot);
|
|
52
|
-
const
|
|
53
|
-
const decayOpts = {
|
|
54
|
-
decayBasis: config.decayBasis,
|
|
55
|
-
avgSessionIntervalDays: sessionCtx.avgSessionIntervalDays,
|
|
56
|
-
sleepCount: sessionCtx.sleepCount,
|
|
57
|
-
};
|
|
58
|
-
const consolidateDb = lazyConsolidateDb(hippoRoot, dryRun);
|
|
52
|
+
const decayOpts = sessionDecayOptions(hippoRoot, config);
|
|
59
53
|
const run = {
|
|
60
54
|
hippoRoot, now, dryRun, config, decayOpts, result, all, retirable,
|
|
61
|
-
|
|
55
|
+
tombstones: lazyTombstoneChecks(hippoRoot, dryRun),
|
|
62
56
|
survivors: [],
|
|
63
57
|
// Collect all writes/deletes and batch them at the end
|
|
64
58
|
pendingWrites: [],
|
|
@@ -67,30 +61,43 @@ export async function consolidate(hippoRoot, options = {}) {
|
|
|
67
61
|
units: [],
|
|
68
62
|
};
|
|
69
63
|
const decay = decayPass(run);
|
|
64
|
+
await runPassesAfterDecay(run, options.fetcher);
|
|
65
|
+
const budget = options.budget ?? WRITE_BUDGET;
|
|
66
|
+
await flushPending(run, snapshot, budget);
|
|
67
|
+
await expireDormant(run, budget);
|
|
68
|
+
if (!dryRun)
|
|
69
|
+
logRun(run, decay);
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
// Load decay options from config + session context
|
|
73
|
+
function sessionDecayOptions(hippoRoot, config) {
|
|
74
|
+
const sessionCtx = loadSessionDecayContext(hippoRoot);
|
|
75
|
+
return {
|
|
76
|
+
decayBasis: config.decayBasis,
|
|
77
|
+
avgSessionIntervalDays: sessionCtx.avgSessionIntervalDays,
|
|
78
|
+
sleepCount: sessionCtx.sleepCount,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/** Every pass between decay and the flush; the tombstone-check handle closes whichever of them throws. */
|
|
82
|
+
async function runPassesAfterDecay(run, fetcher) {
|
|
70
83
|
let mergesSkippedRejected = 0;
|
|
71
84
|
try {
|
|
72
85
|
promoteSessionTraces(run);
|
|
73
86
|
replayPass(run);
|
|
74
|
-
await llmPasses(run,
|
|
87
|
+
await llmPasses(run, fetcher);
|
|
75
88
|
physicsPass(run);
|
|
76
89
|
retireHeldTexts(run);
|
|
77
90
|
mergesSkippedRejected = mergePass(run);
|
|
78
91
|
}
|
|
79
92
|
finally {
|
|
80
|
-
|
|
93
|
+
run.tombstones.close();
|
|
81
94
|
}
|
|
82
95
|
if (mergesSkippedRejected > 0) {
|
|
83
96
|
log.warn(`consolidate: skipped ${mergesSkippedRejected} merge(s) whose content matches a rejected value`);
|
|
84
97
|
}
|
|
85
|
-
const budget = options.budget ?? WRITE_BUDGET;
|
|
86
|
-
await flushPending(run, snapshot, budget);
|
|
87
|
-
await expireDormant(run, budget);
|
|
88
|
-
if (!dryRun)
|
|
89
|
-
logRun(run, decay);
|
|
90
|
-
return result;
|
|
91
98
|
}
|
|
92
99
|
// A changed default half-life moves memories still on the old base first,
|
|
93
|
-
// so this pass decays them at the new one (src/half-life-migration.ts).
|
|
100
|
+
// so this pass decays them at the new one (src/consolidate/half-life-migration.ts).
|
|
94
101
|
function migrateHalfLives(hippoRoot, dryRun, result) {
|
|
95
102
|
const halfLife = migrateDefaultHalfLife(hippoRoot, loadConfig(hippoRoot).defaultHalfLifeDays, { dryRun });
|
|
96
103
|
if (halfLife.rescaled > 0) {
|
|
@@ -108,7 +115,8 @@ async function flushPending(run, snapshot, budget) {
|
|
|
108
115
|
return;
|
|
109
116
|
const units = [...run.units, ...familyUnits(pendingWrites, pendingDeletes, pendingDormant, snapshot)];
|
|
110
117
|
const components = groupFlush(pendingWrites, pendingDeletes, pendingDormant, units);
|
|
111
|
-
|
|
118
|
+
// The snapshot keeps what the DAG passes and other writers changed while sleep ran; the wait is sleep's own, not a server request's 250 ms.
|
|
119
|
+
const left = new Set(await commitInChunks(run.hippoRoot, components, { snapshot, budget, busyWaitMs: SLEEP_DB_WAIT_MS }));
|
|
112
120
|
for (const id of [...pendingDeletes, ...pendingDormant.map((m) => m.entry.id)]) {
|
|
113
121
|
if (!left.has(id))
|
|
114
122
|
result.details.push(` ↩ ${id} not removed: pinned or already gone before sleep saved`);
|
|
@@ -117,67 +125,6 @@ async function flushPending(run, snapshot, budget) {
|
|
|
117
125
|
result.removed = result.removedIds.length;
|
|
118
126
|
result.dormant = pendingDormant.filter((m) => left.has(m.entry.id)).length;
|
|
119
127
|
}
|
|
120
|
-
/** Commits whole components in transactions of about `budget.holdMs`, letting other writers in between; returns the ids that left `memories`.
|
|
121
|
-
* The snapshot keeps what the DAG passes and other writers changed while sleep ran. */
|
|
122
|
-
async function commitInChunks(hippoRoot, components, snapshot, budget) {
|
|
123
|
-
if (components.length === 0)
|
|
124
|
-
return [];
|
|
125
|
-
const removed = [];
|
|
126
|
-
// Its own wait, not a server request's 250 ms, and an option rather than a PRAGMA so a shared hook handle keeps its own.
|
|
127
|
-
const db = openStore(hippoRoot, { busyWaitMs: SLEEP_DB_WAIT_MS });
|
|
128
|
-
let next = 0;
|
|
129
|
-
try {
|
|
130
|
-
let committedAt = 0;
|
|
131
|
-
while (next < components.length) {
|
|
132
|
-
if (next > 0)
|
|
133
|
-
await budget.pause(committedAt);
|
|
134
|
-
const chunk = batchWriteAndDeleteOn(db, hippoRoot, components, next, { snapshot, holdMs: budget.holdMs, clock: budget.clock });
|
|
135
|
-
committedAt = budget.clock();
|
|
136
|
-
next = chunk.next;
|
|
137
|
-
for (const id of chunk.removedIds)
|
|
138
|
-
removed.push(id);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
catch (err) {
|
|
142
|
-
// A unit that threw is already tagged; a throw outside one (a pause, BEGIN or COMMIT) names the chunk's first unit.
|
|
143
|
-
if (err instanceof Error)
|
|
144
|
-
noteFailedUnit(err, components[next]);
|
|
145
|
-
throw err;
|
|
146
|
-
}
|
|
147
|
-
finally {
|
|
148
|
-
closeHippoDb(db);
|
|
149
|
-
}
|
|
150
|
-
return removed;
|
|
151
|
-
}
|
|
152
|
-
/** Deletes `keys` in transactions of about `budget.holdMs`, letting other writers in between; returns how many went. */
|
|
153
|
-
async function expireInChunks(db, keys, cutoff, budget) {
|
|
154
|
-
let gone = 0;
|
|
155
|
-
let next = 0;
|
|
156
|
-
let committedAt = 0;
|
|
157
|
-
while (next < keys.length) {
|
|
158
|
-
if (next > 0)
|
|
159
|
-
await budget.pause(committedAt);
|
|
160
|
-
db.exec('BEGIN IMMEDIATE');
|
|
161
|
-
const begunAt = budget.clock();
|
|
162
|
-
try {
|
|
163
|
-
do
|
|
164
|
-
gone += deleteExpiredDormantRow(db, keys[next++], cutoff);
|
|
165
|
-
while (next < keys.length && budget.clock() - begunAt < budget.holdMs);
|
|
166
|
-
db.exec('COMMIT');
|
|
167
|
-
}
|
|
168
|
-
catch (err) {
|
|
169
|
-
if (db.isTransaction !== false) {
|
|
170
|
-
try {
|
|
171
|
-
db.exec('ROLLBACK');
|
|
172
|
-
}
|
|
173
|
-
catch { /* preserve the original throw */ }
|
|
174
|
-
}
|
|
175
|
-
throw err;
|
|
176
|
-
}
|
|
177
|
-
committedAt = budget.clock();
|
|
178
|
-
}
|
|
179
|
-
return gone;
|
|
180
|
-
}
|
|
181
128
|
// Dormant retention: a dormant memory nobody restored within
|
|
182
129
|
// dormant.retentionDays is deleted for good (0 keeps them forever). Runs
|
|
183
130
|
// even when dormant.enabled is off, so turning it off still ages out what
|
|
@@ -186,16 +133,8 @@ async function expireDormant(run, budget) {
|
|
|
186
133
|
const { config, result, dryRun } = run;
|
|
187
134
|
if (!(config.dormant.retentionDays > 0))
|
|
188
135
|
return;
|
|
189
|
-
const cutoff = new Date(run.now.getTime() - config.dormant.retentionDays *
|
|
190
|
-
|
|
191
|
-
try {
|
|
192
|
-
// The keys come from a read, so a sleep with nothing to expire never takes the write lock; one DELETE scanned every stored entry under it.
|
|
193
|
-
const keys = expiredDormantKeys(db, cutoff);
|
|
194
|
-
result.dormantExpired = dryRun ? keys.length : await expireInChunks(db, keys, cutoff, budget);
|
|
195
|
-
}
|
|
196
|
-
finally {
|
|
197
|
-
closeHippoDb(db);
|
|
198
|
-
}
|
|
136
|
+
const cutoff = new Date(run.now.getTime() - config.dormant.retentionDays * DAY_MS).toISOString();
|
|
137
|
+
result.dormantExpired = await expireDormantBefore(run.hippoRoot, cutoff, { dryRun, budget, busyWaitMs: SLEEP_DB_WAIT_MS });
|
|
199
138
|
if (result.dormantExpired > 0) {
|
|
200
139
|
result.details.push(` ⌛ ${dryRun ? 'would expire' : 'expired'} ${result.dormantExpired} dormant memor${result.dormantExpired === 1 ? 'y' : 'ies'} older than ${config.dormant.retentionDays} days`);
|
|
201
140
|
}
|
|
@@ -223,41 +162,32 @@ function logRun(run, decay) {
|
|
|
223
162
|
// One audit row per rescue, written only after the last flush chunk commits, so a run stopped mid-flush asserts no rescue.
|
|
224
163
|
function auditRescues(run, { rescuedEntries, rankById }) {
|
|
225
164
|
const { result } = run;
|
|
165
|
+
const rescueEvent = (entry) => {
|
|
166
|
+
const rank = rankById.get(entry.id);
|
|
167
|
+
return {
|
|
168
|
+
tenantId: entry.tenantId,
|
|
169
|
+
actor: 'sleep',
|
|
170
|
+
op: 'mv_rescue',
|
|
171
|
+
targetId: entry.id,
|
|
172
|
+
metadata: rank
|
|
173
|
+
? { rank: rank.rank, totalNonPinned: rank.totalNonPinned, keepN: rank.keepN, score: rank.score }
|
|
174
|
+
: {},
|
|
175
|
+
};
|
|
176
|
+
};
|
|
226
177
|
try {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
tenantId: entry.tenantId,
|
|
236
|
-
actor: 'sleep',
|
|
237
|
-
op: 'mv_rescue',
|
|
238
|
-
targetId: entry.id,
|
|
239
|
-
metadata: rank
|
|
240
|
-
? { rank: rank.rank, totalNonPinned: rank.totalNonPinned, keepN: rank.keepN, score: rank.score }
|
|
241
|
-
: {},
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
catch (error) {
|
|
245
|
-
auditFailures++;
|
|
246
|
-
reportAuditWriteFailure('mv_rescue', String(error), entry.id);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
if (auditFailures > 0) {
|
|
250
|
-
result.details.push(` ⚠️ memory-value: ${auditFailures} mv_rescue audit row${auditFailures === 1 ? '' : 's'} ` +
|
|
251
|
-
`failed to write (the rescue itself still landed)`);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
finally {
|
|
255
|
-
closeHippoDb(auditDb);
|
|
178
|
+
// Row by row: one failed audit write must not silently drop every remaining row.
|
|
179
|
+
const failed = recordAuditEventsRowByRow(run.hippoRoot, rescuedEntries.map(rescueEvent));
|
|
180
|
+
for (const { event, error } of failed)
|
|
181
|
+
reportAuditWriteFailure('mv_rescue', String(error), event.targetId);
|
|
182
|
+
const auditFailures = failed.length;
|
|
183
|
+
if (auditFailures > 0) {
|
|
184
|
+
result.details.push(` ⚠️ memory-value: ${auditFailures} mv_rescue audit row${auditFailures === 1 ? '' : 's'} ` +
|
|
185
|
+
`failed to write (the rescue itself still landed)`);
|
|
256
186
|
}
|
|
257
187
|
}
|
|
258
|
-
catch {
|
|
259
|
-
//
|
|
260
|
-
|
|
188
|
+
catch (err) {
|
|
189
|
+
// An audit store that will not open must never crash the mutation it records.
|
|
190
|
+
log.debug(`mv_rescue audit unavailable: ${errorMessage(err)}`);
|
|
261
191
|
result.details.push(` ⚠️ memory-value: mv_rescue audit unavailable this cycle ` +
|
|
262
192
|
`(${rescuedEntries.length} rescue${rescuedEntries.length === 1 ? '' : 's'} not audited)`);
|
|
263
193
|
}
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* sequence of agent actions and their final outcome. v1 stores steps as
|
|
6
6
|
* markdown in `content`; `renderTraceContent` is the canonical formatter.
|
|
7
7
|
*/
|
|
8
|
-
import { isJsonString } from '
|
|
8
|
+
import { isJsonString, isJsonObject } from '../util/json.js';
|
|
9
|
+
import { errorMessage } from '../util/log.js';
|
|
9
10
|
/**
|
|
10
11
|
* Render a trace record as agent-readable markdown.
|
|
11
12
|
*
|
|
@@ -30,9 +31,6 @@ export function renderTraceContent(rec) {
|
|
|
30
31
|
});
|
|
31
32
|
return lines.join('\n');
|
|
32
33
|
}
|
|
33
|
-
function isJsonRecord(value) {
|
|
34
|
-
return value !== null && !Array.isArray(value) && typeof value === 'object';
|
|
35
|
-
}
|
|
36
34
|
/**
|
|
37
35
|
* Parse a JSON string into an array of TraceStep. Throws on invalid shape.
|
|
38
36
|
*/
|
|
@@ -42,13 +40,13 @@ export function parseSteps(json) {
|
|
|
42
40
|
parsed = JSON.parse(json);
|
|
43
41
|
}
|
|
44
42
|
catch (err) {
|
|
45
|
-
throw new Error(`Invalid trace steps JSON: ${err
|
|
43
|
+
throw new Error(`Invalid trace steps JSON: ${errorMessage(err)}`, { cause: err });
|
|
46
44
|
}
|
|
47
45
|
if (!Array.isArray(parsed)) {
|
|
48
46
|
throw new Error('trace steps must be an array');
|
|
49
47
|
}
|
|
50
48
|
return parsed.map((s, i) => {
|
|
51
|
-
if (!
|
|
49
|
+
if (!isJsonObject(s)) {
|
|
52
50
|
throw new Error(`trace step ${i}: not an object`);
|
|
53
51
|
}
|
|
54
52
|
const action = s.action;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { isRecallBoostAblated } from '../ablation.js';
|
|
2
|
-
import { Layer, createMemory, markRetrieved } from '../memory.js';
|
|
1
|
+
import { isRecallBoostAblated } from '../core/ablation.js';
|
|
2
|
+
import { Layer, createMemory, markRetrieved } from '../core/memory.js';
|
|
3
3
|
import { findPromotableSessions, traceExistsForSession, listSessionEvents } from '../store/sessions.js';
|
|
4
|
-
import { rejectionDigest
|
|
5
|
-
import { sampleForReplay } from '
|
|
6
|
-
import { renderTraceContent } from '
|
|
7
|
-
import { resolveTenantId } from '../tenant.js';
|
|
8
|
-
import {
|
|
9
|
-
import { commonDerivationScope } from '../recall-scope.js';
|
|
10
|
-
import { log } from '../log.js';
|
|
4
|
+
import { rejectionDigest } from '../store/rejection.js';
|
|
5
|
+
import { sampleForReplay } from './replay.js';
|
|
6
|
+
import { renderTraceContent } from './trace.js';
|
|
7
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
8
|
+
import { reportAuditWriteFailure } from '../store/audit.js';
|
|
9
|
+
import { commonDerivationScope } from '../store/recall-scope.js';
|
|
10
|
+
import { log } from '../util/log.js';
|
|
11
11
|
import { REPLAY_COUNT_DEFAULT } from './run.js';
|
|
12
|
-
import { isJsonString } from '../json.js';
|
|
12
|
+
import { isJsonString } from '../util/json.js';
|
|
13
|
+
import { DAY_MS } from '../util/time.js';
|
|
13
14
|
// -------------------------------------------------------------------------
|
|
14
15
|
// 1.4. Auto-promote complete sessions to traces
|
|
15
16
|
// -------------------------------------------------------------------------
|
|
@@ -24,7 +25,7 @@ export function promoteSessionTraces(run) {
|
|
|
24
25
|
return;
|
|
25
26
|
let tracesSkippedRejected = 0;
|
|
26
27
|
const windowDays = run.config.autoTraceWindowDays ?? 7;
|
|
27
|
-
const sinceMs = run.now.getTime() - windowDays *
|
|
28
|
+
const sinceMs = run.now.getTime() - windowDays * DAY_MS;
|
|
28
29
|
// Auto-trace runs single-tenant (the env-resolved tenant); consolidating
|
|
29
30
|
// every tenant needs a per-tenant loop layered on top of this.
|
|
30
31
|
const consolidationTenant = resolveTenantId({});
|
|
@@ -66,23 +67,13 @@ function sessionTrace(run, consolidationTenant, sessionId) {
|
|
|
66
67
|
run.result.details.push(` ⏭ skipped session ${sessionId}: events span mixed scopes`);
|
|
67
68
|
return null;
|
|
68
69
|
}
|
|
69
|
-
const
|
|
70
|
-
if (!
|
|
71
|
-
return null; // defence-in-depth; findPromotableSessions filters already.
|
|
72
|
-
const outcomeRaw = completeEvent.content;
|
|
73
|
-
if (outcomeRaw !== 'success' && outcomeRaw !== 'failure' && outcomeRaw !== 'partial') {
|
|
74
|
-
// Malformed terminal event — skip rather than crash the whole sleep.
|
|
70
|
+
const ending = sessionEnding(events);
|
|
71
|
+
if (!ending)
|
|
75
72
|
return null;
|
|
76
|
-
}
|
|
77
|
-
const outcome = outcomeRaw;
|
|
73
|
+
const { outcome, summary } = ending;
|
|
78
74
|
const steps = events
|
|
79
75
|
.filter((e) => e.event_type !== 'session_complete')
|
|
80
76
|
.map((e) => ({ action: e.content, observation: '' }));
|
|
81
|
-
// SAFETY: session event metadata is a free-form Record<string, unknown>
|
|
82
|
-
// bag; summary is optional and is only trusted once isJsonString below
|
|
83
|
-
// confirms it is actually a string.
|
|
84
|
-
const summaryValue = completeEvent.metadata.summary;
|
|
85
|
-
const summary = isJsonString(summaryValue) ? summaryValue : '(untitled)';
|
|
86
77
|
const trace = createMemory(renderTraceContent({ task: summary, steps, outcome }), {
|
|
87
78
|
layer: Layer.Trace,
|
|
88
79
|
trace_outcome: outcome,
|
|
@@ -97,18 +88,32 @@ function sessionTrace(run, consolidationTenant, sessionId) {
|
|
|
97
88
|
});
|
|
98
89
|
return { trace, outcome };
|
|
99
90
|
}
|
|
91
|
+
/** The outcome and title a session's terminal event carries, or null when it has none or the event is malformed. */
|
|
92
|
+
function sessionEnding(events) {
|
|
93
|
+
const completeEvent = events.find((e) => e.event_type === 'session_complete');
|
|
94
|
+
if (!completeEvent)
|
|
95
|
+
return null; // defence-in-depth; findPromotableSessions filters already.
|
|
96
|
+
const outcomeRaw = completeEvent.content;
|
|
97
|
+
if (outcomeRaw !== 'success' && outcomeRaw !== 'failure' && outcomeRaw !== 'partial') {
|
|
98
|
+
// Malformed terminal event — skip rather than crash the whole sleep.
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
// SAFETY: session event metadata is a free-form Record<string, unknown>
|
|
102
|
+
// bag; summary is optional and is only trusted once isJsonString below
|
|
103
|
+
// confirms it is actually a string.
|
|
104
|
+
const summaryValue = completeEvent.metadata.summary;
|
|
105
|
+
const summary = isJsonString(summaryValue) ? summaryValue : '(untitled)';
|
|
106
|
+
return { outcome: outcomeRaw, summary };
|
|
107
|
+
}
|
|
100
108
|
// traceExistsForSession only sees live rows, so a removed rejected trace would regenerate every
|
|
101
109
|
// sleep; check the tombstone under the entry's own stamped tenantId, never a guessed one.
|
|
102
110
|
function traceRejected(run, trace, sessionId) {
|
|
103
|
-
const consolidateDb = run.getConsolidateDb();
|
|
104
|
-
if (!consolidateDb)
|
|
105
|
-
return false;
|
|
106
111
|
const traceDigest = rejectionDigest(trace.content);
|
|
107
|
-
const tombstone =
|
|
112
|
+
const tombstone = run.tombstones.find(trace.tenantId, traceDigest);
|
|
108
113
|
if (!tombstone)
|
|
109
114
|
return false;
|
|
110
115
|
try {
|
|
111
|
-
|
|
116
|
+
run.tombstones.audit({
|
|
112
117
|
tenantId: trace.tenantId,
|
|
113
118
|
actor: 'sleep',
|
|
114
119
|
op: 'reject_refusal',
|