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,6 +1,7 @@
|
|
|
1
|
-
import { type MemoryEntry } from '../memory.js';
|
|
2
|
-
import { openHippoDb, type DatabaseSyncLike } from '../db.js';
|
|
3
|
-
import { type DormantMove } from '
|
|
1
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { openHippoDb, type DatabaseSyncLike } from '../db/index.js';
|
|
3
|
+
import { type DormantMove } from './dormant.js';
|
|
4
|
+
import { type WriteBudget } from '../util/write-budget.js';
|
|
4
5
|
/** Tables whose rows keep a first-class object's backing memory in `memory_id` (ON DELETE SET NULL); tests/dormant-memories.test.ts pins it to the schema. */
|
|
5
6
|
export declare const MEMORY_BACKED_TABLES: readonly ["predictions", "decisions", "incidents", "processes", "policies", "skills", "project_briefs", "customer_notes"];
|
|
6
7
|
/** Ids of memories that back a first-class object, for passes that plan deletes before making them. A table missing from an older schema is skipped. */
|
|
@@ -42,16 +43,10 @@ export declare function deleteEntry(hippoRoot: string, id: string, opts?: {
|
|
|
42
43
|
reason?: string;
|
|
43
44
|
automatic?: boolean;
|
|
44
45
|
}): boolean;
|
|
45
|
-
/** deleteEntry on the caller's open store, so a loop of deletes opens the store once; each delete still commits alone. */
|
|
46
|
-
export declare function deleteEntryOn(db: DatabaseSyncLike, hippoRoot: string, id: string, opts?: {
|
|
47
|
-
actor?: string;
|
|
48
|
-
reason?: string;
|
|
49
|
-
automatic?: boolean;
|
|
50
|
-
}): boolean;
|
|
51
46
|
/** Writes, deletes and dormant moves in one transaction. With `snapshot` (rows as the caller loaded them), a write keeps only
|
|
52
47
|
* the fields the caller changed, takes the rest from the live row, and never resurrects a row that is gone.
|
|
53
48
|
*
|
|
54
|
-
* `dormant` (src/dormant.ts): each move's snapshot is inserted into `dormant_memories` and its `memories` row
|
|
49
|
+
* `dormant` (src/store/dormant.ts): each move's snapshot is inserted into `dormant_memories` and its `memories` row
|
|
55
50
|
* leaves exactly like a delete (FTS row, DAG parent dirty-mark, mirrors), in the same transaction, so a memory
|
|
56
51
|
* is never in both places or in neither. Deletes and moves both skip rows that are no longer auto-deletable
|
|
57
52
|
* (pinned, raw, kept for good or backing an object since the caller decided). Returns the ids that left `memories`, deleted or moved. */
|
|
@@ -65,20 +60,21 @@ export interface FlushComponent {
|
|
|
65
60
|
deletes: readonly string[];
|
|
66
61
|
dormant: readonly DormantMove[];
|
|
67
62
|
}
|
|
68
|
-
/** Tags a flush error with the ids of the component it stopped at, for the partial sleep audit row; the first tag wins. */
|
|
69
|
-
export declare function noteFailedUnit(err: Error, component: FlushComponent | undefined): void;
|
|
70
63
|
/** The ids noteFailedUnit tagged `err` with, if a flush threw it. */
|
|
71
64
|
export declare function failedUnitOf(err: Error | null): string[] | undefined;
|
|
72
|
-
/**
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
65
|
+
/** Deletes each target in its own transaction on one store handle; `true` where the row went. */
|
|
66
|
+
export declare function deleteEntriesOneByOne(hippoRoot: string, targets: readonly {
|
|
67
|
+
id: string;
|
|
68
|
+
reason: string;
|
|
69
|
+
}[], opts: {
|
|
70
|
+
actor?: string;
|
|
71
|
+
automatic?: boolean;
|
|
72
|
+
}): boolean[];
|
|
73
|
+
/** Commits whole components in transactions of about `budget.holdMs` on one store handle, letting other writers in between; returns the ids that left `memories`.
|
|
74
|
+
* The snapshot keeps what other writers changed after the caller loaded its rows. */
|
|
75
|
+
export declare function commitInChunks(hippoRoot: string, components: readonly FlushComponent[], opts: {
|
|
76
|
+
snapshot: ReadonlyMap<string, MemoryEntry>;
|
|
77
|
+
budget: WriteBudget;
|
|
78
|
+
busyWaitMs: number;
|
|
79
|
+
}): Promise<string[]>;
|
|
84
80
|
//# sourceMappingURL=delete-and-batch.d.ts.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { AUTO_DELETABLE_SQL } from '../memory.js';
|
|
2
|
-
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
3
|
-
import { checkRejectionGuard, RejectedValueError } from '
|
|
4
|
-
import { markSummaryDirtyInTx } from '
|
|
5
|
-
import { insertDormantRow } from '
|
|
6
|
-
import { log } from '../log.js';
|
|
1
|
+
import { AUTO_DELETABLE_SQL } from '../core/memory.js';
|
|
2
|
+
import { openHippoDb, closeHippoDb, withWriteScope } from '../db/index.js';
|
|
3
|
+
import { checkRejectionGuard, RejectedValueError } from './rejection.js';
|
|
4
|
+
import { markSummaryDirtyInTx } from './summary-dirty.js';
|
|
5
|
+
import { insertDormantRow } from './dormant.js';
|
|
6
|
+
import { log } from '../util/log.js';
|
|
7
7
|
import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
|
|
8
8
|
import { audit } from './audit-event.js';
|
|
9
9
|
import { deleteFtsRow, replaceFtsRows, stampOriginProject, upsertMemoryRow } from './entry-row.js';
|
|
10
10
|
import { purgeMirrorBestEffort, mirrorBestEffort, writeMarkdownMirror } from './mirrors.js';
|
|
11
11
|
import { openStore } from './open.js';
|
|
12
|
-
import { clock } from '../write-budget.js';
|
|
12
|
+
import { clock } from '../util/write-budget.js';
|
|
13
13
|
/** Tables whose rows keep a first-class object's backing memory in `memory_id` (ON DELETE SET NULL); tests/dormant-memories.test.ts pins it to the schema. */
|
|
14
14
|
export const MEMORY_BACKED_TABLES = ['predictions', 'decisions', 'incidents', 'processes', 'policies', 'skills', 'project_briefs', 'customer_notes'];
|
|
15
15
|
/** Deleting a memory that backs an object nulls the object's link, and no restore can repair it, so no automatic pass may. */
|
|
@@ -64,7 +64,7 @@ export function deleteEntryCore(db, id, opts) {
|
|
|
64
64
|
return null;
|
|
65
65
|
deleteFtsRow(db, id);
|
|
66
66
|
if (!opts?.suppressForgetAudit) {
|
|
67
|
-
audit(db, 'forget', id, opts?.reason ? { reason: opts.reason } : undefined, opts?.actor ?? 'cli', row.tenant_id);
|
|
67
|
+
audit(db, 'forget', { targetId: id, metadata: opts?.reason ? { reason: opts.reason } : undefined, actor: opts?.actor ?? 'cli', tenantId: row.tenant_id });
|
|
68
68
|
}
|
|
69
69
|
// Forgetting a child of a summary marks the parent dirty. Not atomic with the DELETE, but
|
|
70
70
|
// markSummaryDirtyInTx is idempotent, so the next child mutation re-marks the parent if this fails.
|
|
@@ -94,18 +94,8 @@ export function deleteEntry(hippoRoot, id, opts) {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
/** deleteEntry on the caller's open store, so a loop of deletes opens the store once; each delete still commits alone. */
|
|
97
|
-
|
|
98
|
-
db
|
|
99
|
-
let result;
|
|
100
|
-
try {
|
|
101
|
-
result = deleteEntryCore(db, id, opts);
|
|
102
|
-
db.exec('COMMIT');
|
|
103
|
-
}
|
|
104
|
-
catch (err) {
|
|
105
|
-
if (db.isTransaction !== false)
|
|
106
|
-
db.exec('ROLLBACK');
|
|
107
|
-
throw err;
|
|
108
|
-
}
|
|
97
|
+
function deleteEntryOn(db, hippoRoot, id, opts) {
|
|
98
|
+
const result = withWriteScope(db, 'delete_entry', () => deleteEntryCore(db, id, opts));
|
|
109
99
|
if (!result)
|
|
110
100
|
return false;
|
|
111
101
|
purgeMirrorBestEffort(hippoRoot, id, false, 'deleteEntry');
|
|
@@ -125,7 +115,7 @@ function mergeOwnChanges(base, ours, live) {
|
|
|
125
115
|
/** Writes, deletes and dormant moves in one transaction. With `snapshot` (rows as the caller loaded them), a write keeps only
|
|
126
116
|
* the fields the caller changed, takes the rest from the live row, and never resurrects a row that is gone.
|
|
127
117
|
*
|
|
128
|
-
* `dormant` (src/dormant.ts): each move's snapshot is inserted into `dormant_memories` and its `memories` row
|
|
118
|
+
* `dormant` (src/store/dormant.ts): each move's snapshot is inserted into `dormant_memories` and its `memories` row
|
|
129
119
|
* leaves exactly like a delete (FTS row, DAG parent dirty-mark, mirrors), in the same transaction, so a memory
|
|
130
120
|
* is never in both places or in neither. Deletes and moves both skip rows that are no longer auto-deletable
|
|
131
121
|
* (pinned, raw, kept for good or backing an object since the caller decided). Returns the ids that left `memories`, deleted or moved. */
|
|
@@ -145,7 +135,7 @@ export function batchWriteAndDelete(hippoRoot, toWrite, toDeleteIds, opts) {
|
|
|
145
135
|
}
|
|
146
136
|
const failedUnits = new WeakMap();
|
|
147
137
|
/** Tags a flush error with the ids of the component it stopped at, for the partial sleep audit row; the first tag wins. */
|
|
148
|
-
|
|
138
|
+
function noteFailedUnit(err, component) {
|
|
149
139
|
if (!component || failedUnits.has(err))
|
|
150
140
|
return;
|
|
151
141
|
const ids = [...component.writes.map((e) => e.id), ...component.deletes, ...component.dormant.map((m) => m.entry.id)];
|
|
@@ -157,15 +147,14 @@ export function failedUnitOf(err) {
|
|
|
157
147
|
}
|
|
158
148
|
/** batchWriteAndDelete on the caller's open store from component `from`, each component whole, closing the transaction at the
|
|
159
149
|
* first component boundary after `holdMs`. Returns the next component's index and the ids that left `memories`. */
|
|
160
|
-
|
|
150
|
+
function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
|
|
161
151
|
const now = opts.clock ?? clock;
|
|
162
|
-
// IMMEDIATE: the tombstone probes below read before the first write, and under a deferred BEGIN a
|
|
163
|
-
// concurrent `hippo reject` would make the lock upgrade fail with SQLITE_BUSY and roll back the batch.
|
|
164
|
-
db.exec('BEGIN IMMEDIATE');
|
|
165
|
-
const begunAt = now();
|
|
166
152
|
const out = { written: [], removedIds: [], rejectedSkips: 0, fts: { rows: [], staleIds: [] }, dirty: { parents: new Set(), tenantById: new Map() } };
|
|
167
153
|
let next = from;
|
|
168
|
-
|
|
154
|
+
// IMMEDIATE: the tombstone probes below read before the first write, and under a deferred BEGIN a
|
|
155
|
+
// concurrent `hippo reject` would make the lock upgrade fail with SQLITE_BUSY and roll back the batch.
|
|
156
|
+
withWriteScope(db, 'flush_chunk', () => {
|
|
157
|
+
const begunAt = now();
|
|
169
158
|
do {
|
|
170
159
|
const at = next++;
|
|
171
160
|
try {
|
|
@@ -184,17 +173,7 @@ export function batchWriteAndDeleteOn(db, hippoRoot, components, from, opts) {
|
|
|
184
173
|
for (const parentId of out.dirty.parents) {
|
|
185
174
|
markSummaryDirtyInTx(db, parentId, out.dirty.tenantById.get(parentId) ?? 'default', 'batch');
|
|
186
175
|
}
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
if (db.isTransaction !== false) {
|
|
191
|
-
try {
|
|
192
|
-
db.exec('ROLLBACK');
|
|
193
|
-
}
|
|
194
|
-
catch { /* preserve the original throw and its unit tag */ }
|
|
195
|
-
}
|
|
196
|
-
throw error;
|
|
197
|
-
}
|
|
176
|
+
});
|
|
198
177
|
reportChunk(hippoRoot, out);
|
|
199
178
|
return { next, removedIds: out.removedIds };
|
|
200
179
|
}
|
|
@@ -301,11 +280,56 @@ function isRejectedBatchWrite(db, row) {
|
|
|
301
280
|
}
|
|
302
281
|
catch (err) {
|
|
303
282
|
if (err instanceof RejectedValueError) {
|
|
304
|
-
audit(db, 'reject_refusal', row.id, { digest: err.digest, reason: err.reason }, 'sleep-batch', entryTenantId);
|
|
283
|
+
audit(db, 'reject_refusal', { targetId: row.id, metadata: { digest: err.digest, reason: err.reason }, actor: 'sleep-batch', tenantId: entryTenantId });
|
|
305
284
|
return true;
|
|
306
285
|
}
|
|
307
286
|
throw err;
|
|
308
287
|
}
|
|
309
288
|
return false;
|
|
310
289
|
}
|
|
290
|
+
/** Deletes each target in its own transaction on one store handle; `true` where the row went. */
|
|
291
|
+
export function deleteEntriesOneByOne(hippoRoot, targets, opts) {
|
|
292
|
+
if (targets.length === 0)
|
|
293
|
+
return [];
|
|
294
|
+
const db = openStore(hippoRoot);
|
|
295
|
+
try {
|
|
296
|
+
return targets.map((target) => deleteEntryOn(db, hippoRoot, target.id, { ...opts, reason: target.reason }));
|
|
297
|
+
}
|
|
298
|
+
finally {
|
|
299
|
+
closeHippoDb(db);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/** Commits whole components in transactions of about `budget.holdMs` on one store handle, letting other writers in between; returns the ids that left `memories`.
|
|
303
|
+
* The snapshot keeps what other writers changed after the caller loaded its rows. */
|
|
304
|
+
export async function commitInChunks(hippoRoot, components, opts) {
|
|
305
|
+
if (components.length === 0)
|
|
306
|
+
return [];
|
|
307
|
+
const { snapshot, budget } = opts;
|
|
308
|
+
const removed = [];
|
|
309
|
+
// The wait is an option rather than a PRAGMA, so a shared hook handle keeps its own.
|
|
310
|
+
const db = openStore(hippoRoot, { busyWaitMs: opts.busyWaitMs });
|
|
311
|
+
let next = 0;
|
|
312
|
+
try {
|
|
313
|
+
let committedAt = 0;
|
|
314
|
+
while (next < components.length) {
|
|
315
|
+
if (next > 0)
|
|
316
|
+
await budget.pause(committedAt);
|
|
317
|
+
const chunk = batchWriteAndDeleteOn(db, hippoRoot, components, next, { snapshot, holdMs: budget.holdMs, clock: budget.clock });
|
|
318
|
+
committedAt = budget.clock();
|
|
319
|
+
next = chunk.next;
|
|
320
|
+
for (const id of chunk.removedIds)
|
|
321
|
+
removed.push(id);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
// A unit that threw is already tagged; a throw outside one (a pause, BEGIN or COMMIT) names the chunk's first unit.
|
|
326
|
+
if (err instanceof Error)
|
|
327
|
+
noteFailedUnit(err, components[next]);
|
|
328
|
+
throw err;
|
|
329
|
+
}
|
|
330
|
+
finally {
|
|
331
|
+
closeHippoDb(db);
|
|
332
|
+
}
|
|
333
|
+
return removed;
|
|
334
|
+
}
|
|
311
335
|
//# sourceMappingURL=delete-and-batch.js.map
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type { MemoryEntry } from '
|
|
2
|
-
import { type PromptRecallGate } from '
|
|
1
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import { type PromptRecallGate } from '../core/prompt-recall.js';
|
|
3
3
|
export type DeliveryRuntime = 'claude-code' | 'codex' | 'copilot' | 'unknown';
|
|
4
|
-
export type DeliveryEventType = 'prompt-submit' | 'pinned-manual';
|
|
4
|
+
export type DeliveryEventType = 'prompt-submit' | 'pinned-manual' | 'pre-compact' | 'compact-resume';
|
|
5
|
+
/** True for the two compaction boundary types. */
|
|
6
|
+
export declare const isBoundaryEvent: (type: DeliveryEventType) => boolean;
|
|
5
7
|
export type DeliverySurface = 'hook' | 'context';
|
|
6
8
|
export type DeliveryWriteStore = 'local' | 'global';
|
|
7
9
|
export type DeliverySessionState = 'payload' | 'env' | 'missing' | 'subagent';
|
|
@@ -10,8 +12,8 @@ export type DeliveryPool = 'pin' | 'recent' | 'prompt-recall' | 'strength' | 'se
|
|
|
10
12
|
export type DeliveryStage = 'load' | 'eligible' | 'gate' | 'budget' | 'limit' | 'final';
|
|
11
13
|
export type DeliveryOutcome = 'emitted' | 'reused' | 'rejected';
|
|
12
14
|
export type DeliveryRejectReason = 'budget' | 'gate-below-threshold' | 'gate-max-items' | 'duplicate' | 'scope' | 'quality' | 'limit';
|
|
13
|
-
/** Row format version
|
|
14
|
-
export declare const DELIVERY_LEDGER_VERSION =
|
|
15
|
+
/** Row format version in `delivery_events.ledger_version`: 2 = written by a binary that can write boundary rows, so `event_type` has four values. */
|
|
16
|
+
export declare const DELIVERY_LEDGER_VERSION = 2;
|
|
15
17
|
/** Rejected candidate rows kept per event; the rest only add to `rejected_unlisted`. */
|
|
16
18
|
export declare const DELIVERY_REJECTED_ROW_CAP = 16;
|
|
17
19
|
export interface DeliveryCandidateInput {
|
|
@@ -123,7 +125,12 @@ export interface DeliveryRecorderInit {
|
|
|
123
125
|
envSessionId?: string;
|
|
124
126
|
/** Set by the caller's runtime flag; Copilot payloads carry hook_event_name too, so inference would say claude-code. */
|
|
125
127
|
runtime?: DeliveryRuntime;
|
|
128
|
+
/** Set by hooks that are not prompt or context calls; without it the payload's hook event decides. */
|
|
129
|
+
eventType?: DeliveryEventType;
|
|
126
130
|
}
|
|
131
|
+
export type DeliveryFault = 'observe' | 'build' | 'flush';
|
|
132
|
+
/** Makes every recorder created afterwards throw at one stage. Only tests call it; the shipped CLI and server have no route here. */
|
|
133
|
+
export declare function _setDeliveryFaultForTests(fault: DeliveryFault | null): void;
|
|
127
134
|
/** A recorder for one call; every observer method is guarded, and a throw marks it broken instead of escaping. */
|
|
128
135
|
export declare function createDeliveryRecorder(init: DeliveryRecorderInit): DeliveryRecorder;
|
|
129
136
|
//# sourceMappingURL=delivery-recorder.d.ts.map
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { evalNow } from '../core/ablation.js';
|
|
2
|
+
import { scoreOverlap } from '../core/prompt-recall.js';
|
|
3
|
+
import { hookPayloadSessionId, hookPayloadString, isSubagentPayload } from './token-ledger.js';
|
|
4
|
+
import { blockHash, estimateTokens } from '../util/token-text.js';
|
|
5
|
+
import { errorMessage } from '../util/log.js';
|
|
6
|
+
/** True for the two compaction boundary types. */
|
|
7
|
+
export const isBoundaryEvent = (type) => type === 'pre-compact' || type === 'compact-resume';
|
|
8
|
+
/** Row format version in `delivery_events.ledger_version`: 2 = written by a binary that can write boundary rows, so `event_type` has four values. */
|
|
9
|
+
export const DELIVERY_LEDGER_VERSION = 2;
|
|
9
10
|
/** Rejected candidate rows kept per event; the rest only add to `rejected_unlisted`. */
|
|
10
11
|
export const DELIVERY_REJECTED_ROW_CAP = 16;
|
|
11
12
|
// Deeper stages were closer to being sent, so the row cap keeps them first.
|
|
@@ -37,7 +38,8 @@ function readPayload(init) {
|
|
|
37
38
|
: payloadSession !== null ? 'payload' : envSession !== null ? 'env' : 'missing';
|
|
38
39
|
return { payloadSession, envSession, prompt, hostTurnId, hookEvent, sessionState };
|
|
39
40
|
}
|
|
40
|
-
function rejectId(state, id,
|
|
41
|
+
function rejectId(state, id, rejection) {
|
|
42
|
+
const { stage, reason, score, tokens } = rejection;
|
|
41
43
|
const held = state.candidates.get(id);
|
|
42
44
|
// First rejection wins; an id never offered is not a candidate of this call.
|
|
43
45
|
if (!held || held.reason !== null)
|
|
@@ -89,11 +91,14 @@ function buildEvent(init, payload, state, ts, startedMs) {
|
|
|
89
91
|
const rejected = rejectedRows(state);
|
|
90
92
|
const rows = [...picked, ...rejected.rows];
|
|
91
93
|
const emitted = outcome.emittedText ?? null;
|
|
94
|
+
const eventType = init.eventType ?? (payload.hookEvent === 'UserPromptSubmit' ? 'prompt-submit' : 'pinned-manual');
|
|
95
|
+
// A boundary row carries no prompt facts, whatever the payload holds.
|
|
96
|
+
const prompt = isBoundaryEvent(eventType) ? null : payload.prompt;
|
|
92
97
|
return {
|
|
93
98
|
ts,
|
|
94
99
|
tenantId: init.tenantId,
|
|
95
100
|
runtime: init.runtime ?? (payload.hostTurnId !== null ? 'codex' : payload.hookEvent !== null ? 'claude-code' : 'unknown'),
|
|
96
|
-
eventType
|
|
101
|
+
eventType,
|
|
97
102
|
surface: 'hook',
|
|
98
103
|
storeHash: init.storeHash,
|
|
99
104
|
writeStore: init.writeStore,
|
|
@@ -101,8 +106,8 @@ function buildEvent(init, payload, state, ts, startedMs) {
|
|
|
101
106
|
sessionId: payload.payloadSession ?? payload.envSession,
|
|
102
107
|
sessionState: payload.sessionState,
|
|
103
108
|
hostTurnId: payload.hostTurnId,
|
|
104
|
-
promptHash:
|
|
105
|
-
promptLength:
|
|
109
|
+
promptHash: prompt !== null ? blockHash(prompt) : null,
|
|
110
|
+
promptLength: prompt?.length ?? 0,
|
|
106
111
|
queryHash: null,
|
|
107
112
|
recallTraceId: null,
|
|
108
113
|
blockState: state.disabledSeen ? 'disabled' : outcome.state,
|
|
@@ -135,7 +140,7 @@ function candidateMethods(state, guard) {
|
|
|
135
140
|
id: e.id, sourceStore: storeOf(isGlobal), pool: 'recent', stage: null, reason: null, score: null, tokens: null,
|
|
136
141
|
});
|
|
137
142
|
}
|
|
138
|
-
rejectId(state, e.id, 'load', 'quality', null, null);
|
|
143
|
+
rejectId(state, e.id, { stage: 'load', reason: 'quality', score: null, tokens: null });
|
|
139
144
|
}),
|
|
140
145
|
offer: (entries, isGlobal, pool) => guard(() => {
|
|
141
146
|
for (const e of entries) {
|
|
@@ -150,12 +155,12 @@ function candidateMethods(state, guard) {
|
|
|
150
155
|
});
|
|
151
156
|
}
|
|
152
157
|
}),
|
|
153
|
-
reject: (e, stage, reason, score, tokens) => guard(() => rejectId(state, e.id, stage, reason, score ?? null, tokens ?? null)),
|
|
158
|
+
reject: (e, stage, reason, score, tokens) => guard(() => rejectId(state, e.id, { stage, reason, score: score ?? null, tokens: tokens ?? null })),
|
|
154
159
|
dropMissing: (before, after, stage, reason) => guard(() => {
|
|
155
160
|
const kept = new Set(after.map((e) => e.id));
|
|
156
161
|
for (const e of before)
|
|
157
162
|
if (!kept.has(e.id))
|
|
158
|
-
rejectId(state, e.id, stage, reason, null, null);
|
|
163
|
+
rejectId(state, e.id, { stage, reason, score: null, tokens: null });
|
|
159
164
|
}),
|
|
160
165
|
gated: (prompt, items, gate, kept) => guard(() => {
|
|
161
166
|
const keptIds = new Set(kept.map((g) => g.item.id));
|
|
@@ -164,7 +169,7 @@ function candidateMethods(state, guard) {
|
|
|
164
169
|
continue;
|
|
165
170
|
const { score, shared } = scoreOverlap(prompt, c.tokens, gate.metric);
|
|
166
171
|
const cleared = score >= gate.threshold && shared >= gate.minShared;
|
|
167
|
-
rejectId(state, c.id, 'gate', cleared ? 'gate-max-items' : 'gate-below-threshold', score, null);
|
|
172
|
+
rejectId(state, c.id, { stage: 'gate', reason: cleared ? 'gate-max-items' : 'gate-below-threshold', score, tokens: null });
|
|
168
173
|
}
|
|
169
174
|
}),
|
|
170
175
|
selected: (items) => guard(() => {
|
|
@@ -178,29 +183,22 @@ function candidateMethods(state, guard) {
|
|
|
178
183
|
}),
|
|
179
184
|
};
|
|
180
185
|
}
|
|
186
|
+
let injectedFault = null;
|
|
187
|
+
/** Makes every recorder created afterwards throw at one stage. Only tests call it; the shipped CLI and server have no route here. */
|
|
188
|
+
export function _setDeliveryFaultForTests(fault) {
|
|
189
|
+
injectedFault = fault;
|
|
190
|
+
}
|
|
181
191
|
/** A recorder for one call; every observer method is guarded, and a throw marks it broken instead of escaping. */
|
|
182
192
|
export function createDeliveryRecorder(init) {
|
|
183
193
|
const startedMs = Date.now();
|
|
184
194
|
const ts = evalNow().toISOString();
|
|
185
|
-
|
|
186
|
-
const fault = envTestDeliveryFault();
|
|
195
|
+
const fault = injectedFault;
|
|
187
196
|
const payload = readPayload(init);
|
|
188
197
|
const state = {
|
|
189
198
|
candidates: new Map(), picked: new Map(), filtered: new Set(), facts: null, shown: 0, dropped: 0,
|
|
190
199
|
disabledSeen: false, outcome: { state: 'empty' }, broken: null, flushed: false,
|
|
191
200
|
};
|
|
192
|
-
const guard = (
|
|
193
|
-
if (state.broken !== null)
|
|
194
|
-
return;
|
|
195
|
-
try {
|
|
196
|
-
if (fault === 'observe')
|
|
197
|
-
throw new Error('injected observe fault');
|
|
198
|
-
fn();
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
state.broken = error instanceof Error ? error.message : String(error);
|
|
202
|
-
}
|
|
203
|
-
};
|
|
201
|
+
const guard = guardFor(state, fault);
|
|
204
202
|
const { qualityDropped, offer, reject, dropMissing, gated, selected } = candidateMethods(state, guard);
|
|
205
203
|
return {
|
|
206
204
|
root: init.root,
|
|
@@ -238,4 +236,18 @@ export function createDeliveryRecorder(init) {
|
|
|
238
236
|
},
|
|
239
237
|
};
|
|
240
238
|
}
|
|
239
|
+
function guardFor(state, fault) {
|
|
240
|
+
return (fn) => {
|
|
241
|
+
if (state.broken !== null)
|
|
242
|
+
return;
|
|
243
|
+
try {
|
|
244
|
+
if (fault === 'observe')
|
|
245
|
+
throw new Error('injected observe fault');
|
|
246
|
+
fn();
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
state.broken = errorMessage(error);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
}
|
|
241
253
|
//# sourceMappingURL=delivery-recorder.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
3
|
+
import type { DescendantPage, SummaryDescendants } from './port.js';
|
|
4
|
+
export interface PagedWalk {
|
|
5
|
+
readonly tenantId: string;
|
|
6
|
+
readonly summary: MemoryEntry;
|
|
7
|
+
readonly depth: number;
|
|
8
|
+
readonly page: DescendantPage;
|
|
9
|
+
}
|
|
10
|
+
/** The walk `summaryWithDescendants` documents, with `levels` cut to the first `page.rows` rows and each level's full count in `sizes`. */
|
|
11
|
+
export declare function pagedDescendants(db: DatabaseSyncLike, walk: PagedWalk, summaryAdmitted: boolean): SummaryDescendants;
|
|
12
|
+
//# sourceMappingURL=descendant-page.d.ts.map
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { chunked, selectEntriesByIds, TENANT_IS } from './entry-reads.js';
|
|
2
|
+
import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
|
|
3
|
+
const marks = (ids) => ids.map(() => '?').join(',');
|
|
4
|
+
/** The walk `summaryWithDescendants` documents, with `levels` cut to the first `page.rows` rows and each level's full count in `sizes`. */
|
|
5
|
+
export function pagedDescendants(db, walk, summaryAdmitted) {
|
|
6
|
+
const sizes = [];
|
|
7
|
+
const levels = [];
|
|
8
|
+
const seen = new Set([walk.summary.id]);
|
|
9
|
+
let room = Math.max(0, walk.page.rows);
|
|
10
|
+
let parents = summaryAdmitted ? [walk.summary.id] : [];
|
|
11
|
+
for (let level = 0; level < walk.depth && parents.length > 0; level++) {
|
|
12
|
+
const counted = level === walk.depth - 1 ? countedLevel(db, walk, parents, room) : null;
|
|
13
|
+
const read = counted ?? keyedLevel(db, walk, parents, { seen, room });
|
|
14
|
+
if (read.size === 0)
|
|
15
|
+
break;
|
|
16
|
+
sizes.push(read.size);
|
|
17
|
+
levels.push(read.rows);
|
|
18
|
+
room -= read.rows.length;
|
|
19
|
+
parents = read.ids;
|
|
20
|
+
}
|
|
21
|
+
return { summary: walk.summary, levels, sizes };
|
|
22
|
+
}
|
|
23
|
+
// Reads four short columns of every child, since the level below needs each admitted id as a parent.
|
|
24
|
+
function keyedLevel(db, walk, parents, at) {
|
|
25
|
+
const byParent = new Map();
|
|
26
|
+
for (const chunk of chunked([...parents])) {
|
|
27
|
+
// SAFETY: the SELECT names exactly ChildKey's four columns, and the WHERE keeps dag_parent_id a string.
|
|
28
|
+
const keys = db.prepare(`SELECT id, dag_parent_id, scope, origin_project FROM memories WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} ORDER BY created ASC, id ASC`).all(...chunk, walk.tenantId);
|
|
29
|
+
for (const key of keys) {
|
|
30
|
+
const bucket = byParent.get(key.dag_parent_id);
|
|
31
|
+
if (bucket)
|
|
32
|
+
bucket.push(key);
|
|
33
|
+
else
|
|
34
|
+
byParent.set(key.dag_parent_id, [key]);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const ids = [];
|
|
38
|
+
for (const parentId of parents) {
|
|
39
|
+
for (const key of byParent.get(parentId) ?? []) {
|
|
40
|
+
if (at.seen.has(key.id) || !walk.page.admit(key))
|
|
41
|
+
continue;
|
|
42
|
+
at.seen.add(key.id);
|
|
43
|
+
ids.push(key.id);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const shown = ids.slice(0, Math.max(0, at.room));
|
|
47
|
+
const whole = selectEntriesByIds(db, shown, walk.tenantId);
|
|
48
|
+
return { ids, size: ids.length, rows: shown.flatMap((id) => whole.get(id) ?? []) };
|
|
49
|
+
}
|
|
50
|
+
/** The last level counted in SQL and read up to `room` rows; null when a row there is refused, which only the keyed read can leave out.
|
|
51
|
+
* A row has one parent and a parent is read at one level, so the summary is the only row an earlier level can already hold. */
|
|
52
|
+
function countedLevel(db, walk, parents, room) {
|
|
53
|
+
const perParent = new Map();
|
|
54
|
+
for (const chunk of chunked([...parents])) {
|
|
55
|
+
// SAFETY: the SELECT names exactly ChildGroup's four fields, and the WHERE keeps dag_parent_id a string.
|
|
56
|
+
const groups = db.prepare(`SELECT dag_parent_id, scope, origin_project, COUNT(*) AS n FROM memories WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} AND id <> ? GROUP BY dag_parent_id, scope, origin_project`).all(...chunk, walk.tenantId, walk.summary.id);
|
|
57
|
+
for (const group of groups) {
|
|
58
|
+
if (!walk.page.admit(group))
|
|
59
|
+
return null;
|
|
60
|
+
perParent.set(group.dag_parent_id, (perParent.get(group.dag_parent_id) ?? 0) + Number(group.n));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
let size = 0;
|
|
64
|
+
for (const n of perParent.values())
|
|
65
|
+
size += n;
|
|
66
|
+
return { ids: [], size, rows: firstRows(db, walk, parents.filter((id) => perParent.has(id)), { perParent, room }) };
|
|
67
|
+
}
|
|
68
|
+
// Every parent before the one the page ends in is read whole in one statement; that last one is read under a LIMIT.
|
|
69
|
+
function firstRows(db, walk, parents, at) {
|
|
70
|
+
const whole = [];
|
|
71
|
+
let left = at.room;
|
|
72
|
+
for (const parentId of parents) {
|
|
73
|
+
if (left <= 0)
|
|
74
|
+
break;
|
|
75
|
+
const n = at.perParent.get(parentId) ?? 0;
|
|
76
|
+
if (n >= left)
|
|
77
|
+
return [...childrenInOrder(db, walk, whole, -1), ...childrenInOrder(db, walk, [parentId], left)];
|
|
78
|
+
whole.push(parentId);
|
|
79
|
+
left -= n;
|
|
80
|
+
}
|
|
81
|
+
return childrenInOrder(db, walk, whole, -1);
|
|
82
|
+
}
|
|
83
|
+
/** Children parent by parent, each parent's by created then id; a negative `limit` reads them all. */
|
|
84
|
+
function childrenInOrder(db, walk, parents, limit) {
|
|
85
|
+
const byParent = new Map();
|
|
86
|
+
for (const chunk of chunked([...parents])) {
|
|
87
|
+
// SAFETY: selects exactly MEMORY_SELECT_COLUMNS, matching MemoryRow's field set.
|
|
88
|
+
const rows = db.prepare(`SELECT ${MEMORY_SELECT_COLUMNS} FROM memories WHERE dag_parent_id IN (${marks(chunk)}) AND ${TENANT_IS} AND id <> ? ORDER BY created ASC, id ASC LIMIT ?`).all(...chunk, walk.tenantId, walk.summary.id, limit);
|
|
89
|
+
for (const row of rows) {
|
|
90
|
+
const bucket = byParent.get(row.dag_parent_id ?? '');
|
|
91
|
+
if (bucket)
|
|
92
|
+
bucket.push(rowToEntry(row));
|
|
93
|
+
else
|
|
94
|
+
byParent.set(row.dag_parent_id ?? '', [rowToEntry(row)]);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return parents.flatMap((id) => byParent.get(id) ?? []);
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=descendant-page.js.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type CompactionCounts, type TokenTally } from './doctor-reads.js';
|
|
2
|
+
import type { JsonObject } from './working-memory.js';
|
|
3
|
+
/** One read's value, or the message of the error that stopped it, so a broken table never hides the reads beside it. */
|
|
4
|
+
export type Attempt<T> = {
|
|
5
|
+
readonly ok: true;
|
|
6
|
+
readonly value: T;
|
|
7
|
+
} | {
|
|
8
|
+
readonly ok: false;
|
|
9
|
+
readonly message: string;
|
|
10
|
+
};
|
|
11
|
+
/** ISO times the health reads count from. */
|
|
12
|
+
export interface HealthCutoffs {
|
|
13
|
+
/** Token and failure rows at or after this count. */
|
|
14
|
+
readonly since: string;
|
|
15
|
+
/** A compaction unfinished since before this is stuck. */
|
|
16
|
+
readonly stuckBefore: string;
|
|
17
|
+
/** A started compaction older than this is past replaying. */
|
|
18
|
+
readonly transcriptFloor: string;
|
|
19
|
+
}
|
|
20
|
+
export interface StoreHealth {
|
|
21
|
+
readonly schemaVersion: number;
|
|
22
|
+
/** Null when the table is missing or unreadable. */
|
|
23
|
+
readonly memories: number | null;
|
|
24
|
+
readonly dormant: number | null;
|
|
25
|
+
/** Null inside a read that worked means the store has no full-text index. */
|
|
26
|
+
readonly fts: Attempt<{
|
|
27
|
+
memories: number;
|
|
28
|
+
fts: number;
|
|
29
|
+
} | null>;
|
|
30
|
+
readonly tokens: Attempt<TokenTally>;
|
|
31
|
+
readonly failures: Attempt<number>;
|
|
32
|
+
/** Undefined inside a read that worked means the store never slept. */
|
|
33
|
+
readonly lastSleep: Attempt<string | undefined>;
|
|
34
|
+
readonly compactions: Attempt<CompactionCounts>;
|
|
35
|
+
}
|
|
36
|
+
/** Everything `hippo doctor` reads from one store; throws when it cannot be opened or its schema version read. */
|
|
37
|
+
export declare function readStoreHealth(hippoRoot: string, cutoffs: HealthCutoffs): StoreHealth;
|
|
38
|
+
export interface StoreInventory {
|
|
39
|
+
readonly schemaVersion: number;
|
|
40
|
+
/** Oldest hippo binary the store allows, or null when it names none. */
|
|
41
|
+
readonly minCompatibleBinary: string | null;
|
|
42
|
+
/** Row count by table name; null for a table that cannot be counted. */
|
|
43
|
+
readonly tables: JsonObject;
|
|
44
|
+
}
|
|
45
|
+
/** Schema version, oldest allowed binary and row count of every table, for a support bundle; never reads a memory column. */
|
|
46
|
+
export declare function readStoreInventory(hippoRoot: string): StoreInventory;
|
|
47
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// What `hippo doctor` and `hippo support-bundle` read from a store: one read-only open each, plain data out.
|
|
2
|
+
import { closeHippoDb, countTableRows, ftsRowCounts, getMeta, getSchemaVersion, openHippoDbReadOnly } from '../db/index.js';
|
|
3
|
+
import { listTableNames } from '../db/tables.js';
|
|
4
|
+
import { errorMessage } from '../util/log.js';
|
|
5
|
+
import { compactionCountsAt, tokenTallySince } from './doctor-reads.js';
|
|
6
|
+
import { countFailuresSince } from './failure-log.js';
|
|
7
|
+
import { lastConsolidationAt } from './index-and-stats.js';
|
|
8
|
+
function attempt(read) {
|
|
9
|
+
try {
|
|
10
|
+
return { ok: true, value: read() };
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
// The caller turns the message into its own check, so the error stops here.
|
|
14
|
+
return { ok: false, message: errorMessage(err) };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/** Everything `hippo doctor` reads from one store; throws when it cannot be opened or its schema version read. */
|
|
18
|
+
export function readStoreHealth(hippoRoot, cutoffs) {
|
|
19
|
+
const db = openHippoDbReadOnly(hippoRoot);
|
|
20
|
+
try {
|
|
21
|
+
return {
|
|
22
|
+
schemaVersion: getSchemaVersion(db),
|
|
23
|
+
memories: countTableRows(db, 'memories'),
|
|
24
|
+
dormant: countTableRows(db, 'dormant_memories'),
|
|
25
|
+
fts: attempt(() => ftsRowCounts(db)),
|
|
26
|
+
tokens: attempt(() => tokenTallySince(db, cutoffs.since)),
|
|
27
|
+
failures: attempt(() => countFailuresSince(db, cutoffs.since)),
|
|
28
|
+
lastSleep: attempt(() => lastConsolidationAt(db)),
|
|
29
|
+
compactions: attempt(() => compactionCountsAt(db, cutoffs.stuckBefore, cutoffs.transcriptFloor)),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
closeHippoDb(db);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** Schema version, oldest allowed binary and row count of every table, for a support bundle; never reads a memory column. */
|
|
37
|
+
export function readStoreInventory(hippoRoot) {
|
|
38
|
+
const db = openHippoDbReadOnly(hippoRoot);
|
|
39
|
+
try {
|
|
40
|
+
const schemaVersion = getSchemaVersion(db);
|
|
41
|
+
const minCompatibleBinary = getMeta(db, 'min_compatible_binary', '') || null;
|
|
42
|
+
const tables = {};
|
|
43
|
+
for (const name of listTableNames(db))
|
|
44
|
+
tables[name] = countTableRows(db, name);
|
|
45
|
+
return { schemaVersion, minCompatibleBinary, tables };
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
closeHippoDb(db);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
export interface CompactionCounts {
|
|
3
|
+
total: number;
|
|
4
|
+
summarised: number;
|
|
5
|
+
started: number;
|
|
6
|
+
}
|
|
7
|
+
/** Compaction records in all, those with a summary whose memories never got saved, and those still without a summary; each cutoff is an ISO time. */
|
|
8
|
+
export declare function compactionCountsAt(db: DatabaseSyncLike, stuckBefore: string, transcriptFloor: string): CompactionCounts;
|
|
9
|
+
export interface TokenTally {
|
|
10
|
+
injected: number;
|
|
11
|
+
tokensSent: number;
|
|
12
|
+
tokensReread: number;
|
|
13
|
+
}
|
|
14
|
+
/** Memory blocks injected since `sinceIso`, the tokens they sent and the tokens later model calls re-read. */
|
|
15
|
+
export declare function tokenTallySince(db: DatabaseSyncLike, sinceIso: string): TokenTally;
|
|
16
|
+
//# sourceMappingURL=doctor-reads.d.ts.map
|