hippo-memory 1.68.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +4 -13
- package/dist/api/forget.js +13 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +9 -46
- package/dist/api/outcome.js +15 -57
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +7 -18
- package/dist/api/promote.js +30 -152
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +12 -13
- package/dist/api/remember.js +38 -27
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +59 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +8 -3
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -82
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -48
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -90
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/core/capture-contract.js +149 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +65 -63
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +21 -20
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +3 -2
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +41 -50
- package/dist/server.js +26 -560
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +12 -6
- package/dist/store/audit-event.js +6 -5
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +6 -3
- package/dist/store/handoffs.js +70 -31
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +8 -4
- package/dist/store/open.js +34 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/sqlite/entry-writes-group.js +170 -0
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +17 -2
- package/dist/{env.js → util/env.js} +22 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/capture-contract.js +0 -49
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
package/dist/hooks/opencode.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { homeDir } from './shared.js';
|
|
4
|
+
import { writeFileAtomic } from '../util/atomic-write.js';
|
|
5
|
+
import { isJsonString, isJsonObjectLiteral } from '../util/json.js';
|
|
5
6
|
const HIPPO_OPENCODE_PLUGIN_MARKER = 'HIPPO_OPENCODE_PLUGIN_V1';
|
|
6
7
|
/**
|
|
7
8
|
* The opencode plugin file we install at ~/.config/opencode/plugins/hippo.ts.
|
|
@@ -91,7 +92,7 @@ function resolveOpencodeConfigPath() {
|
|
|
91
92
|
*/
|
|
92
93
|
const HIPPO_OWNED_COMMAND_RE = /^\s*hippo\s+(session-end|last-sleep|sleep|capture|context)(?=\s|$)/;
|
|
93
94
|
function hookIsHippoOwned(hook) {
|
|
94
|
-
if (!
|
|
95
|
+
if (!isJsonObjectLiteral(hook))
|
|
95
96
|
return false;
|
|
96
97
|
const cmd = hook.command;
|
|
97
98
|
return isJsonString(cmd) && HIPPO_OWNED_COMMAND_RE.test(cmd);
|
|
@@ -127,7 +128,7 @@ function migrateLegacyOpencodeHooksBlock() {
|
|
|
127
128
|
const hooks = settings.hooks;
|
|
128
129
|
// Non-object hooks values (string, array, null) are user content we don't
|
|
129
130
|
// recognise — leave them alone, return migrated=false.
|
|
130
|
-
if (!
|
|
131
|
+
if (!isJsonObjectLiteral(hooks)) {
|
|
131
132
|
return { migrated: false, jsonRepairFailed: false };
|
|
132
133
|
}
|
|
133
134
|
const hooksObj = hooks;
|
|
@@ -135,26 +136,9 @@ function migrateLegacyOpencodeHooksBlock() {
|
|
|
135
136
|
for (const key of Object.keys(hooksObj)) {
|
|
136
137
|
if (!Array.isArray(hooksObj[key]))
|
|
137
138
|
continue;
|
|
138
|
-
const survivingEntries = [];
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
survivingEntries.push(entry);
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
const innerHooks = entry.hooks;
|
|
145
|
-
if (!Array.isArray(innerHooks)) {
|
|
146
|
-
survivingEntries.push(entry);
|
|
147
|
-
continue;
|
|
148
|
-
}
|
|
149
|
-
const beforeInner = innerHooks.length;
|
|
150
|
-
const survivingInner = innerHooks.filter((h) => !hookIsHippoOwned(h));
|
|
151
|
-
if (survivingInner.length !== beforeInner)
|
|
152
|
-
changed = true;
|
|
153
|
-
if (survivingInner.length === 0)
|
|
154
|
-
continue; // drop entry, nothing left
|
|
155
|
-
entry.hooks = survivingInner;
|
|
156
|
-
survivingEntries.push(entry);
|
|
157
|
-
}
|
|
139
|
+
const { survivingEntries, strippedAny } = stripHippoHooksFromEntries(hooksObj[key]);
|
|
140
|
+
if (strippedAny)
|
|
141
|
+
changed = true;
|
|
158
142
|
if (survivingEntries.length !== hooksObj[key].length)
|
|
159
143
|
changed = true;
|
|
160
144
|
hooksObj[key] = survivingEntries;
|
|
@@ -165,9 +149,34 @@ function migrateLegacyOpencodeHooksBlock() {
|
|
|
165
149
|
return { migrated: false, jsonRepairFailed: false };
|
|
166
150
|
if (Object.keys(hooksObj).length === 0)
|
|
167
151
|
delete settings.hooks;
|
|
168
|
-
|
|
152
|
+
writeFileAtomic(configPath, JSON.stringify(settings, null, 2) + '\n');
|
|
169
153
|
return { migrated: true, jsonRepairFailed: false };
|
|
170
154
|
}
|
|
155
|
+
/** One event's entries with every hippo-owned hook taken out, and whether any was. */
|
|
156
|
+
function stripHippoHooksFromEntries(entries) {
|
|
157
|
+
const survivingEntries = [];
|
|
158
|
+
let strippedAny = false;
|
|
159
|
+
for (const entry of entries) {
|
|
160
|
+
if (!isJsonObjectLiteral(entry)) {
|
|
161
|
+
survivingEntries.push(entry);
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const innerHooks = entry.hooks;
|
|
165
|
+
if (!Array.isArray(innerHooks)) {
|
|
166
|
+
survivingEntries.push(entry);
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
const beforeInner = innerHooks.length;
|
|
170
|
+
const survivingInner = innerHooks.filter((h) => !hookIsHippoOwned(h));
|
|
171
|
+
if (survivingInner.length !== beforeInner)
|
|
172
|
+
strippedAny = true;
|
|
173
|
+
if (survivingInner.length === 0)
|
|
174
|
+
continue; // drop entry, nothing left
|
|
175
|
+
entry.hooks = survivingInner;
|
|
176
|
+
survivingEntries.push(entry);
|
|
177
|
+
}
|
|
178
|
+
return { survivingEntries, strippedAny };
|
|
179
|
+
}
|
|
171
180
|
export function installOpencodePlugin() {
|
|
172
181
|
const pluginPath = resolveOpencodePluginPath();
|
|
173
182
|
const { migrated, jsonRepairFailed } = migrateLegacyOpencodeHooksBlock();
|
|
@@ -181,8 +190,7 @@ export function installOpencodePlugin() {
|
|
|
181
190
|
return { installed: false, pluginPath, migratedLegacyHooks: migrated, jsonRepairFailed };
|
|
182
191
|
}
|
|
183
192
|
}
|
|
184
|
-
|
|
185
|
-
fs.writeFileSync(pluginPath, OPENCODE_PLUGIN_SOURCE, 'utf8');
|
|
193
|
+
writeFileAtomic(pluginPath, OPENCODE_PLUGIN_SOURCE);
|
|
186
194
|
return { installed: true, pluginPath, migratedLegacyHooks: migrated, jsonRepairFailed };
|
|
187
195
|
}
|
|
188
196
|
export function uninstallOpencodePlugin() {
|
package/dist/hooks/shared.d.ts
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import type { JsonObject } from '../working-memory.js';
|
|
2
|
-
import type { JsonValue } from '../json.js';
|
|
3
|
-
/** JSON-value plain-object check (excludes arrays and null); `constructor` avoids the `typeof` tag banned by anti-slop/no-runtime-typeof. */
|
|
4
|
-
export declare function isJsonObject(value: JsonValue | undefined): value is JsonObject;
|
|
5
1
|
export type JsonHookTarget = 'claude-code' | 'codex' | 'copilot';
|
|
6
2
|
export interface ToolDetection {
|
|
7
3
|
name: string;
|
|
@@ -30,7 +26,13 @@ export declare function copilotHomeDir(home?: string, env?: Readonly<Record<stri
|
|
|
30
26
|
export declare function claudeConfigDir(home?: string, env?: Readonly<Record<string, string | undefined>>): string;
|
|
31
27
|
/** Codex counts as installed only when its config folder exists: Codex itself refuses a CODEX_HOME that is not a folder. */
|
|
32
28
|
export declare function isCodexPresent(home?: string): boolean;
|
|
33
|
-
/**
|
|
29
|
+
/** hippo's own hooks file, in the hooks folder the Copilot CLI reads. */
|
|
30
|
+
export declare function copilotHooksFile(): string;
|
|
31
|
+
/** Where VS Code's agent finds hippo.json: its docs name ~/.copilot/hooks as the user hooks folder, whatever COPILOT_HOME says. */
|
|
32
|
+
export declare function vscodeUserHooksFile(home?: string): string;
|
|
33
|
+
/** The VS Code User folders that exist; Stable and Insiders keep their own, and only an edition the user has run has one. */
|
|
34
|
+
export declare function vscodeUserDirs(env?: Readonly<Record<string, string | undefined>>, home?: string): string[];
|
|
35
|
+
/** Copilot counts as installed only when its config folder or a VS Code User folder exists, so setup never creates ~/.copilot on a machine with neither. */
|
|
34
36
|
export declare function isCopilotPresent(home?: string): boolean;
|
|
35
37
|
/** 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. */
|
|
36
38
|
export declare 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`.";
|
package/dist/hooks/shared.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
import { envHomeDir, processEnv } from '../env.js';
|
|
1
|
+
import { envHomeDir, processEnv } from '../util/env.js';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as os from 'os';
|
|
4
4
|
import * as path from 'path';
|
|
5
|
-
|
|
6
|
-
export function isJsonObject(value) {
|
|
7
|
-
return value !== undefined && value !== null && !Array.isArray(value) && value.constructor === Object;
|
|
8
|
-
}
|
|
5
|
+
import { vscodeDataFolders } from '../agent-memories/copilot.js';
|
|
9
6
|
export const HIPPO_SLEEP_MARKER = 'hippo sleep';
|
|
10
7
|
export const HIPPO_LAST_SLEEP_MARKER = 'hippo last-sleep';
|
|
11
8
|
export const HIPPO_CAPTURE_MARKER = 'hippo capture --last-session';
|
|
@@ -36,9 +33,23 @@ export function claudeConfigDir(home = os.homedir(), env = processEnv()) {
|
|
|
36
33
|
export function isCodexPresent(home = homeDir()) {
|
|
37
34
|
return fs.statSync(codexHomeDir(home), { throwIfNoEntry: false })?.isDirectory() === true;
|
|
38
35
|
}
|
|
39
|
-
/**
|
|
36
|
+
/** hippo's own hooks file, in the hooks folder the Copilot CLI reads. */
|
|
37
|
+
export function copilotHooksFile() {
|
|
38
|
+
return path.join(copilotHomeDir(), 'hooks', 'hippo.json');
|
|
39
|
+
}
|
|
40
|
+
/** Where VS Code's agent finds hippo.json: its docs name ~/.copilot/hooks as the user hooks folder, whatever COPILOT_HOME says. */
|
|
41
|
+
export function vscodeUserHooksFile(home = os.homedir()) {
|
|
42
|
+
return path.join(home, '.copilot', 'hooks', 'hippo.json');
|
|
43
|
+
}
|
|
44
|
+
/** The VS Code User folders that exist; Stable and Insiders keep their own, and only an edition the user has run has one. */
|
|
45
|
+
export function vscodeUserDirs(env = processEnv(), home = os.homedir()) {
|
|
46
|
+
return vscodeDataFolders({ env, home, platform: process.platform })
|
|
47
|
+
.map((dir) => path.join(dir, 'User'))
|
|
48
|
+
.filter((dir) => fs.statSync(dir, { throwIfNoEntry: false })?.isDirectory() === true);
|
|
49
|
+
}
|
|
50
|
+
/** Copilot counts as installed only when its config folder or a VS Code User folder exists, so setup never creates ~/.copilot on a machine with neither. */
|
|
40
51
|
export function isCopilotPresent(home = os.homedir()) {
|
|
41
|
-
return fs.statSync(copilotHomeDir(home), { throwIfNoEntry: false })?.isDirectory() === true;
|
|
52
|
+
return fs.statSync(copilotHomeDir(home), { throwIfNoEntry: false })?.isDirectory() === true || vscodeUserDirs(processEnv(), home).length > 0;
|
|
42
53
|
}
|
|
43
54
|
/** 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. */
|
|
44
55
|
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`.";
|
|
@@ -76,7 +87,7 @@ export function detectInstalledTools() {
|
|
|
76
87
|
{ name: 'opencode', configDir: '~/.config/opencode', detected: exists('.config', 'opencode'), kind: 'plugin', notes: 'installs a TS plugin at ~/.config/opencode/plugins/hippo.ts' },
|
|
77
88
|
{ name: 'openclaw', configDir: '~/.openclaw', detected: exists('.openclaw'), kind: 'plugin', notes: 'install via `openclaw plugins install hippo-memory`' },
|
|
78
89
|
{ name: 'codex', configDir: '~/.codex', detected: isCodexPresent(home), kind: 'wrapper', notes: 'memory hooks in hooks.json, and wraps the detected codex launcher for session-end consolidation' },
|
|
79
|
-
{ 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' },
|
|
90
|
+
{ 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' },
|
|
80
91
|
{ name: 'cursor', configDir: '~/.cursor', detected: exists('.cursor'), kind: 'markdown-instruction', notes: 'no hook API - patches AGENTS.md in the project' },
|
|
81
92
|
{ name: 'pi', configDir: '~/.pi', detected: exists('.pi'), kind: 'markdown-instruction', notes: 'no hook API - patches AGENTS.md in the project' },
|
|
82
93
|
];
|
package/dist/importers/core.d.ts
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* Memory importers for Hippo.
|
|
3
3
|
* Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown.
|
|
4
4
|
*/
|
|
5
|
-
import { MemoryEntry } from '../memory.js';
|
|
6
|
-
import type { JsonValue } from '../json.js';
|
|
5
|
+
import { MemoryEntry } from '../core/memory.js';
|
|
7
6
|
export interface ImportResult {
|
|
8
7
|
total: number;
|
|
9
8
|
imported: number;
|
|
@@ -45,7 +44,7 @@ export interface ImportOptions {
|
|
|
45
44
|
* sharing a basename would collide and clobber each other). importVault throws
|
|
46
45
|
* if it is missing or blank. Optional in this shared type only because the
|
|
47
46
|
* other importers ignore it. Operator-supplied, so the loader query LIKE-escapes
|
|
48
|
-
* it (`escapeLike` in src/escape.ts).
|
|
47
|
+
* it (`escapeLike` in src/util/escape.ts).
|
|
49
48
|
*/
|
|
50
49
|
name?: string;
|
|
51
50
|
/**
|
|
@@ -59,7 +58,4 @@ export interface ImportOptions {
|
|
|
59
58
|
* create MemoryEntry objects, write them (unless dry-run), and return a result.
|
|
60
59
|
*/
|
|
61
60
|
export declare function importEntries(chunks: string[], source: string, tags: string[], options: ImportOptions): ImportResult;
|
|
62
|
-
export declare function isJsonPlainObject(x: JsonValue): x is {
|
|
63
|
-
[key: string]: JsonValue;
|
|
64
|
-
};
|
|
65
61
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/importers/core.js
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
* Memory importers for Hippo.
|
|
3
3
|
* Imports memories from ChatGPT, Claude, Cursor, generic files, and structured markdown.
|
|
4
4
|
*/
|
|
5
|
-
import { createMemory, Layer } from '../memory.js';
|
|
6
|
-
import {
|
|
7
|
-
import { openStore } from '../store/open.js';
|
|
5
|
+
import { createMemory, Layer } from '../core/memory.js';
|
|
6
|
+
import { writeEntry } from '../store/entry-writes.js';
|
|
8
7
|
import { loadAllEntries } from '../store/entry-reads.js';
|
|
9
|
-
import { duplicateKey, storedTextKeys } from '../same-text.js';
|
|
10
|
-
import { getGlobalRoot, initGlobal } from '../shared.js';
|
|
11
|
-
import {
|
|
12
|
-
import { RejectedValueError
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
8
|
+
import { duplicateKey, storedTextKeys } from '../util/same-text.js';
|
|
9
|
+
import { getGlobalRoot, initGlobal } from '../sharing/shared.js';
|
|
10
|
+
import { withRequestStoresSync } from '../db/request-stores.js';
|
|
11
|
+
import { RejectedValueError } from '../store/rejection.js';
|
|
12
|
+
import { rejectionGuardRefuses } from '../store/rejected-values.js';
|
|
13
|
+
import { loadConfig } from '../core/config.js';
|
|
14
|
+
import { vetSecrets } from '../util/secret-detect.js';
|
|
15
|
+
import { log } from '../util/log.js';
|
|
16
16
|
// ---------------------------------------------------------------------------
|
|
17
17
|
// Shared core: dedup + write
|
|
18
18
|
// ---------------------------------------------------------------------------
|
|
@@ -21,12 +21,7 @@ import { log } from '../log.js';
|
|
|
21
21
|
* create MemoryEntry objects, write them (unless dry-run), and return a result.
|
|
22
22
|
*/
|
|
23
23
|
export function importEntries(chunks, source, tags, options) {
|
|
24
|
-
const targetRoot
|
|
25
|
-
// Ensure store is ready
|
|
26
|
-
if (options.global) {
|
|
27
|
-
initGlobal();
|
|
28
|
-
}
|
|
29
|
-
const keys = storedTextKeys(loadAllEntries(targetRoot, options.global ? undefined : options.tenantId));
|
|
24
|
+
const { targetRoot, keys } = openImportTarget(options);
|
|
30
25
|
const allTags = [...new Set([...tags, ...(options.extraTags ?? [])])];
|
|
31
26
|
const baseHalfLifeDays = loadConfig(targetRoot).defaultHalfLifeDays;
|
|
32
27
|
let total = 0;
|
|
@@ -35,24 +30,19 @@ export function importEntries(chunks, source, tags, options) {
|
|
|
35
30
|
let rejected = 0;
|
|
36
31
|
let redacted = 0;
|
|
37
32
|
const entries = [];
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
try {
|
|
33
|
+
// One scope, so the store opens once however many chunks land: each write, or a dry run's guard probe, shares its handle.
|
|
34
|
+
return withRequestStoresSync(() => {
|
|
41
35
|
for (const raw of chunks) {
|
|
42
36
|
const { chunk, wasRedacted } = prepareImportChunk(raw, allTags);
|
|
43
|
-
|
|
44
|
-
if (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
total++;
|
|
49
|
-
// Dedup check: skip only when the same text is already stored
|
|
50
|
-
if (keys.has(duplicateKey(chunk))) {
|
|
37
|
+
const skip = skipReason(chunk, keys);
|
|
38
|
+
if (skip !== 'too-short')
|
|
39
|
+
total++;
|
|
40
|
+
if (skip !== null) {
|
|
51
41
|
skipped++;
|
|
52
42
|
continue;
|
|
53
43
|
}
|
|
54
44
|
const entry = createImportEntry(chunk, source, allTags, options, baseHalfLifeDays);
|
|
55
|
-
if (!writeOrProbeImport(
|
|
45
|
+
if (!writeOrProbeImport(targetRoot, entry, options)) {
|
|
56
46
|
rejected++;
|
|
57
47
|
continue;
|
|
58
48
|
}
|
|
@@ -65,10 +55,26 @@ export function importEntries(chunks, source, tags, options) {
|
|
|
65
55
|
redacted++;
|
|
66
56
|
}
|
|
67
57
|
return { total, imported, skipped, rejected, redacted, entries };
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/** The store the import writes to, made ready, with the text keys it already holds. */
|
|
61
|
+
function openImportTarget(options) {
|
|
62
|
+
const targetRoot = options.global ? getGlobalRoot() : options.hippoRoot;
|
|
63
|
+
// Ensure store is ready
|
|
64
|
+
if (options.global) {
|
|
65
|
+
initGlobal();
|
|
68
66
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
const keys = storedTextKeys(loadAllEntries(targetRoot, options.global ? undefined : options.tenantId));
|
|
68
|
+
return { targetRoot, keys };
|
|
69
|
+
}
|
|
70
|
+
function skipReason(chunk, keys) {
|
|
71
|
+
// Skip empty or too-short chunks
|
|
72
|
+
if (!chunk || chunk.length < 10)
|
|
73
|
+
return 'too-short';
|
|
74
|
+
// Dedup check: skip only when the same text is already stored
|
|
75
|
+
if (keys.has(duplicateKey(chunk)))
|
|
76
|
+
return 'duplicate';
|
|
77
|
+
return null;
|
|
72
78
|
}
|
|
73
79
|
/** The secret-vetted chunk capped at 1000 chars, and whether vetting changed it. */
|
|
74
80
|
function prepareImportChunk(raw, allTags) {
|
|
@@ -102,13 +108,12 @@ function createImportEntry(chunk, source, allTags, options, baseHalfLifeDays) {
|
|
|
102
108
|
});
|
|
103
109
|
}
|
|
104
110
|
/** Writes the entry, or on a dry run only probes the guard; false when a rejected value refuses it. */
|
|
105
|
-
function writeOrProbeImport(
|
|
111
|
+
function writeOrProbeImport(targetRoot, entry, options) {
|
|
112
|
+
if (options.dryRun)
|
|
113
|
+
return !rejectionGuardRefuses(targetRoot, entry.tenantId ?? 'default', entry.id, entry.content);
|
|
106
114
|
// A rejection refuses one chunk, not the whole import, so siblings still land.
|
|
107
115
|
try {
|
|
108
|
-
|
|
109
|
-
checkRejectionGuard(db, entry.tenantId ?? 'default', entry.id, entry.content);
|
|
110
|
-
else
|
|
111
|
-
writeEntryOn(db, targetRoot, entry);
|
|
116
|
+
writeEntry(targetRoot, entry);
|
|
112
117
|
}
|
|
113
118
|
catch (err) {
|
|
114
119
|
if (err instanceof RejectedValueError)
|
|
@@ -120,7 +125,4 @@ function writeOrProbeImport(db, targetRoot, entry, options) {
|
|
|
120
125
|
// ---------------------------------------------------------------------------
|
|
121
126
|
// ChatGPT importer
|
|
122
127
|
// ---------------------------------------------------------------------------
|
|
123
|
-
export function isJsonPlainObject(x) {
|
|
124
|
-
return x !== null && !Array.isArray(x) && typeof x === 'object';
|
|
125
|
-
}
|
|
126
128
|
//# sourceMappingURL=core.js.map
|
|
@@ -6,7 +6,7 @@ interface FrontmatterParseResult {
|
|
|
6
6
|
fm: Record<string, string>;
|
|
7
7
|
body: string;
|
|
8
8
|
}
|
|
9
|
-
export declare function
|
|
9
|
+
export declare function splitMarkdownFrontmatter(raw: string): FrontmatterParseResult;
|
|
10
10
|
/** Pull a frontmatter field that may be a YAML flow list (`[a, b]`), a
|
|
11
11
|
* comma-separated scalar (`a, b`), or a single token, into a string[]. Quotes
|
|
12
12
|
* and surrounding brackets are stripped; empty entries dropped. */
|
|
@@ -28,14 +28,5 @@ export declare function parseWikilinks(body: string): string[];
|
|
|
28
28
|
* importVault (a no-op early return), NOT here: returning [] for it would feed
|
|
29
29
|
* the deletion-sync an empty scan that mass-archives every live row (codex R8). */
|
|
30
30
|
export declare function collectMarkdownFiles(root: string, hippoRoot: string, match?: RegExp): string[];
|
|
31
|
-
/** Canonicalize a path for the self-store comparison: dereference symlinks /
|
|
32
|
-
* junctions and normalize case (Windows) via the OS realpath, so a junction or
|
|
33
|
-
* a case-variant path to the store is still recognized as self-store (codex R9
|
|
34
|
-
* P2: path.resolve does neither, so an aliased store path slipped past the
|
|
35
|
-
* guard and triggered the mass-archive). Falls back to path.resolve when the
|
|
36
|
-
* path does not exist yet - an uninitialized store or a typo'd vault path
|
|
37
|
-
* cannot be a live self-store, and a non-existent vault folder fails later in
|
|
38
|
-
* the walk (readdirSync) before deletion-sync can archive anything. */
|
|
39
|
-
export declare function realpathOrResolve(p: string): string;
|
|
40
31
|
export {};
|
|
41
32
|
//# sourceMappingURL=markdown-parse.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import {
|
|
4
|
-
export function
|
|
3
|
+
import { realpathOrResolve } from '../util/real-path.js';
|
|
4
|
+
export function splitMarkdownFrontmatter(raw) {
|
|
5
5
|
// Must start with `---` on its own line. Accept CRLF or LF.
|
|
6
6
|
const m = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/);
|
|
7
7
|
if (!m)
|
|
@@ -112,21 +112,4 @@ export function collectMarkdownFiles(root, hippoRoot, match = /\.md$/i) {
|
|
|
112
112
|
out.sort();
|
|
113
113
|
return out;
|
|
114
114
|
}
|
|
115
|
-
/** Canonicalize a path for the self-store comparison: dereference symlinks /
|
|
116
|
-
* junctions and normalize case (Windows) via the OS realpath, so a junction or
|
|
117
|
-
* a case-variant path to the store is still recognized as self-store (codex R9
|
|
118
|
-
* P2: path.resolve does neither, so an aliased store path slipped past the
|
|
119
|
-
* guard and triggered the mass-archive). Falls back to path.resolve when the
|
|
120
|
-
* path does not exist yet - an uninitialized store or a typo'd vault path
|
|
121
|
-
* cannot be a live self-store, and a non-existent vault folder fails later in
|
|
122
|
-
* the walk (readdirSync) before deletion-sync can archive anything. */
|
|
123
|
-
export function realpathOrResolve(p) {
|
|
124
|
-
try {
|
|
125
|
-
return fs.realpathSync.native(p);
|
|
126
|
-
}
|
|
127
|
-
catch (err) {
|
|
128
|
-
log.debug(`import: realpath fell back to resolve for ${p}: ${err instanceof Error ? err.message : String(err)}`);
|
|
129
|
-
return path.resolve(p);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
115
|
//# sourceMappingURL=markdown-parse.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import { importEntries } from './core.js';
|
|
3
|
+
const SLUG_MAX_CHARS = 50;
|
|
3
4
|
// ---------------------------------------------------------------------------
|
|
4
5
|
// Structured markdown importer (MEMORY.md / AGENTS.md format)
|
|
5
6
|
// ---------------------------------------------------------------------------
|
|
@@ -14,7 +15,7 @@ function slugify(heading) {
|
|
|
14
15
|
.trim()
|
|
15
16
|
.replace(/\s+/g, '-')
|
|
16
17
|
.replace(/-+/g, '-')
|
|
17
|
-
.slice(0,
|
|
18
|
+
.slice(0, SLUG_MAX_CHARS);
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
20
21
|
* Parse structured markdown into {content, sectionSlug} pairs.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
import { importEntries
|
|
4
|
-
import {
|
|
5
|
-
import { isJsonString } from '../json.js';
|
|
3
|
+
import { importEntries } from './core.js';
|
|
4
|
+
import { splitMarkdownFrontmatter, collectMarkdownFiles } from './markdown-parse.js';
|
|
5
|
+
import { isJsonString, isJsonObject } from '../util/json.js';
|
|
6
6
|
/** Coerce one imported record (string, `{content|text: ...}` object, or
|
|
7
7
|
* anything else) into the plain-text memory chunk it represents. */
|
|
8
8
|
function extractMemoryText(candidate) {
|
|
9
9
|
if (isJsonString(candidate))
|
|
10
10
|
return candidate;
|
|
11
|
-
if (
|
|
11
|
+
if (isJsonObject(candidate)) {
|
|
12
12
|
return String(candidate['content'] ?? candidate['text'] ?? '');
|
|
13
13
|
}
|
|
14
14
|
return '';
|
|
@@ -28,7 +28,7 @@ function parseChatGPTFile(filePath) {
|
|
|
28
28
|
try {
|
|
29
29
|
const parsed = JSON.parse(raw);
|
|
30
30
|
// {"memories": [...]} - ChatGPT export format
|
|
31
|
-
if (
|
|
31
|
+
if (isJsonObject(parsed) && Array.isArray(parsed.memories)) {
|
|
32
32
|
return parsed.memories.map(extractMemoryText).filter(Boolean);
|
|
33
33
|
}
|
|
34
34
|
// Array format
|
|
@@ -69,51 +69,55 @@ function splitMarkdown(content) {
|
|
|
69
69
|
const chunks = [];
|
|
70
70
|
const lines = content.split('\n');
|
|
71
71
|
let current = '';
|
|
72
|
-
for (const line of lines)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
72
|
+
for (const line of lines)
|
|
73
|
+
current = appendLine(chunks, current, line);
|
|
74
|
+
if (current.trim())
|
|
75
|
+
chunks.push(current.trim());
|
|
76
|
+
return chunks.filter(Boolean);
|
|
77
|
+
}
|
|
78
|
+
/** Takes one line into the chunk being built, pushing that chunk when the line ends it; returns the chunk still open. */
|
|
79
|
+
function appendLine(chunks, open, line) {
|
|
80
|
+
let current = open;
|
|
81
|
+
const trimmed = line.trim();
|
|
82
|
+
// Heading: start a new chunk
|
|
83
|
+
if (/^#{1,6}\s+/.test(trimmed)) {
|
|
84
|
+
if (current.trim())
|
|
85
|
+
chunks.push(current.trim());
|
|
86
|
+
current = trimmed;
|
|
87
|
+
return current;
|
|
88
|
+
}
|
|
89
|
+
// Bullet point: each bullet is its own chunk (flush previous if not a bullet context)
|
|
90
|
+
if (/^[-*+]\s+/.test(trimmed)) {
|
|
91
|
+
if (current.trim() && !/^[-*+]\s+/.test(current.split('\n')[0])) {
|
|
92
|
+
chunks.push(current.trim());
|
|
93
|
+
current = '';
|
|
80
94
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
chunks.push(current.trim());
|
|
85
|
-
current = '';
|
|
86
|
-
}
|
|
87
|
-
if (current.trim()) {
|
|
88
|
-
chunks.push(current.trim());
|
|
89
|
-
current = '';
|
|
90
|
-
}
|
|
91
|
-
current = trimmed.replace(/^[-*+]\s+/, '').trim();
|
|
92
|
-
continue;
|
|
95
|
+
if (current.trim()) {
|
|
96
|
+
chunks.push(current.trim());
|
|
97
|
+
current = '';
|
|
93
98
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
current = trimmed.replace(/^[-*+]\s+/, '').trim();
|
|
100
|
+
return current;
|
|
101
|
+
}
|
|
102
|
+
// Numbered list item
|
|
103
|
+
if (/^\d+\.\s+/.test(trimmed)) {
|
|
104
|
+
if (current.trim()) {
|
|
105
|
+
chunks.push(current.trim());
|
|
106
|
+
current = '';
|
|
102
107
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
current = trimmed.replace(/^\d+\.\s+/, '').trim();
|
|
109
|
+
return current;
|
|
110
|
+
}
|
|
111
|
+
// Empty line
|
|
112
|
+
if (!trimmed) {
|
|
113
|
+
if (current.trim()) {
|
|
114
|
+
chunks.push(current.trim());
|
|
115
|
+
current = '';
|
|
110
116
|
}
|
|
111
|
-
|
|
112
|
-
current = current ? current + ' ' + trimmed : trimmed;
|
|
117
|
+
return current;
|
|
113
118
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
return chunks.filter(Boolean);
|
|
119
|
+
// Regular line: append to current
|
|
120
|
+
return current ? current + ' ' + trimmed : trimmed;
|
|
117
121
|
}
|
|
118
122
|
/**
|
|
119
123
|
* Parse CLAUDE.md or Claude memory.json.
|
|
@@ -198,7 +202,7 @@ export function importCursor(sourcePath, options) {
|
|
|
198
202
|
: [sourcePath];
|
|
199
203
|
const chunks = files.flatMap((file) => {
|
|
200
204
|
const raw = fs.readFileSync(file, 'utf8');
|
|
201
|
-
return parseCursorFile(CURSOR_RULE_FILE.test(file) ?
|
|
205
|
+
return parseCursorFile(CURSOR_RULE_FILE.test(file) ? splitMarkdownFrontmatter(raw).body : raw);
|
|
202
206
|
});
|
|
203
207
|
return importEntries(chunks, 'import:cursor', ['imported', 'cursor'], options);
|
|
204
208
|
}
|