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
package/dist/api/context.js
CHANGED
|
@@ -1,30 +1,27 @@
|
|
|
1
1
|
// Ambient context injection: the admission policy and getContext.
|
|
2
2
|
import { isInitialized } from '../store/open.js';
|
|
3
|
-
import { strengthenRetrieved } from '../store/entry-writes.js';
|
|
4
|
-
import { loadRecallSearchEntries } from '../store/search-rows.js';
|
|
5
3
|
import { DEFAULT_SEARCH_CANDIDATE_LIMIT } from '../store/rows.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import { addAmbientTallies, ambientStateFromTallies } from '../ambient.js';
|
|
25
|
-
import { loadAmbientTallies } from '../ambient-store.js';
|
|
26
|
-
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../recall-scope.js';
|
|
4
|
+
import { freshActiveSnapshot, SNAPSHOT_AMBIENT_MAX_AGE_MS } from '../store/sessions.js';
|
|
5
|
+
import { estimateTokens } from '../util/token-text.js';
|
|
6
|
+
import { markRetrieved, COMPACTION_MEMORY_TAG } from '../core/memory.js';
|
|
7
|
+
import { isWorthSurfacing } from '../core/memory-quality.js';
|
|
8
|
+
import { getGlobalRoot } from '../sharing/shared.js';
|
|
9
|
+
import { evalNow } from '../core/ablation.js';
|
|
10
|
+
import { dropHeldCopies } from '../util/same-text.js';
|
|
11
|
+
import { BadRequestError } from '../core/api-errors.js';
|
|
12
|
+
import { isSharedStore, loadConfig } from '../core/config.js';
|
|
13
|
+
import { rethrowIfSqliteBlocked } from '../db/index.js';
|
|
14
|
+
import { errorMessage, log } from '../util/log.js';
|
|
15
|
+
import { resolveProjectIdentity, classifyOriginProject, isGlobalStoreRoot, projectId, projectNames } from '../core/project-identity.js';
|
|
16
|
+
import { promptTokens } from '../core/prompt-recall.js';
|
|
17
|
+
import { detectSecret } from '../util/secret-detect.js';
|
|
18
|
+
import { isSessionDigestRow } from '../core/session-digest-row.js';
|
|
19
|
+
import { addAmbientTallies, ambientStateFromTallies } from '../core/ambient.js';
|
|
20
|
+
import { requireGroup, sqliteStore, storeFor } from '../store/index.js';
|
|
21
|
+
import { passesScopeFilterForRecall, assertScopeRequestAllowed, personalScopeOf } from '../store/recall-scope.js';
|
|
27
22
|
import { finiteOr, selectBySearch, selectPinned, selectStrongest, } from './context-select.js';
|
|
23
|
+
import { andThen, onStore } from './on-store.js';
|
|
24
|
+
import { strengthenOf } from './recall-record.js';
|
|
28
25
|
import { ownerOrSubject } from './types.js';
|
|
29
26
|
export { oneCopyPerMemory } from './context-select.js';
|
|
30
27
|
/**
|
|
@@ -63,14 +60,28 @@ export function ambientSecretAdmit(e, currentProject) {
|
|
|
63
60
|
return projectNames(currentProject).includes(origin);
|
|
64
61
|
}
|
|
65
62
|
/** Most rows per store a no-query context reads; past it, ranking and ambientState see the strongest by decay. */
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
function
|
|
63
|
+
const CONTEXT_CANDIDATE_CAP = 2000;
|
|
64
|
+
/** A store's base search and context reads; a store without the group throws StoreNotPortedError. */
|
|
65
|
+
function sourceOf(store) {
|
|
66
|
+
return { store, reads: requireGroup(store, 'contextReads') };
|
|
67
|
+
}
|
|
68
|
+
// The pinned-only branch needs pins and recent-N candidates, not the corpus.
|
|
69
|
+
async function loadAmbientEntries(source, tenantId, options) {
|
|
70
|
+
const { pinnedOnly, recent, admit, recheck, window, recall, onQualityDrop } = options;
|
|
71
|
+
const ownTenant = (e) => e.tenantId === tenantId;
|
|
69
72
|
if (!pinnedOnly) {
|
|
70
73
|
const rows = 'query' in window
|
|
71
|
-
?
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
? await source.store.searchRecallEntries(window.query, {
|
|
75
|
+
limit: DEFAULT_SEARCH_CANDIDATE_LIMIT,
|
|
76
|
+
tenantId,
|
|
77
|
+
requestedScope: window.exactScope,
|
|
78
|
+
explicitScopeMode: 'exact',
|
|
79
|
+
includeSuperseded: false,
|
|
80
|
+
originProjects: window.project,
|
|
81
|
+
ownScope: window.ownScope,
|
|
82
|
+
})
|
|
83
|
+
: await source.reads.contextCandidates(tenantId, window);
|
|
84
|
+
return { entries: rows.filter((e) => ownTenant(e) && admit(e)) };
|
|
74
85
|
}
|
|
75
86
|
// The quality floor runs on the recent-N slice AFTER this load, so the load
|
|
76
87
|
// counts by it too, or it stops short of a store whose newest rows are junk.
|
|
@@ -82,7 +93,10 @@ function loadAmbientEntries(hippoRoot, tenantId, pinnedOnly, recent, admit, wind
|
|
|
82
93
|
onQualityDrop?.(e);
|
|
83
94
|
return false;
|
|
84
95
|
};
|
|
85
|
-
|
|
96
|
+
const loaded = await source.reads.ambientCandidates(tenantId, { recentNeeded: recent.needed, admit: admitAmbient, recall, origins: recent.origins });
|
|
97
|
+
// Pins and recent rows reach core only through the store's own call to admit, so core applies it again with the tenant.
|
|
98
|
+
const entries = loaded.entries.filter((e) => ownTenant(e) && recheck(e));
|
|
99
|
+
return loaded.recall ? { entries, recall: loaded.recall.filter(ownTenant) } : { entries };
|
|
86
100
|
}
|
|
87
101
|
/**
|
|
88
102
|
* Assemble a context bundle: recalled memories (pinned-only / strength-sorted
|
|
@@ -107,10 +121,10 @@ export async function getContext(ctx, opts = {}) {
|
|
|
107
121
|
if (budget <= 0) {
|
|
108
122
|
return { entries: [], tokens: 0 };
|
|
109
123
|
}
|
|
110
|
-
const plan = planContext(ctx, opts);
|
|
111
|
-
const sections = loadTaskSections(ctx, opts, plan, openBlockBudget(plan, opts, budget));
|
|
124
|
+
const plan = planContext(ctx, opts, sourceOf(storeFor(ctx)));
|
|
125
|
+
const sections = await loadTaskSections(ctx, opts, plan, openBlockBudget(plan, opts, budget));
|
|
112
126
|
const admission = ambientAdmission(opts, plan, sections.shownHandoff);
|
|
113
|
-
const pools = loadPools(ctx, plan, admission, promptRecallRequest(opts, plan));
|
|
127
|
+
const pools = await loadPools(ctx, plan, admission, promptRecallRequest(opts, plan));
|
|
114
128
|
const noSections = !sections.shownSnapshot && !sections.shownHandoff && sections.shownEvents.length === 0;
|
|
115
129
|
if (!plan.promptRecallPending && pools.local.entries.length === 0 && pools.global.entries.length === 0 && noSections) {
|
|
116
130
|
return { entries: [], tokens: 0 };
|
|
@@ -127,14 +141,14 @@ export async function getContext(ctx, opts = {}) {
|
|
|
127
141
|
if (items.length === 0 && noSections) {
|
|
128
142
|
// A query that found nothing is the coverage-gap signal, so it still gets a trace; pinned-only stays read-only.
|
|
129
143
|
if (!plan.pinnedOnly)
|
|
130
|
-
traceEmptyContext(ctx, opts, plan
|
|
144
|
+
await traceEmptyContext(ctx, opts, plan);
|
|
131
145
|
return { entries: [], tokens: 0 };
|
|
132
146
|
}
|
|
133
147
|
// pinnedOnly is the UserPromptSubmit hot path — read-only so pinned
|
|
134
148
|
// memories don't inflate retrieval_count or extend half_life every turn.
|
|
135
149
|
const recorded = plan.pinnedOnly
|
|
136
150
|
? { items, ambientState: undefined }
|
|
137
|
-
: recordRetrieval(ctx, opts, plan, items, sections.activeSnapshot);
|
|
151
|
+
: await recordRetrieval(ctx, opts, plan, items, sections.activeSnapshot);
|
|
138
152
|
return {
|
|
139
153
|
entries: recorded.items,
|
|
140
154
|
tokens,
|
|
@@ -152,17 +166,29 @@ function warnIsolationIgnored(hippoRoot) {
|
|
|
152
166
|
isolationWarned.add(hippoRoot);
|
|
153
167
|
log.warn(`${hippoRoot}: "contextProjectIsolation": false is ignored on a shared store; a read opts in with cross_project.`);
|
|
154
168
|
}
|
|
155
|
-
|
|
156
|
-
|
|
169
|
+
/** Which stores this read can draw on, and what kind the primary one is. */
|
|
170
|
+
function storesInReach(ctx, opts, local) {
|
|
171
|
+
const other = local.store.kind !== 'sqlite' ? local.store : undefined;
|
|
157
172
|
// Global memories do not establish a project boundary for task state.
|
|
158
|
-
const hasLocal = isInitialized(ctx.hippoRoot);
|
|
159
|
-
const query = (opts.q ?? '').trim() || '*';
|
|
173
|
+
const hasLocal = other !== undefined || isInitialized(ctx.hippoRoot);
|
|
160
174
|
const globalRoot = getGlobalRoot();
|
|
161
175
|
// The store's own flag counts too, so no surface can read a shared store as its owner.
|
|
162
176
|
const sharedStore = opts.sharedStore === true || isSharedStore(ctx.hippoRoot);
|
|
163
177
|
// A store serving many people is not its operator's, so the operator's own global store stays out.
|
|
164
|
-
const hasGlobal = !sharedStore && isInitialized(globalRoot);
|
|
178
|
+
const hasGlobal = !sharedStore && other === undefined && isInitialized(globalRoot);
|
|
165
179
|
const primaryIsGlobal = isGlobalStoreRoot(ctx.hippoRoot);
|
|
180
|
+
return { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal };
|
|
181
|
+
}
|
|
182
|
+
/** Prices one entry against the budget: the caller's cost model when it gave one, else a token estimate. */
|
|
183
|
+
function entryPricer(cost, currentProject) {
|
|
184
|
+
return (entry, isGlobal, promptRecall) => cost
|
|
185
|
+
? cost.entry({ entry, isGlobal, promptRecall, origin: entry.origin_project ?? null, category: classifyOriginProject(entry.origin_project, currentProject) })
|
|
186
|
+
: estimateTokens(entry.content);
|
|
187
|
+
}
|
|
188
|
+
function planContext(ctx, opts, local) {
|
|
189
|
+
const pinnedOnly = opts.pinnedOnly === true;
|
|
190
|
+
const { other, hasLocal, globalRoot, sharedStore, hasGlobal, primaryIsGlobal } = storesInReach(ctx, opts, local);
|
|
191
|
+
const query = (opts.q ?? '').trim() || '*';
|
|
166
192
|
// opts.scope is only the tag boost, opts.exactScope the envelope request; other-project memories are
|
|
167
193
|
// excluded unless the caller asks for them (crossProject) or isolation is disabled.
|
|
168
194
|
const config = loadConfig(ctx.hippoRoot);
|
|
@@ -177,10 +203,10 @@ function planContext(ctx, opts) {
|
|
|
177
203
|
// Decided before the ambient loads so the pinned-only FTS candidate query can share their connection.
|
|
178
204
|
const promptRecallPending = pinnedOnly && Boolean(opts.prompt?.trim()) && config.pinnedInject.promptRecall === true;
|
|
179
205
|
const cost = opts.cost;
|
|
180
|
-
const price = (
|
|
181
|
-
? cost.entry({ entry, isGlobal, promptRecall, origin: entry.origin_project ?? null, category: classifyOriginProject(entry.origin_project, currentProject) })
|
|
182
|
-
: estimateTokens(entry.content);
|
|
206
|
+
const price = entryPricer(cost, currentProject);
|
|
183
207
|
return {
|
|
208
|
+
local,
|
|
209
|
+
other,
|
|
184
210
|
pinnedOnly,
|
|
185
211
|
limit: opts.limit ?? Number.POSITIVE_INFINITY,
|
|
186
212
|
includeRecent: opts.includeRecent ?? 0,
|
|
@@ -227,30 +253,25 @@ function openBlockBudget(plan, opts, budget) {
|
|
|
227
253
|
}
|
|
228
254
|
const NO_TASK_STATE = { snapshot: null, handoff: null, events: [] };
|
|
229
255
|
// Keyed on the RAW snapshot: a scope-hidden active session must not fall through to another session's ambient handoff.
|
|
230
|
-
function loadRawTaskState(ctx, opts, plan) {
|
|
256
|
+
async function loadRawTaskState(ctx, opts, plan) {
|
|
231
257
|
if (!plan.hasLocalTaskState)
|
|
232
258
|
return NO_TASK_STATE;
|
|
259
|
+
const { store, reads } = plan.local;
|
|
233
260
|
// On a shared store task state is one person's, keyed by owner and project so it follows them into their next session.
|
|
234
261
|
const key = plan.sharedStore
|
|
235
262
|
? { owner: ownerOrSubject(ctx.actor), project: projectNames(plan.currentProject) }
|
|
236
|
-
:
|
|
263
|
+
: null;
|
|
264
|
+
const block = await store.continuity(ctx.tenantId, 5, key);
|
|
237
265
|
// Bounded read: an orphaned snapshot ages out of this ambient surface; the owner session's read stays unbounded.
|
|
238
|
-
const snapshot =
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
maxAgeMs: SNAPSHOT_AMBIENT_MAX_AGE_MS,
|
|
245
|
-
// Scope is admitted in SQL so a newer denied row can't hide an older eligible one before LIMIT 1.
|
|
246
|
-
scopeFilter: 'default-deny',
|
|
247
|
-
}, key);
|
|
248
|
-
// Raw session id here too: each event is admitted on its own scope, same as recall and the CLI.
|
|
249
|
-
const events = sessionId ? listSessionEvents(ctx.hippoRoot, ctx.tenantId, { session_id: sessionId, limit: 5 }) : [];
|
|
250
|
-
return { snapshot, handoff, events };
|
|
266
|
+
const snapshot = freshActiveSnapshot(block.activeSnapshot, { sessionId: opts.currentSessionId });
|
|
267
|
+
// The block's handoff and events are the raw snapshot's session's, so they stand only while that snapshot is fresh.
|
|
268
|
+
if (snapshot?.session_id)
|
|
269
|
+
return { snapshot, handoff: block.sessionHandoff, events: block.recentSessionEvents };
|
|
270
|
+
// An unfinished handoff's scope is admitted in the read, so a newer denied row can't hide an older eligible one.
|
|
271
|
+
return { snapshot, handoff: await reads.unfinishedHandoff(ctx.tenantId, SNAPSHOT_AMBIENT_MAX_AGE_MS, key), events: [] };
|
|
251
272
|
}
|
|
252
273
|
// Sections print ahead of the memories, so they are paid first; one that does not fit is dropped, as an oversize entry is.
|
|
253
|
-
function loadTaskSections(ctx, opts, plan, startLeft) {
|
|
274
|
+
async function loadTaskSections(ctx, opts, plan, startLeft) {
|
|
254
275
|
const { exactScope, ownScope, cost } = plan;
|
|
255
276
|
let left = startLeft;
|
|
256
277
|
const pays = (tokens) => {
|
|
@@ -260,7 +281,7 @@ function loadTaskSections(ctx, opts, plan, startLeft) {
|
|
|
260
281
|
return true;
|
|
261
282
|
};
|
|
262
283
|
const rowScope = (r) => r?.scope ?? null;
|
|
263
|
-
const raw = loadRawTaskState(ctx, opts, plan);
|
|
284
|
+
const raw = await loadRawTaskState(ctx, opts, plan);
|
|
264
285
|
// The same envelope rule ambientAdmitEntry applies to memory rows.
|
|
265
286
|
const activeSnapshot = raw.snapshot && passesScopeFilterForRecall(rowScope(raw.snapshot), exactScope, ownScope) ? raw.snapshot : null;
|
|
266
287
|
const sessionHandoff = raw.handoff && passesScopeFilterForRecall(rowScope(raw.handoff), exactScope, ownScope) ? raw.handoff : null;
|
|
@@ -296,7 +317,7 @@ function recentOrigins(plan) {
|
|
|
296
317
|
return { names: projectNames(plan.currentProject).filter((n) => n !== ''), userGlobal: false };
|
|
297
318
|
return plan.originProject && { names: plan.originProject, userGlobal: true };
|
|
298
319
|
}
|
|
299
|
-
function loadPools(ctx, plan, admission, recallRequest) {
|
|
320
|
+
async function loadPools(ctx, plan, admission, recallRequest) {
|
|
300
321
|
const { obs, pinnedOnly, primaryIsGlobal, hasGlobal, exactScope, ownScope } = plan;
|
|
301
322
|
const recent = { needed: plan.includeRecent, origins: recentOrigins(plan) };
|
|
302
323
|
const searches = plan.query !== '*' && !pinnedOnly;
|
|
@@ -315,11 +336,12 @@ function loadPools(ctx, plan, admission, recallRequest) {
|
|
|
315
336
|
now: evalNow(),
|
|
316
337
|
};
|
|
317
338
|
// Tenant-scoped loads: never resolveTenantId({}) here.
|
|
339
|
+
const read = { pinnedOnly, recent, admit: loadAdmit, recheck: poolAdmit, window, recall: recallRequest };
|
|
318
340
|
const local = plan.hasLocal
|
|
319
|
-
? loadAmbientEntries(
|
|
341
|
+
? await loadAmbientEntries(plan.local, ctx.tenantId, { ...read, onQualityDrop: qualityDrop(primaryIsGlobal) })
|
|
320
342
|
: { entries: [] };
|
|
321
343
|
const global = hasGlobal && !primaryIsGlobal
|
|
322
|
-
? loadAmbientEntries(plan.globalRoot, ctx.tenantId,
|
|
344
|
+
? await loadAmbientEntries(sourceOf(sqliteStore(plan.globalRoot)), ctx.tenantId, { ...read, onQualityDrop: qualityDrop(true) })
|
|
323
345
|
: { entries: [] };
|
|
324
346
|
return { local, global };
|
|
325
347
|
}
|
|
@@ -345,31 +367,32 @@ function finalizeSelection(picked, plan) {
|
|
|
345
367
|
obs?.selected(selected);
|
|
346
368
|
return { items: selected, tokens };
|
|
347
369
|
}
|
|
348
|
-
// Never touches the index, so it cannot desync last_retrieval_ids from last_trace_id
|
|
349
|
-
function traceEmptyContext(ctx, opts,
|
|
370
|
+
// Never touches the index, so it cannot desync last_retrieval_ids from last_trace_id.
|
|
371
|
+
async function traceEmptyContext(ctx, opts, plan) {
|
|
350
372
|
// No snapshot in this branch, so the caller's own id is the only session to stamp.
|
|
351
|
-
|
|
373
|
+
const trace = {
|
|
352
374
|
tenantId: ctx.tenantId,
|
|
353
375
|
sessionId: opts.currentSessionId || null,
|
|
354
376
|
pipeline: 'context',
|
|
355
|
-
query,
|
|
377
|
+
query: plan.query,
|
|
356
378
|
explainMode: false,
|
|
357
379
|
results: [],
|
|
358
|
-
}
|
|
380
|
+
};
|
|
381
|
+
// The empty reply is already decided, so a lost trace is logged and the call still answers.
|
|
382
|
+
try {
|
|
383
|
+
await onStore(ctx, (port) => port.finishRecall({ goalLog: [], audit: [], trace }));
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
rethrowIfSqliteBlocked(error);
|
|
387
|
+
log.error(`recall trace write failed: ${errorMessage(error)}`);
|
|
388
|
+
}
|
|
359
389
|
}
|
|
360
390
|
/** Strengthens and marks the returned rows, then writes the trace and index together. */
|
|
361
|
-
function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
391
|
+
async function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
362
392
|
const toUpdate = selected.map((s) => s.entry);
|
|
363
393
|
const updatedEntries = markRetrieved(toUpdate);
|
|
364
|
-
const localIndex = loadIndex(ctx.hippoRoot);
|
|
365
394
|
const retrievedIds = updatedEntries.map((u) => u.id);
|
|
366
|
-
const
|
|
367
|
-
if (plan.hasGlobal)
|
|
368
|
-
strengthenRetrieved(plan.globalRoot, retrievedIds.filter((id) => !strengthenedHere.has(id)), { recallBoostAblated: isRecallBoostAblated() });
|
|
369
|
-
localIndex.last_retrieval_ids = retrievedIds;
|
|
370
|
-
// Trace first on its own short-lived connection, then fold its id into localIndex so one saveIndex moves
|
|
371
|
-
// last_retrieval_ids and last_trace_id in lockstep; a failed trace write stores null, never a stale id.
|
|
372
|
-
const traceId = writeRecallTraceAtRoot(ctx.hippoRoot, {
|
|
395
|
+
const trace = {
|
|
373
396
|
tenantId: ctx.tenantId,
|
|
374
397
|
sessionId: opts.currentSessionId || activeSnapshot?.session_id || null,
|
|
375
398
|
pipeline: 'context',
|
|
@@ -379,10 +402,10 @@ function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
|
379
402
|
memoryId: s.entry.id,
|
|
380
403
|
score: s.score,
|
|
381
404
|
})),
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
405
|
+
};
|
|
406
|
+
const writes = { goalLog: [], audit: [], trace, strengthen: strengthenOf(ctx, retrievedIds) };
|
|
407
|
+
// hippo.db keeps the ids as its last recall, which feeds only outcomeForLastRecall, and it alone reads a second root.
|
|
408
|
+
await onStore(ctx, (port, local) => andThen(local.finishLastRecall(writes, plan.hasGlobal ? plan.globalRoot : undefined), () => port.bumpRecallStats(selected.length)));
|
|
386
409
|
// Replace selectedItems entries with markRetrieved-updated copies so
|
|
387
410
|
// the returned ContextResult reflects post-recall state.
|
|
388
411
|
const items = selected.map((s) => ({
|
|
@@ -390,12 +413,17 @@ function recordRetrieval(ctx, opts, plan, selected, activeSnapshot) {
|
|
|
390
413
|
entry: updatedEntries.find((u) => u.id === s.entry.id) ?? s.entry,
|
|
391
414
|
}));
|
|
392
415
|
// Read after strengthenRetrieved commits, so the rows just retrieved count at their new strength.
|
|
393
|
-
return { items, ambientState: plan.config.ambient.enabled ? readAmbientState(ctx, plan) : undefined };
|
|
416
|
+
return { items, ambientState: plan.config.ambient.enabled ? await readAmbientState(ctx, plan) : undefined };
|
|
394
417
|
}
|
|
395
|
-
function readAmbientState(ctx, plan) {
|
|
418
|
+
async function readAmbientState(ctx, plan) {
|
|
396
419
|
const filter = { exactScope: plan.exactScope, ownScope: plan.ownScope, project: plan.originProject, currentProject: projectNames(plan.currentProject), now: evalNow() };
|
|
397
|
-
const
|
|
398
|
-
|
|
420
|
+
const sources = [
|
|
421
|
+
...(plan.hasLocal ? [plan.local.reads] : []),
|
|
422
|
+
...(plan.hasGlobal && !plan.primaryIsGlobal ? [sourceOf(sqliteStore(plan.globalRoot)).reads] : []),
|
|
423
|
+
];
|
|
424
|
+
const tallies = [];
|
|
425
|
+
for (const reads of sources)
|
|
426
|
+
tallies.push(await reads.ambientTallies(ctx.tenantId, filter));
|
|
399
427
|
const total = tallies.length > 0 ? tallies.reduce(addAmbientTallies) : undefined;
|
|
400
428
|
return total && total.total > 0 ? ambientStateFromTallies(total) : undefined;
|
|
401
429
|
}
|
package/dist/api/dormant.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type DormantMemory, type ListDormantOpts } from '../dormant.js';
|
|
2
|
-
import { type MemoryEntry } from '../memory.js';
|
|
1
|
+
import { type DormantMemory, type ListDormantOpts } from '../store/dormant.js';
|
|
2
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
3
3
|
import type { Context } from './types.js';
|
|
4
4
|
/**
|
|
5
|
-
* A tenant's dormant memories (src/dormant.ts): what sleep moved out of
|
|
5
|
+
* A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of
|
|
6
6
|
* active memory instead of deleting, when `dormant.enabled` is on. Newest
|
|
7
7
|
* first; `opts.query` keeps rows containing every term (case-insensitive).
|
|
8
8
|
*/
|
package/dist/api/dormant.js
CHANGED
|
@@ -1,30 +1,19 @@
|
|
|
1
1
|
// Dormant memories: list, restore, forget and check.
|
|
2
|
-
import {
|
|
3
|
-
import { ConflictError, NotFoundError } from '../api-errors.js';
|
|
4
|
-
import { auditRejectionRefusal } from '../store/audit-event.js';
|
|
2
|
+
import { ConflictError, NotFoundError } from '../core/api-errors.js';
|
|
5
3
|
import { stampOriginProject } from '../store/entry-row.js';
|
|
6
|
-
import { writeEntryDbOnly, writeEntryMirrors } from '../store/entry-writes.js';
|
|
7
4
|
import { updateStatsUnlessBusy } from '../store/index-and-stats.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { loadConfig } from '../config.js';
|
|
13
|
-
import { canTouchScope, personalScopeOf, touchableScopeSql } from '../recall-scope.js';
|
|
5
|
+
import { loadDormantMemories, holdsDormantMemory, restoreDormantMemory, forgetDormantMemory, } from '../store/dormant.js';
|
|
6
|
+
import { createMemory, calculateStrength } from '../core/memory.js';
|
|
7
|
+
import { loadConfig } from '../core/config.js';
|
|
8
|
+
import { canTouchScope, personalScopeOf, touchableScopeSql } from '../store/recall-scope.js';
|
|
14
9
|
const touchable = (ctx) => touchableScopeSql('', personalScopeOf(ctx.actor));
|
|
15
10
|
/**
|
|
16
|
-
* A tenant's dormant memories (src/dormant.ts): what sleep moved out of
|
|
11
|
+
* A tenant's dormant memories (src/store/dormant.ts): what sleep moved out of
|
|
17
12
|
* active memory instead of deleting, when `dormant.enabled` is on. Newest
|
|
18
13
|
* first; `opts.query` keeps rows containing every term (case-insensitive).
|
|
19
14
|
*/
|
|
20
15
|
export function listDormant(ctx, opts = {}) {
|
|
21
|
-
|
|
22
|
-
try {
|
|
23
|
-
return listDormantRows(db, ctx.tenantId, opts, touchable(ctx));
|
|
24
|
-
}
|
|
25
|
-
finally {
|
|
26
|
-
closeHippoDb(db);
|
|
27
|
-
}
|
|
16
|
+
return loadDormantMemories(ctx.hippoRoot, ctx.tenantId, opts, touchable(ctx));
|
|
28
17
|
}
|
|
29
18
|
/**
|
|
30
19
|
* Bring a dormant memory back into active memory. It returns as if just
|
|
@@ -38,67 +27,34 @@ export function listDormant(ctx, opts = {}) {
|
|
|
38
27
|
* throw the dormant copy stays where it is.
|
|
39
28
|
*/
|
|
40
29
|
export function restoreDormant(ctx, id) {
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
const now = new Date();
|
|
54
|
-
// Dormant rows are long-lived, so a snapshot can predate a field added
|
|
55
|
-
// later: createMemory supplies a default for anything it lacks, then
|
|
56
|
-
// the snapshot overrides every field it does carry, content included.
|
|
57
|
-
// (The placeholder only satisfies createMemory's minimum length, so a
|
|
58
|
-
// legacy row shorter than 3 chars can still be restored.)
|
|
59
|
-
const revived = {
|
|
60
|
-
...createMemory('dormant snapshot defaults', { baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays }),
|
|
61
|
-
...dormant.entry,
|
|
62
|
-
last_retrieved: now.toISOString(),
|
|
63
|
-
};
|
|
64
|
-
if (dormant.reason === 'quality-repair')
|
|
65
|
-
revived.confidence = 'verified';
|
|
66
|
-
restored = stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now) });
|
|
67
|
-
writeEntryDbOnly(db, restored, { actor: ctx.actor.subject });
|
|
68
|
-
deleteDormantRow(db, ctx.tenantId, id);
|
|
69
|
-
// A restore is a labelled "forgot it, then needed it" event: the
|
|
70
|
-
// signal a learned lifecycle trains on. Same transaction
|
|
71
|
-
// as the restore, so the label exists exactly when the restore does.
|
|
72
|
-
appendAuditEvent(db, {
|
|
73
|
-
tenantId: ctx.tenantId,
|
|
74
|
-
actor: ctx.actor.subject,
|
|
75
|
-
op: 'dormant_restore',
|
|
76
|
-
targetId: id,
|
|
77
|
-
metadata: {
|
|
78
|
-
reason: dormant.reason,
|
|
79
|
-
strengthAtDormancy: dormant.strength,
|
|
80
|
-
dormantAt: dormant.dormantAt,
|
|
81
|
-
daysDormant: Math.max(0, (now.getTime() - Date.parse(dormant.dormantAt)) / (24 * 60 * 60 * 1000)),
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
db.exec('COMMIT');
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
try {
|
|
88
|
-
db.exec('ROLLBACK');
|
|
89
|
-
}
|
|
90
|
-
catch { /* already rolled back */ }
|
|
91
|
-
if (err instanceof RejectedValueError) {
|
|
92
|
-
auditRejectionRefusal(db, err, ctx.actor.subject);
|
|
93
|
-
}
|
|
94
|
-
throw err;
|
|
95
|
-
}
|
|
96
|
-
writeEntryMirrors(ctx.hippoRoot, restored);
|
|
97
|
-
return restored;
|
|
98
|
-
}
|
|
99
|
-
finally {
|
|
100
|
-
closeHippoDb(db);
|
|
30
|
+
const outcome = restoreDormantMemory(ctx.hippoRoot, {
|
|
31
|
+
tenantId: ctx.tenantId,
|
|
32
|
+
id,
|
|
33
|
+
actor: ctx.actor.subject,
|
|
34
|
+
inReach: (scope) => canTouchScope(ctx.actor, scope),
|
|
35
|
+
revive: (snapshot, now) => reviveSnapshot(ctx, snapshot, now),
|
|
36
|
+
});
|
|
37
|
+
if (outcome.status === 'missing')
|
|
38
|
+
throw new NotFoundError(`dormant memory not found: ${id}`);
|
|
39
|
+
if (outcome.status === 'active') {
|
|
40
|
+
throw new ConflictError(`memory ${id} is already active; forget it before restoring its dormant copy`);
|
|
101
41
|
}
|
|
42
|
+
return outcome.entry;
|
|
43
|
+
}
|
|
44
|
+
function reviveSnapshot(ctx, dormant, now) {
|
|
45
|
+
// Dormant rows are long-lived, so a snapshot can predate a field added
|
|
46
|
+
// later: createMemory supplies a default for anything it lacks, then
|
|
47
|
+
// the snapshot overrides every field it does carry, content included.
|
|
48
|
+
// (The placeholder only satisfies createMemory's minimum length, so a
|
|
49
|
+
// legacy row shorter than 3 chars can still be restored.)
|
|
50
|
+
const revived = {
|
|
51
|
+
...createMemory('dormant snapshot defaults', { baseHalfLifeDays: loadConfig(ctx.hippoRoot).defaultHalfLifeDays }),
|
|
52
|
+
...dormant.entry,
|
|
53
|
+
last_retrieved: now.toISOString(),
|
|
54
|
+
};
|
|
55
|
+
if (dormant.reason === 'quality-repair')
|
|
56
|
+
revived.confidence = 'verified';
|
|
57
|
+
return stampOriginProject(ctx.hippoRoot, { ...revived, strength: calculateStrength(revived, now) });
|
|
102
58
|
}
|
|
103
59
|
/**
|
|
104
60
|
* Permanently delete a dormant memory: the explicit "forget it for good"
|
|
@@ -106,39 +62,14 @@ export function restoreDormant(ctx, id) {
|
|
|
106
62
|
* dormant memory with that id.
|
|
107
63
|
*/
|
|
108
64
|
export function forgetDormant(ctx, id) {
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
throw new NotFoundError(`dormant memory not found: ${id}`);
|
|
113
|
-
}
|
|
114
|
-
try {
|
|
115
|
-
appendAuditEvent(db, {
|
|
116
|
-
tenantId: ctx.tenantId,
|
|
117
|
-
actor: ctx.actor.subject,
|
|
118
|
-
op: 'forget',
|
|
119
|
-
targetId: id,
|
|
120
|
-
metadata: { dormant: true },
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
catch (error) {
|
|
124
|
-
// Best-effort, like every other forget audit row: the delete stands.
|
|
125
|
-
reportAuditWriteFailure('forget', String(error), id);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
finally {
|
|
129
|
-
closeHippoDb(db);
|
|
130
|
-
}
|
|
65
|
+
const forgotten = forgetDormantMemory(ctx.hippoRoot, { tenantId: ctx.tenantId, id, actor: ctx.actor.subject, admit: touchable(ctx) });
|
|
66
|
+
if (!forgotten)
|
|
67
|
+
throw new NotFoundError(`dormant memory not found: ${id}`);
|
|
131
68
|
// Counted like every other permanent removal (forget, archiveRaw).
|
|
132
69
|
updateStatsUnlessBusy(ctx.hippoRoot, { forgotten: 1 }, `removed ${id}`);
|
|
133
70
|
}
|
|
134
71
|
/** Whether the tenant holds a dormant memory with this id that the caller may touch (for "not found" hints). */
|
|
135
72
|
export function isDormant(ctx, id) {
|
|
136
|
-
|
|
137
|
-
try {
|
|
138
|
-
return hasDormantRow(db, ctx.tenantId, id, touchable(ctx));
|
|
139
|
-
}
|
|
140
|
-
finally {
|
|
141
|
-
closeHippoDb(db);
|
|
142
|
-
}
|
|
73
|
+
return holdsDormantMemory(ctx.hippoRoot, ctx.tenantId, id, touchable(ctx));
|
|
143
74
|
}
|
|
144
75
|
//# sourceMappingURL=dormant.js.map
|
package/dist/api/drill-down.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CallerProject } from '
|
|
1
|
+
import type { CallerProject } from './prompt-hook.js';
|
|
2
2
|
import type { Context } from './types.js';
|
|
3
3
|
export interface DrillDownOpts {
|
|
4
4
|
/** Cap on number of children returned. Default 50. */
|
|
@@ -82,5 +82,5 @@ export type DrillDownOutcome = DrillDownResult | DrillDownFailure;
|
|
|
82
82
|
* Pre-v1.6.4 returned null for all three cases. JS callers migrate via
|
|
83
83
|
* `'failure' in result` checks; HTTP route maps `not_drillable` to 422.
|
|
84
84
|
*/
|
|
85
|
-
export declare function drillDown(ctx: Context, summaryId: string, opts?: DrillDownOpts): DrillDownOutcome
|
|
85
|
+
export declare function drillDown(ctx: Context, summaryId: string, opts?: DrillDownOpts): Promise<DrillDownOutcome>;
|
|
86
86
|
//# sourceMappingURL=drill-down.d.ts.map
|