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
|
@@ -23,9 +23,12 @@
|
|
|
23
23
|
* transcript file. Writes are best-effort at the call sites; a ledger failure
|
|
24
24
|
* must never break recall.
|
|
25
25
|
*/
|
|
26
|
-
import { createHash } from 'node:crypto';
|
|
27
26
|
import { open } from 'node:fs/promises';
|
|
28
|
-
import {
|
|
27
|
+
import { withWriteScope } from '../db/index.js';
|
|
28
|
+
import { isJsonString, isJsonObjectLiteral } from '../util/json.js';
|
|
29
|
+
import { DAY_MS } from '../util/time.js';
|
|
30
|
+
import { countSkipsAfter, deleteRereadRows, injectedBlocks, insertTokenRow, latestInjectOrReset, pruneTokenRowsBefore, sessionTokenRows, sessionTotals, surfaceTotals, } from './token-ledger-rows.js';
|
|
31
|
+
import { DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
29
32
|
/** All surfaces, in report order. */
|
|
30
33
|
export const TOKEN_SURFACES = [
|
|
31
34
|
'hook', 'hook_recall', 'compact_resume', 'context', 'recall', 'mcp_recall', 'mcp_context',
|
|
@@ -35,26 +38,23 @@ export const TOKEN_SURFACES = [
|
|
|
35
38
|
export const REREAD_SURFACES = ['hook', 'hook_recall', 'compact_resume'];
|
|
36
39
|
/** Rows older than this are pruned on write. */
|
|
37
40
|
export const TOKEN_LEDGER_RETENTION_DAYS = 90;
|
|
38
|
-
/**
|
|
39
|
-
* Rough token estimate: characters / 4. The single estimate behind every
|
|
40
|
-
* token budget and ledger count in hippo.
|
|
41
|
-
*/
|
|
42
|
-
export function estimateTokens(text) {
|
|
43
|
-
return Math.ceil(text.length / 4);
|
|
44
|
-
}
|
|
45
|
-
/** Stable 16-hex-char hash of a rendered block, for change detection. */
|
|
46
|
-
export function blockHash(text) {
|
|
47
|
-
return createHash('sha256').update(text).digest('hex').slice(0, 16);
|
|
48
|
-
}
|
|
49
41
|
/**
|
|
50
42
|
* Append one ledger row and prune rows past {@link TOKEN_LEDGER_RETENTION_DAYS}.
|
|
51
43
|
*/
|
|
52
44
|
export function recordTokenUse(db, use) {
|
|
53
45
|
const now = use.now ?? new Date().toISOString();
|
|
54
|
-
db
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
46
|
+
insertTokenRow(db, {
|
|
47
|
+
ts: now,
|
|
48
|
+
tenantId: use.tenantId,
|
|
49
|
+
sessionId: use.sessionId ?? null,
|
|
50
|
+
surface: use.surface,
|
|
51
|
+
event: use.event,
|
|
52
|
+
items: Math.max(0, Math.round(use.items)),
|
|
53
|
+
tokens: Math.max(0, Math.round(use.tokens)),
|
|
54
|
+
blockHash: use.hash ?? null,
|
|
55
|
+
});
|
|
56
|
+
const cutoff = new Date(Date.parse(now) - TOKEN_LEDGER_RETENTION_DAYS * DAY_MS).toISOString();
|
|
57
|
+
pruneTokenRowsBefore(db, cutoff);
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
60
|
* The last block this session injected on `surface`, or null when the
|
|
@@ -64,15 +64,10 @@ export function recordTokenUse(db, use) {
|
|
|
64
64
|
export function lastSentState(db, tenantId, sessionId, surface) {
|
|
65
65
|
if (!sessionId)
|
|
66
66
|
return null;
|
|
67
|
-
|
|
68
|
-
const anchor = db.prepare(`SELECT id, event, block_hash FROM token_ledger
|
|
69
|
-
WHERE tenant_id = ? AND session_id = ? AND surface = ? AND event IN ('inject', 'reset')
|
|
70
|
-
ORDER BY id DESC LIMIT 1`).get(tenantId, sessionId, surface);
|
|
67
|
+
const anchor = latestInjectOrReset(db, tenantId, sessionId, surface);
|
|
71
68
|
if (!anchor || anchor.event === 'reset' || !anchor.block_hash)
|
|
72
69
|
return null;
|
|
73
|
-
|
|
74
|
-
const skips = db.prepare(`SELECT COUNT(*) AS n FROM token_ledger
|
|
75
|
-
WHERE tenant_id = ? AND session_id = ? AND surface = ? AND event = 'skip' AND id > ?`).get(tenantId, sessionId, surface, anchor.id);
|
|
70
|
+
const skips = countSkipsAfter(db, tenantId, sessionId, surface, anchor.id);
|
|
76
71
|
return { hash: anchor.block_hash, skipsSince: Number(skips?.n ?? 0) };
|
|
77
72
|
}
|
|
78
73
|
/**
|
|
@@ -93,17 +88,7 @@ export function shouldSkipUnchanged(last, hash, refreshTurns) {
|
|
|
93
88
|
* omitted.
|
|
94
89
|
*/
|
|
95
90
|
export function summarizeTokenUse(db, tenantId, sinceIso) {
|
|
96
|
-
|
|
97
|
-
const rows = db.prepare(`SELECT surface,
|
|
98
|
-
SUM(CASE WHEN event = 'inject' THEN 1 ELSE 0 END) AS injected,
|
|
99
|
-
SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens,
|
|
100
|
-
SUM(CASE WHEN event = 'skip' THEN 1 ELSE 0 END) AS skipped,
|
|
101
|
-
SUM(CASE WHEN event = 'skip' THEN tokens ELSE 0 END) AS avoided,
|
|
102
|
-
SUM(CASE WHEN event = 'reread' THEN tokens ELSE 0 END) AS reread,
|
|
103
|
-
COUNT(DISTINCT session_id) AS sessions
|
|
104
|
-
FROM token_ledger
|
|
105
|
-
WHERE tenant_id = ? AND ts >= ?
|
|
106
|
-
GROUP BY surface`).all(tenantId, sinceIso);
|
|
91
|
+
const rows = surfaceTotals(db, tenantId, sinceIso);
|
|
107
92
|
const bySurface = new Map(rows.map((r) => [r.surface, r]));
|
|
108
93
|
const surfaces = [];
|
|
109
94
|
for (const surface of TOKEN_SURFACES) {
|
|
@@ -120,13 +105,7 @@ export function summarizeTokenUse(db, tenantId, sinceIso) {
|
|
|
120
105
|
sessions: Number(r.sessions),
|
|
121
106
|
});
|
|
122
107
|
}
|
|
123
|
-
|
|
124
|
-
const perSession = db.prepare(`SELECT COUNT(DISTINCT session_id) AS sessions,
|
|
125
|
-
COUNT(DISTINCT CASE WHEN event <> 'reset' AND surface IN (${REREAD_SURFACES.map(() => '?').join(', ')}) THEN session_id END) AS hook_sessions,
|
|
126
|
-
COUNT(DISTINCT CASE WHEN event = 'reread' THEN session_id END) AS reread_sessions,
|
|
127
|
-
SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS tokens
|
|
128
|
-
FROM token_ledger
|
|
129
|
-
WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'`).get(...REREAD_SURFACES, tenantId, sinceIso);
|
|
108
|
+
const perSession = sessionTotals(db, tenantId, sinceIso, REREAD_SURFACES);
|
|
130
109
|
const sessionCount = Number(perSession?.sessions ?? 0);
|
|
131
110
|
const sessionTokens = Number(perSession?.tokens ?? 0);
|
|
132
111
|
return {
|
|
@@ -145,10 +124,6 @@ export function summarizeTokenUse(db, tenantId, sinceIso) {
|
|
|
145
124
|
export function isSyntheticMessage(message) {
|
|
146
125
|
return message.model === '<synthetic>';
|
|
147
126
|
}
|
|
148
|
-
/** JSON-value plain-object check (excludes arrays and null). */
|
|
149
|
-
function isJsonObject(value) {
|
|
150
|
-
return value !== undefined && value !== null && !Array.isArray(value) && value.constructor === Object;
|
|
151
|
-
}
|
|
152
127
|
/** A Claude Code hook payload on stdin as a JSON object; null when empty, malformed or not an object. */
|
|
153
128
|
function parseHookPayload(stdinText) {
|
|
154
129
|
if (!stdinText || stdinText.trim() === '')
|
|
@@ -156,7 +131,7 @@ function parseHookPayload(stdinText) {
|
|
|
156
131
|
try {
|
|
157
132
|
// SAFETY: JSON.parse returns a JSON value by definition.
|
|
158
133
|
const payload = JSON.parse(stdinText.trim());
|
|
159
|
-
return
|
|
134
|
+
return isJsonObjectLiteral(payload) ? payload : null;
|
|
160
135
|
}
|
|
161
136
|
catch {
|
|
162
137
|
// Malformed is one of the null cases the docblock names.
|
|
@@ -190,15 +165,7 @@ export function isSubagentPayload(stdinText) {
|
|
|
190
165
|
* transcript file name, so these join to the host's own usage records.
|
|
191
166
|
*/
|
|
192
167
|
export function tokensBySession(db, tenantId, sinceIso) {
|
|
193
|
-
|
|
194
|
-
const rows = db.prepare(`SELECT session_id,
|
|
195
|
-
SUM(CASE WHEN event = 'inject' THEN tokens ELSE 0 END) AS sent,
|
|
196
|
-
SUM(CASE WHEN event = 'skip' THEN tokens ELSE 0 END) AS skipped,
|
|
197
|
-
SUM(CASE WHEN event = 'inject' THEN 1 ELSE 0 END) AS injections
|
|
198
|
-
FROM token_ledger
|
|
199
|
-
WHERE tenant_id = ? AND ts >= ? AND session_id IS NOT NULL AND event <> 'arm'
|
|
200
|
-
GROUP BY session_id`).all(tenantId, sinceIso);
|
|
201
|
-
return rows.map((r) => ({
|
|
168
|
+
return sessionTokenRows(db, tenantId, sinceIso).map((r) => ({
|
|
202
169
|
sessionId: r.session_id,
|
|
203
170
|
sent: Number(r.sent),
|
|
204
171
|
skipped: Number(r.skipped),
|
|
@@ -227,7 +194,7 @@ export async function readApiCalls(transcriptPath) {
|
|
|
227
194
|
continue;
|
|
228
195
|
}
|
|
229
196
|
// Sidechain calls, sidechain compactions and `<synthetic>` messages never touch the main context.
|
|
230
|
-
if (!
|
|
197
|
+
if (!isJsonObjectLiteral(entry) || entry.isSidechain === true)
|
|
231
198
|
continue;
|
|
232
199
|
if (entry.subtype === 'compact_boundary') {
|
|
233
200
|
compactions += 1;
|
|
@@ -235,9 +202,9 @@ export async function readApiCalls(transcriptPath) {
|
|
|
235
202
|
}
|
|
236
203
|
// One call spans lines sharing a message id.
|
|
237
204
|
const message = entry.message;
|
|
238
|
-
if (entry.type !== 'assistant' || !
|
|
205
|
+
if (entry.type !== 'assistant' || !isJsonObjectLiteral(message))
|
|
239
206
|
continue;
|
|
240
|
-
if (!
|
|
207
|
+
if (!isJsonObjectLiteral(message.usage) || isSyntheticMessage(message) || !isJsonString(message.id))
|
|
241
208
|
continue;
|
|
242
209
|
if (seen.has(message.id))
|
|
243
210
|
continue;
|
|
@@ -262,15 +229,11 @@ export function carryingCalls(calls, at) {
|
|
|
262
229
|
}
|
|
263
230
|
/** Replace a session's `reread` rows in one transaction, one per {@link REREAD_SURFACES} surface and UTC day; returns the tokens booked. */
|
|
264
231
|
export function recordRereads(db, tenantId, sessionId, calls) {
|
|
265
|
-
db
|
|
266
|
-
|
|
267
|
-
try {
|
|
268
|
-
// SAFETY: the SELECT names exactly these three columns.
|
|
269
|
-
const rows = db.prepare(`SELECT ts, surface, tokens FROM token_ledger
|
|
270
|
-
WHERE tenant_id = ? AND session_id = ? AND event = 'inject' AND surface IN (${REREAD_SURFACES.map(() => '?').join(', ')})`).all(tenantId, sessionId, ...REREAD_SURFACES);
|
|
232
|
+
return withWriteScope(db, 'record_rereads', () => {
|
|
233
|
+
const rows = injectedBlocks(db, tenantId, sessionId, REREAD_SURFACES);
|
|
271
234
|
const days = new Map();
|
|
272
235
|
const add = (surface, at, rereads, tokens) => {
|
|
273
|
-
const key = `${surface} ${new Date(at).toISOString().slice(0,
|
|
236
|
+
const key = `${surface} ${new Date(at).toISOString().slice(0, DATE_PREFIX_CHARS)}`;
|
|
274
237
|
const day = days.get(key) ?? { surface, at, rereads: 0, tokens: 0 };
|
|
275
238
|
days.set(key, { surface, at: Math.max(day.at, at), rereads: day.rereads + rereads, tokens: day.tokens + tokens });
|
|
276
239
|
};
|
|
@@ -282,23 +245,13 @@ export function recordRereads(db, tenantId, sessionId, calls) {
|
|
|
282
245
|
for (const call of carryingCalls(calls, sentAt).slice(1))
|
|
283
246
|
add(row.surface, call.at, 1, Number(row.tokens));
|
|
284
247
|
}
|
|
285
|
-
db
|
|
248
|
+
deleteRereadRows(db, tenantId, sessionId);
|
|
286
249
|
for (const day of days.values()) {
|
|
287
250
|
recordTokenUse(db, {
|
|
288
251
|
tenantId, sessionId, surface: day.surface, event: 'reread', items: day.rereads, tokens: day.tokens, now: new Date(day.at).toISOString(),
|
|
289
252
|
});
|
|
290
253
|
}
|
|
291
|
-
db.exec('COMMIT');
|
|
292
|
-
committed = true;
|
|
293
254
|
return [...days.values()].reduce((sum, day) => sum + day.tokens, 0);
|
|
294
|
-
}
|
|
295
|
-
finally {
|
|
296
|
-
if (!committed) {
|
|
297
|
-
try {
|
|
298
|
-
db.exec('ROLLBACK');
|
|
299
|
-
}
|
|
300
|
-
catch { /* preserve the original throw */ }
|
|
301
|
-
}
|
|
302
|
-
}
|
|
255
|
+
});
|
|
303
256
|
}
|
|
304
257
|
//# sourceMappingURL=token-ledger.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type AppendAuditOpts } from './audit.js';
|
|
2
|
+
import { type RejectedValueRow } from './rejection.js';
|
|
3
|
+
/** Tombstone lookups and their refusal audit rows on one handle: opened on first use, never under dryRun, closed once. */
|
|
4
|
+
export interface TombstoneChecks {
|
|
5
|
+
/** The tenant's tombstone for `digest`; null when there is none, and always under dryRun. */
|
|
6
|
+
find(tenantId: string, digest: string): RejectedValueRow | null;
|
|
7
|
+
/** One audit row on the same handle; nothing under dryRun. */
|
|
8
|
+
audit(event: AppendAuditOpts): void;
|
|
9
|
+
close(): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function lazyTombstoneChecks(hippoRoot: string, dryRun: boolean): TombstoneChecks;
|
|
12
|
+
//# sourceMappingURL=tombstone-checks.d.ts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Sleep's tombstone checks run on one handle for the whole pass, owned here so no stage holds a raw one.
|
|
2
|
+
import { closeHippoDb, openHippoDb } from '../db/index.js';
|
|
3
|
+
import { appendAuditEvent } from './audit.js';
|
|
4
|
+
import { findRejectedValue } from './rejection.js';
|
|
5
|
+
// Lazy so a sleep that checks nothing never opens the store; make it IMMEDIATELY before the try whose
|
|
6
|
+
// finally closes it, so a throw in any phase cannot leak the handle.
|
|
7
|
+
export function lazyTombstoneChecks(hippoRoot, dryRun) {
|
|
8
|
+
let handle = null;
|
|
9
|
+
const opened = () => {
|
|
10
|
+
if (dryRun)
|
|
11
|
+
return null;
|
|
12
|
+
handle ??= openHippoDb(hippoRoot);
|
|
13
|
+
return handle;
|
|
14
|
+
};
|
|
15
|
+
return {
|
|
16
|
+
find(tenantId, digest) {
|
|
17
|
+
const db = opened();
|
|
18
|
+
return db ? findRejectedValue(db, tenantId, digest) : null;
|
|
19
|
+
},
|
|
20
|
+
audit(event) {
|
|
21
|
+
const db = opened();
|
|
22
|
+
if (db)
|
|
23
|
+
appendAuditEvent(db, event);
|
|
24
|
+
},
|
|
25
|
+
close() {
|
|
26
|
+
if (handle)
|
|
27
|
+
closeHippoDb(handle);
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=tombstone-checks.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type TokenSummary } from './token-ledger.js';
|
|
2
|
+
import { type FailureSummary } from './failure-log.js';
|
|
3
|
+
/** One tenant's token ledger totals since `sinceIso`. */
|
|
4
|
+
export declare function tokenUseSummary(hippoRoot: string, tenantId: string, sinceIso: string): TokenSummary;
|
|
5
|
+
/** One tenant's failure log totals since `sinceIso`. */
|
|
6
|
+
export declare function failureLogSummary(hippoRoot: string, tenantId: string, sinceIso: string): FailureSummary;
|
|
7
|
+
//# sourceMappingURL=usage-reports.d.ts.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// The token-use and failure reports, each read on one handle of its own.
|
|
2
|
+
// A file apart from token-ledger-rows.ts: src/store/token-ledger.ts imports that one, so a summary there would be an import cycle.
|
|
3
|
+
import { closeHippoDb, openHippoDb } from '../db/index.js';
|
|
4
|
+
import { summarizeTokenUse } from './token-ledger.js';
|
|
5
|
+
import { summarizeFailures } from './failure-log.js';
|
|
6
|
+
/** One tenant's token ledger totals since `sinceIso`. */
|
|
7
|
+
export function tokenUseSummary(hippoRoot, tenantId, sinceIso) {
|
|
8
|
+
const db = openHippoDb(hippoRoot);
|
|
9
|
+
try {
|
|
10
|
+
return summarizeTokenUse(db, tenantId, sinceIso);
|
|
11
|
+
}
|
|
12
|
+
finally {
|
|
13
|
+
closeHippoDb(db);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** One tenant's failure log totals since `sinceIso`. */
|
|
17
|
+
export function failureLogSummary(hippoRoot, tenantId, sinceIso) {
|
|
18
|
+
const db = openHippoDb(hippoRoot);
|
|
19
|
+
try {
|
|
20
|
+
return summarizeFailures(db, tenantId, sinceIso);
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
closeHippoDb(db);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=usage-reports.js.map
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
import { type DatabaseSyncLike } from '../db.js';
|
|
2
|
-
import type { MemoryEntry } from '../memory.js';
|
|
3
|
-
import type {
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
3
|
+
import type { PhysicsParticle } from '../core/physics.js';
|
|
4
|
+
import type { VectorBackfillQuery, VectorWrite, VectorWriteResult } from './port.js';
|
|
4
5
|
export declare function entriesWithoutVectorAt(db: DatabaseSyncLike, query: VectorBackfillQuery): MemoryEntry[];
|
|
5
6
|
export declare function writeVectorsAt(db: DatabaseSyncLike, write: VectorWrite): VectorWriteResult;
|
|
7
|
+
/** Every particle stored under `hippoRoot`. */
|
|
8
|
+
export declare function loadStoredParticles(hippoRoot: string): PhysicsParticle[];
|
|
9
|
+
/** Writes `particles` over their stored state under `hippoRoot`, as one batch. */
|
|
10
|
+
export declare function saveStoredParticles(hippoRoot: string, particles: PhysicsParticle[]): void;
|
|
11
|
+
/** Replaces every particle under `hippoRoot` with a fresh one per entry that has an embedding; returns how many. */
|
|
12
|
+
export declare function resetStoredParticles(hippoRoot: string, entries: MemoryEntry[], embeddingIndex: Record<string, number[]>): number;
|
|
6
13
|
//# sourceMappingURL=vector-writes.d.ts.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// hippo.db's half of the VectorWrites store group.
|
|
2
|
-
import { setMeta, withWriteScope } from '../db.js';
|
|
3
|
-
import { embeddingIndexStateOn, replacesIndex } from '
|
|
4
|
-
import { float32ToBuffer } from '../physics-state.js';
|
|
5
|
-
import { EMBEDDING_MODEL_META_KEY, upsertVectors } from '../vector-store.js';
|
|
2
|
+
import { closeHippoDb, openHippoDb, setMeta, withWriteScope } from '../db/index.js';
|
|
3
|
+
import { embeddingIndexStateOn, replacesIndex } from './embeddings/index.js';
|
|
4
|
+
import { float32ToBuffer, loadPhysicsState, resetAllPhysicsState, savePhysicsState } from '../db/physics-state.js';
|
|
5
|
+
import { EMBEDDING_MODEL_META_KEY, upsertVectors } from '../db/vector-store.js';
|
|
6
6
|
import { chunked } from './entry-reads.js';
|
|
7
7
|
import { MEMORY_SELECT_COLUMNS, rowToEntry } from './rows.js';
|
|
8
8
|
const MAX_BACKFILL_PAGE = 500;
|
|
@@ -22,7 +22,7 @@ function ownedIds(db, ids, tenantId) {
|
|
|
22
22
|
const owned = new Set();
|
|
23
23
|
for (const chunk of chunked([...new Set(ids)])) {
|
|
24
24
|
// SAFETY: the SELECT names one column, id.
|
|
25
|
-
const rows = db.prepare(`SELECT id FROM memories WHERE tenant_id = ? AND id IN (${chunk.map(() => '?').join(', ')})`).all(tenantId, ...chunk);
|
|
25
|
+
const rows = db.prepare(`SELECT id FROM memories WHERE +tenant_id = ? AND id IN (${chunk.map(() => '?').join(', ')})`).all(tenantId, ...chunk);
|
|
26
26
|
for (const row of rows)
|
|
27
27
|
owned.add(row.id);
|
|
28
28
|
}
|
|
@@ -56,4 +56,34 @@ export function writeVectorsAt(db, write) {
|
|
|
56
56
|
return { written, modelMismatch: false };
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
+
/** Every particle stored under `hippoRoot`. */
|
|
60
|
+
export function loadStoredParticles(hippoRoot) {
|
|
61
|
+
const db = openHippoDb(hippoRoot);
|
|
62
|
+
try {
|
|
63
|
+
return Array.from(loadPhysicsState(db).values());
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
closeHippoDb(db);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Writes `particles` over their stored state under `hippoRoot`, as one batch. */
|
|
70
|
+
export function saveStoredParticles(hippoRoot, particles) {
|
|
71
|
+
const db = openHippoDb(hippoRoot);
|
|
72
|
+
try {
|
|
73
|
+
savePhysicsState(db, particles);
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
closeHippoDb(db);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Replaces every particle under `hippoRoot` with a fresh one per entry that has an embedding; returns how many. */
|
|
80
|
+
export function resetStoredParticles(hippoRoot, entries, embeddingIndex) {
|
|
81
|
+
const db = openHippoDb(hippoRoot);
|
|
82
|
+
try {
|
|
83
|
+
return resetAllPhysicsState(db, entries, embeddingIndex);
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
closeHippoDb(db);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
59
89
|
//# sourceMappingURL=vector-writes.js.map
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* importance-ranked, and automatically evicted when the buffer
|
|
6
6
|
* exceeds WM_MAX_ENTRIES per scope.
|
|
7
7
|
*/
|
|
8
|
-
import type { JsonValue } from '
|
|
8
|
+
import type { JsonValue } from '../util/json.js';
|
|
9
9
|
export declare const WM_MAX_ENTRIES = 20;
|
|
10
10
|
export type JsonObject = {
|
|
11
11
|
[key: string]: JsonValue;
|
|
@@ -34,6 +34,7 @@ export declare function wmPush(hippoRoot: string, opts: {
|
|
|
34
34
|
sessionId?: string;
|
|
35
35
|
taskId?: string;
|
|
36
36
|
metadata?: JsonObject;
|
|
37
|
+
tenantId?: string;
|
|
37
38
|
}): number;
|
|
38
39
|
/**
|
|
39
40
|
* Read working memory entries, sorted by importance DESC.
|
|
@@ -42,6 +43,7 @@ export declare function wmRead(hippoRoot: string, opts?: {
|
|
|
42
43
|
scope?: string;
|
|
43
44
|
sessionId?: string;
|
|
44
45
|
limit?: number;
|
|
46
|
+
tenantId?: string;
|
|
45
47
|
}): WorkingMemoryItem[];
|
|
46
48
|
/**
|
|
47
49
|
* Clear (delete) working memory entries. Returns the count deleted.
|
|
@@ -49,6 +51,7 @@ export declare function wmRead(hippoRoot: string, opts?: {
|
|
|
49
51
|
export declare function wmClear(hippoRoot: string, opts?: {
|
|
50
52
|
scope?: string;
|
|
51
53
|
sessionId?: string;
|
|
54
|
+
tenantId?: string;
|
|
52
55
|
}): number;
|
|
53
56
|
/**
|
|
54
57
|
* Flush working memory — delete entries after session end.
|
|
@@ -59,5 +62,6 @@ export declare function wmClear(hippoRoot: string, opts?: {
|
|
|
59
62
|
export declare function wmFlush(hippoRoot: string, opts?: {
|
|
60
63
|
scope?: string;
|
|
61
64
|
sessionId?: string;
|
|
65
|
+
tenantId?: string;
|
|
62
66
|
}): number;
|
|
63
67
|
//# sourceMappingURL=working-memory.d.ts.map
|
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
* importance-ranked, and automatically evicted when the buffer
|
|
6
6
|
* exceeds WM_MAX_ENTRIES per scope.
|
|
7
7
|
*/
|
|
8
|
-
import { closeHippoDb } from '
|
|
9
|
-
import { openStore } from './
|
|
8
|
+
import { closeHippoDb, withWriteScope } from '../db/index.js';
|
|
9
|
+
import { openStore } from './open.js';
|
|
10
|
+
import { warnDamagedColumn } from '../util/stored-json.js';
|
|
11
|
+
import { resolveTenantId } from './tenant.js';
|
|
10
12
|
export const WM_MAX_ENTRIES = 20;
|
|
11
13
|
function rowToItem(row) {
|
|
12
14
|
let metadata = {};
|
|
@@ -17,7 +19,8 @@ function rowToItem(row) {
|
|
|
17
19
|
metadata = JSON.parse(row.metadata_json);
|
|
18
20
|
}
|
|
19
21
|
catch {
|
|
20
|
-
//
|
|
22
|
+
// The item still lists with its content; only its metadata reads as empty.
|
|
23
|
+
warnDamagedColumn({ table: 'working_memory', id: row.id, column: 'metadata_json' }, 'not valid JSON');
|
|
21
24
|
}
|
|
22
25
|
return {
|
|
23
26
|
id: row.id,
|
|
@@ -42,56 +45,51 @@ export function wmPush(hippoRoot, opts) {
|
|
|
42
45
|
try {
|
|
43
46
|
const now = new Date().toISOString();
|
|
44
47
|
const importance = opts.importance ?? 0;
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
const tenantId = opts.tenantId ?? resolveTenantId({});
|
|
49
|
+
return withWriteScope(db, 'wm_push', () => {
|
|
47
50
|
const result = db.prepare(`
|
|
48
|
-
INSERT INTO working_memory(scope, session_id, task_id, importance, content, metadata_json, created_at, updated_at)
|
|
49
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
50
|
-
`).run(opts.scope, opts.sessionId ?? null, opts.taskId ?? null, importance, opts.content, JSON.stringify(opts.metadata ?? {}), now, now);
|
|
51
|
+
INSERT INTO working_memory(scope, session_id, task_id, importance, content, metadata_json, created_at, updated_at, tenant_id)
|
|
52
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
53
|
+
`).run(opts.scope, opts.sessionId ?? null, opts.taskId ?? null, importance, opts.content, JSON.stringify(opts.metadata ?? {}), now, now, tenantId);
|
|
51
54
|
const id = Number(result.lastInsertRowid ?? 0);
|
|
52
|
-
|
|
53
|
-
// SAFETY: `COUNT(*) AS cnt` on a scoped query always returns exactly
|
|
54
|
-
// one row shaped { cnt }; .get() returns undefined only if the driver
|
|
55
|
-
// yields no row, which COUNT(*) never does.
|
|
56
|
-
const countRow = db.prepare(`
|
|
57
|
-
SELECT COUNT(*) AS cnt FROM working_memory WHERE scope = ?
|
|
58
|
-
`).get(opts.scope);
|
|
59
|
-
const count = Number(countRow?.cnt ?? 0);
|
|
60
|
-
if (count > WM_MAX_ENTRIES) {
|
|
61
|
-
const excess = count - WM_MAX_ENTRIES;
|
|
62
|
-
db.prepare(`
|
|
63
|
-
DELETE FROM working_memory
|
|
64
|
-
WHERE id IN (
|
|
65
|
-
SELECT id FROM working_memory
|
|
66
|
-
WHERE scope = ?
|
|
67
|
-
ORDER BY importance ASC, created_at ASC
|
|
68
|
-
LIMIT ?
|
|
69
|
-
)
|
|
70
|
-
`).run(opts.scope, excess);
|
|
71
|
-
}
|
|
72
|
-
db.exec('COMMIT');
|
|
55
|
+
evictOverCapacity(db, opts.scope, tenantId);
|
|
73
56
|
return id;
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
try {
|
|
77
|
-
db.exec('ROLLBACK');
|
|
78
|
-
}
|
|
79
|
-
catch { /* ignore */ }
|
|
80
|
-
throw error;
|
|
81
|
-
}
|
|
57
|
+
});
|
|
82
58
|
}
|
|
83
59
|
finally {
|
|
84
60
|
closeHippoDb(db);
|
|
85
61
|
}
|
|
86
62
|
}
|
|
63
|
+
function evictOverCapacity(db, scope, tenantId) {
|
|
64
|
+
// Evict if over capacity for this scope
|
|
65
|
+
// SAFETY: `COUNT(*) AS cnt` on a scoped query always returns exactly
|
|
66
|
+
// one row shaped { cnt }; .get() returns undefined only if the driver
|
|
67
|
+
// yields no row, which COUNT(*) never does.
|
|
68
|
+
const countRow = db.prepare(`
|
|
69
|
+
SELECT COUNT(*) AS cnt FROM working_memory WHERE scope = ? AND tenant_id = ?
|
|
70
|
+
`).get(scope, tenantId);
|
|
71
|
+
const count = Number(countRow?.cnt ?? 0);
|
|
72
|
+
if (count > WM_MAX_ENTRIES) {
|
|
73
|
+
const excess = count - WM_MAX_ENTRIES;
|
|
74
|
+
db.prepare(`
|
|
75
|
+
DELETE FROM working_memory
|
|
76
|
+
WHERE id IN (
|
|
77
|
+
SELECT id FROM working_memory
|
|
78
|
+
WHERE scope = ? AND tenant_id = ?
|
|
79
|
+
ORDER BY importance ASC, created_at ASC
|
|
80
|
+
LIMIT ?
|
|
81
|
+
)
|
|
82
|
+
`).run(scope, tenantId, excess);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
87
85
|
/**
|
|
88
86
|
* Read working memory entries, sorted by importance DESC.
|
|
89
87
|
*/
|
|
90
88
|
export function wmRead(hippoRoot, opts) {
|
|
91
89
|
const db = openStore(hippoRoot);
|
|
92
90
|
try {
|
|
93
|
-
const clauses = [];
|
|
94
|
-
const params = [];
|
|
91
|
+
const clauses = ['tenant_id = ?'];
|
|
92
|
+
const params = [opts?.tenantId ?? resolveTenantId({})];
|
|
95
93
|
if (opts?.scope) {
|
|
96
94
|
clauses.push('scope = ?');
|
|
97
95
|
params.push(opts.scope);
|
|
@@ -124,8 +122,8 @@ export function wmRead(hippoRoot, opts) {
|
|
|
124
122
|
export function wmClear(hippoRoot, opts) {
|
|
125
123
|
const db = openStore(hippoRoot);
|
|
126
124
|
try {
|
|
127
|
-
const clauses = [];
|
|
128
|
-
const params = [];
|
|
125
|
+
const clauses = ['tenant_id = ?'];
|
|
126
|
+
const params = [opts?.tenantId ?? resolveTenantId({})];
|
|
129
127
|
if (opts?.scope) {
|
|
130
128
|
clauses.push('scope = ?');
|
|
131
129
|
params.push(opts.scope);
|
package/dist/support-bundle.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type DoctorOpts } from './doctor.js';
|
|
2
|
-
import type { JsonObject } from './working-memory.js';
|
|
2
|
+
import type { JsonObject } from './store/working-memory.js';
|
|
3
3
|
export interface SupportBundleOpts extends DoctorOpts {
|
|
4
4
|
readonly cwd: string;
|
|
5
5
|
readonly home: string;
|
package/dist/support-bundle.js
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
/** `hippo support-bundle`: one redacted JSON snapshot for a support ticket. Read-only (SQLite may leave empty -wal and -shm files); never touches memory content. */
|
|
2
|
-
import { envByName, processEnv } from './env.js';
|
|
2
|
+
import { envByName, processEnv } from './util/env.js';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as os from 'os';
|
|
5
5
|
import * as path from 'path';
|
|
6
6
|
import { pathToFileURL } from 'url';
|
|
7
|
-
import { findHippoStoreDir, isGlobalStoreRoot
|
|
8
|
-
import {
|
|
7
|
+
import { findHippoStoreDir, isGlobalStoreRoot } from './core/project-identity.js';
|
|
8
|
+
import { realpathOrResolve } from './util/real-path.js';
|
|
9
|
+
import { getGlobalRoot } from './sharing/shared.js';
|
|
9
10
|
import { isInitialized } from './store/open.js';
|
|
10
|
-
import {
|
|
11
|
+
import { readStoreInventory } from './store/diagnostics.js';
|
|
11
12
|
import { runDoctor } from './doctor.js';
|
|
12
|
-
import { loadConfig } from './config.js';
|
|
13
|
-
import { redactSecretsStrict } from './secret-detect.js';
|
|
14
|
-
import { isJsonString } from './json.js';
|
|
15
|
-
import { escapeRegex } from './escape.js';
|
|
13
|
+
import { loadConfig } from './core/config.js';
|
|
14
|
+
import { redactSecretsStrict } from './util/secret-detect.js';
|
|
15
|
+
import { isJsonString, isJsonObject } from './util/json.js';
|
|
16
|
+
import { escapeRegex } from './util/escape.js';
|
|
17
|
+
import { errorMessage } from './util/log.js';
|
|
16
18
|
const TAIL_MAX_BYTES = 256 * 1024;
|
|
17
19
|
export const TAIL_MAX_LINES = 200;
|
|
18
20
|
const TAIL_MAX_LINE_CHARS = 2000;
|
|
19
21
|
// Greedy on purpose: complete key blocks are redacted first, so any END left is an orphan and what precedes it may be key body.
|
|
20
22
|
const ORPHAN_KEY_END_RE = /^[\s\S]*-----END [A-Z ]*PRIVATE KEY-----/;
|
|
21
|
-
// The other env vars hippo reads outside the HIPPO_ prefix (src/
|
|
23
|
+
// The other env vars hippo reads outside the HIPPO_ prefix (src/store/embeddings/provider.ts, connectors/*).
|
|
22
24
|
const OTHER_ENV_NAMES = [
|
|
23
25
|
'ANTHROPIC_API_KEY', 'OPENAI_API_KEY', 'VOYAGE_API_KEY', 'COHERE_API_KEY', 'TYPESAFE_API_KEY',
|
|
24
26
|
'GITHUB_TOKEN', 'GITHUB_WEBHOOK_SECRET', 'GITHUB_WEBHOOK_SECRET_PREVIOUS',
|
|
@@ -27,9 +29,6 @@ const OTHER_ENV_NAMES = [
|
|
|
27
29
|
'XDG_DATA_HOME', 'MCP_SSE_HEARTBEAT_MS', 'MCP_SSE_MAX_AGE_SEC',
|
|
28
30
|
];
|
|
29
31
|
const CONFIG_SECRET_KEY_RE = /key|token|secret|passw|credential|auth|cookie|bearer|signature|private/i;
|
|
30
|
-
function isJsonObject(v) {
|
|
31
|
-
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
32
|
-
}
|
|
33
32
|
function buildRuntime() {
|
|
34
33
|
return {
|
|
35
34
|
node: process.versions.node,
|
|
@@ -39,17 +38,6 @@ function buildRuntime() {
|
|
|
39
38
|
osRelease: os.release(),
|
|
40
39
|
};
|
|
41
40
|
}
|
|
42
|
-
function listTableNames(db) {
|
|
43
|
-
// SAFETY: each row's shape matches the single `name` column named in the SELECT above.
|
|
44
|
-
const rows = db.prepare(`SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' AND sql NOT LIKE 'CREATE VIRTUAL TABLE%' ORDER BY name`).all();
|
|
45
|
-
return rows.map((r) => r.name);
|
|
46
|
-
}
|
|
47
|
-
function countTables(db) {
|
|
48
|
-
const tables = {};
|
|
49
|
-
for (const name of listTableNames(db))
|
|
50
|
-
tables[name] = countTableRows(db, name);
|
|
51
|
-
return tables;
|
|
52
|
-
}
|
|
53
41
|
function redactConfigValue(value) {
|
|
54
42
|
if (Array.isArray(value))
|
|
55
43
|
return value.map(redactConfigValue);
|
|
@@ -88,21 +76,13 @@ function buildStoreEntry(kind, storeDir) {
|
|
|
88
76
|
const walPath = `${dbPath}-wal`;
|
|
89
77
|
if (fs.existsSync(walPath))
|
|
90
78
|
files['hippo.db-wal'] = fs.statSync(walPath).size;
|
|
91
|
-
let db = null;
|
|
92
79
|
try {
|
|
93
|
-
|
|
94
|
-
const schemaVersion = getSchemaVersion(db);
|
|
95
|
-
const minCompatibleBinary = getMeta(db, 'min_compatible_binary', '') || null;
|
|
96
|
-
const tables = countTables(db);
|
|
80
|
+
const { schemaVersion, minCompatibleBinary, tables } = readStoreInventory(storeDir);
|
|
97
81
|
const { configFile, config } = readStoreConfig(storeDir);
|
|
98
82
|
return { kind, path: storeDir, schemaVersion, minCompatibleBinary, files, tables, configFile, config };
|
|
99
83
|
}
|
|
100
84
|
catch (err) {
|
|
101
|
-
return { kind, path: storeDir, error:
|
|
102
|
-
}
|
|
103
|
-
finally {
|
|
104
|
-
if (db !== null)
|
|
105
|
-
closeHippoDb(db);
|
|
85
|
+
return { kind, path: storeDir, error: errorMessage(err) };
|
|
106
86
|
}
|
|
107
87
|
}
|
|
108
88
|
function buildStores(opts) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { DatabaseSyncLike } from '
|
|
2
|
-
import type { MemoryEntry } from '
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
3
3
|
export type GatedWriteResult = 'written' | 'skipped:not-worth-storing' | 'skipped:secret' | 'skipped:rejected';
|
|
4
4
|
/** Runs on the caller's handle so it nests in the caller's transaction (writeEntry would open a second handle and wait on that lock); the caller mirrors after commit with an entry it stamped itself. The rejection audit lands inside that transaction, which is safe because a batch that rolls back stays `summarised` and replay writes the audit again. */
|
|
5
5
|
export declare function gatedWrite(db: DatabaseSyncLike, hippoRoot: string, entry: MemoryEntry, opts?: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// The one write path for text no person typed into hippo: capture, compaction items and imported agent memories.
|
|
2
|
-
import { isContentWorthStoring } from '
|
|
3
|
-
import { RejectedValueError } from '
|
|
4
|
-
import { detectSecret } from '
|
|
5
|
-
import { auditRejectionRefusal } from '
|
|
6
|
-
import { stampOriginProject } from '
|
|
7
|
-
import { writeEntryDbOnly } from '
|
|
2
|
+
import { isContentWorthStoring } from '../core/memory-quality.js';
|
|
3
|
+
import { RejectedValueError } from '../store/rejection.js';
|
|
4
|
+
import { detectSecret } from '../util/secret-detect.js';
|
|
5
|
+
import { auditRejectionRefusal } from '../store/audit-event.js';
|
|
6
|
+
import { stampOriginProject } from '../store/entry-row.js';
|
|
7
|
+
import { writeEntryDbOnly } from '../store/entry-writes.js';
|
|
8
8
|
/** Runs on the caller's handle so it nests in the caller's transaction (writeEntry would open a second handle and wait on that lock); the caller mirrors after commit with an entry it stamped itself. The rejection audit lands inside that transaction, which is safe because a batch that rolls back stays `summarised` and replay writes the audit again. */
|
|
9
9
|
export function gatedWrite(db, hippoRoot, entry, opts) {
|
|
10
10
|
// Off for imported agent memories: a person wrote those notes, and a one-line preference fails the check.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Quarantine tier (CD5, AT3): pending/approved/rejected record for a memory `remember` flagged as untrusted. */
|
|
2
|
+
export { quarantineScopeFor } from '../store/quarantine.js';
|
|
3
|
+
export declare function isQuarantineScope(scope: string | null | undefined): boolean;
|
|
4
|
+
//# sourceMappingURL=quarantine.d.ts.map
|