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
|
@@ -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
|
|
@@ -7,11 +7,16 @@ import { toolSourcePrefix } from '../core/agent-memory-tools.js';
|
|
|
7
7
|
import { ID_SUFFIX_CHARS } from '../util/token-text.js';
|
|
8
8
|
export const CONTENT_CAP = 1500;
|
|
9
9
|
export const MIN_ITEM_CHARS = 10;
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* `p-`/`u-` and 12 hex of the real path, so no user path reaches a row; `origin` parts projects sharing a folder in the
|
|
12
|
+
* global store.
|
|
13
|
+
*/
|
|
11
14
|
export function containerId(dir, scope, platform, origin = '') {
|
|
12
15
|
const real = realpathOrResolve(dir).replace(/\\/g, '/');
|
|
13
16
|
const folder = platform === 'win32' ? real.toLowerCase() : real;
|
|
14
|
-
|
|
17
|
+
const prefix = scope === 'project' ? 'p' : 'u';
|
|
18
|
+
const hash = sha256Hex(origin === '' ? folder : `${folder}\n${origin}`);
|
|
19
|
+
return `${prefix}-${hash.slice(0, ID_SUFFIX_CHARS)}`;
|
|
15
20
|
}
|
|
16
21
|
export function containerPrefix(tool, container) {
|
|
17
22
|
return `${toolSourcePrefix(tool)}${container}/`;
|
|
@@ -25,7 +30,10 @@ export function splitSource(source, prefix) {
|
|
|
25
30
|
const cut = rest.lastIndexOf('#');
|
|
26
31
|
return cut < 0 ? { key: rest, hash: '' } : { key: rest.slice(0, cut), hash: rest.slice(cut + 1) };
|
|
27
32
|
}
|
|
28
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* The text as stored: emails masked as on every capture path, then the old Claude import's cap; the hash still sees the
|
|
35
|
+
* raw note.
|
|
36
|
+
*/
|
|
29
37
|
export function storedText(text) {
|
|
30
38
|
const masked = maskEmails(text);
|
|
31
39
|
return masked.length > CONTENT_CAP ? `${truncateCodePointSafe(masked, CONTENT_CAP)} [truncated]` : masked;
|
|
@@ -18,7 +18,10 @@ export interface SyncOptions {
|
|
|
18
18
|
/** How long a busy store is waited on before its containers are skipped. */
|
|
19
19
|
readonly busyWaitMs?: number;
|
|
20
20
|
}
|
|
21
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* init, sleep, `import --agents` and the daily runner: a local store gets its project pass then the user pass; the
|
|
23
|
+
* global store the user pass only.
|
|
24
|
+
*/
|
|
22
25
|
export declare function importForStore(hippoRoot: string, opts: SyncOptions): ImportReport;
|
|
23
26
|
/** A local store's project pass with legacy adoption; `init --scan` runs it per repository and the user pass once. */
|
|
24
27
|
export declare function importProjectMemories(hippoRoot: string, opts: SyncOptions): ImportReport;
|
|
@@ -30,6 +33,8 @@ export declare function importAtSessionEnd(cwd: string, transcriptPath: string |
|
|
|
30
33
|
/** The session folder's notes under the project Claude filed them for, never cwd's: a session begun at
|
|
31
34
|
* home keeps its home notes user-global wherever it ends. No git call, so post-compact can run it. */
|
|
32
35
|
export declare function importSessionFolder(hippoRoot: string, transcriptPath: string, cwd: string | null, opts: SyncOptions): ImportReport;
|
|
33
|
-
/**
|
|
36
|
+
/**
|
|
37
|
+
* The variable when set (empty or `none` is off); else the tools both the invoking and the target store's config allow.
|
|
38
|
+
*/
|
|
34
39
|
export declare function allowedTools(env: Machine['env'], invoking: string, target: string, warnings: string[]): Set<ToolId>;
|
|
35
40
|
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -1,22 +1,15 @@
|
|
|
1
|
-
// Runs the adapters and routes each container to its store: the project pass, the user pass and their call sites (plan
|
|
1
|
+
// Runs the adapters and routes each container to its store: the project pass, the user pass and their call sites (plan
|
|
2
|
+
// designs 2, 8, 11).
|
|
2
3
|
import { processEnv } from '../util/env.js';
|
|
3
|
-
import fs from 'node:fs';
|
|
4
4
|
import os from 'node:os';
|
|
5
5
|
import path from 'node:path';
|
|
6
6
|
import { errorMessage } from '../util/log.js';
|
|
7
7
|
import { loadConfig } from '../core/config.js';
|
|
8
|
-
import { closeHippoDb, isSqliteBusy, openHippoDb, outsideRequestStores, withWriteScope } from '../db/index.js';
|
|
9
8
|
import { namesFoldedInto } from './project-folds.js';
|
|
10
|
-
import { projectTagReads } from '../store/project-tags.js';
|
|
11
9
|
import { isGlobalStoreRoot, isInitialized, projectNames, resolveGlobalRootDir, resolveProjectIdentity, } from '../core/project-identity.js';
|
|
12
10
|
import { duplicateKey, heldTextKeys } from '../util/same-text.js';
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
15
|
-
import { writeEntryMirrors } from '../store/entry-writes.js';
|
|
16
|
-
import { selectLiveEntriesBySourcePrefix, selectRowsOutsideSourcePrefixAt } from '../store/entry-reads.js';
|
|
17
|
-
import { updateStats } from '../store/index-and-stats.js';
|
|
18
|
-
import { resolveTenantId } from '../store/tenant.js';
|
|
19
|
-
import { setAsideRow } from '../store/set-aside.js';
|
|
11
|
+
// The one store import: these entries are the import's composition root for the SQLite store.
|
|
12
|
+
import { sqliteAgentImport } from '../store/sqlite/agent-import.js';
|
|
20
13
|
import { syncContainer } from './apply.js';
|
|
21
14
|
import { claudeCodeAdapter, claudeTranscriptListing, transcriptNotesProject } from './claude-code.js';
|
|
22
15
|
import { codexAdapter } from './codex.js';
|
|
@@ -27,14 +20,24 @@ import { openclawAdapter } from './openclaw.js';
|
|
|
27
20
|
import { qwenCodeAdapter } from './qwen-code.js';
|
|
28
21
|
import { addTally, emptyReport, mergeReports, toolReport } from './report.js';
|
|
29
22
|
import { containerId, containerPrefix, splitSource } from './source.js';
|
|
30
|
-
import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TOOLS, isToolId, toolSourcePrefix } from '../core/agent-memory-tools.js';
|
|
31
|
-
export const ADAPTERS = [
|
|
23
|
+
import { AGENT_MEMORY_SOURCE_PREFIX, AGENT_MEMORY_TOOLS, isToolId, toolSourcePrefix, } from '../core/agent-memory-tools.js';
|
|
24
|
+
export const ADAPTERS = [
|
|
25
|
+
claudeCodeAdapter,
|
|
26
|
+
codexAdapter,
|
|
27
|
+
geminiAdapter,
|
|
28
|
+
copilotAdapter,
|
|
29
|
+
openclawAdapter,
|
|
30
|
+
qwenCodeAdapter,
|
|
31
|
+
];
|
|
32
32
|
/** Overrides config because `hippo init` creates the store in the same command that imports (plan design 11). */
|
|
33
33
|
export const TOOLS_ENV = 'HIPPO_AGENT_MEMORY_TOOLS';
|
|
34
34
|
export function currentMachine() {
|
|
35
35
|
return { home: os.homedir(), env: processEnv(), platform: process.platform };
|
|
36
36
|
}
|
|
37
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* init, sleep, `import --agents` and the daily runner: a local store gets its project pass then the user pass; the
|
|
39
|
+
* global store the user pass only.
|
|
40
|
+
*/
|
|
38
41
|
export function importForStore(hippoRoot, opts) {
|
|
39
42
|
if (isGlobalStoreRoot(hippoRoot))
|
|
40
43
|
return importUserMemories(hippoRoot, opts);
|
|
@@ -45,17 +48,29 @@ export function importForStore(hippoRoot, opts) {
|
|
|
45
48
|
/** A local store's project pass with legacy adoption; `init --scan` runs it per repository and the user pass once. */
|
|
46
49
|
export function importProjectMemories(hippoRoot, opts) {
|
|
47
50
|
const ctx = context(opts.machine, { projectRoot: path.dirname(hippoRoot) });
|
|
48
|
-
return runPass({
|
|
49
|
-
scope: 'project',
|
|
50
|
-
|
|
51
|
+
return runPass(sqliteAgentImport, {
|
|
52
|
+
scope: 'project',
|
|
53
|
+
target: hippoRoot,
|
|
54
|
+
invoking: hippoRoot,
|
|
55
|
+
list: (a) => a.list(ctx, 'project'),
|
|
56
|
+
legacy: true,
|
|
57
|
+
originProject: undefined,
|
|
58
|
+
legacyOrigins: [],
|
|
59
|
+
handover: true,
|
|
51
60
|
}, opts);
|
|
52
61
|
}
|
|
53
62
|
/** Every tool's user-level memory into the global store, created on demand, with no origin. */
|
|
54
63
|
export function importUserMemories(invokingRoot, opts) {
|
|
55
64
|
const ctx = context(opts.machine, {});
|
|
56
|
-
return runPass({
|
|
57
|
-
scope: 'user',
|
|
58
|
-
|
|
65
|
+
return runPass(sqliteAgentImport, {
|
|
66
|
+
scope: 'user',
|
|
67
|
+
target: resolveGlobalRootDir(),
|
|
68
|
+
invoking: invokingRoot,
|
|
69
|
+
list: (a) => a.list(ctx, 'user'),
|
|
70
|
+
legacy: false,
|
|
71
|
+
originProject: '',
|
|
72
|
+
legacyOrigins: [],
|
|
73
|
+
handover: false,
|
|
59
74
|
}, opts);
|
|
60
75
|
}
|
|
61
76
|
/** Session end in a folder with no store of its own: the session's project into the
|
|
@@ -63,7 +78,7 @@ export function importUserMemories(invokingRoot, opts) {
|
|
|
63
78
|
export function importAtSessionEnd(cwd, transcriptPath, opts) {
|
|
64
79
|
const globalRoot = resolveGlobalRootDir();
|
|
65
80
|
const ctx = context(opts.machine, { projectRoot: cwd });
|
|
66
|
-
const report = runPass({
|
|
81
|
+
const report = runPass(sqliteAgentImport, {
|
|
67
82
|
scope: 'project', target: globalRoot, invoking: globalRoot, list: (a) => a.list(ctx, 'project'), legacy: false,
|
|
68
83
|
...projectOrigins(resolveProjectIdentity(cwd)), handover: false,
|
|
69
84
|
}, opts);
|
|
@@ -78,11 +93,12 @@ export function importSessionFolder(hippoRoot, transcriptPath, cwd, opts) {
|
|
|
78
93
|
const project = transcriptNotesProject(transcriptPath, cwd, opts.machine);
|
|
79
94
|
if (project === null)
|
|
80
95
|
return emptyReport();
|
|
81
|
-
// A project store takes its own project's notes; another project's, or home's, go to the global store, which parts
|
|
96
|
+
// A project store takes its own project's notes; another project's, or home's, go to the global store, which parts
|
|
97
|
+
// them by origin.
|
|
82
98
|
const own = isGlobalStoreRoot(hippoRoot) || project.name === resolveProjectIdentity(path.dirname(hippoRoot)).name;
|
|
83
99
|
const target = own ? hippoRoot : resolveGlobalRootDir();
|
|
84
100
|
const ctx = context(opts.machine, {});
|
|
85
|
-
return runPass({
|
|
101
|
+
return runPass(sqliteAgentImport, {
|
|
86
102
|
scope: 'project', target, invoking: hippoRoot, legacy: false, ...projectOrigins(project), handover: false,
|
|
87
103
|
list: (a) => (a.tool === 'claude-code' ? claudeTranscriptListing(ctx, transcriptPath) : null),
|
|
88
104
|
}, opts);
|
|
@@ -93,11 +109,18 @@ function projectOrigins(project) {
|
|
|
93
109
|
function context(machine, extra) {
|
|
94
110
|
return { home: machine.home, env: machine.env, platform: machine.platform, ...extra };
|
|
95
111
|
}
|
|
96
|
-
/**
|
|
112
|
+
/**
|
|
113
|
+
* The variable when set (empty or `none` is off); else the tools both the invoking and the target store's config allow.
|
|
114
|
+
*/
|
|
97
115
|
export function allowedTools(env, invoking, target, warnings) {
|
|
98
116
|
const fromEnv = env[TOOLS_ENV];
|
|
99
117
|
if (fromEnv !== undefined) {
|
|
100
|
-
const listed = fromEnv.trim().toLowerCase() === 'none'
|
|
118
|
+
const listed = fromEnv.trim().toLowerCase() === 'none'
|
|
119
|
+
? []
|
|
120
|
+
: fromEnv
|
|
121
|
+
.split(',')
|
|
122
|
+
.map((t) => t.trim())
|
|
123
|
+
.filter((t) => t !== '');
|
|
101
124
|
return knownTools(listed, TOOLS_ENV, warnings);
|
|
102
125
|
}
|
|
103
126
|
const mine = configuredTools(invoking, warnings);
|
|
@@ -111,14 +134,17 @@ function configuredTools(root, warnings) {
|
|
|
111
134
|
function knownTools(ids, where, warnings) {
|
|
112
135
|
const out = new Set();
|
|
113
136
|
for (const id of ids) {
|
|
114
|
-
if (isToolId(id))
|
|
137
|
+
if (isToolId(id)) {
|
|
115
138
|
out.add(id);
|
|
116
|
-
|
|
117
|
-
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
warnings.push(`${where}: unknown agent memory tool "${id}" ignored (known: ` +
|
|
142
|
+
`${AGENT_MEMORY_TOOLS.map((t) => t.id).join(', ')})`);
|
|
143
|
+
}
|
|
118
144
|
}
|
|
119
145
|
return out;
|
|
120
146
|
}
|
|
121
|
-
function runPass(pass, opts) {
|
|
147
|
+
function runPass(ai, pass, opts) {
|
|
122
148
|
const report = emptyReport();
|
|
123
149
|
const allowed = allowedTools(opts.machine.env, pass.invoking, pass.target, report.warnings);
|
|
124
150
|
const listings = ADAPTERS.filter((a) => allowed.has(a.tool)).flatMap((a) => listSafely(a, pass, report));
|
|
@@ -126,18 +152,18 @@ function runPass(pass, opts) {
|
|
|
126
152
|
let store = null;
|
|
127
153
|
let synced = [];
|
|
128
154
|
try {
|
|
129
|
-
store = openTarget(pass.target, hasItems, opts);
|
|
155
|
+
store = openTarget(ai, pass.target, hasItems, opts);
|
|
130
156
|
if (store !== null)
|
|
131
157
|
synced = syncStore(pass, listings, store, opts, report);
|
|
132
158
|
}
|
|
133
159
|
catch (err) {
|
|
134
|
-
report.warnings.push(`agent memories not synced into ${pass.target}: ${
|
|
160
|
+
report.warnings.push(`agent memories not synced into ${pass.target}: ${ai.isBusy(err) ? 'the store was busy' : errorMessage(err)}`);
|
|
135
161
|
}
|
|
136
162
|
finally {
|
|
137
|
-
store?.close();
|
|
163
|
+
store?.target.close();
|
|
138
164
|
}
|
|
139
165
|
if (pass.handover && !opts.dryRun)
|
|
140
|
-
handOver(synced, path.dirname(pass.target), opts, report);
|
|
166
|
+
handOver(ai, synced, path.dirname(pass.target), opts, report);
|
|
141
167
|
return report;
|
|
142
168
|
}
|
|
143
169
|
function listSafely(adapter, pass, report) {
|
|
@@ -156,51 +182,48 @@ function listSafely(adapter, pass, report) {
|
|
|
156
182
|
tool.homes.push(listing.home);
|
|
157
183
|
report.warnings.push(...listing.warnings.map((w) => `${tool.label}: ${w}`));
|
|
158
184
|
for (const c of listing.containers) {
|
|
159
|
-
tool.containers.push({
|
|
185
|
+
tool.containers.push({
|
|
186
|
+
scope: c.scope,
|
|
187
|
+
path: c.path,
|
|
188
|
+
store: pass.target,
|
|
189
|
+
items: c.items.length,
|
|
190
|
+
readable: c.readable,
|
|
191
|
+
});
|
|
160
192
|
report.warnings.push(...c.warnings.map((w) => `${tool.label}: ${w}`));
|
|
161
193
|
}
|
|
162
194
|
return [listing];
|
|
163
195
|
}
|
|
164
|
-
/**
|
|
165
|
-
|
|
196
|
+
/**
|
|
197
|
+
* A store that does not exist yet is created only when there is something to put in it; a dry run plans against an
|
|
198
|
+
* empty stand-in.
|
|
199
|
+
*/
|
|
200
|
+
function openTarget(ai, target, hasItems, opts) {
|
|
166
201
|
const global = isGlobalStoreRoot(target);
|
|
167
202
|
if (!isInitialized(target)) {
|
|
168
203
|
if (opts.dryRun)
|
|
169
|
-
return
|
|
204
|
+
return { ai, target: ai.openStandIn(), global };
|
|
170
205
|
if (!hasItems)
|
|
171
206
|
return null;
|
|
172
|
-
|
|
207
|
+
ai.create(target);
|
|
173
208
|
}
|
|
174
|
-
|
|
175
|
-
return { db, root: target, global, close: () => closeHippoDb(db) };
|
|
209
|
+
return { ai, target: ai.open(target, { busyWaitMs: opts.busyWaitMs }), global };
|
|
176
210
|
}
|
|
177
|
-
function
|
|
178
|
-
const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hippo-agent-memories-'));
|
|
179
|
-
// Its folder is deleted at close, so a request scope must not keep the file open past that.
|
|
180
|
-
const db = outsideRequestStores(() => openHippoDb(root));
|
|
211
|
+
function storeSession(pass, store, opts, legacy) {
|
|
181
212
|
return {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
fs.rmSync(root, { recursive: true, force: true });
|
|
186
|
-
},
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
function syncStore(pass, listings, store, opts, report) {
|
|
190
|
-
const tenantId = resolveTenantId({});
|
|
191
|
-
const legacy = pass.legacy ? legacyWork(store.db, tenantId, listings) : null;
|
|
192
|
-
const session = {
|
|
193
|
-
db: store.db,
|
|
194
|
-
hippoRoot: store.root,
|
|
195
|
-
tenantId,
|
|
196
|
-
baseHalfLifeDays: loadConfig(store.root).defaultHalfLifeDays,
|
|
213
|
+
target: store.target,
|
|
214
|
+
tenantId: store.target.tenantId,
|
|
215
|
+
baseHalfLifeDays: loadConfig(store.target.root).defaultHalfLifeDays,
|
|
197
216
|
originProject: pass.originProject,
|
|
198
|
-
isDuplicate: duplicateCheck(store,
|
|
217
|
+
isDuplicate: duplicateCheck(store, [pass.originProject ?? '', ...pass.legacyOrigins], legacy?.adopted ?? new Set()),
|
|
199
218
|
dryRun: opts.dryRun === true,
|
|
200
219
|
};
|
|
220
|
+
}
|
|
221
|
+
function syncStore(pass, listings, store, opts, report) {
|
|
222
|
+
const legacy = pass.legacy ? legacyWork(store.target, listings) : null;
|
|
223
|
+
const session = storeSession(pass, store, opts, legacy);
|
|
201
224
|
// A project's rows in the global store are parted by origin: a worktree and its main checkout share a Claude folder.
|
|
202
|
-
const partition = store.global && pass.scope === 'project' ? pass.originProject ?? '' : null;
|
|
203
|
-
const earlier = partition === null || partition === '' ? [] : earlierNames(store.
|
|
225
|
+
const partition = store.global && pass.scope === 'project' ? (pass.originProject ?? '') : null;
|
|
226
|
+
const earlier = partition === null || partition === '' ? [] : earlierNames(store.target, partition, pass.legacyOrigins);
|
|
204
227
|
const synced = [];
|
|
205
228
|
let remembered = 0;
|
|
206
229
|
for (const listing of listings) {
|
|
@@ -211,28 +234,38 @@ function syncStore(pass, listings, store, opts, report) {
|
|
|
211
234
|
out.tally.unreadable++;
|
|
212
235
|
continue;
|
|
213
236
|
}
|
|
214
|
-
const work = containerWork(tool, container, {
|
|
215
|
-
|
|
237
|
+
const work = containerWork(tool, container, {
|
|
238
|
+
platform: opts.machine.platform,
|
|
239
|
+
legacy,
|
|
240
|
+
origin: partition ?? '',
|
|
241
|
+
earlier,
|
|
242
|
+
});
|
|
243
|
+
const outcome = syncOne(store.ai, session, work, { out, report });
|
|
216
244
|
if (outcome === null)
|
|
217
245
|
continue;
|
|
218
246
|
synced.push(work);
|
|
219
247
|
remembered += outcome.tally.imported + outcome.tally.replaced;
|
|
220
248
|
if (!session.dryRun)
|
|
221
|
-
afterCommit(store.
|
|
249
|
+
afterCommit(store.target, outcome, report);
|
|
222
250
|
}
|
|
223
|
-
if (session.dryRun)
|
|
224
|
-
out.unlisted += unlistedRows(store.
|
|
225
|
-
tool,
|
|
251
|
+
if (session.dryRun) {
|
|
252
|
+
out.unlisted += unlistedRows(store.target, {
|
|
253
|
+
tool,
|
|
254
|
+
scope: pass.scope,
|
|
255
|
+
listing,
|
|
256
|
+
platform: opts.machine.platform,
|
|
257
|
+
partition: partition === null ? null : [partition, ...earlier],
|
|
226
258
|
});
|
|
259
|
+
}
|
|
227
260
|
}
|
|
228
261
|
if (remembered > 0 && !session.dryRun)
|
|
229
|
-
bumpRemembered(store.
|
|
262
|
+
bumpRemembered(store.target, remembered, report);
|
|
230
263
|
return synced;
|
|
231
264
|
}
|
|
232
265
|
/** The legacy names plus every name a merge or repair folded into the project; the audit read runs once per pass. */
|
|
233
|
-
function earlierNames(
|
|
266
|
+
function earlierNames(target, id, legacyOrigins) {
|
|
234
267
|
const names = [id, ...legacyOrigins];
|
|
235
|
-
return [...legacyOrigins, ...namesFoldedInto(projectTagReads(
|
|
268
|
+
return [...legacyOrigins, ...namesFoldedInto(target.projectTagReads(), names)].filter((n) => n !== '' && n !== id);
|
|
236
269
|
}
|
|
237
270
|
function containerWork(tool, container, options) {
|
|
238
271
|
const { platform, legacy, origin, earlier } = options;
|
|
@@ -248,15 +281,18 @@ function containerWork(tool, container, options) {
|
|
|
248
281
|
legacyPrefixes: earlier.map(prefixOf),
|
|
249
282
|
};
|
|
250
283
|
}
|
|
251
|
-
/**
|
|
252
|
-
|
|
284
|
+
/**
|
|
285
|
+
* Null when the container was skipped: a busy store waits for the next sync, any other failure is a warning and the
|
|
286
|
+
* sync goes on.
|
|
287
|
+
*/
|
|
288
|
+
function syncOne(ai, session, work, { out, report }) {
|
|
253
289
|
try {
|
|
254
290
|
const outcome = syncContainer(session, work);
|
|
255
291
|
addTally(out.tally, outcome.tally);
|
|
256
292
|
return outcome;
|
|
257
293
|
}
|
|
258
294
|
catch (err) {
|
|
259
|
-
if (
|
|
295
|
+
if (ai.isBusy(err)) {
|
|
260
296
|
out.tally.busy++;
|
|
261
297
|
report.warnings.push(`${out.label}: ${work.container.path} skipped, the store was busy`);
|
|
262
298
|
}
|
|
@@ -266,12 +302,12 @@ function syncOne(session, work, out, report) {
|
|
|
266
302
|
return null;
|
|
267
303
|
}
|
|
268
304
|
}
|
|
269
|
-
function afterCommit(
|
|
305
|
+
function afterCommit(target, outcome, report) {
|
|
270
306
|
for (const entry of outcome.mirror)
|
|
271
|
-
|
|
307
|
+
target.writeMirror(entry);
|
|
272
308
|
for (const id of outcome.purge) {
|
|
273
309
|
try {
|
|
274
|
-
|
|
310
|
+
target.removeMirror(id);
|
|
275
311
|
}
|
|
276
312
|
catch (err) {
|
|
277
313
|
// rebuildIndex would bring the row back live, and the next sync sets it aside again.
|
|
@@ -279,70 +315,74 @@ function afterCommit(root, outcome, report) {
|
|
|
279
315
|
}
|
|
280
316
|
}
|
|
281
317
|
}
|
|
282
|
-
function bumpRemembered(
|
|
318
|
+
function bumpRemembered(target, remembered, report) {
|
|
283
319
|
try {
|
|
284
|
-
|
|
320
|
+
target.bumpRemembered(remembered);
|
|
285
321
|
}
|
|
286
322
|
catch (err) {
|
|
287
323
|
report.warnings.push(`remembered counter not updated: ${errorMessage(err)}`);
|
|
288
324
|
}
|
|
289
325
|
}
|
|
290
|
-
/**
|
|
291
|
-
|
|
326
|
+
/**
|
|
327
|
+
* Design 6: only text stored by another path counts, and in the global store only rows visible where the new row goes.
|
|
328
|
+
*/
|
|
329
|
+
function duplicateCheck(store, origins, adopted) {
|
|
292
330
|
let keys = null;
|
|
293
331
|
return (text) => {
|
|
294
|
-
keys ??= otherPathKeys(store,
|
|
332
|
+
keys ??= otherPathKeys(store, origins, adopted);
|
|
295
333
|
return keys.has(duplicateKey(text));
|
|
296
334
|
};
|
|
297
335
|
}
|
|
298
|
-
function otherPathKeys(store,
|
|
299
|
-
const rows =
|
|
336
|
+
function otherPathKeys(store, origins, adopted) {
|
|
337
|
+
const rows = store.target.rowsOutsideSourcePrefix(AGENT_MEMORY_SOURCE_PREFIX, store.global ? origins : null);
|
|
300
338
|
return new Set(rows.filter((r) => !adopted.has(r.id)).flatMap(heldTextKeys));
|
|
301
339
|
}
|
|
302
|
-
function unlistedRows(
|
|
340
|
+
function unlistedRows(target, options) {
|
|
303
341
|
const { tool, scope, listing, platform, partition } = options;
|
|
304
342
|
const listed = listing.containers.flatMap((c) => (partition ?? ['']).map((name) => containerPrefix(tool.id, containerId(c.path, c.scope, platform, name))));
|
|
305
|
-
return
|
|
343
|
+
return target
|
|
344
|
+
.liveBySourcePrefix(`${toolSourcePrefix(tool.id)}${scope === 'project' ? 'p' : 'u'}-`)
|
|
306
345
|
.filter((row) => row.tags.includes(tool.tag) && !listed.some((p) => row.source.startsWith(p)))
|
|
307
346
|
.filter((row) => partition === null || partition.includes(row.origin_project ?? '')).length;
|
|
308
347
|
}
|
|
309
|
-
/**
|
|
310
|
-
|
|
348
|
+
/**
|
|
349
|
+
* Design 2's handover: rows the store-less hook path left in the global store, under this project's origin, for
|
|
350
|
+
* containers its store now syncs.
|
|
351
|
+
*/
|
|
352
|
+
function handOver(ai, synced, projectRoot, opts, report) {
|
|
311
353
|
const globalRoot = resolveGlobalRootDir();
|
|
312
354
|
if (synced.length === 0 || !isInitialized(globalRoot))
|
|
313
355
|
return;
|
|
314
|
-
let
|
|
356
|
+
let target;
|
|
315
357
|
try {
|
|
316
|
-
|
|
317
|
-
const tenantId = resolveTenantId({});
|
|
358
|
+
target = ai.open(globalRoot, { busyWaitMs: opts.busyWaitMs });
|
|
318
359
|
// A folder with no git and no marker wrote as '' before its store existed, and as its own name after.
|
|
319
360
|
// Names folded into this project's in the global store were its rows too.
|
|
320
361
|
const names = projectNames(resolveProjectIdentity(projectRoot));
|
|
321
|
-
const origins = [...new Set([...names, ...namesFoldedInto(projectTagReads(
|
|
362
|
+
const origins = [...new Set([...names, ...namesFoldedInto(target.projectTagReads(), names), ''])];
|
|
322
363
|
for (const work of synced)
|
|
323
|
-
handOverContainer(
|
|
364
|
+
handOverContainer(target, work, { origins, platform: opts.machine.platform, report });
|
|
324
365
|
}
|
|
325
366
|
catch (err) {
|
|
326
|
-
report.warnings.push(`global copies not handed over: ${
|
|
367
|
+
report.warnings.push(`global copies not handed over: ${ai.isBusy(err) ? 'the global store was busy' : errorMessage(err)}`);
|
|
327
368
|
}
|
|
328
369
|
finally {
|
|
329
|
-
|
|
330
|
-
closeHippoDb(db);
|
|
370
|
+
target?.close();
|
|
331
371
|
}
|
|
332
372
|
}
|
|
333
|
-
function handOverContainer(
|
|
373
|
+
function handOverContainer(target, work, options) {
|
|
334
374
|
const { origins, platform, report } = options;
|
|
335
375
|
// A note the local pass could not read has no local row yet, so its global copy stays until it does.
|
|
336
376
|
const unread = new Set(work.container.skipped);
|
|
337
377
|
const mirror = [];
|
|
338
378
|
const purge = [];
|
|
339
|
-
|
|
379
|
+
target.inContainer('hand_over_container', false, (tx) => {
|
|
340
380
|
for (const origin of origins) {
|
|
341
381
|
const prefix = containerPrefix(work.tool.id, containerId(work.container.path, work.container.scope, platform, origin));
|
|
342
|
-
for (const row of
|
|
382
|
+
for (const row of tx.liveBySourcePrefix(target.tenantId, prefix)) {
|
|
343
383
|
if (!row.tags.includes(work.tool.tag) || unread.has(splitSource(row.source, prefix).key))
|
|
344
384
|
continue;
|
|
345
|
-
const result =
|
|
385
|
+
const result = tx.setAside(work.tool.tag, row, 'handover');
|
|
346
386
|
if (result.kind === 'untagged')
|
|
347
387
|
mirror.push(result.entry);
|
|
348
388
|
else
|
|
@@ -351,7 +391,7 @@ function handOverContainer(db, root, tenantId, work, options) {
|
|
|
351
391
|
}
|
|
352
392
|
});
|
|
353
393
|
toolReport(report, work.tool.id).tally.handedOver += mirror.length + purge.length;
|
|
354
|
-
afterCommit(
|
|
394
|
+
afterCommit(target, { mirror, purge }, report);
|
|
355
395
|
}
|
|
356
396
|
function toolOf(id) {
|
|
357
397
|
const tool = AGENT_MEMORY_TOOLS.find((t) => t.id === id);
|
package/dist/api/assemble.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CallerProject } from './prompt-hook.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { ContextWith } from './types.js';
|
|
3
3
|
export declare const DEFAULT_ASSEMBLE_BUDGET = 4000;
|
|
4
4
|
export interface AssembleOpts {
|
|
5
5
|
/** Token budget. Default DEFAULT_ASSEMBLE_BUDGET. */
|
|
@@ -42,14 +42,16 @@ export interface AssembleResult {
|
|
|
42
42
|
sessionId: string;
|
|
43
43
|
items: AssembledContextItem[];
|
|
44
44
|
tokens: number;
|
|
45
|
-
/** Tenant + scope-filtered raw row count, uncapped by `rowCap`,
|
|
45
|
+
/** Tenant + scope-filtered raw row count, uncapped by `rowCap`,
|
|
46
|
+
* so "session has N msgs" stays accurate for a windowed items[]. */
|
|
46
47
|
totalRaw: number;
|
|
47
48
|
summarized: number;
|
|
48
49
|
evicted: number;
|
|
49
50
|
/** True when `rowCap` truncated the window; the cap keeps the NEWEST rows, so older rows beyond it are absent. */
|
|
50
51
|
truncated: boolean;
|
|
51
52
|
}
|
|
52
|
-
/** Chronological context window for a session; over budget, evicts the lowest-strength non-fresh-tail item first (fresh
|
|
53
|
+
/** Chronological context window for a session; over budget, evicts the lowest-strength non-fresh-tail item first (fresh
|
|
54
|
+
* tail is never evicted).
|
|
53
55
|
* Returns `items: []` for an empty sessionId, no raws, or when every row fails the scope/tenant filter. */
|
|
54
|
-
export declare function assemble(ctx:
|
|
56
|
+
export declare function assemble(ctx: ContextWith<'dagReads'>, sessionId: string, opts?: AssembleOpts): Promise<AssembleResult>;
|
|
55
57
|
//# sourceMappingURL=assemble.d.ts.map
|