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
package/dist/cli/sleep.d.ts
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type CliFlags } from './flag-values.js';
|
|
2
2
|
/** Runs `hippo sleep`; with `--log-file` it also tees its output to that file. */
|
|
3
|
-
export declare function cmdSleep(hippoRoot: string, flags:
|
|
4
|
-
/**
|
|
5
|
-
* Render an api.sleep result as console output, byte-identical to the
|
|
6
|
-
* pre-extraction inline implementation in cmdSleepCore.
|
|
7
|
-
*/
|
|
8
|
-
/** @internal — exported for snapshot tests (tests/cli-context-render-snapshot.test.ts). NOT a stable public API. */
|
|
9
|
-
export declare function renderSleepResult(result: api.SleepResult): void;
|
|
3
|
+
export declare function cmdSleep(hippoRoot: string, flags: CliFlags): Promise<void>;
|
|
10
4
|
//# sourceMappingURL=sleep.d.ts.map
|
package/dist/cli/sleep.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
// The `hippo sleep` verb; main() loads it lazily, since most invocations never sleep.
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
|
-
import { loadConfig } from '../config.js';
|
|
5
|
-
import { isGitRepo } from '../autolearn.js';
|
|
4
|
+
import { loadConfig } from '../core/config.js';
|
|
5
|
+
import { isGitRepo } from '../learn/autolearn.js';
|
|
6
6
|
import { importForStore, currentMachine } from '../agent-memories/sync.js';
|
|
7
|
-
import { replayCompactionsAt } from '../compaction-record.js';
|
|
8
|
-
import * as api from '../api.js';
|
|
9
|
-
import { resolveTenantId } from '../tenant.js';
|
|
10
|
-
import {
|
|
11
|
-
import { errorMessage, log } from '../log.js';
|
|
12
|
-
import { closeHippoDb, openHippoDb } from '../db.js';
|
|
13
|
-
import { repairOnceOnSleep } from '../project-merge.js';
|
|
14
|
-
import {
|
|
7
|
+
import { replayCompactionsAt } from '../capture/compaction-record.js';
|
|
8
|
+
import * as api from '../api/index.js';
|
|
9
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
10
|
+
import { sleepResultLines } from './sleep-render.js';
|
|
11
|
+
import { errorMessage, log } from '../util/log.js';
|
|
12
|
+
import { closeHippoDb, openHippoDb } from '../db/index.js';
|
|
13
|
+
import { repairOnceOnSleep } from '../sharing/project-merge.js';
|
|
14
|
+
import { boolFlag, stringFlag } from './flag-values.js';
|
|
15
|
+
import { requireInit, learnFromRepo, runChurnStaleForRepo, skipLearnOnSharedStore } from './shared.js';
|
|
16
|
+
import { printAgentImport } from './print.js';
|
|
15
17
|
import { repairQualityOnceAt } from './quality-repair-once.js';
|
|
16
18
|
import { printError } from './output.js';
|
|
17
19
|
/** Runs `hippo sleep`; with `--log-file` it also tees its output to that file. */
|
|
@@ -19,7 +21,7 @@ export async function cmdSleep(hippoRoot, flags) {
|
|
|
19
21
|
// Tee stdout/stderr to a log file when --log-file is set. The SessionEnd
|
|
20
22
|
// hook uses this so the output is captured somewhere the SessionStart hook
|
|
21
23
|
// can re-display it next time the agent UI starts.
|
|
22
|
-
const logFile =
|
|
24
|
+
const logFile = stringFlag(flags, 'log-file') ?? null;
|
|
23
25
|
let restoreStdout = null;
|
|
24
26
|
if (logFile) {
|
|
25
27
|
try {
|
|
@@ -50,7 +52,7 @@ export async function cmdSleep(hippoRoot, flags) {
|
|
|
50
52
|
};
|
|
51
53
|
}
|
|
52
54
|
catch (err) {
|
|
53
|
-
log.warn(`could not open log file ${logFile}: ${err
|
|
55
|
+
log.warn(`could not open log file ${logFile}: ${errorMessage(err)}`);
|
|
54
56
|
}
|
|
55
57
|
}
|
|
56
58
|
try {
|
|
@@ -60,7 +62,7 @@ export async function cmdSleep(hippoRoot, flags) {
|
|
|
60
62
|
}
|
|
61
63
|
catch (err) {
|
|
62
64
|
if (logFile)
|
|
63
|
-
console.log(`[hippo] sleep failed: ${err
|
|
65
|
+
console.log(`[hippo] sleep failed: ${errorMessage(err)}`);
|
|
64
66
|
throw err;
|
|
65
67
|
}
|
|
66
68
|
finally {
|
|
@@ -68,67 +70,9 @@ export async function cmdSleep(hippoRoot, flags) {
|
|
|
68
70
|
restoreStdout();
|
|
69
71
|
}
|
|
70
72
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
*/
|
|
75
|
-
/** @internal — exported for snapshot tests (tests/cli-context-render-snapshot.test.ts). NOT a stable public API. */
|
|
76
|
-
export function renderSleepResult(result) {
|
|
77
|
-
console.log(`Running consolidation${result.dryRun ? ' (dry run)' : ''}...`);
|
|
78
|
-
console.log(`\nResults:`);
|
|
79
|
-
console.log(` Active memories: ${result.active}`);
|
|
80
|
-
console.log(` Removed (decayed): ${result.removed}`);
|
|
81
|
-
// Only when dormant.enabled moved something, so every other render stays
|
|
82
|
-
// byte-identical (tests/cli-context-render-snapshot.test.ts).
|
|
83
|
-
if (result.dormant !== undefined && result.dormant > 0) {
|
|
84
|
-
console.log(` Kept dormant: ${result.dormant} (hippo dormant to list)`);
|
|
85
|
-
}
|
|
86
|
-
if (result.dormantExpired !== undefined && result.dormantExpired > 0) {
|
|
87
|
-
console.log(` Expired dormant: ${result.dormantExpired} (past dormant.retentionDays)`);
|
|
88
|
-
}
|
|
89
|
-
console.log(` Merged episodic: ${result.mergedEpisodic}`);
|
|
90
|
-
console.log(` New semantic: ${result.newSemantic}`);
|
|
91
|
-
if (result.details && result.details.length > 0) {
|
|
92
|
-
console.log('\nDetails:');
|
|
93
|
-
for (const d of result.details) {
|
|
94
|
-
console.log(d);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
if (result.dryRun)
|
|
98
|
-
console.log('\n(dry run - nothing written)');
|
|
99
|
-
if (result.deduped && result.deduped.removed > 0) {
|
|
100
|
-
const { removed, semDups, epiDups, crossDups } = result.deduped;
|
|
101
|
-
const parts = [];
|
|
102
|
-
if (semDups > 0)
|
|
103
|
-
parts.push(`${semDups} redundant semantic patterns`);
|
|
104
|
-
if (epiDups > 0)
|
|
105
|
-
parts.push(`${epiDups} duplicate episodic lessons`);
|
|
106
|
-
if (crossDups > 0)
|
|
107
|
-
parts.push(`${crossDups} cross-layer duplicates`);
|
|
108
|
-
console.log(`\n${result.dryRun ? 'Would dedupe' : 'Deduped'} ${removed} duplicates (${parts.join(', ')}). ${result.dryRun ? 'Would keep' : 'Kept'} stronger copies.`);
|
|
109
|
-
}
|
|
110
|
-
if (result.audit) {
|
|
111
|
-
if (result.audit.errorsRemoved > 0) {
|
|
112
|
-
console.log(`\nAudit: ${result.dryRun ? 'would remove' : 'removed'} ${result.audit.errorsRemoved} junk memories (too short/empty).`);
|
|
113
|
-
}
|
|
114
|
-
if (result.audit.warningCount > 0) {
|
|
115
|
-
console.log(`Audit: ${result.audit.warningCount} low-quality memories detected (run \`hippo audit\` for details).`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
if (result.shared !== undefined && result.shared > 0) {
|
|
119
|
-
console.log(`\nAuto-shared ${result.shared} high-value memories to global store.`);
|
|
120
|
-
}
|
|
121
|
-
if (result.secretSkipped !== undefined && result.secretSkipped > 0) {
|
|
122
|
-
// The secret veto is never silent.
|
|
123
|
-
console.log(`\nAuto-share: withheld ${result.secretSkipped} secret-flagged ${result.secretSkipped === 1 ? 'memory' : 'memories'} (secret veto).`);
|
|
124
|
-
}
|
|
125
|
-
if (result.ambient) {
|
|
126
|
-
console.log(`\n${renderAmbientSummary(result.ambient)}`);
|
|
127
|
-
}
|
|
128
|
-
if (result.graph && result.graph.tenants > 0) {
|
|
129
|
-
const { tenants, entities, relations } = result.graph;
|
|
130
|
-
console.log(`\nGraph: rebuilt ${tenants} tenant${tenants === 1 ? '' : 's'} (${entities} entities, ${relations} relations).`);
|
|
131
|
-
}
|
|
73
|
+
function renderSleepResult(result) {
|
|
74
|
+
for (const line of sleepResultLines(result))
|
|
75
|
+
console.log(line);
|
|
132
76
|
}
|
|
133
77
|
/** Fault-isolated: a failed repair warns and runs again next sleep, and never stops the sleep. */
|
|
134
78
|
function repairProjectTagsOnce(hippoRoot) {
|
|
@@ -194,8 +138,8 @@ async function cmdSleepCore(hippoRoot, flags) {
|
|
|
194
138
|
actor: api.adminActor('cli'),
|
|
195
139
|
};
|
|
196
140
|
const result = await api.sleep(ctx, {
|
|
197
|
-
dryRun:
|
|
198
|
-
noShare:
|
|
141
|
+
dryRun: boolFlag(flags, 'dry-run'),
|
|
142
|
+
noShare: boolFlag(flags, 'no-share'),
|
|
199
143
|
});
|
|
200
144
|
renderSleepResult(result);
|
|
201
145
|
}
|
package/dist/cli/status.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CommandContext } from './
|
|
1
|
+
import { type CliFlags, type CommandContext } from './flag-values.js';
|
|
2
2
|
export declare function cmdStatus(hippoRoot: string): void;
|
|
3
3
|
/**
|
|
4
4
|
* `hippo tokens [--days <n>] [--json] [--global]`: the token ledger.
|
|
@@ -7,9 +7,9 @@ export declare function cmdStatus(hippoRoot: string): void;
|
|
|
7
7
|
* and the hook blocks' tokens later model calls re-read, counted when each session ends.
|
|
8
8
|
* Counts are estimates (characters / 4), the same estimate every budget uses.
|
|
9
9
|
*/
|
|
10
|
-
export declare function cmdTokens(hippoRoot: string, flags:
|
|
10
|
+
export declare function cmdTokens(hippoRoot: string, flags: CliFlags): void;
|
|
11
11
|
/** `hippo failures [--days <n>] [--json] [--global]`: failed tool calls by outcome, and repeats across sessions. */
|
|
12
|
-
export declare function cmdFailures(hippoRoot: string, flags:
|
|
12
|
+
export declare function cmdFailures(hippoRoot: string, flags: CliFlags): void;
|
|
13
13
|
export declare function handleCorrectionLatency({ hippoRoot, flags }: CommandContext): void;
|
|
14
14
|
export declare function handleProvenance({ hippoRoot, flags }: CommandContext): void;
|
|
15
15
|
export declare function handleDoctor({ flags }: CommandContext): void;
|
package/dist/cli/status.js
CHANGED
|
@@ -1,31 +1,35 @@
|
|
|
1
1
|
// Read-only report verbs: status, inspect, tokens, failures, provenance, correction latency, doctor and support bundle.
|
|
2
|
-
import { envHomeDir } from '../env.js';
|
|
3
|
-
import { evalNow } from '../ablation.js';
|
|
2
|
+
import { envHomeDir } from '../util/env.js';
|
|
3
|
+
import { evalNow } from '../core/ablation.js';
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import * as fs from 'fs';
|
|
6
6
|
import * as os from 'os';
|
|
7
7
|
import { fileURLToPath } from 'node:url';
|
|
8
|
-
import { calculateStrength, calculateRewardFactor, resolveConfidence, confidenceFacets, Layer } from '../memory.js';
|
|
8
|
+
import { calculateStrength, calculateRewardFactor, resolveConfidence, confidenceFacets, Layer } from '../core/memory.js';
|
|
9
9
|
import { readEntry, loadAllEntries } from '../store/entry-reads.js';
|
|
10
10
|
import { loadStats } from '../store/index-and-stats.js';
|
|
11
11
|
import { listMemoryConflicts } from '../store/conflicts.js';
|
|
12
|
-
import { loadEmbeddingIndex, embeddingModelRequiresReindex } from '../embeddings.js';
|
|
13
|
-
import { resolveEmbeddingProvider } from '../
|
|
14
|
-
import {
|
|
15
|
-
import { computeSystemEnergy, vecNorm } from '../physics.js';
|
|
16
|
-
import { loadConfig } from '../config.js';
|
|
17
|
-
import { openHippoDb, closeHippoDb } from '../db.js';
|
|
12
|
+
import { loadEmbeddingIndex, embeddingModelRequiresReindex } from '../store/embeddings/index.js';
|
|
13
|
+
import { resolveEmbeddingProvider } from '../store/embeddings/provider.js';
|
|
14
|
+
import { loadStoredParticles } from '../store/vector-writes.js';
|
|
15
|
+
import { computeSystemEnergy, vecNorm } from '../core/physics.js';
|
|
16
|
+
import { loadConfig } from '../core/config.js';
|
|
18
17
|
import { runDoctor, formatDoctor } from '../doctor.js';
|
|
19
18
|
import { buildSupportBundle, TAIL_MAX_LINES } from '../support-bundle.js';
|
|
20
|
-
import { PACKAGE_VERSION } from '../version.js';
|
|
21
|
-
import { FAILURE_LOG_RETENTION_DAYS } from '../failure-log.js';
|
|
22
|
-
import { getGlobalRoot } from '../shared.js';
|
|
23
|
-
import { buildProvenanceCoverage } from '
|
|
24
|
-
import { buildCorrectionLatency } from '
|
|
25
|
-
import * as api from '../api.js';
|
|
26
|
-
import { resolveTenantId } from '../tenant.js';
|
|
19
|
+
import { PACKAGE_VERSION } from '../util/version.js';
|
|
20
|
+
import { FAILURE_LOG_RETENTION_DAYS } from '../store/failure-log.js';
|
|
21
|
+
import { getGlobalRoot } from '../sharing/shared.js';
|
|
22
|
+
import { buildProvenanceCoverage } from './provenance-coverage.js';
|
|
23
|
+
import { buildCorrectionLatency } from './correction-latency.js';
|
|
24
|
+
import * as api from '../api/index.js';
|
|
25
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
26
|
+
import { errorMessage, log } from '../util/log.js';
|
|
27
27
|
import { printError } from './output.js';
|
|
28
|
-
import { parseCountFlag,
|
|
28
|
+
import { parseCountFlag, stringFlagOrExit, flagIsTrue } from './flag-values.js';
|
|
29
|
+
import { requireInit, resolveAuthRoot } from './shared.js';
|
|
30
|
+
import { fmt } from './print.js';
|
|
31
|
+
import { hookStoreRoot } from './hook-runtime.js';
|
|
32
|
+
import { DAY_MS } from '../util/time.js';
|
|
29
33
|
export function cmdStatus(hippoRoot) {
|
|
30
34
|
requireInit(hippoRoot);
|
|
31
35
|
const entries = loadAllEntries(hippoRoot);
|
|
@@ -151,27 +155,21 @@ function printEmbeddingStatus(hippoRoot, entries) {
|
|
|
151
155
|
// Physics status
|
|
152
156
|
function printPhysicsStatus(hippoRoot) {
|
|
153
157
|
try {
|
|
154
|
-
const
|
|
155
|
-
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
const avgVelMag = sumVelMag / particles.length;
|
|
165
|
-
console.log('');
|
|
166
|
-
console.log(`Physics: ${particles.length} particles, energy: ${fmt(energy.total, 4)} (KE: ${fmt(energy.kinetic, 4)}, PE: ${fmt(energy.potential, 4)}), avg vel: ${fmt(avgVelMag, 4)}`);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
finally {
|
|
170
|
-
closeHippoDb(db);
|
|
158
|
+
const particles = loadStoredParticles(hippoRoot);
|
|
159
|
+
if (particles.length > 0) {
|
|
160
|
+
const physConfig = loadConfig(hippoRoot);
|
|
161
|
+
const energy = computeSystemEnergy(particles, physConfig.physics.G_memory);
|
|
162
|
+
let sumVelMag = 0;
|
|
163
|
+
for (const p of particles)
|
|
164
|
+
sumVelMag += vecNorm(p.velocity);
|
|
165
|
+
const avgVelMag = sumVelMag / particles.length;
|
|
166
|
+
console.log('');
|
|
167
|
+
console.log(`Physics: ${particles.length} particles, energy: ${fmt(energy.total, 4)} (KE: ${fmt(energy.kinetic, 4)}, PE: ${fmt(energy.potential, 4)}), avg vel: ${fmt(avgVelMag, 4)}`);
|
|
171
168
|
}
|
|
172
169
|
}
|
|
173
|
-
catch {
|
|
174
|
-
//
|
|
170
|
+
catch (err) {
|
|
171
|
+
// The physics table may not exist yet, so status prints without that line.
|
|
172
|
+
log.debug(`physics status skipped: ${errorMessage(err)}`);
|
|
175
173
|
}
|
|
176
174
|
}
|
|
177
175
|
function cmdInspect(hippoRoot, id) {
|
|
@@ -185,8 +183,8 @@ function cmdInspect(hippoRoot, id) {
|
|
|
185
183
|
const currentStrength = calculateStrength(entry, now);
|
|
186
184
|
const lastRetrieved = new Date(entry.last_retrieved);
|
|
187
185
|
const created = new Date(entry.created);
|
|
188
|
-
const ageDays = (now.getTime() - created.getTime()) /
|
|
189
|
-
const daysSince = (now.getTime() - lastRetrieved.getTime()) /
|
|
186
|
+
const ageDays = (now.getTime() - created.getTime()) / DAY_MS;
|
|
187
|
+
const daysSince = (now.getTime() - lastRetrieved.getTime()) / DAY_MS;
|
|
190
188
|
const effectiveConfidence = resolveConfidence(entry, now);
|
|
191
189
|
console.log(`Memory: ${entry.id}`);
|
|
192
190
|
console.log('---------------------------');
|
|
@@ -363,12 +361,12 @@ export function handleDoctor({ flags }) {
|
|
|
363
361
|
process.exit(1);
|
|
364
362
|
}
|
|
365
363
|
export function handleSupportBundle({ flags }) {
|
|
366
|
-
const outFlag =
|
|
364
|
+
const outFlag = stringFlagOrExit(flags, 'out');
|
|
367
365
|
if (outFlag === '') {
|
|
368
366
|
printError('--out requires a file path.');
|
|
369
367
|
process.exit(1);
|
|
370
368
|
}
|
|
371
|
-
const includeLogs = flags
|
|
369
|
+
const includeLogs = flagIsTrue(flags, 'include-logs');
|
|
372
370
|
const home = envHomeDir() || os.homedir();
|
|
373
371
|
const now = new Date();
|
|
374
372
|
const bundle = buildSupportBundle({ cwd: process.cwd(), home, version: PACKAGE_VERSION, includeLogs, now });
|
|
@@ -383,7 +381,7 @@ export function handleSupportBundle({ flags }) {
|
|
|
383
381
|
printError(`${file} already exists; pass --out to choose another file. Nothing was written.`);
|
|
384
382
|
}
|
|
385
383
|
else {
|
|
386
|
-
printError(
|
|
384
|
+
printError(errorMessage(err));
|
|
387
385
|
}
|
|
388
386
|
process.exit(1);
|
|
389
387
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { envStdinWaitMs } from '
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { envStdinWaitMs } from '../util/env.js';
|
|
2
|
+
import { isJsonString, isJsonObjectLiteral } from '../util/json.js';
|
|
3
|
+
const DEFAULT_STDIN_WAIT_MS = 1000;
|
|
4
4
|
function defaultWaitMs() {
|
|
5
|
-
return envStdinWaitMs() ??
|
|
5
|
+
return envStdinWaitMs() ?? DEFAULT_STDIN_WAIT_MS;
|
|
6
6
|
}
|
|
7
7
|
/** Never blocks: a TTY resolves at once, otherwise waits up to `waitMs` of
|
|
8
8
|
* idle (default 1000ms, or `HIPPO_STDIN_WAIT_MS`), refreshed on each chunk
|
|
@@ -73,7 +73,7 @@ function snakeCaseFields(payload) {
|
|
|
73
73
|
added.tool_input = parsedToolArgs(payload.toolArgs);
|
|
74
74
|
const error = payload.error;
|
|
75
75
|
// An error object gives its message, so readers that expect the documented string still get one.
|
|
76
|
-
if (
|
|
76
|
+
if (isJsonObjectLiteral(error) && isJsonString(error.message))
|
|
77
77
|
added.error = error.message;
|
|
78
78
|
return added;
|
|
79
79
|
}
|
|
@@ -91,7 +91,7 @@ export function normaliseHookPayload(text) {
|
|
|
91
91
|
// Not JSON: each reader already treats that as a malformed payload, so it passes through untouched.
|
|
92
92
|
return text;
|
|
93
93
|
}
|
|
94
|
-
if (!
|
|
94
|
+
if (!isJsonObjectLiteral(payload))
|
|
95
95
|
return text;
|
|
96
96
|
const added = snakeCaseFields(payload);
|
|
97
97
|
return Object.keys(added).length === 0 ? text : JSON.stringify({ ...payload, ...added });
|
package/dist/cli/transfer.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type CommandContext } from './
|
|
2
|
-
export declare function cmdLearn(hippoRoot: string, flags:
|
|
3
|
-
export declare function cmdImport(hippoRoot: string, args: string[], flags:
|
|
4
|
-
export declare function cmdSync(hippoRoot: string, flags?:
|
|
1
|
+
import { type CliFlags, type CommandContext } from './flag-values.js';
|
|
2
|
+
export declare function cmdLearn(hippoRoot: string, flags: CliFlags): void;
|
|
3
|
+
export declare function cmdImport(hippoRoot: string, args: string[], flags: CliFlags): void;
|
|
4
|
+
export declare function cmdSync(hippoRoot: string, flags?: CliFlags): void;
|
|
5
5
|
export declare function handleWatch({ hippoRoot, args }: CommandContext): Promise<void>;
|
|
6
6
|
export declare function handlePromote({ hippoRoot, args }: CommandContext): Promise<void>;
|
|
7
7
|
export declare function handleShare({ hippoRoot, args, flags }: CommandContext): void;
|
package/dist/cli/transfer.js
CHANGED
|
@@ -1,26 +1,33 @@
|
|
|
1
1
|
// Verbs that move memories in and out: watch, learn, import, export, promote, sync, share and peers.
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
|
-
import { calculateStrength, deriveHalfLife
|
|
4
|
+
import { calculateStrength, deriveHalfLife } from '../core/memory.js';
|
|
5
5
|
import { isInitialized } from '../store/open.js';
|
|
6
6
|
import { writeEntry } from '../store/entry-writes.js';
|
|
7
7
|
import { readEntry, loadAllEntries } from '../store/entry-reads.js';
|
|
8
|
+
import { schemaFitInStore } from '../store/candidates.js';
|
|
8
9
|
import { updateStats } from '../store/index-and-stats.js';
|
|
9
|
-
import { RejectedValueError } from '../rejection.js';
|
|
10
|
-
import { embedAll, embedMemory } from '../embeddings.js';
|
|
11
|
-
import { loadConfig } from '../config.js';
|
|
12
|
-
import { captureError, runWatched } from '../autolearn.js';
|
|
10
|
+
import { RejectedValueError } from '../store/rejection.js';
|
|
11
|
+
import { embedAll, embedMemory, loadEmbeddingIndex } from '../store/embeddings/index.js';
|
|
12
|
+
import { loadConfig } from '../core/config.js';
|
|
13
|
+
import { captureError, runWatched } from '../learn/autolearn.js';
|
|
13
14
|
import { currentMachine, importAtSessionEnd, importForStore } from '../agent-memories/sync.js';
|
|
14
15
|
import { detailLines } from '../agent-memories/report.js';
|
|
15
|
-
import { getGlobalRoot, initGlobal, shareMemory, listPeers, autoShare, transferScore, syncGlobalToLocal, } from '../shared.js';
|
|
16
|
+
import { getGlobalRoot, initGlobal, shareMemory, listPeers, autoShare, transferScore, syncGlobalToLocal, } from '../sharing/shared.js';
|
|
16
17
|
import { importChatGPT, importClaude, importCursor, importGenericFile, } from '../importers/sources.js';
|
|
17
18
|
import { importMarkdown } from '../importers/markdown.js';
|
|
18
19
|
import { importVault } from '../importers/vault.js';
|
|
19
|
-
import * as api from '../api.js';
|
|
20
|
-
import * as client from '
|
|
21
|
-
import { resolveTenantId } from '../tenant.js';
|
|
20
|
+
import * as api from '../api/index.js';
|
|
21
|
+
import * as client from './client.js';
|
|
22
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
22
23
|
import { printError } from './output.js';
|
|
23
|
-
import {
|
|
24
|
+
import { errorMessage, log } from '../util/log.js';
|
|
25
|
+
import { requireInit, runViaServerIfAvailable, learnFromRepo } from './shared.js';
|
|
26
|
+
import { fmt } from './print.js';
|
|
27
|
+
import { boolFlag, flagIsTrue, nonEmptyStringFlag } from './flag-values.js';
|
|
28
|
+
import { CONTENT_PREVIEW_CHARS, DATE_PREFIX_CHARS } from '../util/token-text.js';
|
|
29
|
+
const STDERR_PREVIEW_CHARS = 80;
|
|
30
|
+
const MAX_ENTRIES_SHOWN = 10;
|
|
24
31
|
// ---------------------------------------------------------------------------
|
|
25
32
|
// Watch command
|
|
26
33
|
// ---------------------------------------------------------------------------
|
|
@@ -40,10 +47,7 @@ async function cmdWatch(command, hippoRoot) {
|
|
|
40
47
|
process.exit(exitCode);
|
|
41
48
|
}
|
|
42
49
|
const entry = captureError(exitCode, stderr, command, resolveTenantId({}));
|
|
43
|
-
|
|
44
|
-
const existingWatch = loadAllEntries(hippoRoot, entry.tenantId);
|
|
45
|
-
const watchFit = computeSchemaFit(entry.content, entry.tags, existingWatch);
|
|
46
|
-
entry.schema_fit = watchFit;
|
|
50
|
+
entry.schema_fit = schemaFitInStore(hippoRoot, entry.tenantId, entry.content, entry.tags);
|
|
47
51
|
entry.half_life_days = deriveHalfLife(loadConfig(hippoRoot).defaultHalfLifeDays, entry);
|
|
48
52
|
entry.strength = calculateStrength(entry);
|
|
49
53
|
// A rejection-guard refusal of a failed command's output must not crash the watcher:
|
|
@@ -52,7 +56,7 @@ async function cmdWatch(command, hippoRoot) {
|
|
|
52
56
|
writeEntry(hippoRoot, entry);
|
|
53
57
|
updateStats(hippoRoot, { remembered: 1 });
|
|
54
58
|
void embedMemory(hippoRoot, entry);
|
|
55
|
-
const preview = stderr.trim().slice(0,
|
|
59
|
+
const preview = stderr.trim().slice(0, STDERR_PREVIEW_CHARS);
|
|
56
60
|
printError(`\nHippo learned from failure: "${preview}"`);
|
|
57
61
|
}
|
|
58
62
|
catch (err) {
|
|
@@ -76,8 +80,8 @@ export function cmdLearn(hippoRoot, flags) {
|
|
|
76
80
|
}
|
|
77
81
|
const days = parseInt(String(flags['days'] ?? '7'), 10);
|
|
78
82
|
console.log(`Scanning git log for the last ${days} days...`);
|
|
79
|
-
const reposFlag = flags
|
|
80
|
-
if (reposFlag
|
|
83
|
+
const reposFlag = nonEmptyStringFlag(flags, 'repos');
|
|
84
|
+
if (reposFlag) {
|
|
81
85
|
const repos = reposFlag.split(',').map((r) => r.trim()).filter(Boolean);
|
|
82
86
|
let totalAdded = 0;
|
|
83
87
|
let totalSkipped = 0;
|
|
@@ -97,13 +101,25 @@ export function cmdLearn(hippoRoot, flags) {
|
|
|
97
101
|
// ---------------------------------------------------------------------------
|
|
98
102
|
// Import command
|
|
99
103
|
// ---------------------------------------------------------------------------
|
|
104
|
+
/** The rows are saved either way; a failed backfill only delays vectors, so it warns with how many wait and the command that finishes them. */
|
|
105
|
+
function warnBackfillFailed(root, embedCommand, err) {
|
|
106
|
+
let waiting;
|
|
107
|
+
try {
|
|
108
|
+
const vectors = loadEmbeddingIndex(root);
|
|
109
|
+
waiting = String(loadAllEntries(root).filter((entry) => !Object.hasOwn(vectors, entry.id)).length);
|
|
110
|
+
}
|
|
111
|
+
catch (countErr) {
|
|
112
|
+
waiting = `an unknown number of (count failed: ${errorMessage(countErr)})`;
|
|
113
|
+
}
|
|
114
|
+
log.warn(`import: embedding backfill failed (${errorMessage(err)}); ${waiting} rows have no vector; run '${embedCommand}' to backfill`);
|
|
115
|
+
}
|
|
100
116
|
function warnRedacted(count) {
|
|
101
117
|
if (count)
|
|
102
118
|
printError(`Warning: secret-shaped text was redacted from ${count} imported ${count === 1 ? 'entry' : 'entries'} before storing`);
|
|
103
119
|
}
|
|
104
120
|
export function cmdImport(hippoRoot, args, flags) {
|
|
105
|
-
const useGlobal =
|
|
106
|
-
const dryRun =
|
|
121
|
+
const useGlobal = boolFlag(flags, 'global');
|
|
122
|
+
const dryRun = boolFlag(flags, 'dry-run');
|
|
107
123
|
const extraTags = Array.isArray(flags['tag'])
|
|
108
124
|
? flags['tag']
|
|
109
125
|
: flags['tag']
|
|
@@ -132,7 +148,7 @@ export function cmdImport(hippoRoot, args, flags) {
|
|
|
132
148
|
// vault import (the connector raw-archive path is tenant-local).
|
|
133
149
|
if (flags['vault'])
|
|
134
150
|
return importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun);
|
|
135
|
-
importFromFile(targetRoot, args, flags, importOptions, useGlobal, dryRun);
|
|
151
|
+
importFromFile(targetRoot, args, flags, { importOptions, useGlobal, dryRun });
|
|
136
152
|
}
|
|
137
153
|
// Determine which importer to use based on flag
|
|
138
154
|
function pickImporter(args, flags) {
|
|
@@ -151,7 +167,8 @@ function pickImporter(args, flags) {
|
|
|
151
167
|
return { filePath: args[0], importer: importGenericFile, importerName: 'File' };
|
|
152
168
|
return { filePath: undefined, importer: undefined, importerName: '' };
|
|
153
169
|
}
|
|
154
|
-
function importFromFile(targetRoot, args, flags,
|
|
170
|
+
function importFromFile(targetRoot, args, flags, options) {
|
|
171
|
+
const { importOptions, useGlobal, dryRun } = options;
|
|
155
172
|
const { filePath, importer, importerName } = pickImporter(args, flags);
|
|
156
173
|
if (!filePath || !importer) {
|
|
157
174
|
printError('Usage: hippo import <--chatgpt|--claude|--cursor|--file|--markdown|--vault> <path>, or hippo import --agents [--dry-run]');
|
|
@@ -169,9 +186,12 @@ function importFromFile(targetRoot, args, flags, importOptions, useGlobal, dryRu
|
|
|
169
186
|
// a local `hippo embed`) is the backstop if it does get interrupted. Do not
|
|
170
187
|
// "fix" this by awaiting it, that would block the CLI on model load/backfill.
|
|
171
188
|
if (!dryRun && result.imported >= 1) {
|
|
172
|
-
void embedAll(targetRoot).catch(() =>
|
|
189
|
+
void embedAll(targetRoot).catch((err) => warnBackfillFailed(targetRoot, useGlobal ? 'hippo embed --global' : 'hippo embed', err));
|
|
173
190
|
}
|
|
174
191
|
const storeLabel = useGlobal ? `global (${getGlobalRoot()})` : targetRoot;
|
|
192
|
+
printFileImportSummary(result, importerName, filePath, storeLabel, dryRun);
|
|
193
|
+
}
|
|
194
|
+
function printFileImportSummary(result, importerName, filePath, storeLabel, dryRun) {
|
|
175
195
|
console.log(`\nImport ${importerName}: ${filePath}`);
|
|
176
196
|
console.log(` Source entries found: ${result.total}`);
|
|
177
197
|
console.log(` Imported: ${result.imported}`);
|
|
@@ -184,8 +204,8 @@ function importFromFile(targetRoot, args, flags, importOptions, useGlobal, dryRu
|
|
|
184
204
|
console.log('\n (dry run - nothing written)');
|
|
185
205
|
if (result.entries.length > 0) {
|
|
186
206
|
console.log('\n Would import:');
|
|
187
|
-
for (const e of result.entries.slice(0,
|
|
188
|
-
console.log(` - ${e.content.slice(0,
|
|
207
|
+
for (const e of result.entries.slice(0, MAX_ENTRIES_SHOWN)) {
|
|
208
|
+
console.log(` - ${e.content.slice(0, CONTENT_PREVIEW_CHARS)}`);
|
|
189
209
|
}
|
|
190
210
|
if (result.entries.length > 10) {
|
|
191
211
|
console.log(` ... and ${result.entries.length - 10} more`);
|
|
@@ -209,6 +229,18 @@ function importAgentMemories(hippoRoot, useGlobal, dryRun) {
|
|
|
209
229
|
}
|
|
210
230
|
function importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun) {
|
|
211
231
|
const folderPath = String(flags['vault']);
|
|
232
|
+
checkVaultArgs(folderPath, flags, useGlobal);
|
|
233
|
+
const tenantId = resolveTenantId({});
|
|
234
|
+
const vaultOptions = {
|
|
235
|
+
...importOptions,
|
|
236
|
+
tenantId,
|
|
237
|
+
name: flags['name'] ? String(flags['name']) : undefined,
|
|
238
|
+
scope: flags['scope'] ? String(flags['scope']) : undefined,
|
|
239
|
+
};
|
|
240
|
+
const vaultResult = importVault(folderPath, vaultOptions);
|
|
241
|
+
printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun);
|
|
242
|
+
}
|
|
243
|
+
function checkVaultArgs(folderPath, flags, useGlobal) {
|
|
212
244
|
if (!fs.existsSync(folderPath) || !fs.statSync(folderPath).isDirectory()) {
|
|
213
245
|
printError(`Vault folder not found (or not a directory): ${folderPath}`);
|
|
214
246
|
process.exit(1);
|
|
@@ -230,14 +262,8 @@ function importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun) {
|
|
|
230
262
|
printError('hippo import --vault: --scope requires a value (e.g. --scope vault:private:notes).');
|
|
231
263
|
process.exit(1);
|
|
232
264
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
...importOptions,
|
|
236
|
-
tenantId,
|
|
237
|
-
name: flags['name'] ? String(flags['name']) : undefined,
|
|
238
|
-
scope: flags['scope'] ? String(flags['scope']) : undefined,
|
|
239
|
-
};
|
|
240
|
-
const vaultResult = importVault(folderPath, vaultOptions);
|
|
265
|
+
}
|
|
266
|
+
function printVaultSummary(vaultResult, folderPath, hippoRoot, dryRun) {
|
|
241
267
|
console.log(`\nImport Vault: ${folderPath}${dryRun ? ' (dry run - no writes)' : ''}`);
|
|
242
268
|
console.log(` Notes found: ${vaultResult.total}`);
|
|
243
269
|
console.log(` ${dryRun ? 'Would import: ' : 'Imported: '}${vaultResult.imported}`);
|
|
@@ -252,7 +278,7 @@ function importVaultFolder(hippoRoot, flags, importOptions, useGlobal, dryRun) {
|
|
|
252
278
|
// write through api.remember (which never embeds), so backfill them here.
|
|
253
279
|
// Floating promise is deliberate; see the comment at the single-file site.
|
|
254
280
|
if (!dryRun && vaultResult.imported >= 1) {
|
|
255
|
-
void embedAll(hippoRoot).catch(() =>
|
|
281
|
+
void embedAll(hippoRoot).catch((err) => warnBackfillFailed(hippoRoot, 'hippo embed', err));
|
|
256
282
|
}
|
|
257
283
|
}
|
|
258
284
|
// ---------------------------------------------------------------------------
|
|
@@ -275,7 +301,7 @@ function cmdPromote(hippoRoot, id) {
|
|
|
275
301
|
console.log(` Global store: ${getGlobalRoot()}`);
|
|
276
302
|
}
|
|
277
303
|
catch (err) {
|
|
278
|
-
printError(`Failed to promote: ${err
|
|
304
|
+
printError(`Failed to promote: ${errorMessage(err)}`);
|
|
279
305
|
process.exit(1);
|
|
280
306
|
}
|
|
281
307
|
}
|
|
@@ -290,7 +316,7 @@ export function cmdSync(hippoRoot, flags = {}) {
|
|
|
290
316
|
return;
|
|
291
317
|
}
|
|
292
318
|
// v39: other-project rows are skipped by default; secrets always are.
|
|
293
|
-
const includeCrossProject = flags
|
|
319
|
+
const includeCrossProject = flagIsTrue(flags, 'cross-project');
|
|
294
320
|
const count = syncGlobalToLocal(hippoRoot, globalRoot, { includeCrossProject });
|
|
295
321
|
console.log(`Synced ${count} global memories into local project.${includeCrossProject ? '' : ' (other-project rows skipped; use --cross-project to include them)'}`);
|
|
296
322
|
}
|
|
@@ -310,7 +336,7 @@ export async function handlePromote({ hippoRoot, args }) {
|
|
|
310
336
|
console.log(`Promoted ${id} to global store as ${result.globalId}`);
|
|
311
337
|
}
|
|
312
338
|
catch (err) {
|
|
313
|
-
printError(`Failed to promote: ${err
|
|
339
|
+
printError(`Failed to promote: ${errorMessage(err)}`);
|
|
314
340
|
process.exit(1);
|
|
315
341
|
}
|
|
316
342
|
});
|
|
@@ -324,7 +350,7 @@ export function handleShare({ hippoRoot, args, flags }) {
|
|
|
324
350
|
// Auto-share mode
|
|
325
351
|
requireInit(hippoRoot);
|
|
326
352
|
const minScore = parseFloat(String(flags['min-score'] ?? '0.6'));
|
|
327
|
-
const dryRun =
|
|
353
|
+
const dryRun = boolFlag(flags, 'dry-run');
|
|
328
354
|
const results = autoShare(hippoRoot, { minScore, dryRun, tenantId: resolveTenantId({}) });
|
|
329
355
|
if (results.length === 0) {
|
|
330
356
|
console.log('No memories meet the sharing threshold.');
|
|
@@ -333,7 +359,7 @@ export function handleShare({ hippoRoot, args, flags }) {
|
|
|
333
359
|
console.log(`Would share ${results.length} memories:\n`);
|
|
334
360
|
for (const e of results) {
|
|
335
361
|
const score = transferScore(e);
|
|
336
|
-
console.log(` ${e.id} (transfer=${fmt(score)}) ${e.content.slice(0,
|
|
362
|
+
console.log(` ${e.id} (transfer=${fmt(score)}) ${e.content.slice(0, CONTENT_PREVIEW_CHARS)}...`);
|
|
337
363
|
}
|
|
338
364
|
}
|
|
339
365
|
else {
|
|
@@ -345,7 +371,7 @@ export function handleShare({ hippoRoot, args, flags }) {
|
|
|
345
371
|
}
|
|
346
372
|
else if (shareId) {
|
|
347
373
|
requireInit(hippoRoot);
|
|
348
|
-
const force =
|
|
374
|
+
const force = boolFlag(flags, 'force');
|
|
349
375
|
const tenantId = resolveTenantId({});
|
|
350
376
|
const result = shareMemory(hippoRoot, shareId, { force, tenantId });
|
|
351
377
|
if (result) {
|
|
@@ -372,7 +398,7 @@ export function handleShare({ hippoRoot, args, flags }) {
|
|
|
372
398
|
}
|
|
373
399
|
export function handlePeers({ flags }) {
|
|
374
400
|
// Tenant-scoped by default; --all-tenants gives the host-wide view for cross-tenant peer discovery.
|
|
375
|
-
const allTenants = flags
|
|
401
|
+
const allTenants = flagIsTrue(flags, 'all-tenants');
|
|
376
402
|
const tenantScope = allTenants ? undefined : resolveTenantId({});
|
|
377
403
|
const peers = listPeers(undefined, tenantScope);
|
|
378
404
|
if (peers.length === 0) {
|
|
@@ -382,13 +408,13 @@ export function handlePeers({ flags }) {
|
|
|
382
408
|
const scopeLabel = allTenants ? 'global store (all tenants)' : `global store (tenant "${tenantScope}")`;
|
|
383
409
|
console.log(`${peers.length} project${peers.length === 1 ? '' : 's'} contributing to ${scopeLabel}:\n`);
|
|
384
410
|
for (const p of peers) {
|
|
385
|
-
console.log(` ${p.project.padEnd(25)} ${String(p.count).padStart(4)} memories (latest: ${p.latest.slice(0,
|
|
411
|
+
console.log(` ${p.project.padEnd(25)} ${String(p.count).padStart(4)} memories (latest: ${p.latest.slice(0, DATE_PREFIX_CHARS)})`);
|
|
386
412
|
}
|
|
387
413
|
}
|
|
388
414
|
}
|
|
389
415
|
export function handleExport({ hippoRoot, args, flags }) {
|
|
390
416
|
requireInit(hippoRoot);
|
|
391
|
-
const format = flags['format'] || 'json';
|
|
417
|
+
const format = (flags['format'] || 'json');
|
|
392
418
|
const outputPath = args[0] || null;
|
|
393
419
|
const entries = loadAllEntries(hippoRoot, resolveTenantId({}));
|
|
394
420
|
let output;
|
package/dist/cli/usage.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Help text for every verb, keyed like the command table in cli.ts; no command logic lives here.
|
|
2
2
|
import { TAIL_MAX_LINES } from '../support-bundle.js';
|
|
3
|
-
import { DEFAULT_LOCAL_BUMP, DEFAULT_RECALL_BUDGET } from '../search
|
|
3
|
+
import { DEFAULT_LOCAL_BUMP, DEFAULT_RECALL_BUDGET } from '../core/search-types.js';
|
|
4
4
|
import { DEFAULT_ASSEMBLE_BUDGET } from '../api/assemble.js';
|
|
5
5
|
export function printAuditPruneUsage() {
|
|
6
6
|
console.log('hippo audit prune --older-than <Nd> [--dry-run] [--tenant <t>]');
|
|
@@ -663,7 +663,9 @@ export const VERB_USAGE = {
|
|
|
663
663
|
serve: [`
|
|
664
664
|
serve Start the HTTP API server for this store (Ctrl+C stops it)
|
|
665
665
|
--port <n> Port to serve on (default: $HIPPO_PORT or 6789)
|
|
666
|
-
--host <host> Address to bind (default: 127.0.0.1)
|
|
666
|
+
--host <host> Address to bind (default: 127.0.0.1)
|
|
667
|
+
--tls-cert <file> PEM certificate; serve HTTPS only (or $HIPPO_TLS_CERT)
|
|
668
|
+
--tls-key <file> PEM private key for it; give both (or $HIPPO_TLS_KEY)`],
|
|
667
669
|
invalidate: [`
|
|
668
670
|
invalidate "<pattern>" Actively weaken memories matching an old pattern
|
|
669
671
|
(content overlap, or a tag EXACTLY equal to the
|