hippo-memory 1.72.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/README.md +6 -4
- 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 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- 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 +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- 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} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- 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} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- 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 -7
- 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 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- 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 +35 -20
- package/dist/api/prompt-hook.js +66 -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} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- 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 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- 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} +54 -45
- 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 +27 -12
- 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 +34 -15
- 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 +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- 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 +58 -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 +33 -33
- package/dist/cli/auth.js +23 -31
- 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 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- 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 +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- 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 +5 -5
- package/dist/cli/object-verbs.js +13 -16
- 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 +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- 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 +16 -8
- 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 +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- 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 -4
- 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 -5
- 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 -5
- 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 +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- 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 -5
- 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 -4
- 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 -5
- 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 +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- 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 +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- 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 +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- 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 +38 -29
- 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 +22 -17
- 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 +87 -30
- package/dist/core/memory.js +82 -33
- 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 +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- 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.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- 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 -2
- package/dist/db/connect.js +8 -2
- 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 +40 -20
- 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/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- 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 -8
- package/dist/db/physics-state.js +17 -50
- 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 +20 -5
- package/dist/db/request-stores.js +15 -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 +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- 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 +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- 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 +17 -7
- 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 +72 -33
- 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 +11 -10
- 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 +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- 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 +17 -10
- 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 -6
- package/dist/learn/invalidation.js +62 -28
- 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 +21 -20
- 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 +61 -77
- 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 +59 -23
- 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 +19 -9
- 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 +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- 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 +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- 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 +550 -97
- 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 -17
- 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 +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- 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 +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -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 +90 -41
- 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 +97 -63
- 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 +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- 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 +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- 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 +11 -12
- 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 +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- 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 +4 -2
- package/dist/store/index.js +2 -1
- 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 +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- 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 +261 -219
- 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 +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- 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 +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- 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 +12 -5
- 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 +9 -6
- 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 +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- 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.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- 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 +97 -38
- 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 -18
- package/dist/store/sqlite/store.js +95 -33
- 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 +25 -11
- package/dist/store/summaries.js +84 -27
- 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 +8 -4
- 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 +28 -11
- 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 +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- 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 +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- 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 +16 -4
- package/dist/util/request-scope.js +19 -6
- 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 +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- 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/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- 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 +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- 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 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- 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 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- 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 -21
- package/dist/store/sqlite/local.js +0 -39
package/README.md
CHANGED
|
@@ -675,11 +675,13 @@ hippo sleep
|
|
|
675
675
|
Wrap any command with `hippo watch` to auto-learn from failures:
|
|
676
676
|
|
|
677
677
|
```bash
|
|
678
|
-
hippo watch
|
|
678
|
+
hippo watch -- npm run build
|
|
679
679
|
# if it fails, Hippo captures the error automatically
|
|
680
680
|
# next time an agent asks about build issues, the memory is there
|
|
681
681
|
```
|
|
682
682
|
|
|
683
|
+
The command runs with no shell, so each argument reaches the program as written. To run a shell line with pipes or `&&`, pass it as one string after `--shell`: `hippo watch --shell "npm test && npm run build"`.
|
|
684
|
+
|
|
683
685
|
---
|
|
684
686
|
|
|
685
687
|
## CLI Reference
|
|
@@ -736,7 +738,7 @@ hippo watch "npm run build"
|
|
|
736
738
|
| `hippo failures [--days n]` | Failed tool calls the capture-error hook saw, by outcome, and how many errors first happened in another session |
|
|
737
739
|
| `hippo embed` | Embed all memories for semantic search |
|
|
738
740
|
| `hippo embed --status` | Show embedding coverage |
|
|
739
|
-
| `hippo watch
|
|
741
|
+
| `hippo watch -- <command> [args...]` | Run command with no shell, auto-learn from failures (`--shell "<line>"` runs one line through the shell) |
|
|
740
742
|
| `hippo learn --git` | Scan recent git commits for lessons |
|
|
741
743
|
| `hippo learn --git --days <n>` | Scan N days back (default: 7) |
|
|
742
744
|
| `hippo learn --git --repos <paths>` | Scan multiple repos (comma-separated) |
|
|
@@ -784,8 +786,8 @@ hippo watch "npm run build"
|
|
|
784
786
|
| `hippo dashboard` | Open web dashboard at localhost:3333 (memory health by project, and the card board); open the printed URL, which carries a per-start access token |
|
|
785
787
|
| `hippo dashboard --port <n>` | Use custom port |
|
|
786
788
|
| `hippo mcp` | Start MCP server (stdio transport) |
|
|
787
|
-
| `hippo serve` | Start the HTTP API server for this store on `127.0.0.1:6789` (`--port <n>` or `HIPPO_PORT`; `--host <host>`, which off loopback needs `HIPPO_REQUIRE_AUTH=1`). Every request needs an API key (`hippo auth create`, then `Authorization: Bearer <key>`; the hippo CLI reads `HIPPO_API_KEY`). `HIPPO_ALLOW_KEYLESS_LOCAL=1` lets requests from this machine in without one, as host admin; `HIPPO_REQUIRE_AUTH=1` wins over it |
|
|
788
|
-
| `hippo serve --tls-cert <file> --tls-key <file>` | Serve HTTPS with that PEM certificate and key (or set `HIPPO_TLS_CERT` and `HIPPO_TLS_KEY`). Without them a network bind
|
|
789
|
+
| `hippo serve` | Start the HTTP API server for this store on `127.0.0.1:6789` (`--port <n>` or `HIPPO_PORT`; `--host <host>`, which off loopback needs `HIPPO_REQUIRE_AUTH=1`). Every request needs an API key (`hippo auth create`, then `Authorization: Bearer <key>`; the hippo CLI reads `HIPPO_API_KEY`). `HIPPO_ALLOW_KEYLESS_LOCAL=1` lets requests from this machine in without one, as a member (`HIPPO_KEYLESS_LOCAL_ROLE=admin` makes them host admin, for sleep and the quarantine routes); `HIPPO_REQUIRE_AUTH=1` wins over it. Each caller gets 20 requests a second, burst 40 (`HIPPO_CALLER_RPS`; `0` turns it off). See [Security defaults](docs/UPGRADING-2.0.md#security-defaults) |
|
|
790
|
+
| `hippo serve --tls-cert <file> --tls-key <file>` | Serve HTTPS with that PEM certificate and key (or set `HIPPO_TLS_CERT` and `HIPPO_TLS_KEY`). Without them a network bind refuses to start, since API keys and memory text would travel in cleartext; behind a TLS-terminating proxy, pass `--allow-cleartext` (or set `HIPPO_ALLOW_CLEARTEXT=1`) |
|
|
789
791
|
|
|
790
792
|
On `heartbeat`, `block`, `review` and `complete`, a given `--run` is checked against the card's live run and the command is refused, unchanged, if the two do not match.
|
|
791
793
|
|
|
@@ -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
|