hippo-memory 2.0.0 → 2.1.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/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +32 -19
- package/dist/api/prompt-hook.js +65 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +28 -7
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +33 -14
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +45 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +23 -23
- package/dist/cli/auth.js +19 -27
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +4 -4
- package/dist/cli/object-verbs.js +10 -13
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +14 -6
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -5
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -6
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -6
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -6
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -5
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -6
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +24 -14
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +21 -16
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +84 -27
- package/dist/core/memory.js +73 -29
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -3
- package/dist/db/connect.js +8 -3
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +26 -13
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -4
- package/dist/db/physics-state.js +13 -20
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +19 -5
- package/dist/db/request-stores.js +14 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +19 -6
- package/dist/entry/store-kit.js +6 -4
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +16 -6
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +69 -34
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +8 -7
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +16 -9
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -7
- package/dist/learn/invalidation.js +56 -27
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +18 -14
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +57 -74
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +52 -21
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +9 -6
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +547 -93
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -19
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +75 -36
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +93 -60
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +8 -10
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +3 -1
- package/dist/store/index.js +1 -0
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +215 -229
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +9 -4
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.js +2 -1
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +84 -33
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -11
- package/dist/store/sqlite/store.js +84 -11
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +19 -12
- package/dist/store/summaries.js +36 -21
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +6 -3
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +24 -10
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +16 -4
- package/dist/util/env.js +78 -25
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +11 -3
- package/dist/util/request-scope.js +13 -4
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +3 -1
- package/dist/util/spawn-argv.js +13 -4
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -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 +2 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -11
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -4
- package/dist/store/sqlite/local.js +0 -8
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { type DatabaseSyncLike } from '../db/index.js';
|
|
2
1
|
import { type MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import type { ImportTarget } from '../store/port/agent-import.js';
|
|
3
3
|
import { type Tally } from './report.js';
|
|
4
|
-
import type
|
|
4
|
+
import { type AgentMemoryTool } from '../core/agent-memory-tools.js';
|
|
5
5
|
import type { Container } from './types.js';
|
|
6
6
|
export interface StoreSession {
|
|
7
|
-
readonly
|
|
8
|
-
readonly hippoRoot: string;
|
|
7
|
+
readonly target: ImportTarget;
|
|
9
8
|
readonly tenantId: string;
|
|
10
9
|
readonly baseHalfLifeDays: number;
|
|
11
10
|
/** Stamped on written rows; undefined lets the store stamp its own project. */
|
|
@@ -23,7 +22,10 @@ export interface ContainerWork {
|
|
|
23
22
|
readonly adopt: ReadonlyMap<string, readonly MemoryEntry[]>;
|
|
24
23
|
/** Legacy rows a new row of the key supersedes, by key (second round). */
|
|
25
24
|
readonly replace: ReadonlyMap<string, readonly MemoryEntry[]>;
|
|
26
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* This container's prefixes under the project's earlier names; their rows move here, so a new id imports nothing
|
|
27
|
+
* twice.
|
|
28
|
+
*/
|
|
27
29
|
readonly legacyPrefixes: readonly string[];
|
|
28
30
|
}
|
|
29
31
|
export interface ContainerOutcome {
|
|
@@ -1,28 +1,19 @@
|
|
|
1
|
-
// One container's sync in one transaction on the
|
|
2
|
-
import { appendAuditEvent } from '../store/audit.js';
|
|
3
|
-
import { withTrialScope, withWriteScope } from '../db/index.js';
|
|
4
|
-
import { deleteDormantRow, dormantSnapshotsBySourcePrefix, readDormantSnapshot, replaceDormantEntry } from '../store/dormant.js';
|
|
5
|
-
import { gatedWrite } from '../store/gated-write.js';
|
|
1
|
+
// One container's sync in one transaction on the target store: lookup, plan, then every write (plan designs 6 to 8).
|
|
6
2
|
import { strengthAblation } from '../core/ablation.js';
|
|
7
3
|
import { Layer, calculateStrength, createMemory } from '../core/memory.js';
|
|
8
|
-
import { findRejectedValue, rejectionDigest } from '../store/rejection.js';
|
|
9
4
|
import { redactSecretsStrict } from '../util/secret-detect.js';
|
|
10
|
-
import { stampOriginProject } from '../store/entry-row.js';
|
|
11
|
-
import { renameEntrySourceAndOriginAt, renameEntrySourceAt, setEntryTagsInTx, supersedeEntryAt } from '../store/entry-writes.js';
|
|
12
|
-
import { SYNC_ACTOR, setAsideRow } from '../store/set-aside.js';
|
|
13
|
-
import { entryIdTakenAt, selectLiveEntriesBySourcePrefix } from '../store/entry-reads.js';
|
|
14
|
-
import { markSummaryDirtyInTx } from '../store/summary-dirty.js';
|
|
15
5
|
import { itemHash } from './keys.js';
|
|
16
6
|
import { planContainer } from './plan.js';
|
|
17
7
|
import { emptyTally } from './report.js';
|
|
18
8
|
import { MIN_ITEM_CHARS, itemSource, splitSource, storedText } from './source.js';
|
|
9
|
+
import { SYNC_ACTOR } from '../core/agent-memory-tools.js';
|
|
19
10
|
/** Throws SQLITE_BUSY when another writer holds the store past its busy timeout; nothing is written then. */
|
|
20
11
|
export function syncContainer(s, work) {
|
|
21
|
-
|
|
22
|
-
return s.dryRun ? withTrialScope(s.db, 'sync_container', run) : withWriteScope(s.db, 'sync_container', run);
|
|
12
|
+
return s.target.inContainer('sync_container', s.dryRun, (tx) => new ContainerRun(s, tx, work).run());
|
|
23
13
|
}
|
|
24
14
|
class ContainerRun {
|
|
25
15
|
s;
|
|
16
|
+
tx;
|
|
26
17
|
w;
|
|
27
18
|
tally = emptyTally();
|
|
28
19
|
mirror = [];
|
|
@@ -30,8 +21,9 @@ class ContainerRun {
|
|
|
30
21
|
rows = new Map();
|
|
31
22
|
items = new Map();
|
|
32
23
|
tag;
|
|
33
|
-
constructor(s, w) {
|
|
24
|
+
constructor(s, tx, w) {
|
|
34
25
|
this.s = s;
|
|
26
|
+
this.tx = tx;
|
|
35
27
|
this.w = w;
|
|
36
28
|
this.tag = w.tool.tag;
|
|
37
29
|
for (const item of w.container.items)
|
|
@@ -41,14 +33,18 @@ class ContainerRun {
|
|
|
41
33
|
this.adoptLegacy();
|
|
42
34
|
for (const old of this.w.legacyPrefixes)
|
|
43
35
|
this.adoptPrefix(old);
|
|
44
|
-
const live =
|
|
36
|
+
const live = this.tx.liveBySourcePrefix(this.s.tenantId, this.w.prefix);
|
|
45
37
|
for (const row of [...live, ...[...this.w.replace.values()].flat()])
|
|
46
38
|
this.rows.set(row.id, row);
|
|
47
39
|
const refusals = this.refusals();
|
|
48
40
|
const liveRows = live.map((row) => this.liveRow(row));
|
|
49
41
|
const plan = planContainer({
|
|
50
42
|
textKeyed: this.w.container.textKeyed,
|
|
51
|
-
items: this.w.container.items.map((item) => ({
|
|
43
|
+
items: this.w.container.items.map((item) => ({
|
|
44
|
+
key: item.key,
|
|
45
|
+
hash: itemHash(item.text),
|
|
46
|
+
refused: refusals.has(item.key),
|
|
47
|
+
})),
|
|
52
48
|
skipped: this.w.container.skipped,
|
|
53
49
|
live: liveRows,
|
|
54
50
|
dormant: this.dormantRows(new Set(liveRows.map((r) => r.key)), refusals),
|
|
@@ -84,30 +80,41 @@ class ContainerRun {
|
|
|
84
80
|
continue;
|
|
85
81
|
const source = itemSource(this.w.prefix, key, item.text);
|
|
86
82
|
for (const row of rows) {
|
|
87
|
-
if (
|
|
83
|
+
if (this.tx.renameSource(row.tenant_id, row.id, row.source, source) === 0)
|
|
88
84
|
continue;
|
|
89
85
|
this.tally.adopted++;
|
|
90
86
|
this.mirror.push({ ...row, source });
|
|
91
87
|
}
|
|
92
88
|
}
|
|
93
89
|
}
|
|
94
|
-
/**
|
|
90
|
+
/**
|
|
91
|
+
* Rows filed under an earlier project name keep their id and history; dormant ones move too, scanned only until this
|
|
92
|
+
* prefix holds live rows.
|
|
93
|
+
*/
|
|
95
94
|
adoptPrefix(old) {
|
|
96
95
|
const origin = this.s.originProject ?? null;
|
|
97
96
|
let moved = 0;
|
|
98
|
-
for (const row of
|
|
97
|
+
for (const row of this.tx.liveBySourcePrefix(this.s.tenantId, old)) {
|
|
99
98
|
const source = this.w.prefix + row.source.slice(old.length);
|
|
100
|
-
if (
|
|
99
|
+
if (this.tx.renameSourceAndOrigin(row.tenant_id, row.id, { from: row.source, to: source, origin }) === 0) {
|
|
101
100
|
continue;
|
|
101
|
+
}
|
|
102
102
|
moved++;
|
|
103
103
|
this.mirror.push({ ...row, source, origin_project: origin ?? row.origin_project });
|
|
104
104
|
}
|
|
105
105
|
this.tally.renamed += moved;
|
|
106
|
-
if (moved === 0 &&
|
|
106
|
+
if (moved === 0 &&
|
|
107
|
+
(this.w.container.items.length === 0 ||
|
|
108
|
+
this.tx.liveBySourcePrefix(this.s.tenantId, this.w.prefix).length > 0)) {
|
|
107
109
|
return;
|
|
108
|
-
|
|
110
|
+
}
|
|
111
|
+
for (const snap of this.tx.dormantBySourcePrefix(this.s.tenantId, old)) {
|
|
109
112
|
const source = this.w.prefix + snap.entry.source.slice(old.length);
|
|
110
|
-
|
|
113
|
+
this.tx.replaceDormant(this.s.tenantId, snap.entry.id, {
|
|
114
|
+
...snap.entry,
|
|
115
|
+
source,
|
|
116
|
+
origin_project: origin ?? snap.entry.origin_project,
|
|
117
|
+
});
|
|
111
118
|
}
|
|
112
119
|
}
|
|
113
120
|
refusals() {
|
|
@@ -126,35 +133,51 @@ class ContainerRun {
|
|
|
126
133
|
// Imported rows reach prompts, so the bar is text leaving the machine: Bearer headers and JWTs count too.
|
|
127
134
|
if (redactSecretsStrict(item.text) !== item.text)
|
|
128
135
|
return 'secret';
|
|
129
|
-
if (
|
|
136
|
+
if (this.tx.isRejected(this.s.tenantId, storedText(item.text))) {
|
|
130
137
|
return 'rejected';
|
|
138
|
+
}
|
|
131
139
|
return null;
|
|
132
140
|
}
|
|
133
141
|
liveRow(row) {
|
|
134
|
-
return {
|
|
142
|
+
return {
|
|
143
|
+
id: row.id,
|
|
144
|
+
...splitSource(row.source, this.w.prefix),
|
|
145
|
+
tagged: row.tags.includes(this.tag),
|
|
146
|
+
created: row.created,
|
|
147
|
+
};
|
|
135
148
|
}
|
|
136
149
|
/** Read only when a present key has no live row, which after the first import is rare. */
|
|
137
150
|
dormantRows(liveKeys, refusals) {
|
|
138
151
|
const needed = this.w.container.items.some((item) => !refusals.has(item.key) && !liveKeys.has(item.key));
|
|
139
152
|
if (!needed)
|
|
140
153
|
return [];
|
|
141
|
-
return
|
|
154
|
+
return this.tx.dormantBySourcePrefix(this.s.tenantId, this.w.prefix)
|
|
142
155
|
.filter((snap) => !snap.entry.superseded_by)
|
|
143
|
-
.map((snap) => ({
|
|
156
|
+
.map((snap) => ({
|
|
157
|
+
id: snap.entry.id,
|
|
158
|
+
...splitSource(snap.entry.source, this.w.prefix),
|
|
159
|
+
dormantAt: snap.dormantAt,
|
|
160
|
+
}));
|
|
144
161
|
}
|
|
145
162
|
retag(row) {
|
|
146
163
|
const tagged = { ...row, tags: [...row.tags, this.tag] };
|
|
147
|
-
|
|
164
|
+
this.tx.setTags(tagged);
|
|
148
165
|
this.tally.retagged++;
|
|
149
166
|
this.mirror.push(tagged);
|
|
150
167
|
}
|
|
151
168
|
/** api.supersede's steps on this transaction; false when another writer superseded the row first. */
|
|
152
169
|
supersede(old, newId) {
|
|
153
|
-
if (!
|
|
170
|
+
if (!this.tx.supersede(old.tenant_id, old.id, newId))
|
|
154
171
|
return false;
|
|
155
172
|
if (old.dag_parent_id)
|
|
156
|
-
|
|
157
|
-
|
|
173
|
+
this.tx.markSummaryDirty(old.dag_parent_id, old.tenant_id, SYNC_ACTOR);
|
|
174
|
+
this.tx.appendAudit({
|
|
175
|
+
tenantId: old.tenant_id,
|
|
176
|
+
actor: SYNC_ACTOR,
|
|
177
|
+
op: 'supersede',
|
|
178
|
+
targetId: old.id,
|
|
179
|
+
metadata: { newId },
|
|
180
|
+
});
|
|
158
181
|
this.mirror.push({ ...old, superseded_by: newId });
|
|
159
182
|
return true;
|
|
160
183
|
}
|
|
@@ -181,10 +204,10 @@ class ContainerRun {
|
|
|
181
204
|
? new Date(Math.min(item.updatedAt, Date.parse(base.created))).toISOString()
|
|
182
205
|
: base.created;
|
|
183
206
|
const origin = this.s.originProject === undefined ? {} : { origin_project: this.s.originProject };
|
|
184
|
-
return
|
|
207
|
+
return this.tx.stampOrigin({ ...base, created, valid_from: created, ...origin });
|
|
185
208
|
}
|
|
186
209
|
gated(entry) {
|
|
187
|
-
const result =
|
|
210
|
+
const result = this.tx.gatedWrite(entry, { actor: SYNC_ACTOR, worthCheck: false });
|
|
188
211
|
if (result === 'written') {
|
|
189
212
|
this.mirror.push(entry);
|
|
190
213
|
return true;
|
|
@@ -194,8 +217,8 @@ class ContainerRun {
|
|
|
194
217
|
}
|
|
195
218
|
/** A deleted note came back unchanged: its old row returns with its id and history, under the sync's own audit op. */
|
|
196
219
|
restore(key, dormantId) {
|
|
197
|
-
const snap =
|
|
198
|
-
const taken =
|
|
220
|
+
const snap = this.tx.readDormant(this.s.tenantId, dormantId);
|
|
221
|
+
const taken = this.tx.entryIdTaken(dormantId);
|
|
199
222
|
if (snap === null || taken) {
|
|
200
223
|
this.write({ key, hash: '', supersedes: [] });
|
|
201
224
|
return;
|
|
@@ -208,10 +231,14 @@ class ContainerRun {
|
|
|
208
231
|
tags: [...tags, this.tag],
|
|
209
232
|
last_retrieved: now.toISOString(),
|
|
210
233
|
};
|
|
211
|
-
if (!this.gated(
|
|
234
|
+
if (!this.gated(this.tx.stampOrigin({
|
|
235
|
+
...revived,
|
|
236
|
+
strength: calculateStrength(revived, now, { ablation: strengthAblation() }),
|
|
237
|
+
}))) {
|
|
212
238
|
return;
|
|
213
|
-
|
|
214
|
-
|
|
239
|
+
}
|
|
240
|
+
this.tx.deleteDormant(this.s.tenantId, dormantId);
|
|
241
|
+
this.tx.appendAudit({
|
|
215
242
|
tenantId: this.s.tenantId,
|
|
216
243
|
actor: SYNC_ACTOR,
|
|
217
244
|
op: 'agent_memory_restore',
|
|
@@ -222,7 +249,7 @@ class ContainerRun {
|
|
|
222
249
|
}
|
|
223
250
|
setAside(row) {
|
|
224
251
|
const why = this.items.has(splitSource(row.source, this.w.prefix).key) ? 'note-changed' : 'note-gone';
|
|
225
|
-
const result =
|
|
252
|
+
const result = this.tx.setAside(this.tag, row, why);
|
|
226
253
|
if (result.kind === 'untagged') {
|
|
227
254
|
this.tally.untagged++;
|
|
228
255
|
this.mirror.push(result.entry);
|
|
@@ -3,10 +3,16 @@ import type { Adapter, AdapterContext, Listing } from './types.js';
|
|
|
3
3
|
/** Claude Code's rule: a linked worktree shares its main checkout's folder, or the git folder's when that sits outside
|
|
4
4
|
* a checkout (a bare repository, or --separate-git-dir); any other checkout, a submodule included, keeps its own. */
|
|
5
5
|
export declare function claudeCheckoutRoot(top: string, gitDir: string, common: string): string;
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Claude Code's folder name for a path: non-alphanumerics made '-', and a name over 200 characters cut to 200 plus a
|
|
8
|
+
* base-36 hash of the whole path.
|
|
9
|
+
*/
|
|
7
10
|
export declare function claudeFolderName(root: string): string;
|
|
8
11
|
export declare const claudeCodeAdapter: Adapter;
|
|
9
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* A session's own notes folder and nothing else, with no git call, so post-compact can read it inside the hook's time
|
|
14
|
+
* limit.
|
|
15
|
+
*/
|
|
10
16
|
export declare function claudeTranscriptListing(ctx: AdapterContext, transcriptPath: string): Listing;
|
|
11
17
|
/** The project a session folder's notes belong to: the one Claude named the folder
|
|
12
18
|
* for, the session's start folder, else cwd or a parent; null when none matches. */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// Claude Code's auto memory: frontmatter `.md` notes in a per-project folder, plus the `autoMemoryDirectory` user
|
|
1
|
+
// Claude Code's auto memory: frontmatter `.md` notes in a per-project folder, plus the `autoMemoryDirectory` user
|
|
2
|
+
// folder.
|
|
2
3
|
import fs from 'node:fs';
|
|
3
4
|
import path from 'node:path';
|
|
4
5
|
import { resolveProjectIdentity } from '../core/project-identity.js';
|
|
@@ -13,7 +14,10 @@ import { errorMessage } from '../util/log.js';
|
|
|
13
14
|
const NAME_SLUG_MAX_CHARS = 200;
|
|
14
15
|
// Keeps a pinned name from carrying a separator or `..` out of the projects folder.
|
|
15
16
|
const PROJECT_DIR_NAME = /^[A-Za-z0-9_-]{1,64}$/;
|
|
16
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Claude Code's auto memory folder names for a project: its checkout, which subfolders share, or the folder itself
|
|
19
|
+
* outside a repository.
|
|
20
|
+
*/
|
|
17
21
|
function claudeMemoryFolderNames(projectRoot, platform) {
|
|
18
22
|
const roots = [projectRoot, realpathOrResolve(projectRoot)];
|
|
19
23
|
const layout = gitLayout(projectRoot);
|
|
@@ -30,7 +34,10 @@ export function claudeCheckoutRoot(top, gitDir, common) {
|
|
|
30
34
|
return path.dirname(common);
|
|
31
35
|
return fs.existsSync(path.join(common, '.git')) ? top : common;
|
|
32
36
|
}
|
|
33
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Claude Code's folder name for a path: non-alphanumerics made '-', and a name over 200 characters cut to 200 plus a
|
|
39
|
+
* base-36 hash of the whole path.
|
|
40
|
+
*/
|
|
34
41
|
export function claudeFolderName(root) {
|
|
35
42
|
const full = path.resolve(root);
|
|
36
43
|
const name = full.replace(/[^a-zA-Z0-9]/g, '-');
|
|
@@ -50,11 +57,19 @@ export const claudeCodeAdapter = {
|
|
|
50
57
|
return { tool: 'claude-code', home: config, containers: readFolders(folders, scope, ctx.platform), warnings };
|
|
51
58
|
},
|
|
52
59
|
};
|
|
53
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* A session's own notes folder and nothing else, with no git call, so post-compact can read it inside the hook's time
|
|
62
|
+
* limit.
|
|
63
|
+
*/
|
|
54
64
|
export function claudeTranscriptListing(ctx, transcriptPath) {
|
|
55
65
|
const config = claudeConfigDir(ctx.home, ctx.env);
|
|
56
66
|
const folder = path.join(path.dirname(transcriptPath), 'memory');
|
|
57
|
-
return {
|
|
67
|
+
return {
|
|
68
|
+
tool: 'claude-code',
|
|
69
|
+
home: config,
|
|
70
|
+
containers: readFolders([folder], 'project', ctx.platform),
|
|
71
|
+
warnings: [],
|
|
72
|
+
};
|
|
58
73
|
}
|
|
59
74
|
/** The project a session folder's notes belong to: the one Claude named the folder
|
|
60
75
|
* for, the session's start folder, else cwd or a parent; null when none matches. */
|
|
@@ -71,15 +86,19 @@ export function transcriptNotesProject(transcriptPath, cwd, machine) {
|
|
|
71
86
|
for (const from of [start, cwd]) {
|
|
72
87
|
for (let dir = from === null ? null : path.resolve(from); dir !== null; dir = path.dirname(dir) === dir ? null : path.dirname(dir)) {
|
|
73
88
|
// A folder gone from disk resolves to its bare name, never the project it was in, so it decides nothing.
|
|
74
|
-
if ([dir, realpathOrResolve(dir)].some((d) => fold(claudeFolderName(d)) === folder))
|
|
89
|
+
if ([dir, realpathOrResolve(dir)].some((d) => fold(claudeFolderName(d)) === folder)) {
|
|
75
90
|
return fs.existsSync(dir) ? resolveProjectIdentity(dir) : null;
|
|
91
|
+
}
|
|
76
92
|
}
|
|
77
93
|
}
|
|
78
94
|
return null;
|
|
79
95
|
}
|
|
80
96
|
// Claude writes the cwd on each message line after a few header lines; 64 KB holds the first with room to spare.
|
|
81
97
|
const START_SCAN_BYTES = 64 * 1024;
|
|
82
|
-
/**
|
|
98
|
+
/**
|
|
99
|
+
* The cwd on the transcript's first line that has one: the folder Claude named the session folder for, which a folder
|
|
100
|
+
* name alone cannot give back.
|
|
101
|
+
*/
|
|
83
102
|
function transcriptStartCwd(transcriptPath) {
|
|
84
103
|
let fd;
|
|
85
104
|
try {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// GitHub Copilot Chat in VS Code: memory-tool files under VS Code's own data folders, one set per product and
|
|
1
|
+
// GitHub Copilot Chat in VS Code: memory-tool files under VS Code's own data folders, one set per product and
|
|
2
|
+
// workspace.
|
|
2
3
|
import fs from 'node:fs';
|
|
3
4
|
import path from 'node:path';
|
|
4
5
|
import { readTextFile } from './files.js';
|
|
@@ -7,7 +7,8 @@ const MAX_DEPTH = 8;
|
|
|
7
7
|
/** A file's text, or why it was skipped: empty, too big, holds a NUL byte (not text), or unreadable. */
|
|
8
8
|
export function readTextFile(file) {
|
|
9
9
|
try {
|
|
10
|
-
// O_NONBLOCK opens a FIFO at once, for the file check to turn away; Windows has no such flag and the OR adds
|
|
10
|
+
// O_NONBLOCK opens a FIFO at once, for the file check to turn away; Windows has no such flag and the OR adds
|
|
11
|
+
// nothing.
|
|
11
12
|
const fd = fs.openSync(file, fs.constants.O_RDONLY | fs.constants.O_NONBLOCK);
|
|
12
13
|
try {
|
|
13
14
|
return readOpenTextFile(file, fd);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { DatabaseSyncLike } from '../db/index.js';
|
|
2
1
|
import type { MemoryEntry } from '../core/memory.js';
|
|
2
|
+
import type { ImportTarget } from '../store/port/agent-import.js';
|
|
3
3
|
import type { Listing } from './types.js';
|
|
4
4
|
export declare const LEGACY_SOURCE_PREFIX = "claude-memory:";
|
|
5
5
|
export interface ContainerLegacy {
|
|
@@ -12,6 +12,9 @@ export interface LegacyWork {
|
|
|
12
12
|
/** Rows about to take a note's key, which stop counting as text another path stored. */
|
|
13
13
|
readonly adopted: ReadonlySet<string>;
|
|
14
14
|
}
|
|
15
|
-
/**
|
|
16
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Matched once across all the store's Claude folders, before any container's transaction; each adoption re-checks its
|
|
17
|
+
* row inside one.
|
|
18
|
+
*/
|
|
19
|
+
export declare function legacyWork(target: ImportTarget, listings: readonly Listing[]): LegacyWork;
|
|
17
20
|
//# sourceMappingURL=legacy.d.ts.map
|
|
@@ -2,40 +2,61 @@
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { duplicateKey } from '../util/same-text.js';
|
|
4
4
|
import { maskEmails } from '../util/secret-detect.js';
|
|
5
|
-
import { selectLiveEntriesBySourcePrefix } from '../store/entry-reads.js';
|
|
6
5
|
import { matchLegacy } from './plan.js';
|
|
7
6
|
import { MIN_ITEM_CHARS, storedText } from './source.js';
|
|
8
7
|
export const LEGACY_SOURCE_PREFIX = 'claude-memory:';
|
|
9
8
|
const LEGACY_TAG = 'claude-code-memory';
|
|
10
|
-
|
|
11
|
-
export function legacyWork(db, tenantId, listings) {
|
|
12
|
-
const containers = listings.filter((l) => l.tool === 'claude-code').flatMap((l) => l.containers).filter((c) => c.readable);
|
|
13
|
-
const rows = containers.length === 0
|
|
14
|
-
? []
|
|
15
|
-
: selectLiveEntriesBySourcePrefix(db, tenantId, LEGACY_SOURCE_PREFIX).filter((r) => r.tags.includes(LEGACY_TAG));
|
|
16
|
-
const byContainer = new Map();
|
|
17
|
-
if (rows.length === 0)
|
|
18
|
-
return { byContainer, adopted: new Set() };
|
|
9
|
+
function legacyTargets(containers) {
|
|
19
10
|
const refs = [];
|
|
20
11
|
const targets = [];
|
|
21
12
|
for (const container of containers) {
|
|
22
13
|
for (const item of container.items) {
|
|
23
14
|
if (item.text.trim().length < MIN_ITEM_CHARS)
|
|
24
15
|
continue;
|
|
25
|
-
targets.push({
|
|
16
|
+
targets.push({
|
|
17
|
+
ref: String(refs.length),
|
|
18
|
+
file: path.posix.basename(item.key),
|
|
19
|
+
textKey: duplicateKey(storedText(item.text)),
|
|
20
|
+
});
|
|
26
21
|
refs.push({ dir: container.path, key: item.key });
|
|
27
22
|
}
|
|
28
23
|
}
|
|
24
|
+
return { refs, targets };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Matched once across all the store's Claude folders, before any container's transaction; each adoption re-checks its
|
|
28
|
+
* row inside one.
|
|
29
|
+
*/
|
|
30
|
+
export function legacyWork(target, listings) {
|
|
31
|
+
const containers = listings
|
|
32
|
+
.filter((l) => l.tool === 'claude-code')
|
|
33
|
+
.flatMap((l) => l.containers)
|
|
34
|
+
.filter((c) => c.readable);
|
|
35
|
+
const rows = containers.length === 0
|
|
36
|
+
? []
|
|
37
|
+
: target.liveBySourcePrefix(LEGACY_SOURCE_PREFIX).filter((r) => r.tags.includes(LEGACY_TAG));
|
|
38
|
+
const byContainer = new Map();
|
|
39
|
+
if (rows.length === 0)
|
|
40
|
+
return { byContainer, adopted: new Set() };
|
|
41
|
+
const { refs, targets } = legacyTargets(containers);
|
|
29
42
|
const match = matchLegacy(
|
|
30
|
-
// The old import kept emails in clear, and targets are masked; without the mask those rows never matched and
|
|
31
|
-
|
|
43
|
+
// The old import kept emails in clear, and targets are masked; without the mask those rows never matched and
|
|
44
|
+
// imported twice.
|
|
45
|
+
rows.map((r) => ({
|
|
46
|
+
id: r.id,
|
|
47
|
+
file: r.source.slice(LEGACY_SOURCE_PREFIX.length),
|
|
48
|
+
textKey: duplicateKey(maskEmails(r.content)),
|
|
49
|
+
})), targets);
|
|
32
50
|
const byId = new Map(rows.map((r) => [r.id, r]));
|
|
33
51
|
const add = (pick, ref, id) => {
|
|
34
52
|
const { dir, key } = refs[Number(ref)];
|
|
35
53
|
const row = byId.get(id);
|
|
36
54
|
if (row === undefined)
|
|
37
55
|
return;
|
|
38
|
-
const found = byContainer.get(dir) ?? {
|
|
56
|
+
const found = byContainer.get(dir) ?? {
|
|
57
|
+
adopt: new Map(),
|
|
58
|
+
replace: new Map(),
|
|
59
|
+
};
|
|
39
60
|
byContainer.set(dir, found);
|
|
40
61
|
found[pick].set(key, [...(found[pick].get(key) ?? []), row]);
|
|
41
62
|
};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Splits one markdown memory file into items (a top-level bullet or a paragraph), each tagged with its heading. Pure.
|
|
3
|
+
*/
|
|
2
4
|
export interface MarkdownItem {
|
|
3
5
|
readonly heading: string;
|
|
4
6
|
readonly headingSlug: string;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Splits one markdown memory file into items (a top-level bullet or a paragraph), each tagged with its heading. Pure.
|
|
3
|
+
*/
|
|
2
4
|
const HEADING = /^#{1,6}\s+/;
|
|
3
5
|
// Column 0 only: an indented marker is a sub-bullet and stays inside its item.
|
|
4
6
|
const BULLET = /^(?:[-*+]|\d+[.)]) /;
|
|
@@ -11,7 +11,8 @@ export const openclawAdapter = {
|
|
|
11
11
|
return { tool: 'openclaw', home, containers: scope === 'user' ? userContainers(home) : [], warnings: [] };
|
|
12
12
|
},
|
|
13
13
|
};
|
|
14
|
-
// SHORTCUT: agents.defaults.workspace in openclaw.json is not read (the file allows comments, and there is no parser
|
|
14
|
+
// SHORTCUT: agents.defaults.workspace in openclaw.json is not read (the file allows comments, and there is no parser
|
|
15
|
+
// for that here); read it if users ask.
|
|
15
16
|
function workspaceDir(ctx) {
|
|
16
17
|
const { OPENCLAW_WORKSPACE_DIR: workspace } = ctx.env;
|
|
17
18
|
return path.resolve(workspace || path.join(stateDir(ctx), 'workspace'));
|
|
@@ -29,7 +30,9 @@ function userContainers(workspace) {
|
|
|
29
30
|
return [];
|
|
30
31
|
const read = readTextFile(file);
|
|
31
32
|
if (!read.ok) {
|
|
32
|
-
return [
|
|
33
|
+
return [
|
|
34
|
+
{ scope: 'user', path: file, readable: false, items: [], skipped: [], warnings: [read.reason], textKeyed: true },
|
|
35
|
+
];
|
|
33
36
|
}
|
|
34
37
|
const stored = splitMarkdownItems(read.text).map(({ heading, headingSlug, text }) => ({
|
|
35
38
|
headingSlug,
|
|
@@ -2,7 +2,17 @@
|
|
|
2
2
|
export function planContainer(input) {
|
|
3
3
|
const live = groupByKey(input.live);
|
|
4
4
|
const dormant = groupByKey(input.dormant);
|
|
5
|
-
const draft = {
|
|
5
|
+
const draft = {
|
|
6
|
+
unchanged: 0,
|
|
7
|
+
retag: [],
|
|
8
|
+
collapse: [],
|
|
9
|
+
writes: [],
|
|
10
|
+
fresh: [],
|
|
11
|
+
restores: [],
|
|
12
|
+
setAside: [],
|
|
13
|
+
duplicates: 0,
|
|
14
|
+
refused: 0,
|
|
15
|
+
};
|
|
6
16
|
for (const item of input.items)
|
|
7
17
|
planItem(input, item, live.get(item.key) ?? [], dormant.get(item.key) ?? [], draft);
|
|
8
18
|
const read = new Set([...input.items.map((i) => i.key), ...input.skipped]);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// Project names folded into others, read from the audit trail: the sync files imports under the surviving name, and
|
|
1
|
+
// Project names folded into others, read from the audit trail: the sync files imports under the surviving name, and
|
|
2
|
+
// `hippo projects` repair agrees.
|
|
2
3
|
import { isObjectLike, isStringValue } from '../core/capture-contract.js';
|
|
3
4
|
function foldOf(value) {
|
|
4
5
|
if (!isObjectLike(value) || Array.isArray(value))
|
|
@@ -48,6 +48,9 @@ export declare function mergeReports(into: ImportReport, from: ImportReport): vo
|
|
|
48
48
|
export declare function totalTally(report: ImportReport): Tally;
|
|
49
49
|
/** `hippo import --agents`: each tool's home, its folders and what moved; in a dry run, what would have. */
|
|
50
50
|
export declare function detailLines(report: ImportReport, dryRun: boolean): string[];
|
|
51
|
-
/**
|
|
51
|
+
/**
|
|
52
|
+
* "Imported 12 agent memories (Claude Code 10, Codex 2); 1 replaced, 1 set aside, 1 skipped for a secret.", or null
|
|
53
|
+
* when nothing moved.
|
|
54
|
+
*/
|
|
52
55
|
export declare function summaryLine(report: ImportReport): string | null;
|
|
53
56
|
//# sourceMappingURL=report.d.ts.map
|
|
@@ -2,8 +2,24 @@
|
|
|
2
2
|
import { AGENT_MEMORY_TOOLS } from '../core/agent-memory-tools.js';
|
|
3
3
|
export function emptyTally() {
|
|
4
4
|
return {
|
|
5
|
-
imported: 0,
|
|
6
|
-
|
|
5
|
+
imported: 0,
|
|
6
|
+
replaced: 0,
|
|
7
|
+
restored: 0,
|
|
8
|
+
setAside: 0,
|
|
9
|
+
untagged: 0,
|
|
10
|
+
unchanged: 0,
|
|
11
|
+
adopted: 0,
|
|
12
|
+
renamed: 0,
|
|
13
|
+
collapsed: 0,
|
|
14
|
+
retagged: 0,
|
|
15
|
+
handedOver: 0,
|
|
16
|
+
duplicate: 0,
|
|
17
|
+
secret: 0,
|
|
18
|
+
short: 0,
|
|
19
|
+
rejected: 0,
|
|
20
|
+
unread: 0,
|
|
21
|
+
unreadable: 0,
|
|
22
|
+
busy: 0,
|
|
7
23
|
};
|
|
8
24
|
}
|
|
9
25
|
const TALLY_FIELDS = Object.keys(emptyTally()).filter(isTallyField);
|
|
@@ -46,11 +62,24 @@ export function totalTally(report) {
|
|
|
46
62
|
}
|
|
47
63
|
const plural = (n, one, many) => `${n} ${n === 1 ? one : many}`;
|
|
48
64
|
const TALLY_WORDS = {
|
|
49
|
-
imported: 'new',
|
|
50
|
-
|
|
65
|
+
imported: 'new',
|
|
66
|
+
replaced: 'replaced',
|
|
67
|
+
restored: 'brought back',
|
|
68
|
+
setAside: 'set aside',
|
|
69
|
+
untagged: 'pinned and kept',
|
|
70
|
+
unchanged: 'unchanged',
|
|
71
|
+
adopted: 'taken over from the old Claude import',
|
|
72
|
+
renamed: 'moved to the project id',
|
|
73
|
+
collapsed: 'duplicates folded',
|
|
51
74
|
retagged: 'retagged',
|
|
52
|
-
handedOver: 'handed over from the global store',
|
|
53
|
-
|
|
75
|
+
handedOver: 'handed over from the global store',
|
|
76
|
+
duplicate: 'already stored',
|
|
77
|
+
secret: 'skipped for a secret',
|
|
78
|
+
short: 'too short',
|
|
79
|
+
rejected: 'skipped as rejected',
|
|
80
|
+
unread: 'files skipped',
|
|
81
|
+
unreadable: 'unreadable folders',
|
|
82
|
+
busy: 'busy folders',
|
|
54
83
|
};
|
|
55
84
|
/** `hippo import --agents`: each tool's home, its folders and what moved; in a dry run, what would have. */
|
|
56
85
|
export function detailLines(report, dryRun) {
|
|
@@ -64,12 +93,17 @@ export function detailLines(report, dryRun) {
|
|
|
64
93
|
const moved = TALLY_FIELDS.filter((f) => t.tally[f] > 0).map((f) => `${t.tally[f]} ${TALLY_WORDS[f]}`);
|
|
65
94
|
if (moved.length > 0)
|
|
66
95
|
lines.push(` ${dryRun ? 'would be ' : ''}${moved.join(', ')}`);
|
|
67
|
-
if (t.unlisted > 0)
|
|
68
|
-
lines.push(` ${plural(t.unlisted, 'kept row sits', 'kept rows sit')} in folders not listed this run (a moved
|
|
96
|
+
if (t.unlisted > 0) {
|
|
97
|
+
lines.push(` ${plural(t.unlisted, 'kept row sits', 'kept rows sit')} in folders not listed this run (a moved ` +
|
|
98
|
+
`project's old copy)`);
|
|
99
|
+
}
|
|
69
100
|
}
|
|
70
101
|
return lines;
|
|
71
102
|
}
|
|
72
|
-
/**
|
|
103
|
+
/**
|
|
104
|
+
* "Imported 12 agent memories (Claude Code 10, Codex 2); 1 replaced, 1 set aside, 1 skipped for a secret.", or null
|
|
105
|
+
* when nothing moved.
|
|
106
|
+
*/
|
|
73
107
|
export function summaryLine(report) {
|
|
74
108
|
const total = totalTally(report);
|
|
75
109
|
const parts = [
|
|
@@ -2,7 +2,10 @@ import { type ToolId } from '../core/agent-memory-tools.js';
|
|
|
2
2
|
import type { Scope } from './types.js';
|
|
3
3
|
export declare const CONTENT_CAP = 1500;
|
|
4
4
|
export declare const MIN_ITEM_CHARS = 10;
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* `p-`/`u-` and 12 hex of the real path, so no user path reaches a row; `origin` parts projects sharing a folder in the
|
|
7
|
+
* global store.
|
|
8
|
+
*/
|
|
6
9
|
export declare function containerId(dir: string, scope: Scope, platform: NodeJS.Platform, origin?: string): string;
|
|
7
10
|
export declare function containerPrefix(tool: ToolId, container: string): string;
|
|
8
11
|
export declare function itemSource(prefix: string, key: string, text: string): string;
|
|
@@ -11,6 +14,9 @@ export declare function splitSource(source: string, prefix: string): {
|
|
|
11
14
|
readonly key: string;
|
|
12
15
|
readonly hash: string;
|
|
13
16
|
};
|
|
14
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* The text as stored: emails masked as on every capture path, then the old Claude import's cap; the hash still sees the
|
|
19
|
+
* raw note.
|
|
20
|
+
*/
|
|
15
21
|
export declare function storedText(text: string): string;
|
|
16
22
|
//# sourceMappingURL=source.d.ts.map
|