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/README.md
CHANGED
|
@@ -257,7 +257,7 @@ hippo handoff create \
|
|
|
257
257
|
--summary "Finished schema migration, tests green" \
|
|
258
258
|
--next "Wire handoff injection into context output" \
|
|
259
259
|
--session sess_20260403 \
|
|
260
|
-
--artifact src/db.ts
|
|
260
|
+
--artifact src/db/index.ts
|
|
261
261
|
|
|
262
262
|
hippo handoff latest # show the most recent handoff
|
|
263
263
|
hippo handoff show 3 # show a specific handoff by ID
|
|
@@ -577,7 +577,8 @@ read from the store the token ledger writes to: the project's local store when i
|
|
|
577
577
|
else the global store. Each per-prompt hook call then records one event (session, turn
|
|
578
578
|
number, whether the block was sent, reused, empty or disabled, counts and token totals) and
|
|
579
579
|
one row per candidate memory: emitted, reused or rejected, with the stage and the
|
|
580
|
-
reason it was dropped.
|
|
580
|
+
reason it was dropped. Each accepted `hippo pre-compact` and `hippo compact-resume` call
|
|
581
|
+
records one event too, with no candidate rows. With prompt recall on, recent memories dropped by the quality filter
|
|
581
582
|
are not recorded yet. It holds ids, hashes, counts and reasons only, never prompt or memory
|
|
582
583
|
text; the prompt hash is unsalted, so a very short prompt can be guessed. A ledger failure prints one stderr line and never changes what the hook prints. Rows
|
|
583
584
|
older than 90 days are pruned; at a heavy 300 prompts a day that is about 190 MB per store.
|
|
@@ -783,6 +784,8 @@ hippo watch "npm run build"
|
|
|
783
784
|
| `hippo dashboard` | Open web dashboard at localhost:3333 (memory health by project, and the card board); open the printed URL, which carries a per-start access token |
|
|
784
785
|
| `hippo dashboard --port <n>` | Use custom port |
|
|
785
786
|
| `hippo mcp` | Start MCP server (stdio transport) |
|
|
787
|
+
| `hippo serve` | Start the HTTP API server for this store on `127.0.0.1:6789` (`--port <n>` or `HIPPO_PORT`; `--host <host>`, which off loopback needs `HIPPO_REQUIRE_AUTH=1`) |
|
|
788
|
+
| `hippo serve --tls-cert <file> --tls-key <file>` | Serve HTTPS with that PEM certificate and key (or set `HIPPO_TLS_CERT` and `HIPPO_TLS_KEY`). Without them a network bind still starts, and warns once that API keys and memory text travel in cleartext unless a TLS-terminating proxy sits in front |
|
|
786
789
|
|
|
787
790
|
On `heartbeat`, `block`, `review` and `complete`, a given `--run` is checked against the card's live run and the command is refused, unchanged, if the two do not match.
|
|
788
791
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { type MemoryEntry } from '../memory.js';
|
|
1
|
+
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import { type MemoryEntry } from '../core/memory.js';
|
|
3
3
|
import { type Tally } from './report.js';
|
|
4
|
-
import type { AgentMemoryTool } from '
|
|
4
|
+
import type { AgentMemoryTool } from '../core/agent-memory-tools.js';
|
|
5
5
|
import type { Container } from './types.js';
|
|
6
6
|
export declare const SYNC_ACTOR = "agent-memories";
|
|
7
7
|
export interface StoreSession {
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
// One container's sync in one transaction on the caller's handle: lookup, plan, then every write (plan designs 6 to 8).
|
|
2
|
-
import { appendAuditEvent } from '../audit.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
2
|
+
import { appendAuditEvent } from '../store/audit.js';
|
|
3
|
+
import { withTrialScope, withWriteScope } from '../db/index.js';
|
|
4
|
+
import { deleteDormantRow, dormantSnapshotsBySourcePrefix, insertDormantRow, readDormantSnapshot, replaceDormantEntry } from '../store/dormant.js';
|
|
5
|
+
import { gatedWrite } from '../trust/gated-write.js';
|
|
6
|
+
import { Layer, calculateStrength, createMemory } from '../core/memory.js';
|
|
7
|
+
import { findRejectedValue, rejectionDigest } from '../store/rejection.js';
|
|
8
|
+
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
8
9
|
import { stampOriginProject } from '../store/entry-row.js';
|
|
9
|
-
import { deleteEntryRowInTx, setEntryTagsInTx } from '../store/entry-writes.js';
|
|
10
|
-
import { selectLiveEntriesBySourcePrefix } from '../store/entry-reads.js';
|
|
11
|
-
import { markSummaryDirtyInTx } from '../summary-dirty.js';
|
|
10
|
+
import { deleteEntryRowInTx, renameEntrySourceAndOriginAt, renameEntrySourceAt, setEntryTagsInTx, supersedeEntryAt } from '../store/entry-writes.js';
|
|
11
|
+
import { entryIdTakenAt, selectLiveEntriesBySourcePrefix } from '../store/entry-reads.js';
|
|
12
|
+
import { markSummaryDirtyInTx } from '../store/summary-dirty.js';
|
|
12
13
|
import { itemHash } from './keys.js';
|
|
13
14
|
import { planContainer } from './plan.js';
|
|
14
15
|
import { emptyTally } from './report.js';
|
|
@@ -16,20 +17,8 @@ import { MIN_ITEM_CHARS, itemSource, splitSource, storedText } from './source.js
|
|
|
16
17
|
export const SYNC_ACTOR = 'agent-memories';
|
|
17
18
|
/** Throws SQLITE_BUSY when another writer holds the store past its busy timeout; nothing is written then. */
|
|
18
19
|
export function syncContainer(s, work) {
|
|
19
|
-
|
|
20
|
-
s.
|
|
21
|
-
try {
|
|
22
|
-
const out = new ContainerRun(s, work).run();
|
|
23
|
-
s.db.exec(s.dryRun ? 'ROLLBACK' : 'COMMIT');
|
|
24
|
-
return out;
|
|
25
|
-
}
|
|
26
|
-
catch (err) {
|
|
27
|
-
try {
|
|
28
|
-
s.db.exec('ROLLBACK');
|
|
29
|
-
}
|
|
30
|
-
catch { /* already rolled back; keep the original error */ }
|
|
31
|
-
throw err;
|
|
32
|
-
}
|
|
20
|
+
const run = () => new ContainerRun(s, work).run();
|
|
21
|
+
return s.dryRun ? withTrialScope(s.db, 'sync_container', run) : withWriteScope(s.db, 'sync_container', run);
|
|
33
22
|
}
|
|
34
23
|
/** Design 6's set-aside on the caller's transaction: a pinned row only loses the tag, any other goes dormant, restorable. */
|
|
35
24
|
export function setAsideRow(db, tag, row, why) {
|
|
@@ -110,8 +99,7 @@ class ContainerRun {
|
|
|
110
99
|
continue;
|
|
111
100
|
const source = itemSource(this.w.prefix, key, item.text);
|
|
112
101
|
for (const row of rows) {
|
|
113
|
-
|
|
114
|
-
if (Number(moved.changes ?? 0) === 0)
|
|
102
|
+
if (renameEntrySourceAt(this.s.db, row.tenantId, row.id, row.source, source) === 0)
|
|
115
103
|
continue;
|
|
116
104
|
this.tally.adopted++;
|
|
117
105
|
this.mirror.push({ ...row, source });
|
|
@@ -124,8 +112,7 @@ class ContainerRun {
|
|
|
124
112
|
let moved = 0;
|
|
125
113
|
for (const row of selectLiveEntriesBySourcePrefix(this.s.db, this.s.tenantId, old)) {
|
|
126
114
|
const source = this.w.prefix + row.source.slice(old.length);
|
|
127
|
-
|
|
128
|
-
if (Number(done.changes ?? 0) === 0)
|
|
115
|
+
if (renameEntrySourceAndOriginAt(this.s.db, row.tenantId, row.id, { from: row.source, to: source, origin }) === 0)
|
|
129
116
|
continue;
|
|
130
117
|
moved++;
|
|
131
118
|
this.mirror.push({ ...row, source, origin_project: origin ?? row.origin_project });
|
|
@@ -178,9 +165,7 @@ class ContainerRun {
|
|
|
178
165
|
}
|
|
179
166
|
/** api.supersede's steps on this transaction; false when another writer superseded the row first. */
|
|
180
167
|
supersede(old, newId) {
|
|
181
|
-
|
|
182
|
-
.run(newId, old.id, old.tenantId);
|
|
183
|
-
if (Number(result.changes ?? 0) === 0)
|
|
168
|
+
if (!supersedeEntryAt(this.s.db, old.tenantId, old.id, newId))
|
|
184
169
|
return false;
|
|
185
170
|
if (old.dag_parent_id)
|
|
186
171
|
markSummaryDirtyInTx(this.s.db, old.dag_parent_id, old.tenantId, SYNC_ACTOR);
|
|
@@ -225,7 +210,7 @@ class ContainerRun {
|
|
|
225
210
|
/** A deleted note came back unchanged: its old row returns with its id and history, under the sync's own audit op. */
|
|
226
211
|
restore(key, dormantId) {
|
|
227
212
|
const snap = readDormantSnapshot(this.s.db, this.s.tenantId, dormantId);
|
|
228
|
-
const taken = this.s.db
|
|
213
|
+
const taken = entryIdTakenAt(this.s.db, dormantId);
|
|
229
214
|
if (snap === null || taken) {
|
|
230
215
|
this.write({ key, hash: '', supersedes: [] });
|
|
231
216
|
return;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { type ProjectIdentity } from '../project-identity.js';
|
|
1
|
+
import { type ProjectIdentity } from '../core/project-identity.js';
|
|
2
2
|
import type { Adapter, AdapterContext, Listing } from './types.js';
|
|
3
|
-
/** Claude Code's auto memory folder names for a project: its checkout, which subfolders share, or the folder itself outside a repository. */
|
|
4
|
-
export declare function claudeMemoryFolderNames(projectRoot: string, platform: NodeJS.Platform): Set<string>;
|
|
5
3
|
/** Claude Code's rule: a linked worktree shares its main checkout's folder, or the git folder's when that sits outside a checkout (a bare repository, or --separate-git-dir); any other checkout, a submodule included, keeps its own. */
|
|
6
4
|
export declare function claudeCheckoutRoot(top: string, gitDir: string, common: string): string;
|
|
7
5
|
/** Claude Code's folder name for a path: non-alphanumerics made '-', and a name over 200 characters cut to 200 plus a base-36 hash of the whole path. */
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
// Claude Code's auto memory: frontmatter `.md` notes in a per-project folder, plus the `autoMemoryDirectory` user folder.
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { resolveProjectIdentity } from '../core/project-identity.js';
|
|
5
|
+
import { realpathOrResolve } from '../util/real-path.js';
|
|
6
|
+
import { isStringValue } from '../core/capture-contract.js';
|
|
7
|
+
import { claudeConfigDir } from '../hooks/shared.js';
|
|
7
8
|
import { expandHome, frontmatterField, itemTime, readTextFile, splitFrontmatter } from './files.js';
|
|
8
9
|
import { markdownNotes, readFolderStore, uniqueFolders } from './folder-store.js';
|
|
9
10
|
import { gitLayout } from './git.js';
|
|
11
|
+
import { isJsonObjectLiteral } from '../util/json.js';
|
|
12
|
+
import { errorMessage } from '../util/log.js';
|
|
13
|
+
const NAME_SLUG_MAX_CHARS = 200;
|
|
10
14
|
// Keeps a pinned name from carrying a separator or `..` out of the projects folder.
|
|
11
15
|
const PROJECT_DIR_NAME = /^[A-Za-z0-9_-]{1,64}$/;
|
|
12
16
|
/** Claude Code's auto memory folder names for a project: its checkout, which subfolders share, or the folder itself outside a repository. */
|
|
13
|
-
|
|
17
|
+
function claudeMemoryFolderNames(projectRoot, platform) {
|
|
14
18
|
const roots = [projectRoot, realpathOrResolve(projectRoot)];
|
|
15
19
|
const layout = gitLayout(projectRoot);
|
|
16
20
|
if (layout)
|
|
@@ -34,7 +38,7 @@ export function claudeFolderName(root) {
|
|
|
34
38
|
let hash = 0;
|
|
35
39
|
for (let i = 0; i < full.length; i++)
|
|
36
40
|
hash = ((hash << 5) - hash + full.charCodeAt(i)) | 0;
|
|
37
|
-
return `${name.slice(0,
|
|
41
|
+
return `${name.slice(0, NAME_SLUG_MAX_CHARS)}-${Math.abs(hash).toString(36)}`;
|
|
38
42
|
}
|
|
39
43
|
export const claudeCodeAdapter = {
|
|
40
44
|
tool: 'claude-code',
|
|
@@ -126,10 +130,10 @@ function autoMemoryDirectory(settings, home, warnings) {
|
|
|
126
130
|
json = JSON.parse(file.text);
|
|
127
131
|
}
|
|
128
132
|
catch (err) {
|
|
129
|
-
warnings.push(`${settings}: ${
|
|
133
|
+
warnings.push(`${settings}: ${errorMessage(err)}`);
|
|
130
134
|
return null;
|
|
131
135
|
}
|
|
132
|
-
const value =
|
|
136
|
+
const value = isJsonObjectLiteral(json) ? json.autoMemoryDirectory : undefined;
|
|
133
137
|
if (!isStringValue(value) || value === '')
|
|
134
138
|
return null;
|
|
135
139
|
const dir = expandHome(value, home);
|
|
@@ -4,6 +4,7 @@ import path from 'node:path';
|
|
|
4
4
|
import { readTextFile } from './files.js';
|
|
5
5
|
import { readFolderStore } from './folder-store.js';
|
|
6
6
|
import { gitLayout } from './git.js';
|
|
7
|
+
import { errorMessage } from '../util/log.js';
|
|
7
8
|
const PRODUCTS = ['Code', 'Code - Insiders'];
|
|
8
9
|
const MEMORY_TOOL = ['github.copilot-chat', 'memory-tool', 'memories'];
|
|
9
10
|
/** VS Code's user-data resolution: portable install first, then the app-data override, then the platform default. */
|
|
@@ -48,7 +49,7 @@ function workspaceFolder(file, platform, warnings) {
|
|
|
48
49
|
return fileUriToPath(json.folder, platform);
|
|
49
50
|
}
|
|
50
51
|
catch (err) {
|
|
51
|
-
warnings.push(`${file}: ${
|
|
52
|
+
warnings.push(`${file}: ${errorMessage(err)}`);
|
|
52
53
|
return null;
|
|
53
54
|
}
|
|
54
55
|
}
|
|
@@ -85,7 +86,7 @@ function projectContainers(data, ctx, matches, warnings) {
|
|
|
85
86
|
ids = fs.readdirSync(storage, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name).sort();
|
|
86
87
|
}
|
|
87
88
|
catch (err) {
|
|
88
|
-
warnings.push(`${storage}: ${
|
|
89
|
+
warnings.push(`${storage}: ${errorMessage(err)}`);
|
|
89
90
|
return [];
|
|
90
91
|
}
|
|
91
92
|
const found = [];
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Read-only file access shared by the adapters: size, binary and failure checks live in one place.
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
+
import { errorMessage } from '../util/log.js';
|
|
4
5
|
export const MAX_ITEM_BYTES = 256 * 1024;
|
|
5
6
|
const MAX_DEPTH = 8;
|
|
6
7
|
/** A file's text, or why it was skipped: empty, too big, holds a NUL byte (not text), or unreadable. */
|
|
@@ -20,7 +21,7 @@ export function readTextFile(file) {
|
|
|
20
21
|
return { ok: true, text: buf.toString('utf8'), mtimeMs: stat.mtimeMs };
|
|
21
22
|
}
|
|
22
23
|
catch (err) {
|
|
23
|
-
return { ok: false, reason: `${file}: ${
|
|
24
|
+
return { ok: false, reason: `${file}: ${errorMessage(err)}` };
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
/** Files in a folder as '/'-separated relative paths, sorted; dot entries skipped, symlinked folders not followed. */
|
|
@@ -35,7 +36,7 @@ export function listFiles(dir, opts) {
|
|
|
35
36
|
return { status: 'ok', files: files.sort() };
|
|
36
37
|
}
|
|
37
38
|
catch (err) {
|
|
38
|
-
return { status: 'unreadable', reason: `${dir}: ${
|
|
39
|
+
return { status: 'unreadable', reason: `${dir}: ${errorMessage(err)}` };
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
function walk(root, rel, depthLeft, out) {
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
// Gemini CLI: the "Gemini Added Memories" section of GEMINI.md, and the auto-memory folder that projects.json names.
|
|
2
2
|
import fs from 'node:fs';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
-
import { isStringValue } from '../capture-contract.js';
|
|
5
|
-
import { isJsonObject } from '../hooks/shared.js';
|
|
4
|
+
import { isStringValue } from '../core/capture-contract.js';
|
|
6
5
|
import { readTextFile, splitFrontmatter } from './files.js';
|
|
7
6
|
import { markdownNotes, readFolderStore } from './folder-store.js';
|
|
8
7
|
import { gitLayout } from './git.js';
|
|
9
8
|
import { textItemKeys } from './keys.js';
|
|
10
9
|
import { splitMarkdownItems } from './markdown.js';
|
|
10
|
+
import { isJsonObjectLiteral } from '../util/json.js';
|
|
11
|
+
import { errorMessage } from '../util/log.js';
|
|
11
12
|
const SECTION = 'gemini added memories';
|
|
12
13
|
export const geminiAdapter = {
|
|
13
14
|
tool: 'gemini',
|
|
@@ -58,7 +59,7 @@ function projectSlug(ctx, projectRoot, home, warnings) {
|
|
|
58
59
|
projects = parseIndex(read.text);
|
|
59
60
|
}
|
|
60
61
|
catch (err) {
|
|
61
|
-
warnings.push(`${index}: ${
|
|
62
|
+
warnings.push(`${index}: ${errorMessage(err)}`);
|
|
62
63
|
return null;
|
|
63
64
|
}
|
|
64
65
|
// The git top level is only asked for when the folder itself has no entry, since it spawns git.
|
|
@@ -74,8 +75,8 @@ function projectSlug(ctx, projectRoot, home, warnings) {
|
|
|
74
75
|
function parseIndex(text) {
|
|
75
76
|
// SAFETY: JSON.parse yields JSON; the object checks below decide what is used.
|
|
76
77
|
const data = JSON.parse(text);
|
|
77
|
-
const projects =
|
|
78
|
-
if (!
|
|
78
|
+
const projects = isJsonObjectLiteral(data) ? data.projects : undefined;
|
|
79
|
+
if (!isJsonObjectLiteral(projects))
|
|
79
80
|
throw new Error('expected { "projects": { "<absolute path>": "<slug>" } }');
|
|
80
81
|
return projects;
|
|
81
82
|
}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
// Hashes and keys for imported items, shared by the sync and the single-file adapters so they never drift apart.
|
|
2
2
|
import { createHash } from 'node:crypto';
|
|
3
|
+
import { FINGERPRINT_HEX_CHARS, ID_SUFFIX_CHARS } from '../util/token-text.js';
|
|
3
4
|
export function sha256Hex(text) {
|
|
4
5
|
return createHash('sha256').update(text.replace(/\r\n/g, '\n'), 'utf8').digest('hex');
|
|
5
6
|
}
|
|
6
7
|
/** The `#<hash>` part of a source: 16 hex of the full text, so an edit past the content cap is still seen. */
|
|
7
8
|
export function itemHash(text) {
|
|
8
|
-
return sha256Hex(text).slice(0,
|
|
9
|
+
return sha256Hex(text).slice(0, FINGERPRINT_HEX_CHARS);
|
|
9
10
|
}
|
|
10
11
|
/** Keys for a single-file store's items: `<heading slug>/<12 hex of the text>`, `~2`, `~3` on repeats. */
|
|
11
12
|
export function textItemKeys(items) {
|
|
12
13
|
const seen = new Map();
|
|
13
14
|
return items.map(({ headingSlug, text }) => {
|
|
14
|
-
const base = `${headingSlug}/${sha256Hex(text).slice(0,
|
|
15
|
+
const base = `${headingSlug}/${sha256Hex(text).slice(0, ID_SUFFIX_CHARS)}`;
|
|
15
16
|
const n = (seen.get(base) ?? 0) + 1;
|
|
16
17
|
seen.set(base, n);
|
|
17
18
|
return n === 1 ? base : `${base}~${n}`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { DatabaseSyncLike } from '../db.js';
|
|
2
|
-
import type { MemoryEntry } from '../memory.js';
|
|
1
|
+
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
|
+
import type { MemoryEntry } from '../core/memory.js';
|
|
3
3
|
import type { Listing } from './types.js';
|
|
4
4
|
export declare const LEGACY_SOURCE_PREFIX = "claude-memory:";
|
|
5
5
|
export interface ContainerLegacy {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Rows the old Claude import wrote (`claude-memory:<file>`), taken over by the notes they came from (plan design 10).
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { duplicateKey } from '../same-text.js';
|
|
4
|
-
import { maskEmails } from '../secret-detect.js';
|
|
3
|
+
import { duplicateKey } from '../util/same-text.js';
|
|
4
|
+
import { maskEmails } from '../util/secret-detect.js';
|
|
5
5
|
import { selectLiveEntriesBySourcePrefix } from '../store/entry-reads.js';
|
|
6
6
|
import { matchLegacy } from './plan.js';
|
|
7
7
|
import { MIN_ITEM_CHARS, storedText } from './source.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// What a sync did, per tool, and the one line a command prints about it (plan design 11).
|
|
2
|
-
import { AGENT_MEMORY_TOOLS } from '
|
|
2
|
+
import { AGENT_MEMORY_TOOLS } from '../core/agent-memory-tools.js';
|
|
3
3
|
export function emptyTally() {
|
|
4
4
|
return {
|
|
5
5
|
imported: 0, replaced: 0, restored: 0, setAside: 0, untagged: 0, unchanged: 0, adopted: 0, renamed: 0, collapsed: 0, retagged: 0,
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
// An imported row's source, `agent-memory:<tool>:<container>/<item>#<hash>`, and the stored text: plan design 3 and 4.
|
|
2
|
-
import { realpathOrResolve } from '../
|
|
3
|
-
import { truncateCodePointSafe } from '../transcript-tail.js';
|
|
4
|
-
import { maskEmails } from '../secret-detect.js';
|
|
2
|
+
import { realpathOrResolve } from '../util/real-path.js';
|
|
3
|
+
import { truncateCodePointSafe } from '../util/transcript-tail.js';
|
|
4
|
+
import { maskEmails } from '../util/secret-detect.js';
|
|
5
5
|
import { itemHash, sha256Hex } from './keys.js';
|
|
6
|
-
import { toolSourcePrefix } from '
|
|
6
|
+
import { toolSourcePrefix } from '../core/agent-memory-tools.js';
|
|
7
|
+
import { ID_SUFFIX_CHARS } from '../util/token-text.js';
|
|
7
8
|
export const CONTENT_CAP = 1500;
|
|
8
9
|
export const MIN_ITEM_CHARS = 10;
|
|
9
10
|
/** `p-`/`u-` and 12 hex of the real path, so no user path reaches a row; `origin` parts projects sharing a folder in the global store. */
|
|
10
11
|
export function containerId(dir, scope, platform, origin = '') {
|
|
11
12
|
const real = realpathOrResolve(dir).replace(/\\/g, '/');
|
|
12
13
|
const folder = platform === 'win32' ? real.toLowerCase() : real;
|
|
13
|
-
return `${scope === 'project' ? 'p' : 'u'}-${sha256Hex(origin === '' ? folder : `${folder}\n${origin}`).slice(0,
|
|
14
|
+
return `${scope === 'project' ? 'p' : 'u'}-${sha256Hex(origin === '' ? folder : `${folder}\n${origin}`).slice(0, ID_SUFFIX_CHARS)}`;
|
|
14
15
|
}
|
|
15
16
|
export function containerPrefix(tool, container) {
|
|
16
17
|
return `${toolSourcePrefix(tool)}${container}/`;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ImportReport } from './report.js';
|
|
2
|
-
import { type ToolId } from '
|
|
2
|
+
import { type ToolId } from '../core/agent-memory-tools.js';
|
|
3
3
|
import type { Adapter } from './types.js';
|
|
4
4
|
export declare const ADAPTERS: readonly Adapter[];
|
|
5
5
|
/** Overrides config because `hippo init` creates the store in the same command that imports (plan design 11). */
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
// Runs the adapters and routes each container to its store: the project pass, the user pass and their call sites (plan designs 2, 8, 11).
|
|
2
|
-
import { processEnv } from '../env.js';
|
|
2
|
+
import { processEnv } from '../util/env.js';
|
|
3
3
|
import fs from 'node:fs';
|
|
4
4
|
import os from 'node:os';
|
|
5
5
|
import path from 'node:path';
|
|
6
|
-
import { errorMessage } from '../log.js';
|
|
7
|
-
import { loadConfig } from '../config.js';
|
|
8
|
-
import { closeHippoDb, isSqliteBusy, openHippoDb, outsideRequestStores } from '../db.js';
|
|
9
|
-
import { namesFoldedInto } from '../project-merge.js';
|
|
10
|
-
import { isGlobalStoreRoot,
|
|
11
|
-
import { duplicateKey, heldTextKeys } from '../same-text.js';
|
|
6
|
+
import { errorMessage } from '../util/log.js';
|
|
7
|
+
import { loadConfig } from '../core/config.js';
|
|
8
|
+
import { closeHippoDb, isSqliteBusy, openHippoDb, outsideRequestStores, withWriteScope } from '../db/index.js';
|
|
9
|
+
import { namesFoldedInto } from '../sharing/project-merge.js';
|
|
10
|
+
import { isGlobalStoreRoot, projectNames, resolveGlobalRootDir, resolveProjectIdentity } from '../core/project-identity.js';
|
|
11
|
+
import { duplicateKey, heldTextKeys } from '../util/same-text.js';
|
|
12
12
|
import { removeEntryMirrors } from '../store/mirrors.js';
|
|
13
13
|
import { initStore, isInitialized } from '../store/open.js';
|
|
14
14
|
import { writeEntryMirrors } from '../store/entry-writes.js';
|
|
15
|
-
import { selectLiveEntriesBySourcePrefix } from '../store/entry-reads.js';
|
|
15
|
+
import { selectLiveEntriesBySourcePrefix, selectRowsOutsideSourcePrefixAt } from '../store/entry-reads.js';
|
|
16
16
|
import { updateStats } from '../store/index-and-stats.js';
|
|
17
|
-
import { resolveTenantId } from '../tenant.js';
|
|
17
|
+
import { resolveTenantId } from '../store/tenant.js';
|
|
18
18
|
import { setAsideRow, syncContainer } from './apply.js';
|
|
19
19
|
import { claudeCodeAdapter, claudeTranscriptListing, transcriptNotesProject } from './claude-code.js';
|
|
20
20
|
import { codexAdapter } from './codex.js';
|
|
@@ -25,7 +25,7 @@ import { openclawAdapter } from './openclaw.js';
|
|
|
25
25
|
import { qwenCodeAdapter } from './qwen-code.js';
|
|
26
26
|
import { addTally, emptyReport, mergeReports, toolReport } from './report.js';
|
|
27
27
|
import { containerId, containerPrefix, splitSource } from './source.js';
|
|
28
|
-
import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TOOLS, isToolId, toolSourcePrefix } from '
|
|
28
|
+
import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TOOLS, isToolId, toolSourcePrefix } from '../core/agent-memory-tools.js';
|
|
29
29
|
export const ADAPTERS = [claudeCodeAdapter, codexAdapter, geminiAdapter, copilotAdapter, openclawAdapter, qwenCodeAdapter];
|
|
30
30
|
/** Overrides config because `hippo init` creates the store in the same command that imports (plan design 11). */
|
|
31
31
|
export const TOOLS_ENV = 'HIPPO_AGENT_MEMORY_TOOLS';
|
|
@@ -204,7 +204,7 @@ function syncStore(pass, listings, store, opts, report) {
|
|
|
204
204
|
out.tally.unreadable++;
|
|
205
205
|
continue;
|
|
206
206
|
}
|
|
207
|
-
const work = containerWork(tool, container, opts.machine.platform, legacy, partition ?? '', earlier);
|
|
207
|
+
const work = containerWork(tool, container, { platform: opts.machine.platform, legacy, origin: partition ?? '', earlier });
|
|
208
208
|
const outcome = syncOne(session, work, out, report);
|
|
209
209
|
if (outcome === null)
|
|
210
210
|
continue;
|
|
@@ -214,7 +214,9 @@ function syncStore(pass, listings, store, opts, report) {
|
|
|
214
214
|
afterCommit(store.root, outcome, report);
|
|
215
215
|
}
|
|
216
216
|
if (session.dryRun)
|
|
217
|
-
out.unlisted += unlistedRows(store.db, tenantId,
|
|
217
|
+
out.unlisted += unlistedRows(store.db, tenantId, {
|
|
218
|
+
tool, scope: pass.scope, listing, platform: opts.machine.platform, partition: partition === null ? null : [partition, ...earlier],
|
|
219
|
+
});
|
|
218
220
|
}
|
|
219
221
|
if (remembered > 0 && !session.dryRun)
|
|
220
222
|
bumpRemembered(store.root, remembered, report);
|
|
@@ -225,7 +227,8 @@ function earlierNames(db, tenantId, id, legacyOrigins) {
|
|
|
225
227
|
const names = [id, ...legacyOrigins];
|
|
226
228
|
return [...legacyOrigins, ...namesFoldedInto(db, tenantId, names)].filter((n) => n !== '' && n !== id);
|
|
227
229
|
}
|
|
228
|
-
function containerWork(tool, container,
|
|
230
|
+
function containerWork(tool, container, options) {
|
|
231
|
+
const { platform, legacy, origin, earlier } = options;
|
|
229
232
|
const none = new Map();
|
|
230
233
|
const own = tool.id === 'claude-code' ? legacy?.byContainer.get(container.path) : undefined;
|
|
231
234
|
const prefixOf = (name) => containerPrefix(tool.id, containerId(container.path, container.scope, platform, name));
|
|
@@ -286,15 +289,11 @@ function duplicateCheck(store, tenantId, origins, adopted) {
|
|
|
286
289
|
};
|
|
287
290
|
}
|
|
288
291
|
function otherPathKeys(store, tenantId, origins, adopted) {
|
|
289
|
-
const
|
|
290
|
-
const params = store.global ? [tenantId, AGENT_MEMORY_SOURCE_PREFIX, ...origins] : [tenantId, AGENT_MEMORY_SOURCE_PREFIX];
|
|
291
|
-
// SAFETY: the SELECT names the three columns of the row type.
|
|
292
|
-
const rows = store.db.prepare(`SELECT id, content, source FROM memories
|
|
293
|
-
WHERE tenant_id = ? AND superseded_by IS NULL AND substr(source, 1, ${AGENT_MEMORY_SOURCE_PREFIX.length}) != ?${visible}`).all(...params);
|
|
292
|
+
const rows = selectRowsOutsideSourcePrefixAt(store.db, tenantId, AGENT_MEMORY_SOURCE_PREFIX, store.global ? origins : null);
|
|
294
293
|
return new Set(rows.filter((r) => !adopted.has(r.id)).flatMap(heldTextKeys));
|
|
295
294
|
}
|
|
296
|
-
|
|
297
|
-
|
|
295
|
+
function unlistedRows(db, tenantId, options) {
|
|
296
|
+
const { tool, scope, listing, platform, partition } = options;
|
|
298
297
|
const listed = listing.containers.flatMap((c) => (partition ?? ['']).map((name) => containerPrefix(tool.id, containerId(c.path, c.scope, platform, name))));
|
|
299
298
|
return selectLiveEntriesBySourcePrefix(db, tenantId, `${toolSourcePrefix(tool.id)}${scope === 'project' ? 'p' : 'u'}-`)
|
|
300
299
|
.filter((row) => row.tags.includes(tool.tag) && !listed.some((p) => row.source.startsWith(p)))
|
|
@@ -314,7 +313,7 @@ function handOver(synced, projectRoot, opts, report) {
|
|
|
314
313
|
const names = projectNames(resolveProjectIdentity(projectRoot));
|
|
315
314
|
const origins = [...new Set([...names, ...namesFoldedInto(db, tenantId, names), ''])];
|
|
316
315
|
for (const work of synced)
|
|
317
|
-
handOverContainer(db, globalRoot, tenantId, work, origins, opts.machine.platform, report);
|
|
316
|
+
handOverContainer(db, globalRoot, tenantId, work, { origins, platform: opts.machine.platform, report });
|
|
318
317
|
}
|
|
319
318
|
catch (err) {
|
|
320
319
|
report.warnings.push(`global copies not handed over: ${isSqliteBusy(err) ? 'the global store was busy' : errorMessage(err)}`);
|
|
@@ -324,13 +323,13 @@ function handOver(synced, projectRoot, opts, report) {
|
|
|
324
323
|
closeHippoDb(db);
|
|
325
324
|
}
|
|
326
325
|
}
|
|
327
|
-
function handOverContainer(db, root, tenantId, work,
|
|
326
|
+
function handOverContainer(db, root, tenantId, work, options) {
|
|
327
|
+
const { origins, platform, report } = options;
|
|
328
328
|
// A note the local pass could not read has no local row yet, so its global copy stays until it does.
|
|
329
329
|
const unread = new Set(work.container.skipped);
|
|
330
330
|
const mirror = [];
|
|
331
331
|
const purge = [];
|
|
332
|
-
db
|
|
333
|
-
try {
|
|
332
|
+
withWriteScope(db, 'hand_over_container', () => {
|
|
334
333
|
for (const origin of origins) {
|
|
335
334
|
const prefix = containerPrefix(work.tool.id, containerId(work.container.path, work.container.scope, platform, origin));
|
|
336
335
|
for (const row of selectLiveEntriesBySourcePrefix(db, tenantId, prefix)) {
|
|
@@ -343,15 +342,7 @@ function handOverContainer(db, root, tenantId, work, origins, platform, report)
|
|
|
343
342
|
purge.push(result.id);
|
|
344
343
|
}
|
|
345
344
|
}
|
|
346
|
-
|
|
347
|
-
}
|
|
348
|
-
catch (err) {
|
|
349
|
-
try {
|
|
350
|
-
db.exec('ROLLBACK');
|
|
351
|
-
}
|
|
352
|
-
catch { /* already rolled back; keep the original error */ }
|
|
353
|
-
throw err;
|
|
354
|
-
}
|
|
345
|
+
});
|
|
355
346
|
toolReport(report, work.tool.id).tally.handedOver += mirror.length + purge.length;
|
|
356
347
|
afterCommit(root, { mirror, purge }, report);
|
|
357
348
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ToolId } from '
|
|
1
|
+
import type { ToolId } from '../core/agent-memory-tools.js';
|
|
2
2
|
export type Scope = 'project' | 'user';
|
|
3
3
|
/** All an adapter may know about the machine; it reads nothing else from the process, so tests can fake it all. */
|
|
4
4
|
export interface AdapterContext {
|
package/dist/api/assemble.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CallerProject } from '
|
|
1
|
+
import type { CallerProject } from './prompt-hook.js';
|
|
2
2
|
import type { Context } from './types.js';
|
|
3
3
|
export declare const DEFAULT_ASSEMBLE_BUDGET = 4000;
|
|
4
4
|
export interface AssembleOpts {
|
|
@@ -88,5 +88,5 @@ export interface AssembleResult {
|
|
|
88
88
|
* - no raws exist for the session
|
|
89
89
|
* - all rows fail the scope/tenant filter
|
|
90
90
|
*/
|
|
91
|
-
export declare function assemble(ctx: Context, sessionId: string, opts?: AssembleOpts): AssembleResult
|
|
91
|
+
export declare function assemble(ctx: Context, sessionId: string, opts?: AssembleOpts): Promise<AssembleResult>;
|
|
92
92
|
//# sourceMappingURL=assemble.d.ts.map
|