hippo-memory 1.70.0 → 1.71.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 +1 -1
- package/dist/agent-memories/claude-code.d.ts +4 -2
- package/dist/agent-memories/claude-code.js +14 -5
- package/dist/agent-memories/files.js +23 -12
- package/dist/agent-memories/markdown.d.ts +1 -3
- package/dist/agent-memories/markdown.js +1 -3
- package/dist/agent-memories/report.js +2 -1
- package/dist/agent-memories/sync.d.ts +4 -2
- package/dist/agent-memories/sync.js +10 -5
- package/dist/api/assemble.d.ts +7 -44
- package/dist/api/assemble.js +2 -22
- package/dist/api/audit.d.ts +5 -1
- package/dist/api/audit.js +9 -1
- package/dist/api/auth.d.ts +13 -22
- package/dist/api/auth.js +34 -24
- package/dist/api/auto-sleep.js +2 -2
- package/dist/api/availability.d.ts +2 -15
- package/dist/api/availability.js +2 -15
- package/dist/api/context-select.js +3 -4
- package/dist/api/context-types.d.ts +10 -35
- package/dist/api/context.d.ts +5 -22
- package/dist/api/context.js +21 -38
- package/dist/api/dormant.d.ts +5 -21
- package/dist/api/dormant.js +7 -26
- package/dist/api/drill-down.d.ts +7 -46
- package/dist/api/drill-down.js +5 -26
- package/dist/api/forget.d.ts +5 -24
- package/dist/api/forget.js +5 -28
- package/dist/api/graph.d.ts +8 -0
- package/dist/api/graph.js +7 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/instruction-detect.js +16 -5
- package/dist/api/ledger-db.d.ts +2 -1
- package/dist/api/ledger-db.js +5 -3
- package/dist/api/memories.d.ts +5 -0
- package/dist/api/memories.js +7 -0
- package/dist/api/objects.d.ts +9 -0
- package/dist/api/objects.js +11 -0
- package/dist/api/on-store.js +5 -3
- package/dist/api/predictions.d.ts +9 -0
- package/dist/api/predictions.js +18 -0
- package/dist/api/promote.d.ts +13 -17
- package/dist/api/promote.js +11 -19
- package/dist/api/prompt-hook.d.ts +4 -4
- package/dist/api/prompt-hook.js +10 -9
- package/dist/api/recall-cli.d.ts +55 -0
- package/dist/api/recall-cli.js +94 -0
- package/dist/api/recall-core.js +14 -6
- package/dist/api/recall-finish.d.ts +53 -0
- package/dist/api/recall-finish.js +30 -0
- package/dist/api/recall-history.d.ts +17 -84
- package/dist/api/recall-history.js +15 -88
- package/dist/api/recall-pipeline.d.ts +2 -3
- package/dist/api/recall-pipeline.js +16 -9
- package/dist/api/recall-types.d.ts +64 -304
- package/dist/api/recall.d.ts +5 -33
- package/dist/api/recall.js +59 -60
- package/dist/api/refine.d.ts +7 -0
- package/dist/api/refine.js +10 -0
- package/dist/api/remember-local.d.ts +57 -0
- package/dist/api/remember-local.js +90 -0
- package/dist/api/remember.d.ts +18 -1
- package/dist/api/remember.js +13 -1
- package/dist/api/sleep-run.d.ts +1 -3
- package/dist/api/sleep-run.js +17 -21
- package/dist/api/sleep.d.ts +9 -28
- package/dist/api/tokens.d.ts +3 -10
- package/dist/api/tokens.js +3 -10
- package/dist/api/types.d.ts +6 -29
- package/dist/api/types.js +4 -22
- package/dist/capture/command.d.ts +4 -12
- package/dist/capture/command.js +6 -22
- package/dist/capture/compact.d.ts +4 -15
- package/dist/capture/compact.js +16 -25
- package/dist/capture/compaction-record.js +101 -69
- package/dist/capture/compaction-spool.d.ts +1 -1
- package/dist/capture/compaction-spool.js +1 -1
- package/dist/capture/session-digest.d.ts +1 -1
- package/dist/capture/session-digest.js +13 -7
- package/dist/capture/transcript.d.ts +2 -10
- package/dist/capture/transcript.js +4 -18
- package/dist/cli/api-context.d.ts +3 -0
- package/dist/cli/api-context.js +6 -0
- package/dist/cli/audit-prune.d.ts +6 -39
- package/dist/cli/audit-prune.js +6 -39
- package/dist/cli/audit.d.ts +1 -1
- package/dist/cli/audit.js +33 -34
- package/dist/cli/auth.d.ts +2 -2
- package/dist/cli/auth.js +57 -39
- package/dist/cli/briefs.d.ts +4 -4
- package/dist/cli/briefs.js +18 -22
- package/dist/cli/card.d.ts +2 -2
- package/dist/cli/card.js +31 -32
- package/dist/cli/client.d.ts +7 -27
- package/dist/cli/client.js +24 -43
- package/dist/cli/compact-resume-payload.js +3 -2
- package/dist/cli/context.d.ts +1 -2
- package/dist/cli/context.js +12 -8
- package/dist/cli/continuity.d.ts +6 -6
- package/dist/cli/continuity.js +62 -64
- package/dist/cli/correction-latency.d.ts +2 -14
- package/dist/cli/correction-latency.js +2 -14
- package/dist/cli/curate.d.ts +13 -17
- package/dist/cli/curate.js +68 -92
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +33 -27
- package/dist/cli/decisions.d.ts +4 -4
- package/dist/cli/decisions.js +33 -47
- package/dist/cli/eval.js +15 -13
- package/dist/cli/exit.d.ts +6 -0
- package/dist/cli/exit.js +11 -0
- package/dist/cli/explain.d.ts +1 -2
- package/dist/cli/explain.js +6 -4
- package/dist/cli/flag-values.d.ts +6 -1
- package/dist/cli/flag-values.js +27 -10
- package/dist/cli/flags.d.ts +1 -0
- package/dist/cli/flags.js +1 -1
- package/dist/cli/github.d.ts +14 -0
- package/dist/{connectors/github/cli-impl.js → cli/github.js} +43 -71
- package/dist/cli/goals.d.ts +2 -2
- package/dist/cli/goals.js +46 -50
- package/dist/cli/hook-runtime.d.ts +9 -27
- package/dist/cli/hook-runtime.js +15 -31
- package/dist/cli/init.d.ts +2 -2
- package/dist/cli/init.js +6 -12
- package/dist/cli/install-steps.js +3 -12
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +3 -0
- package/dist/cli/maintenance.d.ts +4 -4
- package/dist/cli/maintenance.js +14 -19
- package/dist/cli/object-verbs.js +4 -3
- package/dist/cli/owner-validation.d.ts +5 -28
- package/dist/cli/owner-validation.js +5 -28
- package/dist/cli/playbooks.d.ts +4 -4
- package/dist/cli/playbooks.js +23 -28
- package/dist/cli/print.d.ts +2 -5
- package/dist/cli/print.js +1 -4
- package/dist/cli/projects.d.ts +2 -2
- package/dist/cli/projects.js +1 -3
- package/dist/cli/provenance-coverage.d.ts +2 -6
- package/dist/cli/provenance-coverage.js +2 -6
- package/dist/cli/quality-repair-once.js +2 -2
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +55 -131
- package/dist/cli/refine-llm.d.ts +5 -31
- package/dist/cli/refine-llm.js +9 -36
- package/dist/cli/remember.d.ts +3 -3
- package/dist/cli/remember.js +122 -180
- package/dist/cli/scheduler.d.ts +2 -17
- package/dist/cli/scheduler.js +12 -18
- package/dist/cli/serve.js +21 -12
- package/dist/cli/session-hooks.d.ts +10 -18
- package/dist/cli/session-hooks.js +112 -113
- package/dist/cli/setup.d.ts +4 -4
- package/dist/cli/setup.js +19 -21
- package/dist/cli/shared.d.ts +9 -23
- package/dist/cli/shared.js +9 -32
- package/dist/cli/slack.d.ts +2 -2
- package/dist/cli/slack.js +19 -23
- package/dist/cli/sleep.d.ts +3 -2
- package/dist/cli/sleep.js +15 -16
- package/dist/cli/status.d.ts +9 -12
- package/dist/cli/status.js +55 -98
- package/dist/cli/stdin.d.ts +4 -6
- package/dist/cli/stdin.js +2 -3
- package/dist/cli/transfer.d.ts +9 -9
- package/dist/cli/transfer.js +66 -89
- package/dist/cli/usage.js +11 -5
- package/dist/cli.d.ts +66 -448
- package/dist/cli.js +87 -263
- package/dist/connectors/github/backfill.d.ts +5 -25
- package/dist/connectors/github/backfill.js +14 -49
- package/dist/connectors/github/deletion.d.ts +4 -18
- package/dist/connectors/github/deletion.js +2 -15
- package/dist/connectors/github/dlq.d.ts +8 -33
- package/dist/connectors/github/dlq.js +12 -29
- package/dist/connectors/github/ingest.d.ts +2 -6
- package/dist/connectors/github/ingest.js +4 -10
- package/dist/connectors/github/octokit-client.d.ts +4 -16
- package/dist/connectors/github/octokit-client.js +27 -24
- package/dist/connectors/github/ratelimit.d.ts +3 -14
- package/dist/connectors/github/ratelimit.js +3 -14
- package/dist/connectors/github/scope.d.ts +3 -5
- package/dist/connectors/github/scope.js +3 -5
- package/dist/connectors/github/signature.d.ts +4 -26
- package/dist/connectors/github/signature.js +4 -26
- package/dist/connectors/github/tenant-routing.d.ts +2 -24
- package/dist/connectors/github/tenant-routing.js +4 -26
- package/dist/connectors/github/transform.js +2 -16
- package/dist/connectors/github/types.d.ts +3 -15
- package/dist/connectors/github/types.js +2 -9
- package/dist/connectors/github/webhook.d.ts +2 -16
- package/dist/connectors/github/webhook.js +6 -22
- package/dist/connectors/slack/backfill.d.ts +4 -17
- package/dist/connectors/slack/backfill.js +4 -13
- package/dist/connectors/slack/dlq.d.ts +2 -19
- package/dist/connectors/slack/dlq.js +2 -19
- package/dist/connectors/slack/ingest.d.ts +2 -3
- package/dist/connectors/slack/ingest.js +2 -3
- package/dist/connectors/slack/scope.d.ts +2 -8
- package/dist/connectors/slack/scope.js +2 -8
- package/dist/connectors/slack/signature.d.ts +1 -6
- package/dist/connectors/slack/tenant-routing.d.ts +2 -19
- package/dist/connectors/slack/tenant-routing.js +2 -21
- package/dist/connectors/slack/transform.d.ts +2 -18
- package/dist/connectors/slack/transform.js +2 -18
- package/dist/connectors/slack/types.d.ts +3 -9
- package/dist/connectors/slack/types.js +2 -4
- package/dist/connectors/slack/web-client.js +33 -27
- package/dist/connectors/slack/webhook.d.ts +2 -19
- package/dist/connectors/slack/webhook.js +5 -26
- package/dist/connectors/slack/workspaces.d.ts +4 -24
- package/dist/connectors/slack/workspaces.js +4 -24
- package/dist/consolidate/conflicts.js +6 -14
- package/dist/consolidate/dag-summary.d.ts +8 -0
- package/dist/consolidate/dag-summary.js +41 -0
- package/dist/consolidate/dag.d.ts +5 -28
- package/dist/consolidate/dag.js +14 -75
- package/dist/consolidate/decay.js +7 -19
- package/dist/consolidate/dedupe.d.ts +6 -52
- package/dist/consolidate/dedupe.js +13 -71
- package/dist/consolidate/flush-units.d.ts +3 -4
- package/dist/consolidate/flush-units.js +3 -3
- package/dist/consolidate/half-life-migration.d.ts +3 -26
- package/dist/consolidate/half-life-migration.js +11 -28
- package/dist/consolidate/llm-passes.js +4 -21
- package/dist/consolidate/memory-value-weights.d.ts +2 -13
- package/dist/consolidate/memory-value-weights.js +2 -13
- package/dist/consolidate/memory-value.d.ts +11 -84
- package/dist/consolidate/memory-value.js +16 -104
- package/dist/consolidate/merge.js +10 -31
- package/dist/consolidate/merged-row.js +2 -1
- package/dist/consolidate/physics-pass.js +1 -3
- package/dist/consolidate/replay.d.ts +6 -38
- package/dist/consolidate/replay.js +14 -52
- package/dist/consolidate/run.js +1 -1
- package/dist/consolidate/sleep.d.ts +1 -8
- package/dist/consolidate/sleep.js +5 -17
- package/dist/consolidate/trace.d.ts +3 -18
- package/dist/consolidate/trace.js +3 -18
- package/dist/consolidate/traces.js +6 -22
- package/dist/core/ablation.d.ts +4 -91
- package/dist/core/ablation.js +4 -91
- package/dist/core/ambient.d.ts +1 -8
- package/dist/core/ambient.js +1 -8
- package/dist/core/capture-contract.d.ts +4 -2
- package/dist/core/capture-contract.js +4 -2
- package/dist/core/card.d.ts +4 -1
- package/dist/core/card.js +8 -0
- package/dist/core/compare.d.ts +11 -67
- package/dist/core/compare.js +9 -63
- package/dist/core/config.d.ts +10 -24
- package/dist/core/config.js +13 -14
- package/dist/core/handoff.d.ts +1 -7
- package/dist/core/handoff.js +1 -7
- package/dist/core/memory-quality.js +1 -1
- package/dist/core/memory.d.ts +41 -164
- package/dist/core/memory.js +51 -221
- package/dist/core/package-root.d.ts +3 -0
- package/dist/core/package-root.js +5 -0
- package/dist/core/physics-config.d.ts +1 -4
- package/dist/core/physics-config.js +3 -8
- package/dist/core/physics.d.ts +15 -61
- package/dist/core/physics.js +59 -122
- package/dist/core/project-identity.d.ts +17 -58
- package/dist/core/project-identity.js +17 -38
- package/dist/core/project-remote.js +13 -2
- package/dist/core/raw-append-only.d.ts +5 -0
- package/dist/core/raw-append-only.js +7 -0
- package/dist/core/salience.d.ts +1 -7
- package/dist/core/salience.js +1 -7
- package/dist/dashboard/dashboard-actions.js +2 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -1
- package/dist/dashboard/dashboard-snapshot.js +11 -2
- package/dist/dashboard/dashboard-types.d.ts +2 -1
- package/dist/dashboard/dashboard.d.ts +1 -0
- package/dist/dashboard/dashboard.js +50 -4
- package/dist/db/busy.d.ts +1 -1
- package/dist/db/busy.js +17 -8
- package/dist/db/connect.d.ts +1 -0
- package/dist/db/connect.js +3 -3
- package/dist/db/migrate.js +3 -3
- package/dist/db/migrations/types.d.ts +2 -5
- package/dist/db/migrations/v14.js +2 -3
- package/dist/db/migrations/v15.js +2 -8
- package/dist/db/migrations/v16.js +2 -3
- package/dist/db/migrations/v17.js +2 -3
- package/dist/db/migrations/v19.js +2 -5
- package/dist/db/migrations/v20.js +2 -7
- package/dist/db/migrations/v22.js +4 -17
- package/dist/db/migrations/v23.js +3 -14
- package/dist/db/migrations/v24.js +2 -4
- package/dist/db/migrations/v25.js +3 -8
- package/dist/db/migrations/v26.js +2 -13
- package/dist/db/migrations/v27.js +3 -11
- package/dist/db/migrations/v28.js +2 -14
- package/dist/db/migrations/v29.js +4 -18
- package/dist/db/migrations/v30.js +4 -16
- package/dist/db/migrations/v31.js +2 -15
- package/dist/db/migrations/v32.js +4 -22
- package/dist/db/migrations/v33.js +2 -15
- package/dist/db/migrations/v34.js +2 -11
- package/dist/db/migrations/v35.js +2 -11
- package/dist/db/migrations/v36.js +2 -11
- package/dist/db/migrations/v37.js +8 -33
- package/dist/db/migrations/v38.js +5 -38
- package/dist/db/migrations/v39.js +9 -20
- package/dist/db/migrations/v40.js +2 -9
- package/dist/db/migrations/v41.js +2 -24
- package/dist/db/migrations/v43.js +1 -1
- package/dist/db/migrations/v44.js +2 -8
- package/dist/db/migrations/v45.js +2 -7
- package/dist/db/migrations/v47.js +2 -3
- package/dist/db/migrations/v51.js +1 -1
- package/dist/db/open.d.ts +2 -0
- package/dist/db/open.js +17 -1
- package/dist/db/physics-state.d.ts +6 -22
- package/dist/db/physics-state.js +25 -36
- package/dist/db/raw-archive-mirror-cleanup.d.ts +2 -17
- package/dist/db/raw-archive-mirror-cleanup.js +2 -17
- package/dist/db/vector-store.d.ts +2 -0
- package/dist/db/vector-store.js +8 -1
- package/dist/doctor.js +74 -19
- package/dist/entry/session-text.js +2 -1
- package/dist/eval/eval-stats.d.ts +15 -53
- package/dist/eval/eval-stats.js +12 -42
- package/dist/eval/eval-suite.d.ts +2 -13
- package/dist/eval/eval-suite.js +74 -34
- package/dist/eval/eval.d.ts +6 -24
- package/dist/eval/eval.js +7 -34
- package/dist/eval/judgment.d.ts +0 -3
- package/dist/eval/judgment.js +19 -11
- package/dist/extensions/openclaw-plugin/index.js +1 -1
- package/dist/graph/extract.d.ts +5 -27
- package/dist/graph/extract.js +7 -33
- package/dist/graph/recall.d.ts +7 -20
- package/dist/graph/recall.js +14 -76
- package/dist/graph/stream.d.ts +7 -39
- package/dist/graph/stream.js +11 -34
- package/dist/graph/view.d.ts +9 -35
- package/dist/graph/view.js +11 -39
- package/dist/hooks/codex-wrapper.js +2 -2
- package/dist/hooks/copilot.js +2 -1
- package/dist/hooks/hook-blocks.d.ts +6 -2
- package/dist/hooks/hook-blocks.js +37 -124
- package/dist/hooks/json-hooks.d.ts +4 -36
- package/dist/hooks/json-hooks.js +18 -57
- package/dist/hooks/opencode.d.ts +0 -38
- package/dist/hooks/opencode.js +9 -76
- package/dist/hooks/shared.d.ts +8 -17
- package/dist/hooks/shared.js +29 -20
- package/dist/importers/core.d.ts +12 -37
- package/dist/importers/core.js +9 -27
- package/dist/importers/markdown-parse.d.ts +8 -22
- package/dist/importers/markdown-parse.js +8 -25
- package/dist/importers/markdown.js +3 -12
- package/dist/importers/sources.js +7 -35
- package/dist/importers/vault.d.ts +2 -8
- package/dist/importers/vault.js +25 -81
- package/dist/index.d.ts +6 -2
- package/dist/index.js +6 -2
- package/dist/learn/autolearn.d.ts +14 -41
- package/dist/learn/autolearn.js +14 -41
- package/dist/learn/extract.js +2 -4
- package/dist/learn/forward-claim-detector.d.ts +6 -30
- package/dist/learn/forward-claim-detector.js +14 -66
- package/dist/learn/invalidation.d.ts +6 -18
- package/dist/learn/invalidation.js +9 -26
- package/dist/mcp/admin-tools.js +3 -5
- package/dist/mcp/memory-tools.js +4 -9
- package/dist/mcp/protocol.d.ts +8 -26
- package/dist/mcp/protocol.js +3 -6
- package/dist/mcp/recall-tools.js +3 -3
- package/dist/mcp/request.d.ts +3 -11
- package/dist/mcp/request.js +10 -26
- package/dist/mcp/server.d.ts +3 -9
- package/dist/mcp/server.js +5 -16
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +5 -11
- package/dist/mcp/stdio.d.ts +2 -6
- package/dist/mcp/stdio.js +48 -12
- package/dist/mcp/tools.js +5 -3
- package/dist/objects/customer-notes.d.ts +7 -42
- package/dist/objects/customer-notes.js +7 -48
- package/dist/objects/decisions.d.ts +12 -50
- package/dist/objects/decisions.js +15 -53
- package/dist/objects/incidents.d.ts +7 -38
- package/dist/objects/incidents.js +7 -41
- package/dist/objects/policies.d.ts +11 -89
- package/dist/objects/policies.js +11 -98
- package/dist/objects/processes.d.ts +7 -52
- package/dist/objects/processes.js +7 -61
- package/dist/objects/project-briefs.d.ts +11 -55
- package/dist/objects/project-briefs.js +14 -75
- package/dist/objects/skills.d.ts +7 -42
- package/dist/objects/skills.js +8 -54
- package/dist/postinstall.js +6 -19
- package/dist/predictions/planning-fallacy.d.ts +11 -34
- package/dist/rerankers/clef.js +3 -31
- package/dist/rerankers/cross-encoder.js +4 -6
- package/dist/rerankers/jev.js +9 -6
- package/dist/rerankers/llm.d.ts +2 -11
- package/dist/rerankers/llm.js +14 -14
- package/dist/rerankers/outage-warning.d.ts +2 -1
- package/dist/rerankers/outage-warning.js +2 -1
- package/dist/rerankers/remote.d.ts +1 -0
- package/dist/rerankers/remote.js +2 -0
- package/dist/rerankers/types.d.ts +2 -14
- package/dist/search/boosts.d.ts +0 -2
- package/dist/search/boosts.js +2 -2
- package/dist/search/goal-boost.d.ts +23 -0
- package/dist/search/goal-boost.js +90 -0
- package/dist/search/hybrid.d.ts +2 -0
- package/dist/search/multihop.js +2 -3
- package/dist/search/path-context.d.ts +5 -18
- package/dist/search/path-context.js +5 -18
- package/dist/search/physics-search.js +11 -8
- package/dist/search/rrf.d.ts +7 -35
- package/dist/search/rrf.js +5 -30
- package/dist/search/vector.d.ts +7 -0
- package/dist/search/vector.js +35 -5
- package/dist/server/auth.d.ts +9 -28
- package/dist/server/auth.js +32 -25
- package/dist/server/boot.d.ts +2 -21
- package/dist/server/boot.js +63 -96
- package/dist/server/client-ip.d.ts +3 -19
- package/dist/server/client-ip.js +5 -28
- package/dist/server/defaults.d.ts +3 -0
- package/dist/server/defaults.js +4 -0
- package/dist/server/key-check-bounds.d.ts +2 -1
- package/dist/server/lifecycle.d.ts +5 -4
- package/dist/server/lifecycle.js +19 -4
- package/dist/server/mcp-http.js +10 -44
- package/dist/server/rate-limit.d.ts +5 -18
- package/dist/server/rate-limit.js +4 -13
- package/dist/server/request.d.ts +4 -8
- package/dist/server/request.js +9 -17
- package/dist/server/route-table.js +42 -49
- package/dist/server/routes/admin.js +22 -28
- package/dist/server/routes/customer-notes.js +7 -12
- package/dist/server/routes/decisions.js +10 -17
- package/dist/server/routes/incidents.js +12 -20
- package/dist/server/routes/memories.js +12 -32
- package/dist/server/routes/object-routes.d.ts +0 -5
- package/dist/server/routes/object-routes.js +7 -15
- package/dist/server/routes/policies.js +10 -18
- package/dist/server/routes/predictions.js +13 -25
- package/dist/server/routes/processes.js +16 -26
- package/dist/server/routes/project-briefs.js +9 -16
- package/dist/server/routes/recall.js +10 -35
- package/dist/server/routes/skills.js +8 -18
- package/dist/server/server-detect.d.ts +9 -53
- package/dist/server/server-detect.js +24 -90
- package/dist/server/sleep-offload.js +4 -1
- package/dist/server/types.d.ts +12 -10
- package/dist/server/validation.d.ts +3 -1
- package/dist/server/validation.js +10 -23
- package/dist/server.d.ts +2 -2
- package/dist/server.js +3 -2
- package/dist/sharing/global-store.d.ts +19 -0
- package/dist/sharing/global-store.js +75 -0
- package/dist/sharing/global-sync.d.ts +6 -0
- package/dist/sharing/global-sync.js +80 -0
- package/dist/sharing/project-merge.d.ts +4 -5
- package/dist/sharing/project-merge.js +9 -7
- package/dist/sharing/scope.d.ts +4 -11
- package/dist/sharing/scope.js +4 -11
- package/dist/sharing/search-both.d.ts +60 -0
- package/dist/sharing/search-both.js +138 -0
- package/dist/sharing/share.d.ts +38 -0
- package/dist/sharing/share.js +226 -0
- package/dist/store/ambient.js +4 -9
- package/dist/store/audit-event.d.ts +4 -12
- package/dist/store/audit-event.js +4 -12
- package/dist/store/audit.d.ts +2 -5
- package/dist/store/audit.js +4 -12
- package/dist/store/auth.d.ts +6 -6
- package/dist/store/auth.js +10 -9
- package/dist/store/candidates.d.ts +20 -3
- package/dist/store/candidates.js +77 -48
- package/dist/store/card-detail.d.ts +2 -1
- package/dist/store/card-detail.js +2 -1
- package/dist/store/cards.d.ts +14 -9
- package/dist/store/cards.js +72 -126
- package/dist/store/conflicts.d.ts +4 -21
- package/dist/store/conflicts.js +71 -150
- package/dist/store/connectors/github.d.ts +10 -10
- package/dist/store/connectors/github.js +10 -10
- package/dist/store/dashboard-reads.js +4 -8
- package/dist/store/delete-and-batch.d.ts +11 -31
- package/dist/store/delete-and-batch.js +48 -64
- package/dist/store/delivery-recorder.d.ts +8 -4
- package/dist/store/delivery-recorder.js +25 -15
- package/dist/store/diagnostics.js +6 -13
- package/dist/store/dormant.d.ts +7 -29
- package/dist/store/dormant.js +15 -56
- package/dist/store/embeddings/index.d.ts +11 -80
- package/dist/store/embeddings/index.js +71 -207
- package/dist/store/embeddings/local.js +15 -32
- package/dist/store/embeddings/provider.d.ts +16 -53
- package/dist/store/embeddings/provider.js +41 -69
- package/dist/store/entry-reads.d.ts +21 -57
- package/dist/store/entry-reads.js +65 -126
- package/dist/store/entry-row.d.ts +6 -35
- package/dist/store/entry-row.js +9 -37
- package/dist/store/entry-writes.d.ts +10 -16
- package/dist/store/entry-writes.js +17 -35
- package/dist/store/goals.d.ts +3 -40
- package/dist/store/goals.js +21 -160
- package/dist/store/graph-queue.d.ts +6 -22
- package/dist/store/graph-queue.js +14 -45
- package/dist/store/graph-reads.d.ts +11 -35
- package/dist/store/graph-reads.js +20 -58
- package/dist/store/graph-rows.d.ts +3 -6
- package/dist/store/graph-rows.js +6 -9
- package/dist/store/graph-view-rows.d.ts +2 -1
- package/dist/store/graph-view-rows.js +2 -1
- package/dist/store/graph-writes.d.ts +6 -31
- package/dist/store/graph-writes.js +13 -37
- package/dist/store/half-life.d.ts +2 -1
- package/dist/store/half-life.js +14 -16
- package/dist/store/handoffs.d.ts +5 -11
- package/dist/store/handoffs.js +16 -34
- package/dist/store/index-and-stats.d.ts +6 -19
- package/dist/store/index-and-stats.js +34 -82
- package/dist/store/markdown.d.ts +2 -6
- package/dist/store/markdown.js +21 -20
- package/dist/store/mirrors.d.ts +2 -6
- package/dist/store/mirrors.js +14 -23
- package/dist/store/open.js +6 -13
- package/dist/store/planning-fallacy-evidence.d.ts +2 -30
- package/dist/store/planning-fallacy-evidence.js +8 -37
- package/dist/store/port.d.ts +82 -79
- package/dist/store/predictions.d.ts +11 -51
- package/dist/store/predictions.js +38 -119
- package/dist/{cli → store}/quality-repair.js +15 -31
- package/dist/store/raw-archive.d.ts +4 -16
- package/dist/store/raw-archive.js +14 -29
- package/dist/store/recall-scope.d.ts +19 -79
- package/dist/store/recall-scope.js +21 -82
- package/dist/store/recall-trace.d.ts +10 -77
- package/dist/store/recall-trace.js +19 -95
- package/dist/store/rejected-values.js +7 -19
- package/dist/store/rejection.d.ts +12 -58
- package/dist/store/rejection.js +13 -65
- package/dist/store/report-reads.d.ts +6 -0
- package/dist/store/report-reads.js +29 -0
- package/dist/store/rows.d.ts +9 -19
- package/dist/store/rows.js +36 -34
- package/dist/store/rule-sql.d.ts +5 -0
- package/dist/store/rule-sql.js +37 -0
- package/dist/store/search-rows.d.ts +7 -38
- package/dist/store/search-rows.js +14 -50
- package/dist/store/sessions.d.ts +10 -47
- package/dist/store/sessions.js +17 -73
- package/dist/store/sqlite/connector-events-group.js +2 -2
- package/dist/store/sqlite/entry-writes-group.js +2 -2
- package/dist/store/sqlite/error-codec.js +4 -2
- package/dist/store/sqlite/executor.d.ts +2 -1
- package/dist/store/sqlite/executor.js +2 -1
- package/dist/store/sqlite/local.d.ts +3 -3
- package/dist/store/sqlite/local.js +1 -0
- package/dist/store/sqlite/object-rows.js +6 -3
- package/dist/store/sqlite/objects-group.js +4 -2
- package/dist/store/sqlite/quarantine-group.js +2 -2
- package/dist/store/sqlite/store.d.ts +1 -4
- package/dist/store/sqlite/store.js +2 -3
- package/dist/store/sqlite/vector-reads-group.js +2 -2
- package/dist/store/sqlite/worker-jobs.js +1 -1
- package/dist/store/sqlite/worker-ops.d.ts +13 -2
- package/dist/store/sqlite/worker-ops.js +13 -2
- package/dist/store/sqlite/worker-store.js +5 -2
- package/dist/store/summaries.d.ts +10 -62
- package/dist/store/summaries.js +34 -146
- package/dist/store/summary-dirty.js +1 -1
- package/dist/store/tenant-lookup.d.ts +6 -1
- package/dist/store/tenant-lookup.js +7 -0
- package/dist/store/tenant.d.ts +2 -16
- package/dist/store/tenant.js +4 -19
- package/dist/store/token-ledger.d.ts +13 -43
- package/dist/store/token-ledger.js +19 -50
- package/dist/store/usage-reports.js +5 -13
- package/dist/store/vector-index.d.ts +46 -0
- package/dist/store/vector-index.js +170 -0
- package/dist/store/working-memory.d.ts +6 -25
- package/dist/store/working-memory.js +18 -52
- package/dist/store/yaml.d.ts +1 -5
- package/dist/store/yaml.js +2 -6
- package/dist/support-bundle.js +7 -5
- package/dist/trust/reject-flow.js +1 -3
- package/dist/util/anthropic-messages.js +14 -2
- package/dist/util/atomic-write.d.ts +2 -1
- package/dist/util/atomic-write.js +35 -4
- package/dist/util/capped-json.d.ts +6 -0
- package/dist/util/capped-json.js +46 -0
- package/dist/util/crash-handlers.d.ts +8 -1
- package/dist/util/crash-handlers.js +52 -10
- package/dist/util/env.d.ts +13 -6
- package/dist/util/env.js +14 -7
- package/dist/util/home-path.d.ts +2 -1
- package/dist/util/home-path.js +4 -2
- package/dist/util/http-retry.d.ts +3 -1
- package/dist/util/http-retry.js +26 -5
- package/dist/util/log.d.ts +3 -2
- package/dist/util/log.js +25 -9
- package/dist/util/request-scope.d.ts +2 -1
- package/dist/util/request-scope.js +2 -1
- package/dist/util/secret-detect.d.ts +5 -30
- package/dist/util/secret-detect.js +13 -39
- package/dist/util/stored-json.d.ts +1 -1
- package/dist/util/stored-json.js +1 -1
- package/dist/util/token-text.d.ts +1 -4
- package/dist/util/token-text.js +1 -4
- package/dist/util/transcript-tail.d.ts +2 -0
- package/dist/util/transcript-tail.js +24 -23
- package/dist/util/version.d.ts +5 -20
- package/dist/util/version.js +5 -20
- package/extensions/openclaw-plugin/index.ts +1 -1
- 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 +1 -1
- package/dist/connectors/github/cli-impl.d.ts +0 -25
- package/dist/sharing/shared.d.ts +0 -187
- package/dist/sharing/shared.js +0 -563
- package/dist/store/vector-writes.d.ts +0 -13
- package/dist/store/vector-writes.js +0 -89
- /package/dist/{cli → store}/quality-repair.d.ts +0 -0
package/dist/hooks/shared.js
CHANGED
|
@@ -21,11 +21,13 @@ export function homeDir() {
|
|
|
21
21
|
export function codexHomeDir(home = homeDir(), env = processEnv()) {
|
|
22
22
|
return env.CODEX_HOME || path.join(home, '.codex');
|
|
23
23
|
}
|
|
24
|
-
/** Copilot's config folder: $COPILOT_HOME, else ~/.copilot under os.homedir(), as the
|
|
24
|
+
/** Copilot's config folder: $COPILOT_HOME, else ~/.copilot under os.homedir(), as the
|
|
25
|
+
* Copilot apps resolve it (a HOME that differs from the profile must not move it). */
|
|
25
26
|
export function copilotHomeDir(home = os.homedir(), env = processEnv()) {
|
|
26
27
|
return env.COPILOT_HOME || path.join(home, '.copilot');
|
|
27
28
|
}
|
|
28
|
-
/** Claude Code's config folder, where it reads settings.json: $CLAUDE_CONFIG_DIR when set and non-empty, else
|
|
29
|
+
/** Claude Code's config folder, where it reads settings.json: $CLAUDE_CONFIG_DIR when set and non-empty, else
|
|
30
|
+
* ~/.claude under os.homedir(), as Claude Code does (a HOME that differs from the profile must not move it). */
|
|
29
31
|
export function claudeConfigDir(home = os.homedir(), env = processEnv()) {
|
|
30
32
|
return env.CLAUDE_CONFIG_DIR || path.join(home, '.claude');
|
|
31
33
|
}
|
|
@@ -53,20 +55,12 @@ export function isCopilotPresent(home = os.homedir()) {
|
|
|
53
55
|
}
|
|
54
56
|
/** Codex hashes each hook and skips new or changed ones until the user reviews them in `/hooks`, so the reminder says what they would trust. */
|
|
55
57
|
export const CODEX_TRUST_LINE = "The per-prompt hook sends your pinned memories plus up to 5 that match the prompt. Codex runs hippo's hooks only after you trust them once in `/hooks`.";
|
|
56
|
-
/**
|
|
57
|
-
* Default log path consumed by `hippo last-sleep`. Shared fallback when
|
|
58
|
-
* a caller doesn't pass --path explicitly.
|
|
59
|
-
*/
|
|
58
|
+
/** Default log path consumed by `hippo last-sleep` when a caller passes no --path. */
|
|
60
59
|
export function defaultSleepLogPath() {
|
|
61
60
|
return path.join(homeDir(), '.hippo', 'logs', 'last-sleep.log');
|
|
62
61
|
}
|
|
63
|
-
/**
|
|
64
|
-
*
|
|
65
|
-
* from the SessionEnd sleep log: `hippo last-sleep` truncates that file on
|
|
66
|
-
* every SessionStart, which would wipe pre-compact lines before anyone
|
|
67
|
-
* could read them. Nothing consumes this file programmatically — it exists
|
|
68
|
-
* for manual troubleshooting only. Overridden by `--log-file`.
|
|
69
|
-
*/
|
|
62
|
+
/** Diagnostic-only log path for `hippo pre-compact`, kept apart from the SessionEnd sleep log because `hippo last-sleep` truncates that one every SessionStart.
|
|
63
|
+
* Nothing reads it programmatically; overridden by `--log-file`. */
|
|
70
64
|
export function defaultPreCompactLogPath() {
|
|
71
65
|
return path.join(homeDir(), '.hippo', 'logs', 'pre-compact.log');
|
|
72
66
|
}
|
|
@@ -74,21 +68,36 @@ export function ensureDir(dir) {
|
|
|
74
68
|
if (!fs.existsSync(dir))
|
|
75
69
|
fs.mkdirSync(dir, { recursive: true });
|
|
76
70
|
}
|
|
77
|
-
/**
|
|
78
|
-
* Detect which AI coding tools are installed based on config directory presence.
|
|
79
|
-
* Used by `hippo setup` to decide which JSON-hook installs to run.
|
|
80
|
-
*/
|
|
71
|
+
/** Detect which AI coding tools are installed from config directory presence; `hippo setup` uses it to pick JSON-hook installs. */
|
|
81
72
|
export function detectInstalledTools() {
|
|
82
73
|
const home = homeDir();
|
|
83
74
|
const exists = (...parts) => fs.existsSync(path.join(home, ...parts));
|
|
84
75
|
const claudeDir = claudeConfigDir();
|
|
85
76
|
return [
|
|
86
77
|
{ name: 'claude-code', configDir: claudeDir, detected: fs.existsSync(claudeDir), kind: 'json-hook' },
|
|
87
|
-
{
|
|
78
|
+
{
|
|
79
|
+
name: 'opencode',
|
|
80
|
+
configDir: '~/.config/opencode',
|
|
81
|
+
detected: exists('.config', 'opencode'),
|
|
82
|
+
kind: 'plugin',
|
|
83
|
+
notes: 'installs a TS plugin at ~/.config/opencode/plugins/hippo.ts'
|
|
84
|
+
},
|
|
88
85
|
{ name: 'openclaw', configDir: '~/.openclaw', detected: exists('.openclaw'), kind: 'plugin', notes: 'install via `openclaw plugins install hippo-memory`' },
|
|
89
|
-
{
|
|
86
|
+
{
|
|
87
|
+
name: 'codex',
|
|
88
|
+
configDir: '~/.codex',
|
|
89
|
+
detected: isCodexPresent(home),
|
|
90
|
+
kind: 'wrapper',
|
|
91
|
+
notes: 'memory hooks in hooks.json, and wraps the detected codex launcher for session-end consolidation'
|
|
92
|
+
},
|
|
90
93
|
{ name: 'copilot', configDir: copilotHomeDir(), detected: isCopilotPresent(), kind: 'json-hook', notes: 'hooks in hooks/hippo.json, the MCP server in mcp-config.json and a block in copilot-instructions.md; for VS Code, the server in each User mcp.json and prompts/hippo.instructions.md' },
|
|
91
|
-
{
|
|
94
|
+
{
|
|
95
|
+
name: 'cursor',
|
|
96
|
+
configDir: '~/.cursor',
|
|
97
|
+
detected: exists('.cursor'),
|
|
98
|
+
kind: 'markdown-instruction',
|
|
99
|
+
notes: 'no hook API - patches AGENTS.md in the project'
|
|
100
|
+
},
|
|
92
101
|
{ name: 'pi', configDir: '~/.pi', detected: exists('.pi'), kind: 'markdown-instruction', notes: 'no hook API - patches AGENTS.md in the project' },
|
|
93
102
|
];
|
|
94
103
|
}
|
package/dist/importers/core.d.ts
CHANGED
|
@@ -1,21 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown.
|
|
4
|
-
*/
|
|
1
|
+
/** Memory importers for Hippo.
|
|
2
|
+
* Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown. */
|
|
5
3
|
import { MemoryEntry } from '../core/memory.js';
|
|
6
4
|
export interface ImportResult {
|
|
7
5
|
total: number;
|
|
8
6
|
imported: number;
|
|
9
7
|
skipped: number;
|
|
10
|
-
/**
|
|
11
|
-
* `
|
|
12
|
-
* plain duplicate in import summaries (plan §3 containment, round-2 low).
|
|
13
|
-
* AT1 P2 fix (codex, published-surface compat): optional, not required —
|
|
14
|
-
* `ImportResult` is re-exported from the package root (index.ts), and a
|
|
15
|
-
* required field breaks any existing consumer constructing the pre-AT1
|
|
16
|
-
* shape. Every producer in this file still always sets a real number;
|
|
17
|
-
* `?? 0` at read sites (this file's own accumulation, cli.ts's summary
|
|
18
|
-
* prints) tolerates a caller-supplied object that omits it. */
|
|
8
|
+
/** Entries refused by the rejection-value guard, kept apart from `skipped` (dedup) so a tombstoned value is distinguishable in summaries.
|
|
9
|
+
* Optional because `ImportResult` is exported from the package root and a required field breaks existing consumers; read sites use `?? 0`. */
|
|
19
10
|
rejected?: number;
|
|
20
11
|
/** K1 vault import: rows archived this run (changed + source-deleted). In a
|
|
21
12
|
* dryRun this is the would-be count (a true deletion-sync preview). */
|
|
@@ -29,33 +20,17 @@ export interface ImportOptions {
|
|
|
29
20
|
global?: boolean;
|
|
30
21
|
extraTags?: string[];
|
|
31
22
|
hippoRoot: string;
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
34
|
-
* false, the dedup check only considers this tenant's existing entries.
|
|
35
|
-
* Ignored when `global: true` (global writes are host-wide by definition).
|
|
36
|
-
* Undefined preserves pre-1.12.1 host-wide dedup behaviour.
|
|
37
|
-
*/
|
|
23
|
+
/** Tenant scope for the dedup read: when set and `global` is false, only this tenant's entries count.
|
|
24
|
+
* Ignored when `global: true` (host-wide); undefined means host-wide dedup. */
|
|
38
25
|
tenantId?: string;
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
* the `artifactRef='vault:<name>:<relpath>'` key. REQUIRED by importVault: it
|
|
42
|
-
* is the identity key for the destructive source-deletion sync, so it must be
|
|
43
|
-
* set explicitly rather than inferred from the folder basename (two vaults
|
|
44
|
-
* sharing a basename would collide and clobber each other). importVault throws
|
|
45
|
-
* if it is missing or blank. Optional in this shared type only because the
|
|
46
|
-
* other importers ignore it. Operator-supplied, so the loader query LIKE-escapes
|
|
47
|
-
* it (`escapeLike` in src/util/escape.ts).
|
|
48
|
-
*/
|
|
26
|
+
/** K1 vault import only: logical vault name for the `vault:<name>` tag and `artifactRef` key. REQUIRED by importVault (throws if missing or blank),
|
|
27
|
+
* because it keys the destructive deletion sync and two vaults sharing a basename would clobber each other. LIKE-escaped by the loader. */
|
|
49
28
|
name?: string;
|
|
50
|
-
/**
|
|
51
|
-
*
|
|
52
|
-
* to null (unscoped) when unset.
|
|
53
|
-
*/
|
|
29
|
+
/** K1 vault import only. Memory scope stamped on every imported note. Defaults
|
|
30
|
+
* to null (unscoped) when unset. */
|
|
54
31
|
scope?: string;
|
|
55
32
|
}
|
|
56
|
-
/**
|
|
57
|
-
*
|
|
58
|
-
* create MemoryEntry objects, write them (unless dry-run), and return a result.
|
|
59
|
-
*/
|
|
33
|
+
/** Given an array of raw text chunks, deduplicate against existing memories,
|
|
34
|
+
* create MemoryEntry objects, write them (unless dry-run), and return a result. */
|
|
60
35
|
export declare function importEntries(chunks: string[], source: string, tags: string[], options: ImportOptions): ImportResult;
|
|
61
36
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/importers/core.js
CHANGED
|
@@ -1,25 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
*/
|
|
1
|
+
/** Memory importers for Hippo.
|
|
2
|
+
* Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown. */
|
|
3
|
+
import { DEFAULT_TENANT_ID } from '../util/env.js';
|
|
5
4
|
import { createMemory, Layer } from '../core/memory.js';
|
|
6
5
|
import { writeEntry } from '../store/entry-writes.js';
|
|
7
6
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
8
7
|
import { duplicateKey, storedTextKeys } from '../util/same-text.js';
|
|
9
|
-
import { getGlobalRoot, initGlobal } from '../sharing/
|
|
8
|
+
import { getGlobalRoot, initGlobal } from '../sharing/global-store.js';
|
|
10
9
|
import { withRequestStoresSync } from '../db/request-stores.js';
|
|
11
10
|
import { RejectedValueError } from '../store/rejection.js';
|
|
12
11
|
import { rejectionGuardRefuses } from '../store/rejected-values.js';
|
|
13
12
|
import { loadConfig } from '../core/config.js';
|
|
14
13
|
import { vetSecrets } from '../util/secret-detect.js';
|
|
15
14
|
import { log } from '../util/log.js';
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
19
|
-
/**
|
|
20
|
-
* Given an array of raw text chunks, deduplicate against existing memories,
|
|
21
|
-
* create MemoryEntry objects, write them (unless dry-run), and return a result.
|
|
22
|
-
*/
|
|
15
|
+
/** Given an array of raw text chunks, deduplicate against existing memories,
|
|
16
|
+
* create MemoryEntry objects, write them (unless dry-run), and return a result. */
|
|
23
17
|
export function importEntries(chunks, source, tags, options) {
|
|
24
18
|
const { targetRoot, keys } = openImportTarget(options);
|
|
25
19
|
const allTags = [...new Set([...tags, ...(options.extraTags ?? [])])];
|
|
@@ -87,17 +81,8 @@ function prepareImportChunk(raw, allTags) {
|
|
|
87
81
|
return { chunk: trimmed.slice(0, 1000), wasRedacted };
|
|
88
82
|
}
|
|
89
83
|
function createImportEntry(chunk, source, allTags, options, baseHalfLifeDays) {
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
// correct here. E1.3 (Slack ingestion) shipped 2026-04-29 in src/connectors/slack/
|
|
93
|
-
// and sets kind: 'raw' + routes deletions through archiveRawMemory() — these
|
|
94
|
-
// importers stay 'distilled' per the original reasoning. See MEMORY_ENVELOPE.md.
|
|
95
|
-
// L9: the dedup read above is scoped by options.tenantId — the WRITE
|
|
96
|
-
// must match, or scoped-dedup-passes-then-default-tenant-write breaks
|
|
97
|
-
// the per-tenant contract. Mirror the dedup-read guard: global=true
|
|
98
|
-
// → host-wide write to global store (tenantId irrelevant, createMemory
|
|
99
|
-
// defaults to 'default'). global=false → write to the same tenant as
|
|
100
|
-
// the dedup read.
|
|
84
|
+
// kind defaults to 'distilled': these exports are curated user pastes, not raw transcripts from a system of record (see MEMORY_ENVELOPE.md).
|
|
85
|
+
// The write must use the same tenant as the scoped dedup read above: global=true writes host-wide, global=false writes to options.tenantId.
|
|
101
86
|
return createMemory(chunk, {
|
|
102
87
|
layer: Layer.Episodic,
|
|
103
88
|
tags: allTags,
|
|
@@ -110,7 +95,7 @@ function createImportEntry(chunk, source, allTags, options, baseHalfLifeDays) {
|
|
|
110
95
|
/** Writes the entry, or on a dry run only probes the guard; false when a rejected value refuses it. */
|
|
111
96
|
function writeOrProbeImport(targetRoot, entry, options) {
|
|
112
97
|
if (options.dryRun)
|
|
113
|
-
return !rejectionGuardRefuses(targetRoot, entry.tenantId ??
|
|
98
|
+
return !rejectionGuardRefuses(targetRoot, entry.tenantId ?? DEFAULT_TENANT_ID, entry.id, entry.content);
|
|
114
99
|
// A rejection refuses one chunk, not the whole import, so siblings still land.
|
|
115
100
|
try {
|
|
116
101
|
writeEntry(targetRoot, entry);
|
|
@@ -122,7 +107,4 @@ function writeOrProbeImport(targetRoot, entry, options) {
|
|
|
122
107
|
}
|
|
123
108
|
return true;
|
|
124
109
|
}
|
|
125
|
-
// ---------------------------------------------------------------------------
|
|
126
|
-
// ChatGPT importer
|
|
127
|
-
// ---------------------------------------------------------------------------
|
|
128
110
|
//# sourceMappingURL=core.js.map
|
|
@@ -1,32 +1,18 @@
|
|
|
1
|
-
/** Minimal inline frontmatter split
|
|
2
|
-
*
|
|
3
|
-
* block removed. When no well-formed block is present, `fm` is empty and
|
|
4
|
-
* `body` is the original content. */
|
|
1
|
+
/** Minimal inline frontmatter split (no YAML dep) on a leading `---\n...\n---\n` block; returns the key-value map plus the body,
|
|
2
|
+
* or an empty `fm` and the original content when no well-formed block is present. */
|
|
5
3
|
interface FrontmatterParseResult {
|
|
6
4
|
fm: Record<string, string>;
|
|
7
5
|
body: string;
|
|
8
6
|
}
|
|
9
7
|
export declare function splitMarkdownFrontmatter(raw: string): FrontmatterParseResult;
|
|
10
|
-
/** Pull a frontmatter field that may be a YAML flow list (`[a, b]`), a
|
|
11
|
-
*
|
|
12
|
-
* and surrounding brackets are stripped; empty entries dropped. */
|
|
8
|
+
/** Pull a frontmatter field that may be a YAML flow list (`[a, b]`), a comma-separated scalar, or one token into a string[];
|
|
9
|
+
* quotes and brackets are stripped and empty entries dropped. */
|
|
13
10
|
export declare function frontmatterList(value: string | undefined): string[];
|
|
14
|
-
/** Parse `[[wikilinks]]` from body text
|
|
15
|
-
*
|
|
16
|
-
* target strings (trimmed). Embeds (`![[…]]`) are intentionally matched too —
|
|
17
|
-
* the leading `!` is not part of the `[[…]]` capture, so an embed contributes
|
|
18
|
-
* its target as a candidate, which is the desired no-crash baseline behaviour. */
|
|
11
|
+
/** Parse `[[wikilinks]]` from body text: `[[target]]` and `[[target|alias]]` both yield `target`; de-duplicated, order-preserving.
|
|
12
|
+
* Embeds (`![[...]]`) match too, because the leading `!` is outside the capture and a candidate target is harmless. */
|
|
19
13
|
export declare function parseWikilinks(body: string): string[];
|
|
20
|
-
/** Recursively collect files
|
|
21
|
-
*
|
|
22
|
-
* Symlinks are not followed. Skips dot-directories (the default `.hippo` store,
|
|
23
|
-
* `.git`, `.obsidian`, `.trash`) AND the canonicalized Hippo store path during
|
|
24
|
-
* the walk, so re-importing a vault that CONTAINS the store never ingests its own
|
|
25
|
-
* markdown mirror files (codex R5 P1: `hippo import --vault .` after `hippo
|
|
26
|
-
* init` in the vault would otherwise self-import its mirror rows and grow on
|
|
27
|
-
* every run). The root-IS-the-store case is handled one level up in
|
|
28
|
-
* importVault (a no-op early return), NOT here: returning [] for it would feed
|
|
29
|
-
* the deletion-sync an empty scan that mass-archives every live row (codex R8). */
|
|
14
|
+
/** Recursively collect files matching `match` (`*.md` default) under `root` as forward-slash relative paths; symlinks are not followed.
|
|
15
|
+
* Skips dot-directories and the Hippo store path so a vault containing the store never imports its own mirror files; importVault handles root-IS-the-store. */
|
|
30
16
|
export declare function collectMarkdownFiles(root: string, hippoRoot: string, match?: RegExp): string[];
|
|
31
17
|
export {};
|
|
32
18
|
//# sourceMappingURL=markdown-parse.d.ts.map
|
|
@@ -16,9 +16,7 @@ export function splitMarkdownFrontmatter(raw) {
|
|
|
16
16
|
continue;
|
|
17
17
|
let val = kv[2].trim();
|
|
18
18
|
if (val === '') {
|
|
19
|
-
// YAML block-style list
|
|
20
|
-
// (common in Obsidian/Dendron frontmatter). Collect them into a
|
|
21
|
-
// comma-joined value so frontmatterList parses them (codex P2).
|
|
19
|
+
// YAML block-style list (`key:` then indented `- item` lines, common in Obsidian/Dendron): collect into a comma-joined value for frontmatterList.
|
|
22
20
|
const items = [];
|
|
23
21
|
let j = i + 1;
|
|
24
22
|
let item;
|
|
@@ -35,9 +33,8 @@ export function splitMarkdownFrontmatter(raw) {
|
|
|
35
33
|
}
|
|
36
34
|
return { fm, body };
|
|
37
35
|
}
|
|
38
|
-
/** Pull a frontmatter field that may be a YAML flow list (`[a, b]`), a
|
|
39
|
-
*
|
|
40
|
-
* and surrounding brackets are stripped; empty entries dropped. */
|
|
36
|
+
/** Pull a frontmatter field that may be a YAML flow list (`[a, b]`), a comma-separated scalar, or one token into a string[];
|
|
37
|
+
* quotes and brackets are stripped and empty entries dropped. */
|
|
41
38
|
export function frontmatterList(value) {
|
|
42
39
|
if (!value)
|
|
43
40
|
return [];
|
|
@@ -49,11 +46,8 @@ export function frontmatterList(value) {
|
|
|
49
46
|
.map((s) => s.trim().replace(/^['"]|['"]$/g, '').trim())
|
|
50
47
|
.filter(Boolean);
|
|
51
48
|
}
|
|
52
|
-
/** Parse `[[wikilinks]]` from body text
|
|
53
|
-
*
|
|
54
|
-
* target strings (trimmed). Embeds (`![[…]]`) are intentionally matched too —
|
|
55
|
-
* the leading `!` is not part of the `[[…]]` capture, so an embed contributes
|
|
56
|
-
* its target as a candidate, which is the desired no-crash baseline behaviour. */
|
|
49
|
+
/** Parse `[[wikilinks]]` from body text: `[[target]]` and `[[target|alias]]` both yield `target`; de-duplicated, order-preserving.
|
|
50
|
+
* Embeds (`![[...]]`) match too, because the leading `!` is outside the capture and a candidate target is harmless. */
|
|
57
51
|
export function parseWikilinks(body) {
|
|
58
52
|
const out = [];
|
|
59
53
|
const seen = new Set();
|
|
@@ -71,22 +65,11 @@ export function parseWikilinks(body) {
|
|
|
71
65
|
}
|
|
72
66
|
return out;
|
|
73
67
|
}
|
|
74
|
-
/** Recursively collect files
|
|
75
|
-
*
|
|
76
|
-
* Symlinks are not followed. Skips dot-directories (the default `.hippo` store,
|
|
77
|
-
* `.git`, `.obsidian`, `.trash`) AND the canonicalized Hippo store path during
|
|
78
|
-
* the walk, so re-importing a vault that CONTAINS the store never ingests its own
|
|
79
|
-
* markdown mirror files (codex R5 P1: `hippo import --vault .` after `hippo
|
|
80
|
-
* init` in the vault would otherwise self-import its mirror rows and grow on
|
|
81
|
-
* every run). The root-IS-the-store case is handled one level up in
|
|
82
|
-
* importVault (a no-op early return), NOT here: returning [] for it would feed
|
|
83
|
-
* the deletion-sync an empty scan that mass-archives every live row (codex R8). */
|
|
68
|
+
/** Recursively collect files matching `match` (`*.md` default) under `root` as forward-slash relative paths; symlinks are not followed.
|
|
69
|
+
* Skips dot-directories and the Hippo store path so a vault containing the store never imports its own mirror files; importVault handles root-IS-the-store. */
|
|
84
70
|
export function collectMarkdownFiles(root, hippoRoot, match = /\.md$/i) {
|
|
85
71
|
const out = [];
|
|
86
|
-
// Canonicalize (realpath) so a non-dot HIPPO_HOME store nested in the vault is
|
|
87
|
-
// skipped even when hippoRoot is an aliased path (junction / Windows case
|
|
88
|
-
// variant); path.resolve would miss it and self-import the store's mirror
|
|
89
|
-
// files (codex R9 follow-up: same gap as the importVault guard, sibling site).
|
|
72
|
+
// Canonicalize (realpath) so a non-dot HIPPO_HOME store nested in the vault is skipped even via a junction or Windows case alias.
|
|
90
73
|
const resolvedHippoRoot = realpathOrResolve(hippoRoot);
|
|
91
74
|
const walk = (dir) => {
|
|
92
75
|
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import { importEntries } from './core.js';
|
|
3
3
|
const SLUG_MAX_CHARS = 50;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// ---------------------------------------------------------------------------
|
|
7
|
-
/**
|
|
8
|
-
* Slugify a heading for use as a tag.
|
|
9
|
-
* "Data Pipeline & Cache" -> "data-pipeline-cache"
|
|
10
|
-
*/
|
|
4
|
+
/** Slugify a heading for use as a tag.
|
|
5
|
+
* "Data Pipeline & Cache" -> "data-pipeline-cache" */
|
|
11
6
|
function slugify(heading) {
|
|
12
7
|
return heading
|
|
13
8
|
.toLowerCase()
|
|
@@ -17,11 +12,7 @@ function slugify(heading) {
|
|
|
17
12
|
.replace(/-+/g, '-')
|
|
18
13
|
.slice(0, SLUG_MAX_CHARS);
|
|
19
14
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Parse structured markdown into {content, sectionSlug} pairs.
|
|
22
|
-
* Each heading starts a new section. Bullet points / numbered items under
|
|
23
|
-
* the heading become individual memories tagged with the section slug.
|
|
24
|
-
*/
|
|
15
|
+
/** Parse structured markdown into {content, sectionSlug} pairs: each heading starts a section whose bullets or numbered items become memories. */
|
|
25
16
|
function parseStructuredMarkdown(raw) {
|
|
26
17
|
const results = [];
|
|
27
18
|
const lines = raw.split('\n');
|
|
@@ -13,14 +13,7 @@ function extractMemoryText(candidate) {
|
|
|
13
13
|
}
|
|
14
14
|
return '';
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Parse ChatGPT memory export file.
|
|
18
|
-
* Supports:
|
|
19
|
-
* - JSON array of strings: ["memory 1", "memory 2"]
|
|
20
|
-
* - JSON array of objects: [{"content": "...", "created": "..."}]
|
|
21
|
-
* - ChatGPT export format: {"memories": [{"content": "...", "created_at": "..."}]}
|
|
22
|
-
* - Plain text: one memory per line
|
|
23
|
-
*/
|
|
16
|
+
/** Parse a ChatGPT memory export: a JSON array of strings or `{content, created}` objects, `{"memories": [...]}`, or plain text with one memory per line. */
|
|
24
17
|
function parseChatGPTFile(filePath) {
|
|
25
18
|
const raw = fs.readFileSync(filePath, 'utf8').trim();
|
|
26
19
|
// Try JSON first
|
|
@@ -47,14 +40,9 @@ export function importChatGPT(filePath, options) {
|
|
|
47
40
|
const chunks = parseChatGPTFile(filePath);
|
|
48
41
|
return importEntries(chunks, 'import:chatgpt', ['imported', 'chatgpt'], options);
|
|
49
42
|
}
|
|
50
|
-
// ---------------------------------------------------------------------------
|
|
51
|
-
// Claude importer
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
43
|
const HIPPO_START = '<!-- hippo:start -->';
|
|
54
44
|
const HIPPO_END = '<!-- hippo:end -->';
|
|
55
|
-
/**
|
|
56
|
-
* Strip the hippo hook block from markdown content.
|
|
57
|
-
*/
|
|
45
|
+
/** Strip the hippo hook block from markdown content. */
|
|
58
46
|
function stripHippoBlock(content) {
|
|
59
47
|
const startIdx = content.indexOf(HIPPO_START);
|
|
60
48
|
const endIdx = content.indexOf(HIPPO_END);
|
|
@@ -62,9 +50,7 @@ function stripHippoBlock(content) {
|
|
|
62
50
|
return content;
|
|
63
51
|
return content.slice(0, startIdx) + content.slice(endIdx + HIPPO_END.length);
|
|
64
52
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Split markdown into meaningful chunks (headings + bullet points).
|
|
67
|
-
*/
|
|
53
|
+
/** Split markdown into meaningful chunks (headings + bullet points). */
|
|
68
54
|
function splitMarkdown(content) {
|
|
69
55
|
const chunks = [];
|
|
70
56
|
const lines = content.split('\n');
|
|
@@ -119,9 +105,7 @@ function appendLine(chunks, open, line) {
|
|
|
119
105
|
// Regular line: append to current
|
|
120
106
|
return current ? current + ' ' + trimmed : trimmed;
|
|
121
107
|
}
|
|
122
|
-
/**
|
|
123
|
-
* Parse CLAUDE.md or Claude memory.json.
|
|
124
|
-
*/
|
|
108
|
+
/** Parse CLAUDE.md or Claude memory.json. */
|
|
125
109
|
function parseClaudeFile(filePath) {
|
|
126
110
|
const raw = fs.readFileSync(filePath, 'utf8');
|
|
127
111
|
// JSON memory file
|
|
@@ -144,13 +128,8 @@ export function importClaude(filePath, options) {
|
|
|
144
128
|
const chunks = parseClaudeFile(filePath);
|
|
145
129
|
return importEntries(chunks, 'import:claude', ['imported', 'claude'], options);
|
|
146
130
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
// ---------------------------------------------------------------------------
|
|
150
|
-
/**
|
|
151
|
-
* Split cursor rules file into chunks.
|
|
152
|
-
* Priority: numbered items, then bullet points, then double newlines.
|
|
153
|
-
*/
|
|
131
|
+
/** Split cursor rules file into chunks.
|
|
132
|
+
* Priority: numbered items, then bullet points, then double newlines. */
|
|
154
133
|
function parseCursorFile(content) {
|
|
155
134
|
const chunks = [];
|
|
156
135
|
const lines = content.split('\n');
|
|
@@ -206,14 +185,7 @@ export function importCursor(sourcePath, options) {
|
|
|
206
185
|
});
|
|
207
186
|
return importEntries(chunks, 'import:cursor', ['imported', 'cursor'], options);
|
|
208
187
|
}
|
|
209
|
-
|
|
210
|
-
// Generic file importer
|
|
211
|
-
// ---------------------------------------------------------------------------
|
|
212
|
-
/**
|
|
213
|
-
* Split a generic file into chunks.
|
|
214
|
-
* Markdown: split on headings and bullet points.
|
|
215
|
-
* Plain text: split on double newlines or one-per-line.
|
|
216
|
-
*/
|
|
188
|
+
/** Split a generic file into chunks: markdown on headings and bullets, plain text on double newlines or one per line. */
|
|
217
189
|
function parseGenericFile(filePath) {
|
|
218
190
|
const raw = fs.readFileSync(filePath, 'utf8');
|
|
219
191
|
const isMarkdown = filePath.endsWith('.md') || filePath.endsWith('.mdx');
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import { type ImportResult, type ImportOptions } from './core.js';
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* NOT re-entrant: idempotency rests on the in-memory `existing` Map loaded once
|
|
6
|
-
* at the top. Two concurrent importVault runs over the same vault could both see
|
|
7
|
-
* a note as absent and double-insert (the connector pattern relies on a single
|
|
8
|
-
* sequential writer; same caveat applies here).
|
|
9
|
-
*/
|
|
2
|
+
/** Import a markdown vault FOLDER as `kind='raw'` memories.
|
|
3
|
+
* NOT re-entrant: idempotency rests on the in-memory `existing` Map loaded once, so two concurrent runs over one vault can double-insert. */
|
|
10
4
|
export declare function importVault(folderPath: string, options: ImportOptions): ImportResult;
|
|
11
5
|
//# sourceMappingURL=vault.d.ts.map
|