hippo-memory 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -6
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/{audit.js → auth/audit.js} +11 -11
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -15
- package/dist/api/{auth.js → auth/auth.js} +46 -29
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -8
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +10 -2
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +23 -14
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +112 -57
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +22 -15
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/{memories.js → memories/memories.js} +16 -21
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/{outcome.js → memories/outcome.js} +14 -8
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/{promote.js → memories/promote.js} +35 -22
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +16 -11
- package/dist/api/{remember-local.js → memories/remember-local.js} +34 -20
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +19 -13
- package/dist/api/{remember.js → memories/remember.js} +42 -26
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -8
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -4
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -6
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +32 -19
- package/dist/api/prompt-hook.js +65 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +176 -92
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +101 -60
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -70
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +16 -12
- package/dist/api/session-end.js +46 -30
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +51 -43
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +28 -7
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +33 -14
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +15 -4
- package/dist/capture/compaction-spool.js +64 -17
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +45 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +23 -23
- package/dist/cli/auth.js +19 -27
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -4
- package/dist/cli/client.js +43 -13
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +42 -17
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +4 -3
- package/dist/cli/curate.js +46 -68
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +27 -26
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +31 -9
- package/dist/cli/hook-runtime.js +40 -15
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.js +26 -11
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +4 -4
- package/dist/cli/object-verbs.js +10 -13
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +15 -19
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.js +5 -4
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +16 -7
- package/dist/cli/remember.js +46 -50
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +22 -17
- package/dist/cli/session-hooks.d.ts +2 -2
- package/dist/cli/session-hooks.js +87 -50
- package/dist/cli/setup.js +54 -32
- package/dist/cli/shared.d.ts +3 -1
- package/dist/cli/shared.js +24 -9
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +14 -6
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +1 -1
- package/dist/cli/transfer.js +71 -75
- package/dist/cli/verbs/memory.js +8 -6
- package/dist/cli/verbs/objects.js +10 -4
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +13 -16
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -8
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -5
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -6
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -6
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +34 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -4
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -6
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -5
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -6
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +23 -9
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +37 -36
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +27 -16
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +36 -13
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +42 -32
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +41 -38
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +26 -29
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +24 -14
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +21 -16
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +84 -27
- package/dist/core/memory.js +73 -29
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +37 -11
- package/dist/core/physics.js +55 -20
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +33 -17
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.js +13 -2
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +4 -4
- package/dist/dashboard/dashboard.js +6 -3
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -3
- package/dist/db/connect.js +8 -3
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +26 -13
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -1
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -4
- package/dist/db/physics-state.js +13 -20
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +19 -5
- package/dist/db/request-stores.js +14 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +34 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +4 -1
- package/dist/doctor.js +121 -39
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +9 -5
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +31 -17
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +19 -6
- package/dist/entry/store-kit.js +6 -4
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +16 -6
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +69 -34
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +8 -7
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +2 -2
- package/dist/importers/vault.js +43 -27
- package/dist/index.d.ts +32 -6
- package/dist/index.js +25 -7
- package/dist/learn/autolearn.d.ts +17 -6
- package/dist/learn/autolearn.js +53 -24
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +16 -9
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -7
- package/dist/learn/invalidation.js +56 -27
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +18 -14
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +57 -74
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +52 -21
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +9 -6
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +10 -5
- package/dist/search/embed-memories.js +62 -36
- package/dist/search/engine.d.ts +4 -1
- package/dist/search/engine.js +6 -2
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +9 -3
- package/dist/server/auth.d.ts +18 -14
- package/dist/server/auth.js +69 -38
- package/dist/server/boot.d.ts +3 -1
- package/dist/server/boot.js +95 -56
- package/dist/server/client-ip.d.ts +11 -4
- package/dist/server/client-ip.js +27 -10
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +547 -93
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -19
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +41 -19
- package/dist/server/tls.d.ts +4 -1
- package/dist/server/tls.js +13 -5
- package/dist/server/types.d.ts +38 -26
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +15 -10
- package/dist/server.js +32 -12
- package/dist/sharing/global-store.d.ts +5 -10
- package/dist/sharing/global-store.js +8 -43
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +16 -6
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +19 -12
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +39 -15
- package/dist/store/ambient.js +9 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +75 -36
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +93 -60
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +95 -32
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +9 -4
- package/dist/store/conflicts.js +100 -45
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +56 -5
- package/dist/store/connectors/event-log.d.ts +111 -2
- package/dist/store/connectors/event-log.js +2 -1
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +24 -40
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +25 -37
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -11
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +67 -26
- package/dist/store/delivery-recorder.d.ts +8 -5
- package/dist/store/delivery-recorder.js +70 -32
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +24 -9
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +40 -18
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +49 -20
- package/dist/store/entry-reads.js +181 -66
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +17 -12
- package/dist/store/entry-writes.d.ts +22 -10
- package/dist/store/entry-writes.js +41 -14
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +8 -10
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +24 -15
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +14 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/handoffs.d.ts +4 -4
- package/dist/store/handoffs.js +40 -19
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +3 -1
- package/dist/store/index.js +1 -0
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +88 -16
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +4 -2
- package/dist/store/open.js +18 -9
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +215 -229
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +126 -63
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +33 -12
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +18 -11
- package/dist/store/rule-sql.d.ts +6 -4
- package/dist/store/rule-sql.js +16 -9
- package/dist/store/search-rows.d.ts +14 -9
- package/dist/store/search-rows.js +48 -23
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +9 -4
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +6 -3
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +7 -1
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +4 -2
- package/dist/store/sqlite/last-recall-group.js +9 -4
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.js +2 -1
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +84 -33
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -11
- package/dist/store/sqlite/store.js +84 -11
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +19 -12
- package/dist/store/summaries.js +36 -21
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +6 -3
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +24 -10
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +4 -1
- package/dist/util/anthropic-messages.js +14 -5
- package/dist/util/atomic-write.d.ts +4 -2
- package/dist/util/atomic-write.js +25 -14
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +16 -4
- package/dist/util/env.js +78 -25
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +11 -3
- package/dist/util/request-scope.js +13 -4
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +3 -1
- package/dist/util/spawn-argv.js +13 -4
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +2 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -8
- package/dist/api/learn.js +0 -125
- package/dist/api/memories.d.ts +0 -25
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -125
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -11
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -4
- package/dist/store/sqlite/local.js +0 -8
package/dist/util/net.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Two loopback rules for two inputs: a URL hostname and a socket's remote address.
|
|
2
|
+
const IPV4_LOOPBACK = /^127(?:\.(?:25[0-5]|2[0-4]\d|1?\d?\d)){3}$/;
|
|
3
|
+
const MAPPED_PREFIX = '::ffff:';
|
|
4
|
+
/** A URL hostname that stays on this machine: localhost, ::1 (bracketed or not) or any 127.0.0.0/8 address. */
|
|
5
|
+
export function isLoopbackHost(hostname) {
|
|
6
|
+
return hostname === 'localhost' || hostname === '[::1]' || hostname === '::1' || IPV4_LOOPBACK.test(hostname);
|
|
7
|
+
}
|
|
8
|
+
/** A socket remote address on this machine; Node reports a dual-stack IPv4 peer as '::ffff:127.x.x.x'. */
|
|
9
|
+
export function isLoopbackAddress(remoteAddress) {
|
|
10
|
+
if (!remoteAddress)
|
|
11
|
+
return false;
|
|
12
|
+
if (remoteAddress === '::1')
|
|
13
|
+
return true;
|
|
14
|
+
const plain = remoteAddress.toLowerCase().startsWith(MAPPED_PREFIX)
|
|
15
|
+
? remoteAddress.slice(MAPPED_PREFIX.length)
|
|
16
|
+
: remoteAddress;
|
|
17
|
+
return IPV4_LOOPBACK.test(plain);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=net.js.map
|
package/dist/util/real-path.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
/** Dereferences symlinks and junctions and normalises case on Windows; falls back to path.resolve when the path does
|
|
1
|
+
/** Dereferences symlinks and junctions and normalises case on Windows; falls back to path.resolve when the path does
|
|
2
|
+
* not exist yet. */
|
|
2
3
|
export declare function realpathOrResolve(p: string): string;
|
|
3
4
|
//# sourceMappingURL=real-path.d.ts.map
|
package/dist/util/real-path.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
// Leaf module: path canonicalisation shared by project identity and the importers.
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
|
-
import { errorMessage, log } from './log.js';
|
|
5
|
-
/** Dereferences symlinks and junctions and normalises case on Windows; falls back to path.resolve when the path does
|
|
4
|
+
import { errorMessage, log, errorFields } from './log.js';
|
|
5
|
+
/** Dereferences symlinks and junctions and normalises case on Windows; falls back to path.resolve when the path does
|
|
6
|
+
* not exist yet. */
|
|
6
7
|
export function realpathOrResolve(p) {
|
|
7
8
|
try {
|
|
8
9
|
return fs.realpathSync.native(p);
|
|
9
10
|
}
|
|
10
11
|
catch (err) {
|
|
11
|
-
log.debug(`realpath fell back to resolve for ${p}: ${errorMessage(err)}
|
|
12
|
+
log.debug(`realpath fell back to resolve for ${p}: ${errorMessage(err)}`, errorFields(err));
|
|
12
13
|
return path.resolve(p);
|
|
13
14
|
}
|
|
14
15
|
}
|
|
@@ -10,7 +10,10 @@ export interface RequestScope {
|
|
|
10
10
|
}
|
|
11
11
|
/** How long a request may run: 120 s, or HIPPO_REQUEST_DEADLINE_MS, where 0 turns the deadline off. */
|
|
12
12
|
export declare function requestDeadlineMs(): number;
|
|
13
|
-
/**
|
|
13
|
+
/**
|
|
14
|
+
* When a request must be answered, and the store calls it still waits on: the store ends each of those soon after `at`,
|
|
15
|
+
* with the outcome only it knows.
|
|
16
|
+
*/
|
|
14
17
|
export declare class RequestDeadline {
|
|
15
18
|
#private;
|
|
16
19
|
/** Epoch milliseconds. */
|
|
@@ -18,7 +21,10 @@ export declare class RequestDeadline {
|
|
|
18
21
|
constructor(at: number);
|
|
19
22
|
/** Counts `call` as one the request waits on until it settles. */
|
|
20
23
|
track<T>(call: Promise<T>): Promise<T>;
|
|
21
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Runs `fn` now, or once the last store call the request waits on has settled; every function registered meanwhile
|
|
26
|
+
* runs, in order.
|
|
27
|
+
*/
|
|
22
28
|
onceIdle(fn: () => void): void;
|
|
23
29
|
}
|
|
24
30
|
export declare const requestScopes: AsyncLocalStorage<RequestScope>;
|
|
@@ -29,6 +35,8 @@ export declare function currentDeadline(): RequestDeadline | undefined;
|
|
|
29
35
|
/** The abort signal of the request this code runs for, if it has one. */
|
|
30
36
|
export declare function currentSignal(): AbortSignal | undefined;
|
|
31
37
|
/** Runs `fn` with `requestId` on every log line it writes, including the ones from
|
|
32
|
-
* timers and promises it starts. `deadline` reaches every store call made inside, and `signal` every check of
|
|
38
|
+
* timers and promises it starts. `deadline` reaches every store call made inside, and `signal` every check of
|
|
39
|
+
* `currentSignal`.
|
|
40
|
+
*/
|
|
33
41
|
export declare function runWithRequestId<T>(requestId: string, fn: () => T, deadline?: RequestDeadline, signal?: AbortSignal): T;
|
|
34
42
|
//# sourceMappingURL=request-scope.d.ts.map
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// The one ambient scope of a request. A leaf module, so the logger can read the request id without importing the store
|
|
1
|
+
// The one ambient scope of a request. A leaf module, so the logger can read the request id without importing the store
|
|
2
|
+
// layer.
|
|
2
3
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
3
4
|
import { envRequestDeadlineMs } from './env.js';
|
|
4
5
|
const DEFAULT_REQUEST_DEADLINE_MS = 120_000;
|
|
@@ -6,7 +7,10 @@ const DEFAULT_REQUEST_DEADLINE_MS = 120_000;
|
|
|
6
7
|
export function requestDeadlineMs() {
|
|
7
8
|
return envRequestDeadlineMs() ?? DEFAULT_REQUEST_DEADLINE_MS;
|
|
8
9
|
}
|
|
9
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* When a request must be answered, and the store calls it still waits on: the store ends each of those soon after `at`,
|
|
12
|
+
* with the outcome only it knows.
|
|
13
|
+
*/
|
|
10
14
|
export class RequestDeadline {
|
|
11
15
|
/** Epoch milliseconds. */
|
|
12
16
|
at;
|
|
@@ -28,7 +32,10 @@ export class RequestDeadline {
|
|
|
28
32
|
call.then(done, done);
|
|
29
33
|
return call;
|
|
30
34
|
}
|
|
31
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Runs `fn` now, or once the last store call the request waits on has settled; every function registered meanwhile
|
|
37
|
+
* runs, in order.
|
|
38
|
+
*/
|
|
32
39
|
onceIdle(fn) {
|
|
33
40
|
if (this.#storeCalls === 0)
|
|
34
41
|
fn();
|
|
@@ -50,7 +57,9 @@ export function currentSignal() {
|
|
|
50
57
|
return requestScopes.getStore()?.signal;
|
|
51
58
|
}
|
|
52
59
|
/** Runs `fn` with `requestId` on every log line it writes, including the ones from
|
|
53
|
-
* timers and promises it starts. `deadline` reaches every store call made inside, and `signal` every check of
|
|
60
|
+
* timers and promises it starts. `deadline` reaches every store call made inside, and `signal` every check of
|
|
61
|
+
* `currentSignal`.
|
|
62
|
+
*/
|
|
54
63
|
export function runWithRequestId(requestId, fn, deadline, signal) {
|
|
55
64
|
return requestScopes.run({ requestId, deadline, signal }, fn);
|
|
56
65
|
}
|
package/dist/util/same-text.d.ts
CHANGED
|
@@ -6,14 +6,21 @@ type Text = Pick<MemoryEntry, 'content'> & {
|
|
|
6
6
|
export declare function duplicateKey(text: string): string;
|
|
7
7
|
/** A sleep-merged row's text: a header, a blank line, then each text as a "- " bullet with its later lines indented. */
|
|
8
8
|
export declare function mergedText(header: string, texts: readonly string[]): string;
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Each source text a sleep-merged row holds; a two-row merge by an older release kept one text whole after its header.
|
|
11
|
+
*/
|
|
10
12
|
export declare function heldTexts(entry: Text): string[];
|
|
11
13
|
/** Keys of every text a row holds word for word: its own, plus each source text inside a sleep-merged row. */
|
|
12
14
|
export declare function heldTextKeys(entry: Text): string[];
|
|
13
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* The longest word of a text: every row holding the text word for word contains it, so a store lookup can filter on it.
|
|
17
|
+
*/
|
|
14
18
|
export declare function longestWord(text: string): string;
|
|
15
19
|
export declare function storedTextKeys(entries: readonly Text[]): Set<string>;
|
|
16
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* A final result list without copies: drops each unpinned row a sleep-merged row in the list holds word for word, and
|
|
22
|
+
* each later unpinned copy of a text.
|
|
23
|
+
*/
|
|
17
24
|
export declare function dropHeldCopies<T>(rows: readonly T[], textOf: (row: T) => Text): T[];
|
|
18
25
|
export {};
|
|
19
26
|
//# sourceMappingURL=same-text.d.ts.map
|
package/dist/util/same-text.js
CHANGED
|
@@ -5,7 +5,9 @@ export function duplicateKey(text) {
|
|
|
5
5
|
export function mergedText(header, texts) {
|
|
6
6
|
return `${header}\n\n${texts.map((t) => `- ${t.trim().replace(/\n/g, '\n ')}`).join('\n')}`;
|
|
7
7
|
}
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Each source text a sleep-merged row holds; a two-row merge by an older release kept one text whole after its header.
|
|
10
|
+
*/
|
|
9
11
|
export function heldTexts(entry) {
|
|
10
12
|
const cut = entry.content.indexOf('\n\n');
|
|
11
13
|
if (entry.source !== 'consolidation' || cut < 0)
|
|
@@ -19,14 +21,19 @@ export function heldTexts(entry) {
|
|
|
19
21
|
export function heldTextKeys(entry) {
|
|
20
22
|
return [duplicateKey(entry.content), ...heldTexts(entry).map(duplicateKey)];
|
|
21
23
|
}
|
|
22
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* The longest word of a text: every row holding the text word for word contains it, so a store lookup can filter on it.
|
|
26
|
+
*/
|
|
23
27
|
export function longestWord(text) {
|
|
24
28
|
return duplicateKey(text).split(' ').reduce((best, w) => (w.length > best.length ? w : best), '');
|
|
25
29
|
}
|
|
26
30
|
export function storedTextKeys(entries) {
|
|
27
31
|
return new Set(entries.flatMap(heldTextKeys));
|
|
28
32
|
}
|
|
29
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* A final result list without copies: drops each unpinned row a sleep-merged row in the list holds word for word, and
|
|
35
|
+
* each later unpinned copy of a text.
|
|
36
|
+
*/
|
|
30
37
|
export function dropHeldCopies(rows, textOf) {
|
|
31
38
|
const held = new Set(rows.flatMap((r) => heldTextKeys(textOf(r)).slice(1)));
|
|
32
39
|
const seen = new Set();
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Secret detection for memory content: conservative provider-bounded patterns (a bare `sk-` in prose must not flag).
|
|
3
|
+
* Flagged rows are never shared to
|
|
4
|
+
* the global store or injected as ambient context outside their project; explicit recall is unaffected. Leaf module: no
|
|
5
|
+
* imports from store/api/shared.
|
|
6
|
+
*/
|
|
3
7
|
/** Result of scanning one memory. `reason` names the tag or pattern that fired. */
|
|
4
8
|
export interface SecretDetection {
|
|
5
9
|
flagged: boolean;
|
|
@@ -12,22 +16,35 @@ export declare function detectSecret(entry: {
|
|
|
12
16
|
content: string;
|
|
13
17
|
tags: string[];
|
|
14
18
|
}): SecretDetection;
|
|
15
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Replace secret-shaped substrings in free text with a redaction marker, using the same `SECRET_PATTERNS` and
|
|
21
|
+
* co-occurrence guard as `detectSecret`;
|
|
16
22
|
* for callers persisting text that skips the capture content gate (e.g. pre-compact snapshot fields). */
|
|
17
23
|
export declare function redactSecrets(text: string): string;
|
|
18
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Memories never hold a raw email address (AGENTS.md); phone numbers are left alone, as their patterns misfire on ids.
|
|
26
|
+
*/
|
|
19
27
|
export declare function maskEmails(text: string): string;
|
|
20
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Stricter redaction for text that leaves the machine: no co-occurrence guard, plus Bearer and Basic auth headers and
|
|
30
|
+
* JWTs.
|
|
31
|
+
*/
|
|
21
32
|
export declare function redactSecretsStrict(text: string): string;
|
|
22
33
|
/** The text a write keeps, plus what to tell its caller about secret material in it. */
|
|
23
34
|
export interface SecretVet {
|
|
24
35
|
content: string;
|
|
25
36
|
warnings: string[];
|
|
26
37
|
}
|
|
27
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* Write-time veto: `scrub` text no person typed gets capture's strict redaction; typed text is a person's own call, so
|
|
40
|
+
* it is kept and flagged.
|
|
41
|
+
*/
|
|
28
42
|
export declare function vetSecrets(content: string, tags: readonly string[], scrub: boolean): SecretVet;
|
|
29
43
|
/** Appended to a dead-letter row's error when `redactPayload` changed its body. */
|
|
30
44
|
export declare const DLQ_REDACTED_NOTE = "secret-shaped text redacted, signature dropped; replay needs --force";
|
|
31
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* `vetSecrets` redaction for a raw webhook body: JSON stays valid for replay, and an untouched body stays
|
|
47
|
+
* byte-identical so its signature still verifies.
|
|
48
|
+
*/
|
|
32
49
|
export declare function redactPayload(raw: string): string;
|
|
33
50
|
//# sourceMappingURL=secret-detect.d.ts.map
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
1
|
+
/**
|
|
2
|
+
* Secret detection for memory content: conservative provider-bounded patterns (a bare `sk-` in prose must not flag).
|
|
3
|
+
* Flagged rows are never shared to
|
|
4
|
+
* the global store or injected as ambient context outside their project; explicit recall is unaffected. Leaf module: no
|
|
5
|
+
* imports from store/api/shared.
|
|
6
|
+
*/
|
|
3
7
|
/** Tags that flag a memory as secret, lower case; detectSecret folds a tag's case before the lookup. */
|
|
4
8
|
export const SECRET_TAGS = new Set([
|
|
5
9
|
'secret', 'api-key', 'apikey', 'credential', 'credentials',
|
|
@@ -14,7 +18,8 @@ const SECRET_PATTERNS = [
|
|
|
14
18
|
{ name: 'slack-token', re: /\bxox[baprs]-[A-Za-z0-9-]{10,}/ },
|
|
15
19
|
{ name: 'stripe-key', re: /\b[sr]k_(?:live|test)_[A-Za-z0-9]{16,}\b/ },
|
|
16
20
|
{ name: 'google-api-key', re: /\bAIza[0-9A-Za-z_-]{35}(?:\b|(?<=-))/ },
|
|
17
|
-
// hk_ is hippo's own API key (src/store/auth.ts); npm, Hugging Face, GitLab and Slack webhook shapes follow gitleaks'
|
|
21
|
+
// hk_ is hippo's own API key (src/store/auth.ts); npm, Hugging Face, GitLab and Slack webhook shapes follow gitleaks'
|
|
22
|
+
// rules.
|
|
18
23
|
{ name: 'hippo-api-key', re: /\bhk_[a-z2-7]{24}\.[a-z2-7]{32}\b/ },
|
|
19
24
|
{ name: 'npm-token', re: /\bnpm_[A-Za-z0-9]{36}\b/ },
|
|
20
25
|
{ name: 'huggingface-token', re: /\bhf_[A-Za-z]{34}\b/ },
|
|
@@ -22,12 +27,14 @@ const SECRET_PATTERNS = [
|
|
|
22
27
|
{ name: 'google-oauth-token', re: /\bya29\.[\w-]{20,}/ },
|
|
23
28
|
{ name: 'slack-webhook', re: /\bhooks\.slack\.com\/(?:services|workflows|triggers)\/[A-Za-z0-9+/]{43,56}/ },
|
|
24
29
|
{ name: 'private-key-block', re: /-----BEGIN [A-Z ]*PRIVATE KEY-----/ },
|
|
25
|
-
// sk-... (OpenAI/Anthropic) and sk_<vendor>_... shapes
|
|
30
|
+
// sk-... (OpenAI/Anthropic) and sk_<vendor>_... shapes need a key-ish noun nearby (co-occurrence guard), so prose
|
|
26
31
|
// like "the sk- prefix identifies API keys" does not flag but "prod API key sk_live_..." does.
|
|
27
32
|
{ name: 'sk-style-key', re: /\bsk-[A-Za-z0-9_-]{20,}/ },
|
|
28
33
|
{ name: 'sk-underscore-key', re: /\bsk_[A-Za-z0-9]+_[A-Za-z0-9_]{6,}\b/ },
|
|
29
|
-
// Value needs 12+ token-safe chars and a digit, or `token = estimateTokens(...)` and user:password@ templates would
|
|
30
|
-
//
|
|
34
|
+
// Value needs 12+ token-safe chars and a digit, or `token = estimateTokens(...)` and user:password@ templates would
|
|
35
|
+
// hide code lessons from ambient context.
|
|
36
|
+
// Secret names end in the keyword (dbPassword), so the match opens there, no prefix scan; pwd and pass need a _
|
|
37
|
+
// (OLDPWD, bypass are not secrets).
|
|
31
38
|
{
|
|
32
39
|
name: 'secret-assignment',
|
|
33
40
|
re: new RegExp(String.raw `(?:(?:api[_-]?key|access[_-]?key|private[_-]?key|secret|token|passw(?:or)?d|(?<=_)(?:pwd|pass))` +
|
|
@@ -61,7 +68,9 @@ export function detectSecret(entry) {
|
|
|
61
68
|
}
|
|
62
69
|
return { flagged: false, reason: null };
|
|
63
70
|
}
|
|
64
|
-
/**
|
|
71
|
+
/**
|
|
72
|
+
* Replace secret-shaped substrings in free text with a redaction marker, using the same `SECRET_PATTERNS` and
|
|
73
|
+
* co-occurrence guard as `detectSecret`;
|
|
65
74
|
* for callers persisting text that skips the capture content gate (e.g. pre-compact snapshot fields). */
|
|
66
75
|
export function redactSecrets(text) {
|
|
67
76
|
return redactText(text, false);
|
|
@@ -69,15 +78,23 @@ export function redactSecrets(text) {
|
|
|
69
78
|
/** Only a run's first character starts a match, so a long run is scanned once; a
|
|
70
79
|
* domain's first label opens on a letter, so logo@2x.png and react@18.2.0 stay. */
|
|
71
80
|
const EMAIL = /(?<![A-Za-z0-9._%+-])[A-Za-z0-9._%+-]{1,64}@[A-Za-z][A-Za-z0-9-]*(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}\b/g;
|
|
72
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Memories never hold a raw email address (AGENTS.md); phone numbers are left alone, as their patterns misfire on ids.
|
|
83
|
+
*/
|
|
73
84
|
export function maskEmails(text) {
|
|
74
85
|
return text.replace(EMAIL, '[email]');
|
|
75
86
|
}
|
|
76
|
-
/**
|
|
87
|
+
/**
|
|
88
|
+
* Stricter redaction for text that leaves the machine: no co-occurrence guard, plus Bearer and Basic auth headers and
|
|
89
|
+
* JWTs.
|
|
90
|
+
*/
|
|
77
91
|
export function redactSecretsStrict(text) {
|
|
78
92
|
return redactText(text, true);
|
|
79
93
|
}
|
|
80
|
-
/**
|
|
94
|
+
/**
|
|
95
|
+
* Write-time veto: `scrub` text no person typed gets capture's strict redaction; typed text is a person's own call, so
|
|
96
|
+
* it is kept and flagged.
|
|
97
|
+
*/
|
|
81
98
|
export function vetSecrets(content, tags, scrub) {
|
|
82
99
|
const kept = scrub ? redactSecretsStrict(content) : content;
|
|
83
100
|
const warnings = [];
|
|
@@ -94,7 +111,10 @@ export function vetSecrets(content, tags, scrub) {
|
|
|
94
111
|
const JSON_STRING = /"(?:[^"\\]|\\.)*"/g;
|
|
95
112
|
/** Appended to a dead-letter row's error when `redactPayload` changed its body. */
|
|
96
113
|
export const DLQ_REDACTED_NOTE = 'secret-shaped text redacted, signature dropped; replay needs --force';
|
|
97
|
-
/**
|
|
114
|
+
/**
|
|
115
|
+
* `vetSecrets` redaction for a raw webhook body: JSON stays valid for replay, and an untouched body stays
|
|
116
|
+
* byte-identical so its signature still verifies.
|
|
117
|
+
*/
|
|
98
118
|
export function redactPayload(raw) {
|
|
99
119
|
try {
|
|
100
120
|
JSON.parse(raw);
|
|
@@ -109,12 +129,27 @@ export function redactPayload(raw) {
|
|
|
109
129
|
return kept === text ? literal : JSON.stringify(kept);
|
|
110
130
|
});
|
|
111
131
|
}
|
|
132
|
+
const PEM_BEGIN = /-----BEGIN [A-Z ]*PRIVATE KEY-----/g;
|
|
133
|
+
const PEM_END = /-----END [A-Z ]*PRIVATE KEY-----/g;
|
|
134
|
+
/** Each PEM/OpenSSH block through its END line, or to the end of a truncated block; one forward scan, so no ReDoS. */
|
|
135
|
+
function redactPemBlocks(text) {
|
|
136
|
+
let out = '';
|
|
137
|
+
let from = 0;
|
|
138
|
+
PEM_BEGIN.lastIndex = 0;
|
|
139
|
+
for (let begin = PEM_BEGIN.exec(text); begin; begin = PEM_BEGIN.exec(text)) {
|
|
140
|
+
PEM_END.lastIndex = PEM_BEGIN.lastIndex;
|
|
141
|
+
const end = PEM_END.exec(text);
|
|
142
|
+
out += `${text.slice(from, begin.index)}[REDACTED]`;
|
|
143
|
+
from = end ? PEM_END.lastIndex : text.length;
|
|
144
|
+
PEM_BEGIN.lastIndex = from;
|
|
145
|
+
}
|
|
146
|
+
return out + text.slice(from);
|
|
147
|
+
}
|
|
112
148
|
function redactText(text, strict) {
|
|
113
149
|
if (!text)
|
|
114
150
|
return text;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
result = result.replace(/-----BEGIN [A-Z ]*PRIVATE KEY-----(?:[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----|[\s\S]*$)/g, '[REDACTED]');
|
|
151
|
+
// PEM blocks first: SECRET_PATTERNS only matches the BEGIN line.
|
|
152
|
+
let result = redactPemBlocks(text);
|
|
118
153
|
for (const { name, re } of SECRET_PATTERNS) {
|
|
119
154
|
if (!strict && CO_OCCURRENCE_GUARDED.has(name) && !KEYISH_CONTEXT_RE.test(text))
|
|
120
155
|
continue;
|
|
@@ -3,7 +3,9 @@ import { type ChildProcess, type SpawnOptions } from 'node:child_process';
|
|
|
3
3
|
export declare function quoteCmdArg(arg: string): string;
|
|
4
4
|
/** cmd.exe arguments that run a .cmd or .bat shim with every forwarded argument delivered verbatim. */
|
|
5
5
|
export declare function cmdShimArgs(shimPath: string, forwardArgs: readonly string[]): string[];
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* Spawns argv[0] with the rest as its arguments and no shell. Node refuses to start a .cmd or .bat without one
|
|
8
|
+
* (CVE-2024-27980),
|
|
7
9
|
* so on win32 such a shim runs through cmd.exe with every argument quoted for it. */
|
|
8
10
|
export declare function spawnArgv(argv: readonly string[], options: SpawnOptions): ChildProcess;
|
|
9
11
|
//# sourceMappingURL=spawn-argv.d.ts.map
|
package/dist/util/spawn-argv.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
// Starting a command from an argv list with no shell, Windows .cmd and .bat shims included, so no argument is ever
|
|
1
|
+
// Starting a command from an argv list with no shell, Windows .cmd and .bat shims included, so no argument is ever
|
|
2
|
+
// parsed as shell syntax.
|
|
2
3
|
import { spawn } from 'node:child_process';
|
|
3
4
|
import * as fs from 'node:fs';
|
|
4
5
|
import * as path from 'node:path';
|
|
5
6
|
import { envPath, envPathExt } from './env.js';
|
|
6
7
|
/** Quotes one cmd.exe argument; each `%` leaves the quotes as `^%`, so no %NAME% pair can expand. */
|
|
7
8
|
export function quoteCmdArg(arg) {
|
|
9
|
+
// cmd.exe ends the command line at CR or LF, so what follows would run as a new command.
|
|
10
|
+
if (/[\r\n]/.test(arg))
|
|
11
|
+
throw new Error('cmd.exe argument contains a CR or LF, which would start a new command');
|
|
8
12
|
if (arg.length === 0)
|
|
9
13
|
return '""';
|
|
10
14
|
if (!/[ \t"&()^<>|%!]/.test(arg))
|
|
@@ -21,10 +25,13 @@ const DEFAULT_PATHEXT = '.COM;.EXE;.BAT;.CMD';
|
|
|
21
25
|
function isFile(candidate) {
|
|
22
26
|
return fs.statSync(candidate, { throwIfNoEntry: false })?.isFile() === true;
|
|
23
27
|
}
|
|
24
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* The file `command` names on win32: as given when it has a folder, else the first hit on PATH (never the working
|
|
30
|
+
* folder, where a project file could stand in for a tool), trying each PATHEXT.
|
|
31
|
+
*/
|
|
25
32
|
function resolveWindowsCommand(command) {
|
|
26
33
|
const exts = (envPathExt() ?? DEFAULT_PATHEXT).split(';').filter((ext) => ext.length > 0);
|
|
27
|
-
const dirs = /[\\/]/.test(command) ? [''] :
|
|
34
|
+
const dirs = /[\\/]/.test(command) ? [''] : (envPath() ?? '').split(path.delimiter).filter((dir) => dir.length > 0);
|
|
28
35
|
for (const dir of dirs) {
|
|
29
36
|
const base = dir === '' ? command : path.join(dir, command);
|
|
30
37
|
const candidates = path.extname(command) === '' ? exts.map((ext) => base + ext) : [base, ...exts.map((ext) => base + ext)];
|
|
@@ -34,7 +41,9 @@ function resolveWindowsCommand(command) {
|
|
|
34
41
|
}
|
|
35
42
|
return null;
|
|
36
43
|
}
|
|
37
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Spawns argv[0] with the rest as its arguments and no shell. Node refuses to start a .cmd or .bat without one
|
|
46
|
+
* (CVE-2024-27980),
|
|
38
47
|
* so on win32 such a shim runs through cmd.exe with every argument quoted for it. */
|
|
39
48
|
export function spawnArgv(argv, options) {
|
|
40
49
|
const [command, ...args] = argv;
|
|
@@ -1,18 +1,29 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Thrown by a hippo.db open inside a request served from another store: the code path is not ported to the store port
|
|
3
|
+
* yet.
|
|
4
|
+
*/
|
|
2
5
|
export declare class SqliteBlockedError extends Error {
|
|
3
6
|
readonly storeKind: string;
|
|
4
7
|
constructor(storeKind: string, message?: string);
|
|
5
8
|
}
|
|
6
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* A store that lacks a whole group of port methods; it maps to the same 501, and the log names the group instead of
|
|
11
|
+
* hippo.db.
|
|
12
|
+
*/
|
|
7
13
|
export declare class StoreNotPortedError extends SqliteBlockedError {
|
|
8
14
|
readonly group: string;
|
|
9
15
|
constructor(storeKind: string, group: string);
|
|
10
16
|
}
|
|
11
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Thrown by a hippo.db open in a folder whose marker file names the store that holds its memories, from the CLI as from
|
|
19
|
+
* a request.
|
|
20
|
+
*/
|
|
12
21
|
export declare class OtherStoreFolderError extends SqliteBlockedError {
|
|
13
22
|
readonly markerPath: string;
|
|
14
23
|
constructor(storeKind: string, markerPath: string);
|
|
15
24
|
}
|
|
16
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
* First line of a best-effort catch around a hippo.db open: an unported path must fail closed, not fall back silently.
|
|
27
|
+
*/
|
|
17
28
|
export declare function rethrowIfSqliteBlocked<E>(err: E): void;
|
|
18
29
|
//# sourceMappingURL=sqlite-blocked.d.ts.map
|
|
@@ -1,14 +1,22 @@
|
|
|
1
|
-
// A leaf module, so http-util can map this error to a 501 without importing db/open, whose migrations reach back to
|
|
2
|
-
|
|
1
|
+
// A leaf module, so http-util can map this error to a 501 without importing db/open, whose migrations reach back to
|
|
2
|
+
// http-util.
|
|
3
|
+
/**
|
|
4
|
+
* Thrown by a hippo.db open inside a request served from another store: the code path is not ported to the store port
|
|
5
|
+
* yet.
|
|
6
|
+
*/
|
|
3
7
|
export class SqliteBlockedError extends Error {
|
|
4
8
|
storeKind;
|
|
5
|
-
constructor(storeKind, message = `hippo.db is not opened while the '${storeKind}' store serves this request; this code path is not
|
|
9
|
+
constructor(storeKind, message = `hippo.db is not opened while the '${storeKind}' store serves this request; this code path is not ` +
|
|
10
|
+
`ported to the store yet`) {
|
|
6
11
|
super(message);
|
|
7
12
|
this.storeKind = storeKind;
|
|
8
13
|
this.name = 'SqliteBlockedError';
|
|
9
14
|
}
|
|
10
15
|
}
|
|
11
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* A store that lacks a whole group of port methods; it maps to the same 501, and the log names the group instead of
|
|
18
|
+
* hippo.db.
|
|
19
|
+
*/
|
|
12
20
|
export class StoreNotPortedError extends SqliteBlockedError {
|
|
13
21
|
group;
|
|
14
22
|
constructor(storeKind, group) {
|
|
@@ -17,7 +25,10 @@ export class StoreNotPortedError extends SqliteBlockedError {
|
|
|
17
25
|
this.name = 'StoreNotPortedError';
|
|
18
26
|
}
|
|
19
27
|
}
|
|
20
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Thrown by a hippo.db open in a folder whose marker file names the store that holds its memories, from the CLI as from
|
|
30
|
+
* a request.
|
|
31
|
+
*/
|
|
21
32
|
export class OtherStoreFolderError extends SqliteBlockedError {
|
|
22
33
|
markerPath;
|
|
23
34
|
constructor(storeKind, markerPath) {
|
|
@@ -26,7 +37,9 @@ export class OtherStoreFolderError extends SqliteBlockedError {
|
|
|
26
37
|
this.name = 'OtherStoreFolderError';
|
|
27
38
|
}
|
|
28
39
|
}
|
|
29
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* First line of a best-effort catch around a hippo.db open: an unported path must fail closed, not fall back silently.
|
|
42
|
+
*/
|
|
30
43
|
export function rethrowIfSqliteBlocked(err) {
|
|
31
44
|
if (err instanceof SqliteBlockedError)
|
|
32
45
|
throw err;
|
|
@@ -4,6 +4,9 @@ export interface StoredJsonSite {
|
|
|
4
4
|
id: string | number;
|
|
5
5
|
column: string;
|
|
6
6
|
}
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* Warns the first time this row's column is found damaged (the logger caps how many), then at debug, so a row read on
|
|
9
|
+
* every recall cannot flood stderr.
|
|
10
|
+
*/
|
|
8
11
|
export declare function warnDamagedColumn(site: StoredJsonSite, problem: 'not valid JSON' | 'wrong shape'): void;
|
|
9
12
|
//# sourceMappingURL=stored-json.d.ts.map
|
package/dist/util/stored-json.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
// One log line for a stored JSON column that will not read, so a reader that degrades to an empty value still leaves a
|
|
1
|
+
// One log line for a stored JSON column that will not read, so a reader that degrades to an empty value still leaves a
|
|
2
|
+
// trace.
|
|
2
3
|
import { log } from './log.js';
|
|
3
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Warns the first time this row's column is found damaged (the logger caps how many), then at debug, so a row read on
|
|
6
|
+
* every recall cannot flood stderr.
|
|
7
|
+
*/
|
|
4
8
|
export function warnDamagedColumn(site, problem) {
|
|
5
9
|
const { table, id, column } = site;
|
|
6
10
|
log.warnThenDebug(`damaged-column:${table}:${id}:${column}`, `store: ${table}.${column} is ${problem}; read as empty`, { table, id, column });
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
/** Mirrors every stdout and stderr chunk to `logFile` until the returned restore runs; an append failure warns once
|
|
1
|
+
/** Mirrors every stdout and stderr chunk to `logFile` until the returned restore runs; an append failure warns once
|
|
2
|
+
* and never stops the real write. */
|
|
2
3
|
export declare function teeStdStreams(logFile: string): () => void;
|
|
3
4
|
//# sourceMappingURL=stream-tee.d.ts.map
|
package/dist/util/stream-tee.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
|
-
import { errorMessage, log } from './log.js';
|
|
3
|
-
/** Mirrors every stdout and stderr chunk to `logFile` until the returned restore runs; an append failure warns once
|
|
2
|
+
import { errorMessage, log, errorFields } from './log.js';
|
|
3
|
+
/** Mirrors every stdout and stderr chunk to `logFile` until the returned restore runs; an append failure warns once
|
|
4
|
+
* and never stops the real write. */
|
|
4
5
|
export function teeStdStreams(logFile) {
|
|
5
6
|
const origStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
6
7
|
const origStderrWrite = process.stderr.write.bind(process.stderr);
|
|
@@ -13,16 +14,18 @@ export function teeStdStreams(logFile) {
|
|
|
13
14
|
if (warned)
|
|
14
15
|
return;
|
|
15
16
|
warned = true;
|
|
16
|
-
log.warn(`log file ${logFile} is no longer writable; output continues without it: ${errorMessage(err)}
|
|
17
|
+
log.warn(`log file ${logFile} is no longer writable; output continues without it: ${errorMessage(err)}`, errorFields(err));
|
|
17
18
|
}
|
|
18
19
|
};
|
|
19
20
|
const wrapWrite = (origWrite) => {
|
|
20
21
|
const wrapped = (...args) => {
|
|
21
22
|
tee(args[0]);
|
|
22
|
-
// SAFETY: forwarding the exact arguments the real overloaded `write` received is safe; `StreamWriteArgs` is the
|
|
23
|
+
// SAFETY: forwarding the exact arguments the real overloaded `write` received is safe; `StreamWriteArgs` is the
|
|
24
|
+
// union of both overloads' parameter lists.
|
|
23
25
|
return origWrite(...args);
|
|
24
26
|
};
|
|
25
|
-
// SAFETY: `wrapped` matches both real `write` overload shapes; TS cannot verify one implementation covers an
|
|
27
|
+
// SAFETY: `wrapped` matches both real `write` overload shapes; TS cannot verify one implementation covers an
|
|
28
|
+
// overloaded type.
|
|
26
29
|
return wrapped;
|
|
27
30
|
};
|
|
28
31
|
process.stdout.write = wrapWrite(origStdoutWrite);
|
|
@@ -4,6 +4,9 @@ export declare const PRE_COMPACT_TAIL_BYTES: number;
|
|
|
4
4
|
export declare function truncateCodePointSafe(text: string, maxChars: number): string;
|
|
5
5
|
/** The last `capBytes` of a JSONL transcript, read at an offset and starting on a whole line so every line parses. */
|
|
6
6
|
export declare function readTranscriptTail(transcriptPath: string, capBytes?: number): string;
|
|
7
|
-
/**
|
|
7
|
+
/**
|
|
8
|
+
* {@link readTranscriptTail} for a transcript the caller opened and sized, so the size and the bytes come from one
|
|
9
|
+
* file.
|
|
10
|
+
*/
|
|
8
11
|
export declare function readOpenTranscriptTail(fd: number, size: number, capBytes: number): string;
|
|
9
12
|
//# sourceMappingURL=transcript-tail.d.ts.map
|
|
@@ -24,7 +24,10 @@ export function readTranscriptTail(transcriptPath, capBytes = PRE_COMPACT_TAIL_B
|
|
|
24
24
|
fs.closeSync(fd);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* {@link readTranscriptTail} for a transcript the caller opened and sized, so the size and the bytes come from one
|
|
29
|
+
* file.
|
|
30
|
+
*/
|
|
28
31
|
export function readOpenTranscriptTail(fd, size, capBytes) {
|
|
29
32
|
const start = Math.max(0, size - capBytes);
|
|
30
33
|
const length = size - start;
|
package/dist/util/version.d.ts
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for the package version, written by scripts/sync-version.mjs; never edit by hand. Read by the
|
|
3
|
+
* db rollback guard, /health, MCP.
|
|
2
4
|
* A constant, not a runtime package.json read: the published bundle may lack package.json on a path ESM can resolve. */
|
|
3
|
-
export declare const PACKAGE_VERSION = "2.
|
|
5
|
+
export declare const PACKAGE_VERSION = "2.1.0";
|
|
4
6
|
/** The floor a store takes on its first expiring key: the first release with schema
|
|
5
7
|
* v53, set by hand in that release; scripts/check-expiring-keys-floor.mjs gates it. */
|
|
6
8
|
export declare const EXPIRING_KEYS_MIN_BINARY = "1.64.0";
|
|
7
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* The floor a store takes on its first session bind or owner snapshot: first release with v54; set by hand in that
|
|
11
|
+
* release.
|
|
12
|
+
*/
|
|
8
13
|
export declare const TASK_OWNER_MIN_BINARY = "1.64.0";
|
|
9
14
|
/** Compares plain x.y.z versions, positive if a > b; tags throw so the rollback guard never misfires silently. */
|
|
10
15
|
export declare function compareSemver(a: string, b: string): number;
|
package/dist/util/version.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for the package version, written by scripts/sync-version.mjs; never edit by hand. Read by the
|
|
3
|
+
* db rollback guard, /health, MCP.
|
|
2
4
|
* A constant, not a runtime package.json read: the published bundle may lack package.json on a path ESM can resolve. */
|
|
3
|
-
export const PACKAGE_VERSION = '2.
|
|
5
|
+
export const PACKAGE_VERSION = '2.1.0';
|
|
4
6
|
/** The floor a store takes on its first expiring key: the first release with schema
|
|
5
7
|
* v53, set by hand in that release; scripts/check-expiring-keys-floor.mjs gates it. */
|
|
6
8
|
export const EXPIRING_KEYS_MIN_BINARY = '1.64.0';
|
|
7
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* The floor a store takes on its first session bind or owner snapshot: first release with v54; set by hand in that
|
|
11
|
+
* release.
|
|
12
|
+
*/
|
|
8
13
|
export const TASK_OWNER_MIN_BINARY = '1.64.0';
|
|
9
14
|
/** Compares plain x.y.z versions, positive if a > b; tags throw so the rollback guard never misfires silently. */
|
|
10
15
|
export function compareSemver(a, b) {
|