hippo-memory 1.72.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/agent-memories/apply.d.ts +7 -5
- package/dist/agent-memories/apply.js +66 -39
- package/dist/agent-memories/claude-code.d.ts +8 -2
- package/dist/agent-memories/claude-code.js +26 -7
- package/dist/agent-memories/copilot.js +2 -1
- package/dist/agent-memories/files.js +2 -1
- package/dist/agent-memories/legacy.d.ts +6 -3
- package/dist/agent-memories/legacy.js +35 -14
- package/dist/agent-memories/markdown.d.ts +3 -1
- package/dist/agent-memories/markdown.js +3 -1
- package/dist/agent-memories/openclaw.js +5 -2
- package/dist/agent-memories/plan.js +11 -1
- package/dist/agent-memories/project-folds.js +2 -1
- package/dist/agent-memories/report.d.ts +4 -1
- package/dist/agent-memories/report.js +43 -9
- package/dist/agent-memories/source.d.ts +8 -2
- package/dist/agent-memories/source.js +11 -3
- package/dist/agent-memories/sync.d.ts +7 -2
- package/dist/agent-memories/sync.js +141 -101
- package/dist/api/assemble.d.ts +6 -4
- package/dist/api/assemble.js +11 -5
- package/dist/api/{audit.d.ts → auth/audit.d.ts} +18 -16
- package/dist/api/auth/audit.js +58 -0
- package/dist/api/{auth.d.ts → auth/auth.d.ts} +19 -16
- package/dist/api/{auth.js → auth/auth.js} +66 -54
- package/dist/api/{quarantine.d.ts → auth/quarantine.d.ts} +8 -7
- package/dist/api/{quarantine.js → auth/quarantine.js} +8 -7
- package/dist/api/auth/session-owners.d.ts +10 -0
- package/dist/api/auth/session-owners.js +35 -0
- package/dist/api/availability.d.ts +3 -1
- package/dist/api/availability.js +3 -1
- package/dist/api/busy.d.ts +2 -0
- package/dist/api/busy.js +2 -0
- package/dist/api/cli-surface.d.ts +6 -0
- package/dist/api/cli-surface.js +6 -0
- package/dist/api/config-of.d.ts +5 -0
- package/dist/api/config-of.js +6 -0
- package/dist/api/context-auto.d.ts +4 -1
- package/dist/api/context-auto.js +14 -4
- package/dist/api/context-render.js +14 -7
- package/dist/api/context-select.d.ts +4 -1
- package/dist/api/context-select.js +31 -34
- package/dist/api/context-types.d.ts +38 -12
- package/dist/api/context.d.ts +8 -5
- package/dist/api/context.js +120 -63
- package/dist/api/continuity.d.ts +24 -21
- package/dist/api/continuity.js +18 -20
- package/dist/api/correction-latency.d.ts +3 -1
- package/dist/api/correction-latency.js +3 -1
- package/dist/api/error-reply.d.ts +4 -1
- package/dist/api/error-reply.js +12 -3
- package/dist/api/index.d.ts +39 -23
- package/dist/api/index.js +21 -23
- package/dist/api/instruction-detect.d.ts +4 -1
- package/dist/api/instruction-detect.js +75 -20
- package/dist/api/ledger-db.d.ts +15 -11
- package/dist/api/ledger-db.js +21 -23
- package/dist/api/memories/conflicts.d.ts +33 -0
- package/dist/api/memories/conflicts.js +67 -0
- package/dist/api/{forget.d.ts → memories/forget.d.ts} +11 -9
- package/dist/api/{forget.js → memories/forget.js} +23 -17
- package/dist/api/memories/memories.d.ts +27 -0
- package/dist/api/memories/memories.js +52 -0
- package/dist/api/memories/outcome.d.ts +22 -0
- package/dist/api/memories/outcome.js +28 -0
- package/dist/api/memories/promote.d.ts +40 -0
- package/dist/api/memories/promote.js +76 -0
- package/dist/api/memories/refine.d.ts +10 -0
- package/dist/api/memories/refine.js +12 -0
- package/dist/api/{remember-local.d.ts → memories/remember-local.d.ts} +17 -9
- package/dist/api/{remember-local.js → memories/remember-local.js} +46 -24
- package/dist/api/{remember.d.ts → memories/remember.d.ts} +22 -13
- package/dist/api/{remember.js → memories/remember.js} +50 -32
- package/dist/api/objects/cards.d.ts +39 -0
- package/dist/api/{cards.js → objects/cards.js} +12 -14
- package/dist/api/{drill-down.d.ts → objects/drill-down.d.ts} +12 -10
- package/dist/api/{drill-down.js → objects/drill-down.js} +7 -7
- package/dist/api/objects/goals.d.ts +18 -0
- package/dist/api/{goals.js → objects/goals.js} +12 -12
- package/dist/api/objects/graph.d.ts +11 -0
- package/dist/api/objects/graph.js +16 -0
- package/dist/api/objects/objects.d.ts +9 -0
- package/dist/api/{objects.js → objects/objects.js} +2 -3
- package/dist/api/objects/predictions.d.ts +11 -0
- package/dist/api/{predictions.js → objects/predictions.js} +7 -5
- package/dist/api/{projects.d.ts → objects/projects.d.ts} +8 -5
- package/dist/api/{projects.js → objects/projects.js} +8 -4
- package/dist/api/pilot-arm.d.ts +8 -4
- package/dist/api/pilot-arm.js +5 -4
- package/dist/api/prompt-hook.d.ts +35 -20
- package/dist/api/prompt-hook.js +66 -44
- package/dist/api/provenance-coverage.d.ts +3 -1
- package/dist/api/provenance-coverage.js +3 -1
- package/dist/api/recall/finish.d.ts +185 -0
- package/dist/api/recall/finish.js +301 -0
- package/dist/api/{recall-pipeline.d.ts → recall/pipeline.d.ts} +12 -8
- package/dist/api/{recall-pipeline.js → recall/pipeline.js} +185 -101
- package/dist/api/recall/recall.d.ts +6 -0
- package/dist/api/{recall.js → recall/recall.js} +116 -72
- package/dist/api/recall/render.d.ts +39 -0
- package/dist/api/recall/render.js +60 -0
- package/dist/api/{recall-request.d.ts → recall/request.d.ts} +7 -5
- package/dist/api/recall/request.js +261 -0
- package/dist/api/{recall-cli.d.ts → recall/rows.d.ts} +18 -12
- package/dist/api/{recall-cli.js → recall/rows.js} +28 -27
- package/dist/api/{recall-types.d.ts → recall/types.d.ts} +95 -68
- package/dist/api/{recall-types.js → recall/types.js} +1 -1
- package/dist/api/session-end.d.ts +36 -8
- package/dist/api/session-end.js +71 -25
- package/dist/api/{auto-sleep.d.ts → sleep/auto-sleep.d.ts} +9 -5
- package/dist/api/{auto-sleep.js → sleep/auto-sleep.js} +7 -12
- package/dist/api/sleep/dormant.d.ts +25 -0
- package/dist/api/sleep/dormant.js +64 -0
- package/dist/api/{learn.d.ts → sleep/learn.d.ts} +5 -4
- package/dist/api/sleep/learn.js +138 -0
- package/dist/api/sleep/sleep-run.d.ts +38 -0
- package/dist/api/{sleep-run.js → sleep/sleep-run.js} +54 -45
- package/dist/api/{sleep.d.ts → sleep/sleep.d.ts} +17 -11
- package/dist/api/sleep/sleep.js +9 -0
- package/dist/api/status.d.ts +3 -1
- package/dist/api/status.js +3 -1
- package/dist/api/store-init.d.ts +4 -1
- package/dist/api/store-init.js +4 -1
- package/dist/api/tokens.d.ts +10 -9
- package/dist/api/tokens.js +9 -10
- package/dist/api/types.d.ts +27 -12
- package/dist/api/types.js +13 -4
- package/dist/capture/caller-session.d.ts +8 -2
- package/dist/capture/caller-session.js +16 -6
- package/dist/capture/capture-error.d.ts +3 -1
- package/dist/capture/capture-error.js +3 -1
- package/dist/capture/codex-patch.js +7 -2
- package/dist/capture/command.d.ts +4 -2
- package/dist/capture/command.js +34 -15
- package/dist/capture/compact-resume-caller.js +15 -8
- package/dist/capture/compact.d.ts +8 -5
- package/dist/capture/compact.js +34 -23
- package/dist/capture/compaction-items-caller.js +9 -3
- package/dist/capture/compaction-record.d.ts +4 -3
- package/dist/capture/compaction-record.js +20 -12
- package/dist/capture/compaction-spool.d.ts +18 -9
- package/dist/capture/compaction-spool.js +105 -63
- package/dist/capture/copilot-transcript.d.ts +11 -3
- package/dist/capture/copilot-transcript.js +16 -6
- package/dist/capture/extract.js +20 -8
- package/dist/capture/failure-caller.js +23 -12
- package/dist/capture/failure-reading.d.ts +10 -3
- package/dist/capture/failure-reading.js +24 -7
- package/dist/capture/pre-compact-caller.js +11 -4
- package/dist/capture/session-digest.d.ts +15 -4
- package/dist/capture/session-digest.js +39 -13
- package/dist/capture/session-end-caller.d.ts +4 -1
- package/dist/capture/session-end-caller.js +20 -8
- package/dist/capture/session-texts.d.ts +6 -2
- package/dist/capture/session-texts.js +22 -7
- package/dist/capture/session-worker.d.ts +4 -2
- package/dist/capture/session-worker.js +58 -17
- package/dist/capture/transcript.d.ts +13 -4
- package/dist/capture/transcript.js +32 -10
- package/dist/capture/working-state.d.ts +13 -4
- package/dist/capture/working-state.js +50 -56
- package/dist/cli/api-context.d.ts +14 -2
- package/dist/cli/api-context.js +45 -2
- package/dist/cli/audit.js +33 -33
- package/dist/cli/auth.js +23 -31
- package/dist/cli/briefs.d.ts +1 -1
- package/dist/cli/briefs.js +20 -15
- package/dist/cli/card.d.ts +1 -1
- package/dist/cli/card.js +56 -73
- package/dist/cli/client.d.ts +12 -5
- package/dist/cli/client.js +53 -23
- package/dist/cli/compact-resume-payload.d.ts +4 -1
- package/dist/cli/compact-resume-payload.js +12 -5
- package/dist/cli/context.js +43 -18
- package/dist/cli/continuity.d.ts +5 -5
- package/dist/cli/continuity.js +90 -107
- package/dist/cli/curate.d.ts +5 -4
- package/dist/cli/curate.js +55 -77
- package/dist/cli/dag.d.ts +1 -1
- package/dist/cli/dag.js +14 -17
- package/dist/cli/decisions.js +30 -30
- package/dist/cli/eval.js +16 -21
- package/dist/cli/exit.d.ts +4 -1
- package/dist/cli/exit.js +10 -2
- package/dist/cli/explain.js +12 -11
- package/dist/cli/flag-values.d.ts +1 -1
- package/dist/cli/flag-values.js +9 -18
- package/dist/cli/github.d.ts +6 -0
- package/dist/cli/github.js +25 -13
- package/dist/cli/goals.d.ts +1 -1
- package/dist/cli/goals.js +39 -56
- package/dist/cli/graph.d.ts +1 -1
- package/dist/cli/graph.js +15 -11
- package/dist/cli/hook-runtime.d.ts +34 -10
- package/dist/cli/hook-runtime.js +41 -16
- package/dist/cli/incidents.d.ts +1 -1
- package/dist/cli/incidents.js +25 -25
- package/dist/cli/init.d.ts +1 -1
- package/dist/cli/init.js +35 -20
- package/dist/cli/install-steps.d.ts +12 -3
- package/dist/cli/install-steps.js +42 -18
- package/dist/cli/last-sleep.d.ts +4 -1
- package/dist/cli/last-sleep.js +9 -4
- package/dist/cli/maintenance.d.ts +1 -1
- package/dist/cli/maintenance.js +11 -12
- package/dist/cli/notes.d.ts +1 -1
- package/dist/cli/notes.js +8 -5
- package/dist/cli/object-verbs.d.ts +5 -5
- package/dist/cli/object-verbs.js +13 -16
- package/dist/cli/open-browser.js +11 -2
- package/dist/cli/playbooks.d.ts +3 -3
- package/dist/cli/playbooks.js +40 -32
- package/dist/cli/predictions.js +17 -22
- package/dist/cli/print.js +4 -2
- package/dist/cli/projects.js +21 -11
- package/dist/cli/quality-repair-once.d.ts +1 -1
- package/dist/cli/quality-repair-once.js +7 -6
- package/dist/cli/recall.js +129 -93
- package/dist/cli/refine-llm.d.ts +15 -4
- package/dist/cli/refine-llm.js +17 -7
- package/dist/cli/remember.js +51 -55
- package/dist/cli/scheduler.d.ts +4 -1
- package/dist/cli/scheduler.js +9 -5
- package/dist/cli/serve.js +28 -18
- package/dist/cli/session-hooks.d.ts +2 -6
- package/dist/cli/session-hooks.js +140 -112
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +56 -34
- package/dist/cli/shared.d.ts +4 -2
- package/dist/cli/shared.js +26 -11
- package/dist/cli/slack.js +15 -24
- package/dist/cli/sleep-render.d.ts +3 -1
- package/dist/cli/sleep-render.js +8 -5
- package/dist/cli/sleep.js +16 -8
- package/dist/cli/status.d.ts +4 -4
- package/dist/cli/status.js +32 -27
- package/dist/cli/stdin.d.ts +10 -3
- package/dist/cli/stdin.js +10 -3
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +97 -82
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +1 -1
- package/dist/cli/verb-row.d.ts +2 -0
- package/dist/cli/verbs/health.js +2 -0
- package/dist/cli/verbs/memory.js +47 -53
- package/dist/cli/verbs/objects.js +16 -7
- package/dist/cli/verbs/sessions.js +4 -2
- package/dist/cli/versioned-verbs.d.ts +8 -7
- package/dist/cli/versioned-verbs.js +31 -21
- package/dist/cli.js +14 -18
- package/dist/connectors/dlq.d.ts +6 -6
- package/dist/connectors/dlq.js +12 -7
- package/dist/connectors/github/backfill.d.ts +4 -4
- package/dist/connectors/github/backfill.js +6 -4
- package/dist/connectors/github/deletion.d.ts +6 -4
- package/dist/connectors/github/deletion.js +5 -4
- package/dist/connectors/github/dlq.d.ts +8 -6
- package/dist/connectors/github/dlq.js +11 -5
- package/dist/connectors/github/ingest.d.ts +2 -2
- package/dist/connectors/github/ingest.js +9 -5
- package/dist/connectors/github/octokit-client.d.ts +3 -1
- package/dist/connectors/github/octokit-client.js +7 -2
- package/dist/connectors/github/ratelimit.d.ts +6 -2
- package/dist/connectors/github/ratelimit.js +6 -2
- package/dist/connectors/github/signature.d.ts +14 -3
- package/dist/connectors/github/signature.js +17 -3
- package/dist/connectors/github/tenant-routing.d.ts +6 -4
- package/dist/connectors/github/tenant-routing.js +6 -5
- package/dist/connectors/github/transform.js +50 -67
- package/dist/connectors/github/types.d.ts +10 -3
- package/dist/connectors/github/types.js +6 -2
- package/dist/connectors/github/webhook.d.ts +5 -5
- package/dist/connectors/github/webhook.js +36 -23
- package/dist/connectors/ingest.d.ts +5 -3
- package/dist/connectors/ingest.js +3 -3
- package/dist/connectors/slack/backfill.d.ts +5 -5
- package/dist/connectors/slack/backfill.js +3 -3
- package/dist/connectors/slack/deletion.d.ts +4 -4
- package/dist/connectors/slack/deletion.js +6 -5
- package/dist/connectors/slack/dlq.d.ts +4 -4
- package/dist/connectors/slack/dlq.js +6 -6
- package/dist/connectors/slack/ingest.d.ts +6 -4
- package/dist/connectors/slack/ingest.js +5 -4
- package/dist/connectors/slack/signature.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.d.ts +6 -4
- package/dist/connectors/slack/tenant-routing.js +6 -5
- package/dist/connectors/slack/transform.d.ts +6 -2
- package/dist/connectors/slack/transform.js +6 -2
- package/dist/connectors/slack/types.d.ts +3 -1
- package/dist/connectors/slack/web-client.js +8 -3
- package/dist/connectors/slack/webhook.d.ts +5 -5
- package/dist/connectors/slack/webhook.js +19 -11
- package/dist/connectors/slack/workspaces.d.ts +7 -3
- package/dist/connectors/slack/workspaces.js +7 -3
- package/dist/connectors/store.d.ts +8 -0
- package/dist/connectors/store.js +2 -0
- package/dist/consolidate/conflicts.js +24 -10
- package/dist/consolidate/dag-summary.js +2 -1
- package/dist/consolidate/dag.d.ts +10 -5
- package/dist/consolidate/dag.js +45 -39
- package/dist/consolidate/decay.js +19 -6
- package/dist/consolidate/dedupe.d.ts +14 -5
- package/dist/consolidate/dedupe.js +28 -17
- package/dist/consolidate/flush-units.d.ts +4 -1
- package/dist/consolidate/flush-units.js +4 -1
- package/dist/consolidate/half-life-migration.d.ts +18 -8
- package/dist/consolidate/half-life-migration.js +48 -18
- package/dist/consolidate/llm-passes.js +27 -11
- package/dist/consolidate/memory-value-weights.d.ts +6 -2
- package/dist/consolidate/memory-value-weights.js +6 -2
- package/dist/consolidate/memory-value.d.ts +30 -10
- package/dist/consolidate/memory-value.js +37 -14
- package/dist/consolidate/merge.d.ts +4 -1
- package/dist/consolidate/merge.js +47 -37
- package/dist/consolidate/overlap-index.d.ts +8 -2
- package/dist/consolidate/overlap-index.js +11 -4
- package/dist/consolidate/physics-pass.d.ts +3 -1
- package/dist/consolidate/physics-pass.js +10 -7
- package/dist/consolidate/replay.d.ts +11 -4
- package/dist/consolidate/replay.js +19 -7
- package/dist/consolidate/run.d.ts +13 -5
- package/dist/consolidate/run.js +4 -4
- package/dist/consolidate/sleep.d.ts +14 -6
- package/dist/consolidate/sleep.js +42 -39
- package/dist/consolidate/trace.d.ts +7 -2
- package/dist/consolidate/trace.js +7 -2
- package/dist/consolidate/traces.js +27 -30
- package/dist/core/ablation.d.ts +9 -3
- package/dist/core/ablation.js +14 -4
- package/dist/core/active-scope.d.ts +3 -1
- package/dist/core/active-scope.js +3 -1
- package/dist/core/agent-memory-tools.d.ts +2 -0
- package/dist/core/agent-memory-tools.js +2 -0
- package/dist/core/ambient.d.ts +4 -3
- package/dist/core/ambient.js +8 -6
- package/dist/core/api-errors.d.ts +9 -3
- package/dist/core/api-errors.js +9 -3
- package/dist/core/capture-contract.d.ts +4 -1
- package/dist/core/capture-contract.js +27 -8
- package/dist/core/compare.d.ts +24 -8
- package/dist/core/compare.js +24 -8
- package/dist/core/config.d.ts +18 -9
- package/dist/core/config.js +38 -29
- package/dist/core/cosine.d.ts +4 -1
- package/dist/core/cosine.js +4 -1
- package/dist/core/handoff.d.ts +7 -2
- package/dist/core/handoff.js +4 -1
- package/dist/core/markdown.js +22 -17
- package/dist/core/memory-audit.js +14 -3
- package/dist/core/memory-quality.d.ts +12 -3
- package/dist/core/memory-quality.js +57 -21
- package/dist/core/memory.d.ts +87 -30
- package/dist/core/memory.js +82 -33
- package/dist/core/merged-row.d.ts +8 -2
- package/dist/core/merged-row.js +10 -3
- package/dist/core/package-root.d.ts +3 -1
- package/dist/core/package-root.js +3 -1
- package/dist/core/particle-refresh.d.ts +8 -0
- package/dist/core/particle-refresh.js +22 -0
- package/dist/core/physics-config.d.ts +4 -1
- package/dist/core/physics-config.js +6 -2
- package/dist/core/physics.d.ts +39 -11
- package/dist/core/physics.js +71 -21
- package/dist/core/project-identity.d.ts +34 -17
- package/dist/core/project-identity.js +35 -18
- package/dist/core/project-remote.d.ts +8 -4
- package/dist/core/project-remote.js +31 -14
- package/dist/core/recall-scope.d.ts +33 -11
- package/dist/core/recall-scope.js +42 -15
- package/dist/core/rejection-digest.d.ts +7 -0
- package/dist/core/rejection-digest.js +13 -0
- package/dist/core/salience.d.ts +3 -1
- package/dist/core/salience.js +10 -4
- package/dist/core/search-types.d.ts +15 -2
- package/dist/core/search-types.js +11 -0
- package/dist/dashboard/dashboard-actions.d.ts +2 -2
- package/dist/dashboard/dashboard-actions.js +18 -7
- package/dist/dashboard/dashboard-queries.js +2 -7
- package/dist/dashboard/dashboard-snapshot.d.ts +2 -2
- package/dist/dashboard/dashboard-snapshot.js +5 -7
- package/dist/dashboard/dashboard.js +22 -8
- package/dist/db/backup.js +2 -2
- package/dist/db/busy.d.ts +10 -3
- package/dist/db/busy.js +27 -5
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +8 -2
- package/dist/db/continuity.d.ts +1 -1
- package/dist/db/continuity.js +27 -11
- package/dist/db/meta.d.ts +4 -1
- package/dist/db/meta.js +4 -1
- package/dist/db/migrate.d.ts +10 -5
- package/dist/db/migrate.js +40 -20
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +3 -1
- package/dist/db/migrations/types.d.ts +2 -1
- package/dist/db/migrations/v11.js +1 -0
- package/dist/db/migrations/v12.js +2 -1
- package/dist/db/migrations/v14.js +2 -0
- package/dist/db/migrations/v15.js +4 -2
- package/dist/db/migrations/v16.js +6 -3
- package/dist/db/migrations/v17.js +2 -1
- package/dist/db/migrations/v19.js +4 -2
- package/dist/db/migrations/v20.js +2 -1
- package/dist/db/migrations/v22.js +12 -6
- package/dist/db/migrations/v23.js +6 -3
- package/dist/db/migrations/v24.js +6 -3
- package/dist/db/migrations/v25.js +4 -2
- package/dist/db/migrations/v26.js +4 -2
- package/dist/db/migrations/v27.js +6 -3
- package/dist/db/migrations/v28.js +4 -2
- package/dist/db/migrations/v29.js +4 -2
- package/dist/db/migrations/v30.js +6 -3
- package/dist/db/migrations/v31.js +4 -2
- package/dist/db/migrations/v32.js +6 -3
- package/dist/db/migrations/v33.js +4 -2
- package/dist/db/migrations/v34.js +2 -1
- package/dist/db/migrations/v35.js +2 -1
- package/dist/db/migrations/v36.js +2 -1
- package/dist/db/migrations/v37.js +10 -5
- package/dist/db/migrations/v38.js +10 -5
- package/dist/db/migrations/v39.js +14 -6
- package/dist/db/migrations/v40.js +4 -2
- package/dist/db/migrations/v41.js +4 -2
- package/dist/db/migrations/v42.js +2 -1
- package/dist/db/migrations/v44.js +4 -2
- package/dist/db/migrations/v45.js +4 -2
- package/dist/db/migrations/v49.js +2 -1
- package/dist/db/migrations/v50.js +4 -2
- package/dist/db/migrations/v51.js +4 -2
- package/dist/db/migrations/v52.js +2 -1
- package/dist/db/migrations/v53.js +8 -4
- package/dist/db/migrations/v54.js +2 -1
- package/dist/db/migrations/v55.js +4 -2
- package/dist/db/migrations/v56.d.ts +3 -0
- package/dist/db/migrations/v56.js +28 -0
- package/dist/db/open.d.ts +24 -12
- package/dist/db/open.js +25 -13
- package/dist/db/physics-state.d.ts +8 -8
- package/dist/db/physics-state.js +17 -50
- package/dist/db/raw-archive-mirror-cleanup.d.ts +4 -2
- package/dist/db/raw-archive-mirror-cleanup.js +6 -4
- package/dist/db/request-stores.d.ts +20 -5
- package/dist/db/request-stores.js +15 -5
- package/dist/db/tables.d.ts +2 -1
- package/dist/db/tables.js +12 -4
- package/dist/db/vector-store.d.ts +13 -4
- package/dist/db/vector-store.js +35 -14
- package/dist/db/wal-checkpointer.d.ts +2 -1
- package/dist/db/wal-checkpointer.js +19 -7
- package/dist/doctor.d.ts +7 -1
- package/dist/doctor.js +128 -46
- package/dist/embeddings/local.d.ts +8 -4
- package/dist/embeddings/local.js +11 -7
- package/dist/embeddings/provider.d.ts +19 -10
- package/dist/embeddings/provider.js +32 -27
- package/dist/embeddings/transformers.d.ts +16 -4
- package/dist/embeddings/transformers.js +32 -15
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.js +2 -1
- package/dist/entry/session-text.d.ts +1 -1
- package/dist/entry/session-text.js +1 -1
- package/dist/entry/sqlite-handles.d.ts +10 -0
- package/dist/entry/sqlite-handles.js +9 -0
- package/dist/entry/store-kit.d.ts +50 -0
- package/dist/entry/store-kit.js +27 -0
- package/dist/entry/testing.d.ts +6 -0
- package/dist/entry/testing.js +7 -0
- package/dist/eval/eval-stats.d.ts +27 -8
- package/dist/eval/eval-stats.js +17 -5
- package/dist/eval/eval-suite.d.ts +3 -1
- package/dist/eval/eval-suite.js +409 -187
- package/dist/eval/eval.d.ts +8 -2
- package/dist/eval/eval.js +8 -2
- package/dist/eval/judgment.js +17 -7
- package/dist/graph/delta.d.ts +9 -42
- package/dist/graph/delta.js +17 -11
- package/dist/graph/extract.d.ts +10 -7
- package/dist/graph/extract.js +57 -25
- package/dist/graph/recall.d.ts +12 -4
- package/dist/graph/recall.js +30 -13
- package/dist/graph/stream.d.ts +18 -6
- package/dist/graph/stream.js +32 -10
- package/dist/graph/view.d.ts +19 -6
- package/dist/graph/view.js +42 -17
- package/dist/hooks/codex-session.js +2 -2
- package/dist/hooks/codex-wrapper.d.ts +3 -1
- package/dist/hooks/codex-wrapper.js +9 -4
- package/dist/hooks/copilot.d.ts +19 -5
- package/dist/hooks/copilot.js +54 -15
- package/dist/hooks/hook-blocks.d.ts +4 -1
- package/dist/hooks/hook-blocks.js +8 -3
- package/dist/hooks/json-hooks.d.ts +9 -5
- package/dist/hooks/json-hooks.js +72 -33
- package/dist/hooks/opencode.js +15 -5
- package/dist/hooks/shared.d.ts +27 -8
- package/dist/hooks/shared.js +57 -16
- package/dist/importers/core.d.ts +12 -4
- package/dist/importers/core.js +11 -10
- package/dist/importers/markdown-parse.d.ts +15 -5
- package/dist/importers/markdown-parse.js +16 -7
- package/dist/importers/markdown.js +6 -9
- package/dist/importers/sources.js +10 -23
- package/dist/importers/vault.d.ts +3 -3
- package/dist/importers/vault.js +61 -45
- package/dist/index.d.ts +33 -7
- package/dist/index.js +26 -8
- package/dist/learn/autolearn.d.ts +21 -6
- package/dist/learn/autolearn.js +57 -26
- package/dist/learn/churn-git.d.ts +4 -1
- package/dist/learn/churn-git.js +29 -5
- package/dist/learn/extract.d.ts +4 -1
- package/dist/learn/extract.js +17 -10
- package/dist/learn/forward-claim-detector.d.ts +17 -5
- package/dist/learn/forward-claim-detector.js +34 -15
- package/dist/learn/invalidation.d.ts +12 -6
- package/dist/learn/invalidation.js +62 -28
- package/dist/learn/roots.d.ts +3 -0
- package/dist/learn/roots.js +5 -0
- package/dist/mcp/admin-tools.d.ts +5 -5
- package/dist/mcp/admin-tools.js +28 -23
- package/dist/mcp/format.d.ts +1 -1
- package/dist/mcp/format.js +4 -2
- package/dist/mcp/framing.d.ts +3 -1
- package/dist/mcp/framing.js +20 -8
- package/dist/mcp/memory-tools.d.ts +3 -3
- package/dist/mcp/memory-tools.js +21 -20
- package/dist/mcp/protocol.d.ts +32 -16
- package/dist/mcp/protocol.js +12 -9
- package/dist/mcp/recall-tools.d.ts +3 -3
- package/dist/mcp/recall-tools.js +62 -74
- package/dist/mcp/request.d.ts +7 -5
- package/dist/mcp/request.js +61 -77
- package/dist/mcp/server.d.ts +3 -1
- package/dist/mcp/server.js +8 -3
- package/dist/mcp/session-state.d.ts +1 -1
- package/dist/mcp/session-state.js +4 -3
- package/dist/mcp/shared-gate.d.ts +3 -2
- package/dist/mcp/shared-gate.js +3 -2
- package/dist/mcp/stdio.d.ts +6 -3
- package/dist/mcp/stdio.js +59 -23
- package/dist/mcp/tool-args.d.ts +4 -1
- package/dist/mcp/tool-args.js +8 -3
- package/dist/mcp/tools.js +76 -32
- package/dist/objects/customer-notes.d.ts +12 -10
- package/dist/objects/customer-notes.js +21 -15
- package/dist/objects/decisions.d.ts +18 -10
- package/dist/objects/decisions.js +23 -17
- package/dist/objects/descriptor.js +2 -1
- package/dist/objects/fields.d.ts +4 -1
- package/dist/objects/fields.js +6 -2
- package/dist/objects/incidents.d.ts +14 -16
- package/dist/objects/incidents.js +29 -30
- package/dist/objects/lifecycle.d.ts +0 -4
- package/dist/objects/lifecycle.js +21 -24
- package/dist/objects/policies.d.ts +12 -16
- package/dist/objects/policies.js +17 -21
- package/dist/objects/processes.d.ts +16 -10
- package/dist/objects/processes.js +20 -15
- package/dist/objects/project-briefs.d.ts +13 -14
- package/dist/objects/project-briefs.js +33 -39
- package/dist/objects/skills.d.ts +10 -12
- package/dist/objects/skills.js +17 -22
- package/dist/postinstall.js +15 -7
- package/dist/predictions/planning-fallacy.d.ts +19 -6
- package/dist/predictions/planning-fallacy.js +4 -2
- package/dist/rerankers/clef.d.ts +8 -2
- package/dist/rerankers/clef.js +14 -9
- package/dist/rerankers/cross-encoder.d.ts +2 -1
- package/dist/rerankers/cross-encoder.js +19 -9
- package/dist/rerankers/index.js +2 -1
- package/dist/rerankers/jev.js +2 -1
- package/dist/rerankers/llm.d.ts +6 -2
- package/dist/rerankers/llm.js +8 -3
- package/dist/rerankers/remote.d.ts +3 -1
- package/dist/rerankers/remote.js +5 -2
- package/dist/rerankers/types.d.ts +6 -2
- package/dist/search/bm25-search.d.ts +3 -1
- package/dist/search/bm25-search.js +15 -2
- package/dist/search/boosts.js +4 -3
- package/dist/search/embed-memories.d.ts +12 -4
- package/dist/search/embed-memories.js +96 -58
- package/dist/search/engine.d.ts +11 -0
- package/dist/search/engine.js +14 -0
- package/dist/search/goal-boost.d.ts +10 -3
- package/dist/search/goal-boost.js +13 -6
- package/dist/search/hybrid-score.d.ts +4 -1
- package/dist/search/hybrid-score.js +4 -1
- package/dist/search/hybrid.d.ts +23 -8
- package/dist/search/hybrid.js +12 -7
- package/dist/search/multihop.js +14 -13
- package/dist/search/path-context.d.ts +10 -3
- package/dist/search/path-context.js +10 -3
- package/dist/search/physics-search.d.ts +9 -4
- package/dist/search/physics-search.js +38 -14
- package/dist/search/rerank.d.ts +2 -1
- package/dist/search/rerank.js +2 -1
- package/dist/search/rrf.d.ts +14 -5
- package/dist/search/rrf.js +11 -4
- package/dist/search/vector.d.ts +8 -2
- package/dist/search/vector.js +14 -8
- package/dist/server/auth.d.ts +19 -15
- package/dist/server/auth.js +68 -38
- package/dist/server/boot.d.ts +4 -1
- package/dist/server/boot.js +115 -67
- package/dist/server/client-ip.d.ts +17 -5
- package/dist/server/client-ip.js +56 -21
- package/dist/server/cursor.d.ts +10 -3
- package/dist/server/cursor.js +10 -3
- package/dist/server/deadline.d.ts +5 -2
- package/dist/server/deadline.js +10 -3
- package/dist/server/key-check-bounds.js +12 -4
- package/dist/server/lifecycle.d.ts +4 -1
- package/dist/server/lifecycle.js +10 -4
- package/dist/server/mcp-http.d.ts +2 -1
- package/dist/server/mcp-http.js +37 -22
- package/dist/server/rate-limit.d.ts +17 -5
- package/dist/server/rate-limit.js +55 -26
- package/dist/server/ready.js +7 -4
- package/dist/server/request.d.ts +15 -4
- package/dist/server/request.js +42 -15
- package/dist/server/route-checks.d.ts +4 -1
- package/dist/server/route-checks.js +8 -3
- package/dist/server/route-table.d.ts +8 -6
- package/dist/server/route-table.js +550 -97
- package/dist/server/routes/admin.d.ts +7 -7
- package/dist/server/routes/admin.js +36 -15
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +5 -4
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +12 -6
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +10 -4
- package/dist/server/routes/memories.d.ts +8 -8
- package/dist/server/routes/memories.js +12 -17
- package/dist/server/routes/object-routes.d.ts +8 -5
- package/dist/server/routes/object-routes.js +4 -2
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +11 -4
- package/dist/server/routes/predictions.d.ts +5 -5
- package/dist/server/routes/predictions.js +9 -4
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +15 -6
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +3 -2
- package/dist/server/routes/recall.d.ts +3 -3
- package/dist/server/routes/recall.js +21 -10
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +12 -4
- package/dist/server/server-detect.d.ts +24 -8
- package/dist/server/server-detect.js +57 -22
- package/dist/server/sleep-child.js +16 -10
- package/dist/server/sleep-offload.d.ts +8 -5
- package/dist/server/sleep-offload.js +40 -18
- package/dist/server/tls.d.ts +10 -2
- package/dist/server/tls.js +25 -5
- package/dist/server/types.d.ts +41 -24
- package/dist/server/validation.d.ts +4 -1
- package/dist/server/validation.js +22 -9
- package/dist/server.d.ts +17 -49
- package/dist/server.js +33 -40
- package/dist/sharing/global-store.d.ts +6 -12
- package/dist/sharing/global-store.js +8 -48
- package/dist/sharing/global-sync.d.ts +3 -1
- package/dist/sharing/global-sync.js +17 -7
- package/dist/sharing/project-merge.d.ts +25 -7
- package/dist/sharing/project-merge.js +49 -17
- package/dist/sharing/search-both.d.ts +8 -4
- package/dist/sharing/search-both.js +28 -14
- package/dist/sharing/share.d.ts +8 -4
- package/dist/sharing/share.js +40 -18
- package/dist/store/ambient.js +10 -5
- package/dist/store/audit-event.d.ts +2 -2
- package/dist/store/audit-event.js +8 -3
- package/dist/store/audit.d.ts +6 -3
- package/dist/store/audit.js +16 -6
- package/dist/store/auth.d.ts +4 -2
- package/dist/store/auth.js +63 -20
- package/dist/store/busy.d.ts +9 -0
- package/dist/store/busy.js +16 -0
- package/dist/store/candidates.d.ts +12 -5
- package/dist/store/candidates.js +90 -41
- package/dist/store/capture-write.d.ts +2 -1
- package/dist/store/capture-write.js +2 -1
- package/dist/store/card-detail.d.ts +4 -4
- package/dist/store/card-detail.js +15 -8
- package/dist/store/cards.d.ts +24 -10
- package/dist/store/cards.js +97 -63
- package/dist/store/compaction-caller.d.ts +2 -1
- package/dist/store/compaction-caller.js +2 -1
- package/dist/store/compactions-record.d.ts +14 -8
- package/dist/store/compactions-record.js +101 -37
- package/dist/store/compactions.js +35 -15
- package/dist/store/conflicts.d.ts +16 -5
- package/dist/store/conflicts.js +104 -48
- package/dist/store/connectors/dlq.d.ts +17 -5
- package/dist/store/connectors/dlq.js +58 -6
- package/dist/store/connectors/event-log.d.ts +122 -0
- package/dist/store/connectors/event-log.js +25 -0
- package/dist/store/connectors/github.d.ts +6 -3
- package/dist/store/connectors/github.js +30 -48
- package/dist/store/connectors/slack.d.ts +2 -1
- package/dist/store/connectors/slack.js +31 -47
- package/dist/store/dashboard-reads.d.ts +7 -3
- package/dist/store/dashboard-reads.js +32 -10
- package/dist/store/delete-and-batch.d.ts +17 -11
- package/dist/store/delete-and-batch.js +70 -28
- package/dist/store/delivery-recorder.d.ts +10 -7
- package/dist/store/delivery-recorder.js +70 -37
- package/dist/store/descendant-page.d.ts +2 -1
- package/dist/store/descendant-page.js +26 -10
- package/dist/store/diagnostics.d.ts +2 -1
- package/dist/store/diagnostics.js +2 -1
- package/dist/store/doctor-reads.d.ts +2 -1
- package/dist/store/doctor-reads.js +13 -5
- package/dist/store/dormant.d.ts +19 -11
- package/dist/store/dormant.js +45 -19
- package/dist/store/embeddings/index.d.ts +13 -9
- package/dist/store/embeddings/index.js +19 -12
- package/dist/store/entry-reads.d.ts +72 -21
- package/dist/store/entry-reads.js +215 -69
- package/dist/store/entry-row.d.ts +10 -6
- package/dist/store/entry-row.js +26 -14
- package/dist/store/entry-writes.d.ts +28 -13
- package/dist/store/entry-writes.js +61 -22
- package/dist/store/failure-log-at.js +1 -1
- package/dist/store/failure-log.d.ts +4 -2
- package/dist/store/failure-log.js +13 -6
- package/dist/store/gated-write.d.ts +3 -3
- package/dist/store/gated-write.js +3 -3
- package/dist/store/goals.d.ts +5 -4
- package/dist/store/goals.js +11 -12
- package/dist/store/graph-apply.d.ts +21 -0
- package/dist/{graph/write.js → store/graph-apply.js} +31 -11
- package/dist/store/graph-queue.d.ts +9 -6
- package/dist/store/graph-queue.js +15 -10
- package/dist/store/graph-reads.d.ts +16 -11
- package/dist/store/graph-reads.js +29 -19
- package/dist/store/graph-rows.d.ts +41 -3
- package/dist/store/graph-rows.js +10 -7
- package/dist/store/graph-view-rows.js +15 -7
- package/dist/store/graph-writes.d.ts +16 -10
- package/dist/store/graph-writes.js +59 -36
- package/dist/store/half-life.js +2 -2
- package/dist/store/handoffs.d.ts +13 -7
- package/dist/store/handoffs.js +44 -22
- package/dist/store/index-and-stats.d.ts +2 -2
- package/dist/store/index-and-stats.js +6 -5
- package/dist/store/index.d.ts +4 -2
- package/dist/store/index.js +2 -1
- package/dist/store/key-audit.d.ts +2 -1
- package/dist/store/key-audit.js +2 -1
- package/dist/store/key-writes.d.ts +2 -1
- package/dist/store/key-writes.js +9 -2
- package/dist/store/ledger-turn.d.ts +4 -1
- package/dist/store/ledger-turn.js +7 -2
- package/dist/store/mirrors.d.ts +11 -4
- package/dist/store/mirrors.js +96 -19
- package/dist/store/narrow.d.ts +6 -0
- package/dist/store/narrow.js +11 -0
- package/dist/store/open.d.ts +6 -3
- package/dist/store/open.js +20 -10
- package/dist/store/pilot-arm.d.ts +2 -1
- package/dist/store/pilot-arm.js +18 -6
- package/dist/store/planning-fallacy-evidence.d.ts +2 -2
- package/dist/store/planning-fallacy-evidence.js +8 -5
- package/dist/store/port/agent-import.d.ts +62 -0
- package/dist/store/port/agent-import.js +2 -0
- package/dist/store/port/consolidation.d.ts +129 -0
- package/dist/store/port/consolidation.js +2 -0
- package/dist/store/port/learning.d.ts +19 -0
- package/dist/store/port/learning.js +2 -0
- package/dist/store/port/local-files.d.ts +18 -0
- package/dist/store/port/local-files.js +2 -0
- package/dist/store/port/promotion.d.ts +20 -0
- package/dist/store/port/promotion.js +3 -0
- package/dist/store/port-groups.d.ts +160 -0
- package/dist/store/port-groups.js +2 -0
- package/dist/store/port.d.ts +261 -219
- package/dist/store/port.js +3 -9
- package/dist/store/predictions.d.ts +14 -10
- package/dist/store/predictions.js +37 -17
- package/dist/store/project-tags.d.ts +4 -1
- package/dist/store/project-tags.js +16 -5
- package/dist/store/quality-repair.d.ts +8 -4
- package/dist/store/quality-repair.js +53 -20
- package/dist/store/quarantine.d.ts +1 -0
- package/dist/store/quarantine.js +23 -9
- package/dist/store/raw-archive.d.ts +5 -4
- package/dist/store/raw-archive.js +11 -10
- package/dist/store/recall-trace.d.ts +22 -17
- package/dist/store/recall-trace.js +128 -64
- package/dist/store/rejected-values.d.ts +15 -10
- package/dist/store/rejected-values.js +46 -20
- package/dist/store/rejection.d.ts +12 -11
- package/dist/store/rejection.js +18 -19
- package/dist/store/report-reads.d.ts +2 -1
- package/dist/store/report-reads.js +2 -1
- package/dist/store/rows.d.ts +7 -5
- package/dist/store/rows.js +20 -13
- package/dist/store/rule-sql.d.ts +7 -3
- package/dist/store/rule-sql.js +26 -13
- package/dist/store/search-rows.d.ts +16 -11
- package/dist/store/search-rows.js +54 -32
- package/dist/store/sessions.d.ts +12 -10
- package/dist/store/sessions.js +40 -21
- package/dist/store/set-aside.d.ts +2 -2
- package/dist/store/set-aside.js +18 -5
- package/dist/store/sqlite/agent-import.d.ts +3 -0
- package/dist/store/sqlite/agent-import.js +77 -0
- package/dist/store/sqlite/cards-group.d.ts +6 -0
- package/dist/store/sqlite/cards-group.js +37 -0
- package/dist/store/sqlite/conflicts-group.d.ts +6 -0
- package/dist/store/sqlite/conflicts-group.js +18 -0
- package/dist/store/sqlite/connector-events-group.d.ts +2 -1
- package/dist/store/sqlite/connector-events-group.js +17 -6
- package/dist/store/sqlite/connector-writes-group.d.ts +2 -1
- package/dist/store/sqlite/connector-writes-group.js +12 -5
- package/dist/store/sqlite/consolidation-group.d.ts +4 -0
- package/dist/store/sqlite/consolidation-group.js +64 -0
- package/dist/store/sqlite/dag-reads-group.js +1 -1
- package/dist/store/sqlite/dormant-group.d.ts +6 -0
- package/dist/store/sqlite/dormant-group.js +29 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +9 -6
- package/dist/store/sqlite/entry-writes-group.js +37 -14
- package/dist/store/sqlite/error-codec.d.ts +4 -2
- package/dist/store/sqlite/error-codec.js +32 -10
- package/dist/store/sqlite/executor-counts.js +2 -1
- package/dist/store/sqlite/executor.d.ts +8 -3
- package/dist/store/sqlite/executor.js +56 -18
- package/dist/store/sqlite/global-promote.d.ts +5 -0
- package/dist/store/sqlite/global-promote.js +48 -0
- package/dist/store/sqlite/goals-group.d.ts +6 -0
- package/dist/store/sqlite/goals-group.js +23 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +2 -1
- package/dist/store/sqlite/graph-reads-group.js +2 -1
- package/dist/store/sqlite/held-connection.d.ts +8 -0
- package/dist/store/sqlite/held-connection.js +34 -7
- package/dist/store/sqlite/last-recall-group.d.ts +15 -0
- package/dist/store/sqlite/last-recall-group.js +62 -0
- package/dist/store/sqlite/learning-group.d.ts +4 -0
- package/dist/store/sqlite/learning-group.js +17 -0
- package/dist/store/sqlite/maintenance-groups.d.ts +6 -0
- package/dist/store/sqlite/maintenance-groups.js +61 -0
- package/dist/store/sqlite/object-rows.d.ts +6 -3
- package/dist/store/sqlite/object-rows.js +34 -5
- package/dist/store/sqlite/objects-group.d.ts +5 -4
- package/dist/store/sqlite/objects-group.js +97 -38
- package/dist/store/sqlite/predictions-group.d.ts +2 -1
- package/dist/store/sqlite/predictions-group.js +4 -2
- package/dist/store/sqlite/promotion-group.d.ts +3 -0
- package/dist/store/sqlite/promotion-group.js +10 -0
- package/dist/store/sqlite/quarantine-group.d.ts +2 -1
- package/dist/store/sqlite/quarantine-group.js +4 -2
- package/dist/store/sqlite/reports-group.d.ts +6 -0
- package/dist/store/sqlite/reports-group.js +33 -0
- package/dist/store/sqlite/request-scope.d.ts +6 -0
- package/dist/store/sqlite/request-scope.js +18 -0
- package/dist/store/sqlite/sessions-group.d.ts +6 -0
- package/dist/store/sqlite/sessions-group.js +46 -0
- package/dist/store/sqlite/store.d.ts +22 -18
- package/dist/store/sqlite/store.js +95 -33
- package/dist/store/sqlite/vector-pack.js +2 -1
- package/dist/store/sqlite/vector-reads-group.js +2 -1
- package/dist/store/sqlite/worker-jobs.d.ts +2 -1
- package/dist/store/sqlite/worker-jobs.js +19 -7
- package/dist/store/sqlite/worker-ops.d.ts +10 -5
- package/dist/store/sqlite/worker-ops.js +6 -3
- package/dist/store/sqlite/worker-store.d.ts +4 -3
- package/dist/store/sqlite/worker-store.js +24 -14
- package/dist/store/summaries.d.ts +25 -11
- package/dist/store/summaries.js +84 -27
- package/dist/store/summary-dirty.d.ts +2 -1
- package/dist/store/summary-dirty.js +2 -1
- package/dist/store/tenant.d.ts +3 -2
- package/dist/store/tenant.js +5 -4
- package/dist/store/token-ledger-rows.js +8 -4
- package/dist/store/token-ledger.d.ts +19 -13
- package/dist/store/token-ledger.js +27 -14
- package/dist/store/tombstone-checks.d.ts +4 -1
- package/dist/store/tombstone-checks.js +10 -1
- package/dist/store/usage-reports.js +2 -1
- package/dist/store/vector-index.d.ts +8 -5
- package/dist/store/vector-index.js +28 -11
- package/dist/store/working-memory.d.ts +6 -4
- package/dist/store/working-memory.js +14 -9
- package/dist/support-bundle.js +10 -5
- package/dist/trust/quarantine.d.ts +1 -2
- package/dist/trust/quarantine.js +1 -5
- package/dist/trust/reject-flow.d.ts +12 -3
- package/dist/trust/reject-flow.js +12 -4
- package/dist/util/anthropic-messages.d.ts +7 -2
- package/dist/util/anthropic-messages.js +18 -7
- package/dist/util/atomic-write.d.ts +8 -3
- package/dist/util/atomic-write.js +36 -21
- package/dist/util/compaction-items.d.ts +4 -1
- package/dist/util/compaction-items.js +8 -2
- package/dist/util/crash-handlers.d.ts +7 -2
- package/dist/util/crash-handlers.js +13 -4
- package/dist/util/env.d.ts +26 -5
- package/dist/util/env.js +87 -25
- package/dist/util/format.d.ts +2 -0
- package/dist/util/format.js +4 -0
- package/dist/util/home-path.js +12 -6
- package/dist/util/hook-payload.d.ts +3 -1
- package/dist/util/hook-payload.js +3 -1
- package/dist/util/http-retry.d.ts +12 -6
- package/dist/util/http-retry.js +16 -6
- package/dist/util/http-util.d.ts +20 -5
- package/dist/util/http-util.js +28 -9
- package/dist/util/json.d.ts +4 -1
- package/dist/util/json.js +4 -1
- package/dist/util/keyset.js +2 -1
- package/dist/util/limits.js +4 -2
- package/dist/util/log.d.ts +13 -5
- package/dist/util/log.js +29 -6
- package/dist/util/net.d.ts +5 -0
- package/dist/util/net.js +19 -0
- package/dist/util/real-path.d.ts +2 -1
- package/dist/util/real-path.js +4 -3
- package/dist/util/request-scope.d.ts +16 -4
- package/dist/util/request-scope.js +19 -6
- package/dist/util/same-text.d.ts +10 -3
- package/dist/util/same-text.js +10 -3
- package/dist/util/secret-detect.d.ts +24 -7
- package/dist/util/secret-detect.js +49 -14
- package/dist/util/spawn-argv.d.ts +11 -0
- package/dist/util/spawn-argv.js +66 -0
- package/dist/util/sql.d.ts +3 -0
- package/dist/util/sql.js +6 -0
- package/dist/util/sqlite-blocked.d.ts +15 -4
- package/dist/util/sqlite-blocked.js +19 -6
- package/dist/util/stored-json.d.ts +4 -1
- package/dist/util/stored-json.js +6 -2
- package/dist/util/stream-tee.d.ts +2 -1
- package/dist/util/stream-tee.js +8 -5
- package/dist/util/transcript-tail.d.ts +4 -1
- package/dist/util/transcript-tail.js +4 -1
- package/dist/util/vector-codec.d.ts +4 -0
- package/dist/util/vector-codec.js +15 -0
- package/dist/util/version.d.ts +8 -3
- package/dist/util/version.js +8 -3
- package/dist/util/write-budget.d.ts +7 -2
- package/dist/util/write-budget.js +5 -2
- package/dist/util/yaml.d.ts +4 -1
- package/dist/util/yaml.js +4 -1
- package/extensions/openclaw-plugin/openclaw.plugin.json +1 -1
- package/extensions/openclaw-plugin/package.json +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +4 -1
- package/scripts/postinstall.cjs +3 -1
- package/dist/api/audit.js +0 -56
- package/dist/api/cards.d.ts +0 -42
- package/dist/api/conflicts.d.ts +0 -28
- package/dist/api/conflicts.js +0 -61
- package/dist/api/dormant.d.ts +0 -14
- package/dist/api/dormant.js +0 -58
- package/dist/api/goals.d.ts +0 -18
- package/dist/api/graph.d.ts +0 -8
- package/dist/api/graph.js +0 -7
- package/dist/api/learn.js +0 -124
- package/dist/api/memories.d.ts +0 -23
- package/dist/api/memories.js +0 -46
- package/dist/api/objects.d.ts +0 -9
- package/dist/api/on-store.d.ts +0 -16
- package/dist/api/on-store.js +0 -38
- package/dist/api/outcome.d.ts +0 -19
- package/dist/api/outcome.js +0 -21
- package/dist/api/predictions.d.ts +0 -11
- package/dist/api/promote.d.ts +0 -36
- package/dist/api/promote.js +0 -65
- package/dist/api/recall-core.d.ts +0 -4
- package/dist/api/recall-core.js +0 -120
- package/dist/api/recall-finish.d.ts +0 -53
- package/dist/api/recall-finish.js +0 -30
- package/dist/api/recall-history.d.ts +0 -64
- package/dist/api/recall-history.js +0 -159
- package/dist/api/recall-record.d.ts +0 -43
- package/dist/api/recall-record.js +0 -78
- package/dist/api/recall-request.js +0 -121
- package/dist/api/recall.d.ts +0 -6
- package/dist/api/refine.d.ts +0 -7
- package/dist/api/refine.js +0 -10
- package/dist/api/session-owners.d.ts +0 -4
- package/dist/api/session-owners.js +0 -17
- package/dist/api/sleep-run.d.ts +0 -26
- package/dist/api/sleep.js +0 -10
- package/dist/cli/lenient-id.d.ts +0 -2
- package/dist/cli/lenient-id.js +0 -13
- package/dist/graph/write.d.ts +0 -14
- package/dist/store/sqlite/busy.d.ts +0 -3
- package/dist/store/sqlite/busy.js +0 -8
- package/dist/store/sqlite/local.d.ts +0 -21
- package/dist/store/sqlite/local.js +0 -39
package/dist/util/http-util.js
CHANGED
|
@@ -11,7 +11,8 @@ export const MAX_BODY_BYTES = 1024 * 1024;
|
|
|
11
11
|
function sizeLabel(bytes) {
|
|
12
12
|
return bytes % (1024 * 1024) === 0 ? `${bytes / (1024 * 1024)}MB` : `${Math.ceil(bytes / 1024)}KB`;
|
|
13
13
|
}
|
|
14
|
-
// How long a refused upload is still read and discarded after its reply, so a client that never stops cannot hold the
|
|
14
|
+
// How long a refused upload is still read and discarded after its reply, so a client that never stops cannot hold the
|
|
15
|
+
// socket.
|
|
15
16
|
const REFUSED_UPLOAD_LINGER_MS = 2000;
|
|
16
17
|
export const JSON_HEADERS = { 'content-type': 'application/json' };
|
|
17
18
|
export class HttpError extends Error {
|
|
@@ -24,7 +25,10 @@ export class HttpError extends Error {
|
|
|
24
25
|
this.retryAfterSec = retryAfterSec;
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* A request, or a store call it waited on, ran past the request's deadline; the reply carries `code` so a client
|
|
30
|
+
* branches without parsing prose.
|
|
31
|
+
*/
|
|
28
32
|
export class DeadlineExceededError extends HttpError {
|
|
29
33
|
code = 'deadline_exceeded';
|
|
30
34
|
constructor(message) {
|
|
@@ -48,11 +52,17 @@ export function sendJson(res, status, body) {
|
|
|
48
52
|
res.end(text);
|
|
49
53
|
}
|
|
50
54
|
const DEFAULT_BODY_DEADLINE_MS = 30_000;
|
|
51
|
-
/**
|
|
55
|
+
/**
|
|
56
|
+
* How long any route waits for a request body, so a client that sends headers and then stalls cannot hold a request
|
|
57
|
+
* open: 30 s, or HIPPO_BODY_TIMEOUT_MS.
|
|
58
|
+
*/
|
|
52
59
|
export function bodyDeadlineMs() {
|
|
53
60
|
return envBodyTimeoutMs() ?? DEFAULT_BODY_DEADLINE_MS;
|
|
54
61
|
}
|
|
55
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* The body as text, refused mid-stream past maxBytes and past deadlineMs, so an oversized or slow sender cannot tie up
|
|
64
|
+
* the server.
|
|
65
|
+
*/
|
|
56
66
|
export function readBody(req, { maxBytes = MAX_BODY_BYTES, deadlineMs = bodyDeadlineMs() } = {}) {
|
|
57
67
|
return new Promise((resolve, reject) => {
|
|
58
68
|
const chunks = [];
|
|
@@ -63,7 +73,8 @@ export function readBody(req, { maxBytes = MAX_BODY_BYTES, deadlineMs = bodyDead
|
|
|
63
73
|
chunks.length = 0;
|
|
64
74
|
reject(err);
|
|
65
75
|
};
|
|
66
|
-
// Not for-await: leaving that loop early destroys the request, so the socket stops reading and the 413 caller
|
|
76
|
+
// Not for-await: leaving that loop early destroys the request, so the socket stops reading and the 413 caller
|
|
77
|
+
// cannot close it cleanly.
|
|
67
78
|
const onData = (chunk) => {
|
|
68
79
|
total += chunk.length;
|
|
69
80
|
if (total <= maxBytes) {
|
|
@@ -84,7 +95,8 @@ export function readBody(req, { maxBytes = MAX_BODY_BYTES, deadlineMs = bodyDead
|
|
|
84
95
|
});
|
|
85
96
|
});
|
|
86
97
|
}
|
|
87
|
-
// A full close with request bytes unread sends a TCP reset, which discards the reply before the client reads it (RFC
|
|
98
|
+
// A full close with request bytes unread sends a TCP reset, which discards the reply before the client reads it (RFC
|
|
99
|
+
// 9112 9.6).
|
|
88
100
|
export function closeAfterReply(req) {
|
|
89
101
|
const socket = req.socket;
|
|
90
102
|
req.resume();
|
|
@@ -112,16 +124,23 @@ function originHost(origin) {
|
|
|
112
124
|
return null;
|
|
113
125
|
}
|
|
114
126
|
}
|
|
115
|
-
// A webhook route takes no key, so anyone holding a signature header could otherwise keep a socket open with a body
|
|
127
|
+
// A webhook route takes no key, so anyone holding a signature header could otherwise keep a socket open with a body
|
|
128
|
+
// that never ends.
|
|
116
129
|
const WEBHOOK_BODY_DEADLINE_MS = 10_000;
|
|
117
|
-
/**
|
|
130
|
+
/**
|
|
131
|
+
* Call before refusing a webhook unread: a caller still sending its body loses the socket once the reply is out, as it
|
|
132
|
+
* does after a 413.
|
|
133
|
+
*/
|
|
118
134
|
export function closeIfBodyUnread({ req, res }) {
|
|
119
135
|
res.once('finish', () => {
|
|
120
136
|
if (!req.complete)
|
|
121
137
|
closeAfterReply(req);
|
|
122
138
|
});
|
|
123
139
|
}
|
|
124
|
-
/**
|
|
140
|
+
/**
|
|
141
|
+
* A webhook's raw body, exactly as sent, for the receiver's HMAC check; call it only once a secret is configured and
|
|
142
|
+
* the signature headers are present.
|
|
143
|
+
*/
|
|
125
144
|
export function readWebhookBody({ req, opts }) {
|
|
126
145
|
return readBody(req, { deadlineMs: opts.webhookBodyDeadlineMs ?? WEBHOOK_BODY_DEADLINE_MS });
|
|
127
146
|
}
|
package/dist/util/json.d.ts
CHANGED
|
@@ -12,6 +12,9 @@ export declare function isJsonObject(value: JsonValue | undefined): value is {
|
|
|
12
12
|
export declare function isJsonObjectLiteral(value: JsonValue | undefined): value is {
|
|
13
13
|
[key: string]: JsonValue;
|
|
14
14
|
};
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Windows PowerShell 5.1 saves JSON with a UTF-8 byte order mark that JSON.parse rejects, so one leading mark is
|
|
17
|
+
* dropped.
|
|
18
|
+
*/
|
|
16
19
|
export declare function readJsonFile(file: string): JsonValue;
|
|
17
20
|
//# sourceMappingURL=json.d.ts.map
|
package/dist/util/json.js
CHANGED
|
@@ -17,7 +17,10 @@ export function isJsonObject(value) {
|
|
|
17
17
|
export function isJsonObjectLiteral(value) {
|
|
18
18
|
return value !== undefined && value !== null && !Array.isArray(value) && value.constructor === Object;
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Windows PowerShell 5.1 saves JSON with a UTF-8 byte order mark that JSON.parse rejects, so one leading mark is
|
|
22
|
+
* dropped.
|
|
23
|
+
*/
|
|
21
24
|
export function readJsonFile(file) {
|
|
22
25
|
const text = fs.readFileSync(file, 'utf8');
|
|
23
26
|
return JSON.parse(text.codePointAt(0) === 0xfeff ? text.slice(1) : text);
|
package/dist/util/keyset.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// Keyset paging for list queries ordered by (sort key DESC, id DESC), so a page never skips or repeats a row when rows
|
|
1
|
+
// Keyset paging for list queries ordered by (sort key DESC, id DESC), so a page never skips or repeats a row when rows
|
|
2
|
+
// arrive between requests.
|
|
2
3
|
/** An ` AND ...` WHERE fragment and its params selecting rows strictly after `after`; empty when `after` is unset. */
|
|
3
4
|
export function keysetAfter(sortCol, idCol, after) {
|
|
4
5
|
if (!after)
|
package/dist/util/limits.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
// Cap for id-shaped request fields (ids, tenant, session, scope, class): far above real values, small enough to bound
|
|
1
|
+
// Cap for id-shaped request fields (ids, tenant, session, scope, class): far above real values, small enough to bound
|
|
2
|
+
// logs and indexes.
|
|
2
3
|
export const MAX_ID_LEN = 256;
|
|
3
4
|
// Page size every list surface (CLI, HTTP, store) falls back to when the caller names none.
|
|
4
5
|
export const DEFAULT_LIST_LIMIT = 100;
|
|
5
|
-
// Ceiling for a caller-named list page; SQLite `LIMIT ?` and one response's size bound it, and every list surface
|
|
6
|
+
// Ceiling for a caller-named list page; SQLite `LIMIT ?` and one response's size bound it, and every list surface
|
|
7
|
+
// shares it.
|
|
6
8
|
export const MAX_LIST_LIMIT = 1000;
|
|
7
9
|
/** The one list-limit rule: absent means the default; a positive integer up to the ceiling passes.
|
|
8
10
|
* Anything else returns undefined, so each surface words its own error. */
|
package/dist/util/log.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/** Leveled stderr logger. `HIPPO_LOG` picks the threshold (error, warn, info,
|
|
2
2
|
* debug); unset or unknown means warn. `HIPPO_LOG_FORMAT=json` writes JSON lines. */
|
|
3
3
|
export type LogLevel = 'error' | 'warn' | 'info' | 'debug';
|
|
4
|
-
/** Extra key=value pairs appended to the line. `ts` and, inside a request, `requestId` are added to every line
|
|
4
|
+
/** Extra key=value pairs appended to the line. `ts` and, inside a request, `requestId` are added to every line
|
|
5
|
+
* written. */
|
|
5
6
|
export interface LogFields {
|
|
6
7
|
ts?: string;
|
|
7
8
|
requestId?: string;
|
|
@@ -14,10 +15,15 @@ export declare function isLevelEnabled(level: LogLevel): boolean;
|
|
|
14
15
|
export declare function formatLogLine(level: LogLevel, message: string, fields?: LogFields): string;
|
|
15
16
|
/** One JSON object per line for a log collector; JSON escaping keeps a multi-line value on the one line. */
|
|
16
17
|
export declare function formatLogJson(level: LogLevel, message: string, fields?: LogFields): string;
|
|
17
|
-
/** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. Past the key
|
|
18
|
+
/** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. Past the key
|
|
19
|
+
* cap an unseen key logs at debug. */
|
|
18
20
|
declare function once(key: string, level: LogLevel, message: string, fields?: LogFields): void;
|
|
19
|
-
/** Warn the first time `key` is seen in this process, then log at debug, so a repeating failure stays findable
|
|
21
|
+
/** Warn the first time `key` is seen in this process, then log at debug, so a repeating failure stays findable
|
|
22
|
+
* without flooding stderr. */
|
|
20
23
|
declare function warnThenDebug(key: string, message: string, fields?: LogFields): void;
|
|
24
|
+
/** Warn the first time `key` is seen, then count repeats at debug and warn again with the running count on every
|
|
25
|
+
* 100th, so a failure that keeps happening stays visible without flooding stderr. */
|
|
26
|
+
declare function warnThenSample(key: string, message: string, fields?: LogFields): void;
|
|
21
27
|
/** The class name and stack of a thrown value, as log fields; a non-Error throw has no stack. */
|
|
22
28
|
export declare function errorFields<E>(err: E): LogFields;
|
|
23
29
|
export declare const log: {
|
|
@@ -27,11 +33,13 @@ export declare const log: {
|
|
|
27
33
|
readonly debug: (message: string, fields?: LogFields) => void;
|
|
28
34
|
readonly once: typeof once;
|
|
29
35
|
readonly warnThenDebug: typeof warnThenDebug;
|
|
36
|
+
readonly warnThenSample: typeof warnThenSample;
|
|
30
37
|
};
|
|
31
|
-
/** Message for a caught value of unknown shape. `cause` names the sanctioned unknown-input case (error-cause
|
|
38
|
+
/** Message for a caught value of unknown shape. `cause` names the sanctioned unknown-input case (error-cause
|
|
39
|
+
* enrichment). */
|
|
32
40
|
export declare function errorMessage(cause: unknown): string;
|
|
33
41
|
/** One post-compact failure, told once to the hook's output (`say`) and once to the structured log. */
|
|
34
|
-
export declare function reportCompactionFailure(say: (message: string) => void, step: string, reason: string): void;
|
|
42
|
+
export declare function reportCompactionFailure(say: (message: string) => void, step: string, reason: string, fields?: LogFields): void;
|
|
35
43
|
/** The string `code` of a caught value (an errno name such as EACCES), or '' when it has none. */
|
|
36
44
|
export declare function errorCode(cause: unknown): string;
|
|
37
45
|
/** Test hook: forget which once-keys have fired. */
|
package/dist/util/log.js
CHANGED
|
@@ -41,7 +41,8 @@ function write(level, message, fields) {
|
|
|
41
41
|
const ONCE_KEY_CAP = 1_000;
|
|
42
42
|
const onceKeys = new Set();
|
|
43
43
|
let onceCapReported = false;
|
|
44
|
-
/** 'new' records the key and 'seen' is a repeat. 'uncounted' is an unseen key once the set is full: it is not
|
|
44
|
+
/** 'new' records the key and 'seen' is a repeat. 'uncounted' is an unseen key once the set is full: it is not
|
|
45
|
+
* recorded, and the first one says so at warn. */
|
|
45
46
|
function sightOnceKey(key) {
|
|
46
47
|
if (onceKeys.has(key))
|
|
47
48
|
return 'seen';
|
|
@@ -55,16 +56,35 @@ function sightOnceKey(key) {
|
|
|
55
56
|
}
|
|
56
57
|
return 'uncounted';
|
|
57
58
|
}
|
|
58
|
-
/** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. Past the key
|
|
59
|
+
/** Write `message` at `level` the first time `key` is seen in this process; later calls are dropped. Past the key
|
|
60
|
+
* cap an unseen key logs at debug. */
|
|
59
61
|
function once(key, level, message, fields) {
|
|
60
62
|
const sighting = sightOnceKey(key);
|
|
61
63
|
if (sighting !== 'seen')
|
|
62
64
|
write(sighting === 'new' ? level : 'debug', message, fields);
|
|
63
65
|
}
|
|
64
|
-
/** Warn the first time `key` is seen in this process, then log at debug, so a repeating failure stays findable
|
|
66
|
+
/** Warn the first time `key` is seen in this process, then log at debug, so a repeating failure stays findable
|
|
67
|
+
* without flooding stderr. */
|
|
65
68
|
function warnThenDebug(key, message, fields) {
|
|
66
69
|
write(sightOnceKey(key) === 'new' ? 'warn' : 'debug', message, fields);
|
|
67
70
|
}
|
|
71
|
+
const SAMPLE_EVERY = 100;
|
|
72
|
+
const repeatCounts = new Map();
|
|
73
|
+
/** Warn the first time `key` is seen, then count repeats at debug and warn again with the running count on every
|
|
74
|
+
* 100th, so a failure that keeps happening stays visible without flooding stderr. */
|
|
75
|
+
function warnThenSample(key, message, fields) {
|
|
76
|
+
if (sightOnceKey(key) === 'new') {
|
|
77
|
+
write('warn', message, fields);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Counts only keys sightOnceKey recorded, so the map is bounded by ONCE_KEY_CAP.
|
|
81
|
+
const seen = (repeatCounts.get(key) ?? 0) + 1;
|
|
82
|
+
repeatCounts.set(key, seen);
|
|
83
|
+
if (seen % SAMPLE_EVERY === 0)
|
|
84
|
+
write('warn', `${message} (${seen} more since the first warning)`, fields);
|
|
85
|
+
else
|
|
86
|
+
write('debug', message, fields);
|
|
87
|
+
}
|
|
68
88
|
/** The class name and stack of a thrown value, as log fields; a non-Error throw has no stack. */
|
|
69
89
|
export function errorFields(err) {
|
|
70
90
|
if (!(err instanceof Error))
|
|
@@ -78,15 +98,17 @@ export const log = {
|
|
|
78
98
|
debug: (message, fields) => write('debug', message, fields),
|
|
79
99
|
once,
|
|
80
100
|
warnThenDebug,
|
|
101
|
+
warnThenSample,
|
|
81
102
|
};
|
|
82
|
-
/** Message for a caught value of unknown shape. `cause` names the sanctioned unknown-input case (error-cause
|
|
103
|
+
/** Message for a caught value of unknown shape. `cause` names the sanctioned unknown-input case (error-cause
|
|
104
|
+
* enrichment). */
|
|
83
105
|
export function errorMessage(cause) {
|
|
84
106
|
return cause instanceof Error ? cause.message : String(cause);
|
|
85
107
|
}
|
|
86
108
|
/** One post-compact failure, told once to the hook's output (`say`) and once to the structured log. */
|
|
87
|
-
export function reportCompactionFailure(say, step, reason) {
|
|
109
|
+
export function reportCompactionFailure(say, step, reason, fields) {
|
|
88
110
|
say(`${step} failed: ${reason}`);
|
|
89
|
-
log.error(`post-compact: ${step} failed: ${reason}
|
|
111
|
+
log.error(`post-compact: ${step} failed: ${reason}`, fields);
|
|
90
112
|
}
|
|
91
113
|
/** The string `code` of a caught value (an errno name such as EACCES), or '' when it has none. */
|
|
92
114
|
export function errorCode(cause) {
|
|
@@ -95,6 +117,7 @@ export function errorCode(cause) {
|
|
|
95
117
|
/** Test hook: forget which once-keys have fired. */
|
|
96
118
|
export function resetLogOnce() {
|
|
97
119
|
onceKeys.clear();
|
|
120
|
+
repeatCounts.clear();
|
|
98
121
|
onceCapReported = false;
|
|
99
122
|
}
|
|
100
123
|
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** A URL hostname that stays on this machine: localhost, ::1 (bracketed or not) or any 127.0.0.0/8 address. */
|
|
2
|
+
export declare function isLoopbackHost(hostname: string): boolean;
|
|
3
|
+
/** A socket remote address on this machine; Node reports a dual-stack IPv4 peer as '::ffff:127.x.x.x'. */
|
|
4
|
+
export declare function isLoopbackAddress(remoteAddress: string | undefined): boolean;
|
|
5
|
+
//# sourceMappingURL=net.d.ts.map
|
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
|
}
|
|
@@ -5,10 +5,15 @@ export interface RequestScope {
|
|
|
5
5
|
readonly requestId: string | undefined;
|
|
6
6
|
/** Set for a served request that must be answered by a given time. */
|
|
7
7
|
readonly deadline?: RequestDeadline | undefined;
|
|
8
|
+
/** Aborts when the request passes its deadline, so a handler that checks it stops starting work nobody waits for. */
|
|
9
|
+
readonly signal?: AbortSignal | undefined;
|
|
8
10
|
}
|
|
9
11
|
/** How long a request may run: 120 s, or HIPPO_REQUEST_DEADLINE_MS, where 0 turns the deadline off. */
|
|
10
12
|
export declare function requestDeadlineMs(): number;
|
|
11
|
-
/**
|
|
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
|
+
*/
|
|
12
17
|
export declare class RequestDeadline {
|
|
13
18
|
#private;
|
|
14
19
|
/** Epoch milliseconds. */
|
|
@@ -16,7 +21,10 @@ export declare class RequestDeadline {
|
|
|
16
21
|
constructor(at: number);
|
|
17
22
|
/** Counts `call` as one the request waits on until it settles. */
|
|
18
23
|
track<T>(call: Promise<T>): Promise<T>;
|
|
19
|
-
/**
|
|
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
|
+
*/
|
|
20
28
|
onceIdle(fn: () => void): void;
|
|
21
29
|
}
|
|
22
30
|
export declare const requestScopes: AsyncLocalStorage<RequestScope>;
|
|
@@ -24,7 +32,11 @@ export declare const requestScopes: AsyncLocalStorage<RequestScope>;
|
|
|
24
32
|
export declare function currentRequestId(): string | undefined;
|
|
25
33
|
/** The deadline of the request this code runs for, if it has one. */
|
|
26
34
|
export declare function currentDeadline(): RequestDeadline | undefined;
|
|
35
|
+
/** The abort signal of the request this code runs for, if it has one. */
|
|
36
|
+
export declare function currentSignal(): AbortSignal | undefined;
|
|
27
37
|
/** Runs `fn` with `requestId` on every log line it writes, including the ones from
|
|
28
|
-
* timers and promises it starts. `deadline` reaches every store call made inside
|
|
29
|
-
|
|
38
|
+
* timers and promises it starts. `deadline` reaches every store call made inside, and `signal` every check of
|
|
39
|
+
* `currentSignal`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runWithRequestId<T>(requestId: string, fn: () => T, deadline?: RequestDeadline, signal?: AbortSignal): T;
|
|
30
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();
|
|
@@ -45,9 +52,15 @@ export function currentRequestId() {
|
|
|
45
52
|
export function currentDeadline() {
|
|
46
53
|
return requestScopes.getStore()?.deadline;
|
|
47
54
|
}
|
|
55
|
+
/** The abort signal of the request this code runs for, if it has one. */
|
|
56
|
+
export function currentSignal() {
|
|
57
|
+
return requestScopes.getStore()?.signal;
|
|
58
|
+
}
|
|
48
59
|
/** Runs `fn` with `requestId` on every log line it writes, including the ones from
|
|
49
|
-
* timers and promises it starts. `deadline` reaches every store call made inside
|
|
50
|
-
|
|
51
|
-
|
|
60
|
+
* timers and promises it starts. `deadline` reaches every store call made inside, and `signal` every check of
|
|
61
|
+
* `currentSignal`.
|
|
62
|
+
*/
|
|
63
|
+
export function runWithRequestId(requestId, fn, deadline, signal) {
|
|
64
|
+
return requestScopes.run({ requestId, deadline, signal }, fn);
|
|
52
65
|
}
|
|
53
66
|
//# sourceMappingURL=request-scope.js.map
|
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;
|