hippo-memory 1.68.0 → 1.70.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 -3
- package/dist/agent-memories/apply.d.ts +3 -3
- package/dist/agent-memories/apply.js +16 -31
- package/dist/agent-memories/claude-code.d.ts +1 -3
- package/dist/agent-memories/claude-code.js +11 -7
- package/dist/agent-memories/copilot.d.ts +3 -1
- package/dist/agent-memories/copilot.js +5 -4
- package/dist/agent-memories/files.js +3 -2
- package/dist/agent-memories/gemini.js +6 -5
- package/dist/agent-memories/keys.js +3 -2
- package/dist/agent-memories/legacy.d.ts +2 -2
- package/dist/agent-memories/legacy.js +2 -2
- package/dist/agent-memories/report.d.ts +1 -1
- package/dist/agent-memories/report.js +1 -1
- package/dist/agent-memories/source.d.ts +1 -1
- package/dist/agent-memories/source.js +6 -5
- package/dist/agent-memories/sync.d.ts +1 -1
- package/dist/agent-memories/sync.js +24 -33
- package/dist/agent-memories/types.d.ts +1 -1
- package/dist/api/assemble.d.ts +2 -2
- package/dist/api/assemble.js +42 -32
- package/dist/api/audit.d.ts +4 -7
- package/dist/api/audit.js +6 -20
- package/dist/api/auth.d.ts +5 -18
- package/dist/api/auth.js +44 -194
- package/dist/api/auto-sleep.d.ts +13 -0
- package/dist/api/auto-sleep.js +32 -0
- package/dist/{availability.d.ts → api/availability.d.ts} +2 -2
- package/dist/{availability.js → api/availability.js} +12 -29
- package/dist/{context-auto.js → api/context-auto.js} +2 -1
- package/dist/{context-render.d.ts → api/context-render.d.ts} +4 -4
- package/dist/{context-render.js → api/context-render.js} +7 -6
- package/dist/api/context-select.d.ts +14 -4
- package/dist/api/context-select.js +50 -60
- package/dist/api/context-types.d.ts +5 -5
- package/dist/api/context.d.ts +2 -4
- package/dist/api/context.js +113 -85
- package/dist/api/dormant.d.ts +3 -3
- package/dist/api/dormant.js +38 -107
- package/dist/api/drill-down.d.ts +2 -2
- package/dist/api/drill-down.js +37 -65
- package/dist/api/forget.d.ts +4 -13
- package/dist/api/forget.js +13 -35
- package/dist/api/goals.d.ts +1 -1
- package/dist/api/goals.js +2 -2
- package/dist/api/index.d.ts +26 -0
- package/dist/api/index.js +29 -0
- package/dist/api/instruction-detect.js +74 -0
- package/dist/api/learn.js +63 -55
- package/dist/api/ledger-db.d.ts +20 -0
- package/dist/api/ledger-db.js +79 -0
- package/dist/api/on-store.d.ts +16 -0
- package/dist/api/on-store.js +36 -0
- package/dist/api/outcome.d.ts +9 -46
- package/dist/api/outcome.js +15 -57
- package/dist/{pilot-arm.d.ts → api/pilot-arm.d.ts} +1 -1
- package/dist/{pilot-arm.js → api/pilot-arm.js} +15 -23
- package/dist/api/promote.d.ts +7 -18
- package/dist/api/promote.js +30 -152
- package/dist/{prompt-hook.d.ts → api/prompt-hook.d.ts} +7 -7
- package/dist/{prompt-hook.js → api/prompt-hook.js} +34 -53
- package/dist/api/quarantine.d.ts +5 -5
- package/dist/api/quarantine.js +30 -106
- package/dist/api/recall-core.d.ts +4 -0
- package/dist/api/recall-core.js +112 -0
- package/dist/{recall-history.js → api/recall-history.js} +30 -25
- package/dist/{recall-pipeline.d.ts → api/recall-pipeline.d.ts} +5 -5
- package/dist/{recall-pipeline.js → api/recall-pipeline.js} +47 -42
- package/dist/api/recall-record.d.ts +10 -13
- package/dist/api/recall-record.js +10 -30
- package/dist/api/recall-request.d.ts +2 -2
- package/dist/api/recall-request.js +3 -3
- package/dist/api/recall-types.d.ts +41 -16
- package/dist/api/recall.d.ts +1 -1
- package/dist/api/recall.js +39 -37
- package/dist/api/remember.d.ts +12 -13
- package/dist/api/remember.js +38 -27
- package/dist/api/session-owners.d.ts +4 -0
- package/dist/api/session-owners.js +17 -0
- package/dist/api/sleep-run.d.ts +7 -7
- package/dist/api/sleep-run.js +63 -75
- package/dist/api/sleep.d.ts +1 -1
- package/dist/api/tokens.d.ts +2 -2
- package/dist/api/tokens.js +9 -21
- package/dist/api/types.d.ts +2 -2
- package/dist/api/types.js +1 -1
- package/dist/capture/caller-session.d.ts +2 -2
- package/dist/capture/caller-session.js +8 -8
- package/dist/{capture-error.d.ts → capture/capture-error.d.ts} +2 -2
- package/dist/{capture-error.js → capture/capture-error.js} +7 -7
- package/dist/{codex-patch.js → capture/codex-patch.js} +1 -1
- package/dist/capture/command.d.ts +1 -1
- package/dist/capture/command.js +54 -41
- package/dist/capture/compact-resume-caller.d.ts +1 -1
- package/dist/capture/compact-resume-caller.js +7 -7
- package/dist/capture/compact.d.ts +4 -1
- package/dist/capture/compact.js +59 -22
- package/dist/capture/compaction-items-caller.d.ts +1 -1
- package/dist/capture/compaction-items-caller.js +7 -5
- package/dist/{compaction-items.js → capture/compaction-items.js} +27 -3
- package/dist/{compaction-record.d.ts → capture/compaction-record.d.ts} +10 -6
- package/dist/{compaction-record.js → capture/compaction-record.js} +48 -94
- package/dist/{compaction-spool.js → capture/compaction-spool.js} +17 -13
- package/dist/capture/copilot-transcript.d.ts +3 -0
- package/dist/capture/copilot-transcript.js +9 -2
- package/dist/capture/extract.js +2 -2
- package/dist/capture/failure-caller.d.ts +2 -2
- package/dist/capture/failure-caller.js +6 -6
- package/dist/capture/failure-reading.d.ts +2 -5
- package/dist/capture/failure-reading.js +11 -12
- package/dist/{handoff-evidence.d.ts → capture/handoff-evidence.d.ts} +1 -1
- package/dist/{handoff-evidence.js → capture/handoff-evidence.js} +2 -1
- package/dist/capture/pre-compact-caller.d.ts +1 -1
- package/dist/capture/pre-compact-caller.js +2 -2
- package/dist/{session-digest.d.ts → capture/session-digest.d.ts} +1 -5
- package/dist/{session-digest.js → capture/session-digest.js} +17 -23
- package/dist/capture/session-end-caller.d.ts +2 -2
- package/dist/capture/session-end-caller.js +1 -1
- package/dist/capture/session-texts.d.ts +1 -1
- package/dist/capture/session-texts.js +5 -5
- package/dist/capture/session-worker.d.ts +13 -0
- package/dist/capture/session-worker.js +196 -0
- package/dist/{share-scrub.js → capture/share-scrub.js} +2 -2
- package/dist/capture/transcript.js +68 -74
- package/dist/capture/working-state.d.ts +0 -3
- package/dist/capture/working-state.js +7 -7
- package/dist/{audit-prune.d.ts → cli/audit-prune.d.ts} +1 -2
- package/dist/{audit-prune.js → cli/audit-prune.js} +5 -39
- package/dist/cli/audit.d.ts +2 -2
- package/dist/cli/audit.js +77 -72
- package/dist/cli/auth.d.ts +2 -1
- package/dist/cli/auth.js +18 -20
- package/dist/cli/briefs.d.ts +4 -3
- package/dist/cli/briefs.js +59 -181
- package/dist/cli/card.d.ts +2 -1
- package/dist/cli/card.js +25 -23
- package/dist/{client.d.ts → cli/client.d.ts} +1 -1
- package/dist/{client.js → cli/client.js} +1 -1
- package/dist/cli/compact-resume-payload.d.ts +8 -0
- package/dist/cli/compact-resume-payload.js +39 -0
- package/dist/cli/context.d.ts +2 -13
- package/dist/cli/context.js +41 -71
- package/dist/cli/continuity.d.ts +6 -5
- package/dist/cli/continuity.js +109 -99
- package/dist/{correction-latency.d.ts → cli/correction-latency.d.ts} +1 -1
- package/dist/cli/curate.d.ts +9 -9
- package/dist/cli/curate.js +177 -149
- package/dist/cli/dag.d.ts +4 -4
- package/dist/cli/dag.js +46 -34
- package/dist/cli/decisions.d.ts +4 -3
- package/dist/cli/decisions.js +108 -218
- package/dist/cli/eval.d.ts +1 -3
- package/dist/cli/eval.js +43 -31
- package/dist/cli/explain.d.ts +1 -1
- package/dist/cli/explain.js +35 -19
- package/dist/cli/flag-values.d.ts +25 -0
- package/dist/cli/flag-values.js +103 -0
- package/dist/cli/flags.d.ts +303 -0
- package/dist/cli/flags.js +169 -0
- package/dist/cli/goals.d.ts +2 -1
- package/dist/cli/goals.js +39 -34
- package/dist/cli/hook-runtime.d.ts +49 -0
- package/dist/cli/hook-runtime.js +155 -0
- package/dist/cli/init.d.ts +2 -1
- package/dist/cli/init.js +151 -118
- package/dist/cli/install-steps.d.ts +7 -0
- package/dist/cli/install-steps.js +110 -0
- package/dist/cli/last-sleep.d.ts +2 -1
- package/dist/cli/last-sleep.js +9 -7
- package/dist/cli/maintenance.d.ts +5 -4
- package/dist/cli/maintenance.js +31 -27
- package/dist/cli/object-verbs.d.ts +40 -0
- package/dist/cli/object-verbs.js +65 -0
- package/dist/{owner-validation.d.ts → cli/owner-validation.d.ts} +0 -1
- package/dist/{owner-validation.js → cli/owner-validation.js} +2 -2
- package/dist/cli/playbooks.d.ts +4 -3
- package/dist/cli/playbooks.js +77 -280
- package/dist/cli/print.d.ts +18 -0
- package/dist/cli/print.js +85 -0
- package/dist/cli/projects.d.ts +2 -3
- package/dist/cli/projects.js +56 -49
- package/dist/{provenance-coverage.d.ts → cli/provenance-coverage.d.ts} +1 -1
- package/dist/cli/quality-repair-once.js +4 -4
- package/dist/{quality-repair.js → cli/quality-repair.js} +23 -37
- package/dist/cli/recall.d.ts +2 -4
- package/dist/cli/recall.js +101 -150
- package/dist/{refine-llm.d.ts → cli/refine-llm.d.ts} +1 -1
- package/dist/{refine-llm.js → cli/refine-llm.js} +70 -82
- package/dist/cli/remember.d.ts +1 -3
- package/dist/cli/remember.js +124 -103
- package/dist/{scheduler.d.ts → cli/scheduler.d.ts} +3 -1
- package/dist/{scheduler.js → cli/scheduler.js} +13 -7
- package/dist/cli/serve.d.ts +1 -1
- package/dist/cli/serve.js +34 -4
- package/dist/cli/session-hooks.d.ts +4 -4
- package/dist/cli/session-hooks.js +265 -191
- package/dist/cli/setup.d.ts +2 -1
- package/dist/cli/setup.js +111 -45
- package/dist/cli/shared.d.ts +5 -95
- package/dist/cli/shared.js +18 -369
- package/dist/cli/slack.d.ts +2 -1
- package/dist/cli/slack.js +31 -55
- package/dist/cli/sleep-render.d.ts +4 -0
- package/dist/cli/sleep-render.js +61 -0
- package/dist/cli/sleep.d.ts +2 -8
- package/dist/cli/sleep.js +20 -76
- package/dist/cli/status.d.ts +3 -3
- package/dist/cli/status.js +39 -41
- package/dist/{stdin.js → cli/stdin.js} +6 -6
- package/dist/cli/transfer.d.ts +4 -4
- package/dist/cli/transfer.js +68 -42
- package/dist/cli/usage.js +8 -3
- package/dist/cli.d.ts +289 -5
- package/dist/cli.js +184 -117
- package/dist/connectors/dlq.d.ts +44 -0
- package/dist/connectors/dlq.js +30 -0
- package/dist/connectors/github/backfill.d.ts +1 -1
- package/dist/connectors/github/backfill.js +29 -66
- package/dist/connectors/github/cli-impl.js +59 -74
- package/dist/connectors/github/deletion.d.ts +5 -6
- package/dist/connectors/github/deletion.js +18 -52
- package/dist/connectors/github/dlq.d.ts +7 -61
- package/dist/connectors/github/dlq.js +19 -119
- package/dist/connectors/github/ingest.d.ts +2 -31
- package/dist/connectors/github/ingest.js +20 -82
- package/dist/connectors/github/octokit-client.d.ts +1 -1
- package/dist/connectors/github/octokit-client.js +2 -1
- package/dist/connectors/github/tenant-routing.d.ts +2 -2
- package/dist/connectors/github/tenant-routing.js +10 -36
- package/dist/connectors/github/transform.d.ts +1 -1
- package/dist/connectors/github/types.d.ts +1 -1
- package/dist/connectors/github/types.js +15 -18
- package/dist/connectors/github/webhook.d.ts +3 -2
- package/dist/connectors/github/webhook.js +84 -87
- package/dist/connectors/slack/backfill.d.ts +1 -1
- package/dist/connectors/slack/backfill.js +5 -29
- package/dist/connectors/slack/deletion.d.ts +4 -7
- package/dist/connectors/slack/deletion.js +20 -48
- package/dist/connectors/slack/dlq.d.ts +7 -49
- package/dist/connectors/slack/dlq.js +25 -118
- package/dist/connectors/slack/ingest.d.ts +5 -18
- package/dist/connectors/slack/ingest.js +27 -90
- package/dist/connectors/slack/signature.js +2 -1
- package/dist/connectors/slack/tenant-routing.d.ts +4 -1
- package/dist/connectors/slack/tenant-routing.js +13 -14
- package/dist/connectors/slack/transform.d.ts +1 -1
- package/dist/connectors/slack/types.d.ts +1 -1
- package/dist/connectors/slack/types.js +3 -12
- package/dist/connectors/slack/web-client.js +2 -2
- package/dist/connectors/slack/webhook.d.ts +3 -2
- package/dist/connectors/slack/webhook.js +75 -82
- package/dist/connectors/slack/workspaces.d.ts +4 -17
- package/dist/connectors/slack/workspaces.js +4 -34
- package/dist/consolidate/conflicts.d.ts +1 -1
- package/dist/consolidate/conflicts.js +4 -4
- package/dist/{dag.d.ts → consolidate/dag.d.ts} +1 -1
- package/dist/{dag.js → consolidate/dag.js} +60 -81
- package/dist/consolidate/decay.d.ts +2 -2
- package/dist/consolidate/decay.js +28 -22
- package/dist/{dedupe.js → consolidate/dedupe.js} +11 -19
- package/dist/consolidate/flush-units.d.ts +2 -2
- package/dist/{half-life-migration.d.ts → consolidate/half-life-migration.d.ts} +3 -9
- package/dist/consolidate/half-life-migration.js +106 -0
- package/dist/consolidate/llm-passes.js +8 -8
- package/dist/{memory-value.d.ts → consolidate/memory-value.d.ts} +7 -2
- package/dist/{memory-value.js → consolidate/memory-value.js} +9 -7
- package/dist/consolidate/merge.js +57 -54
- package/dist/{merged-row.d.ts → consolidate/merged-row.d.ts} +1 -1
- package/dist/{merged-row.js → consolidate/merged-row.js} +2 -2
- package/dist/consolidate/physics-pass.js +46 -46
- package/dist/{replay.d.ts → consolidate/replay.d.ts} +1 -1
- package/dist/{replay.js → consolidate/replay.js} +2 -2
- package/dist/consolidate/run.d.ts +7 -13
- package/dist/consolidate/run.js +6 -37
- package/dist/consolidate/sleep.d.ts +1 -1
- package/dist/consolidate/sleep.js +64 -134
- package/dist/{trace.js → consolidate/trace.js} +4 -6
- package/dist/consolidate/traces.js +34 -29
- package/dist/{ablation.js → core/ablation.js} +1 -1
- package/dist/{agent-memories/tools.d.ts → core/agent-memory-tools.d.ts} +1 -1
- package/dist/{agent-memories/tools.js → core/agent-memory-tools.js} +1 -1
- package/dist/{ambient.js → core/ambient.js} +12 -10
- package/dist/{capture-contract.d.ts → core/capture-contract.d.ts} +16 -3
- package/dist/core/capture-contract.js +149 -0
- package/dist/{compare.d.ts → core/compare.d.ts} +2 -0
- package/dist/{compare.js → core/compare.js} +10 -3
- package/dist/{config.d.ts → core/config.d.ts} +6 -6
- package/dist/{config.js → core/config.js} +99 -72
- package/dist/core/handoff.js +87 -0
- package/dist/{memory-quality.js → core/memory-quality.js} +1 -1
- package/dist/{memory.d.ts → core/memory.d.ts} +19 -5
- package/dist/{memory.js → core/memory.js} +117 -82
- package/dist/{physics.d.ts → core/physics.d.ts} +1 -1
- package/dist/{physics.js → core/physics.js} +2 -1
- package/dist/{project-identity.d.ts → core/project-identity.d.ts} +0 -5
- package/dist/{project-identity.js → core/project-identity.js} +5 -17
- package/dist/{project-remote.js → core/project-remote.js} +4 -4
- package/dist/{prompt-recall.d.ts → core/prompt-recall.d.ts} +5 -0
- package/dist/{prompt-recall.js → core/prompt-recall.js} +14 -1
- package/dist/{salience.js → core/salience.js} +35 -20
- package/dist/{search/types.d.ts → core/search-types.d.ts} +2 -2
- package/dist/{search/types.js → core/search-types.js} +1 -1
- package/dist/core/session-digest-row.d.ts +5 -0
- package/dist/core/session-digest-row.js +6 -0
- package/dist/{dashboard-actions.d.ts → dashboard/dashboard-actions.d.ts} +1 -1
- package/dist/{dashboard-actions.js → dashboard/dashboard-actions.js} +5 -5
- package/dist/{dashboard-queries.d.ts → dashboard/dashboard-queries.d.ts} +7 -2
- package/dist/{dashboard-queries.js → dashboard/dashboard-queries.js} +6 -10
- package/dist/{dashboard-snapshot.d.ts → dashboard/dashboard-snapshot.d.ts} +9 -9
- package/dist/{dashboard-snapshot.js → dashboard/dashboard-snapshot.js} +101 -104
- package/dist/{dashboard.js → dashboard/dashboard.js} +124 -53
- package/dist/db/backup.js +1 -1
- package/dist/db/busy.d.ts +18 -1
- package/dist/db/busy.js +74 -9
- package/dist/db/connect.d.ts +10 -2
- package/dist/db/connect.js +43 -10
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.js +8 -0
- package/dist/db/meta.d.ts +4 -0
- package/dist/db/meta.js +11 -1
- package/dist/db/migrate.d.ts +8 -1
- package/dist/db/migrate.js +25 -30
- package/dist/db/migrations/v08.js +1 -1
- package/dist/db/migrations/v14.js +39 -35
- package/dist/db/migrations/v16.js +29 -26
- package/dist/db/migrations/v18.js +6 -5
- package/dist/db/migrations/v20.js +4 -2
- package/dist/db/migrations/v22.js +39 -36
- package/dist/db/migrations/v24.js +27 -22
- package/dist/db/migrations/v29.js +37 -32
- package/dist/db/migrations/v31.js +36 -31
- package/dist/db/migrations/v35.js +1 -1
- package/dist/db/migrations/v39.js +1 -1
- package/dist/db/migrations/v40.js +15 -14
- package/dist/db/migrations/v43.js +7 -6
- package/dist/db/migrations/v44.js +1 -1
- package/dist/db/migrations/v45.js +1 -1
- package/dist/db/migrations/v46.js +1 -1
- package/dist/db/migrations/v47.js +1 -1
- package/dist/db/migrations/v48.js +1 -1
- package/dist/db/migrations/v49.js +1 -1
- package/dist/db/migrations/v50.js +8 -7
- package/dist/db/migrations/v52.js +1 -1
- package/dist/db/open.d.ts +9 -1
- package/dist/db/open.js +21 -4
- package/dist/{physics-state.d.ts → db/physics-state.d.ts} +3 -3
- package/dist/{physics-state.js → db/physics-state.js} +9 -16
- package/dist/{raw-archive-mirror-cleanup.d.ts → db/raw-archive-mirror-cleanup.d.ts} +5 -5
- package/dist/{raw-archive-mirror-cleanup.js → db/raw-archive-mirror-cleanup.js} +11 -6
- package/dist/db/request-stores.d.ts +15 -2
- package/dist/db/request-stores.js +37 -15
- package/dist/db/tables.d.ts +2 -0
- package/dist/db/tables.js +6 -0
- package/dist/{vector-store.d.ts → db/vector-store.d.ts} +4 -2
- package/dist/{vector-store.js → db/vector-store.js} +76 -51
- package/dist/db/wal-checkpointer.d.ts +11 -0
- package/dist/db/wal-checkpointer.js +92 -0
- package/dist/doctor.js +105 -136
- package/dist/entry/json-hooks.d.ts +1 -1
- package/dist/entry/json-hooks.js +1 -1
- package/dist/entry/project-identity.d.ts +1 -1
- package/dist/entry/project-identity.js +1 -1
- package/dist/entry/session-text.d.ts +3 -3
- package/dist/entry/session-text.js +3 -3
- package/dist/{eval-stats.js → eval/eval-stats.js} +12 -9
- package/dist/{eval-suite.d.ts → eval/eval-suite.d.ts} +1 -1
- package/dist/{eval-suite.js → eval/eval-suite.js} +25 -23
- package/dist/{eval.d.ts → eval/eval.d.ts} +1 -1
- package/dist/{eval.js → eval/eval.js} +29 -22
- package/dist/{judgment.d.ts → eval/judgment.d.ts} +1 -3
- package/dist/{judgment.js → eval/judgment.js} +4 -9
- package/dist/extensions/openclaw-plugin/index.js +1 -2
- package/dist/graph/delta.d.ts +3 -2
- package/dist/graph/delta.js +9 -23
- package/dist/{graph-extract.d.ts → graph/extract.d.ts} +6 -6
- package/dist/{graph-extract.js → graph/extract.js} +37 -52
- package/dist/{graph-recall.d.ts → graph/recall.d.ts} +2 -2
- package/dist/{graph-recall.js → graph/recall.js} +55 -36
- package/dist/{graph-stream.d.ts → graph/stream.d.ts} +2 -2
- package/dist/{graph-stream.js → graph/stream.js} +9 -7
- package/dist/{graph-view.d.ts → graph/view.d.ts} +6 -3
- package/dist/{graph-view.js → graph/view.js} +127 -167
- package/dist/graph/write.d.ts +4 -76
- package/dist/graph/write.js +13 -397
- package/dist/hooks/codex-session.js +1 -1
- package/dist/hooks/codex-wrapper.js +14 -15
- package/dist/hooks/copilot.d.ts +48 -13
- package/dist/hooks/copilot.js +124 -39
- package/dist/{cli → hooks}/hook-blocks.js +1 -1
- package/dist/hooks/json-hooks.d.ts +3 -1
- package/dist/hooks/json-hooks.js +40 -122
- package/dist/hooks/opencode.js +35 -27
- package/dist/hooks/shared.d.ts +7 -5
- package/dist/hooks/shared.js +19 -8
- package/dist/importers/core.d.ts +2 -6
- package/dist/importers/core.js +41 -39
- package/dist/importers/markdown-parse.d.ts +1 -10
- package/dist/importers/markdown-parse.js +2 -19
- package/dist/importers/markdown.js +2 -1
- package/dist/importers/sources.js +50 -46
- package/dist/importers/vault.js +71 -92
- package/dist/index.d.ts +22 -22
- package/dist/index.js +21 -21
- package/dist/{autolearn.d.ts → learn/autolearn.d.ts} +2 -2
- package/dist/{autolearn.js → learn/autolearn.js} +13 -11
- package/dist/{churn-git.d.ts → learn/churn-git.d.ts} +1 -1
- package/dist/{churn-git.js → learn/churn-git.js} +6 -4
- package/dist/{extract.d.ts → learn/extract.d.ts} +1 -1
- package/dist/learn/extract.js +125 -0
- package/dist/{forward-claim-detector.d.ts → learn/forward-claim-detector.d.ts} +1 -1
- package/dist/{forward-claim-detector.js → learn/forward-claim-detector.js} +1 -1
- package/dist/{invalidation.d.ts → learn/invalidation.d.ts} +4 -0
- package/dist/{invalidation.js → learn/invalidation.js} +83 -99
- package/dist/mcp/admin-tools.d.ts +1 -1
- package/dist/mcp/admin-tools.js +37 -60
- package/dist/mcp/format.d.ts +5 -5
- package/dist/mcp/format.js +7 -6
- package/dist/mcp/framing.d.ts +6 -0
- package/dist/mcp/framing.js +11 -3
- package/dist/mcp/memory-tools.d.ts +2 -2
- package/dist/mcp/memory-tools.js +12 -31
- package/dist/mcp/protocol.d.ts +6 -10
- package/dist/mcp/protocol.js +8 -14
- package/dist/mcp/recall-tools.d.ts +2 -2
- package/dist/mcp/recall-tools.js +68 -50
- package/dist/mcp/request.js +65 -63
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/session-state.d.ts +1 -2
- package/dist/mcp/session-state.js +2 -2
- package/dist/mcp/shared-gate.js +1 -1
- package/dist/mcp/stdio.js +69 -31
- package/dist/mcp/tool-args.js +2 -1
- package/dist/mcp/tools.js +2 -2
- package/dist/{customer-notes.d.ts → objects/customer-notes.d.ts} +7 -24
- package/dist/objects/customer-notes.js +112 -0
- package/dist/{decisions.d.ts → objects/decisions.d.ts} +13 -28
- package/dist/objects/decisions.js +101 -0
- package/dist/objects/descriptor.d.ts +52 -0
- package/dist/objects/descriptor.js +4 -0
- package/dist/objects/fields.d.ts +15 -0
- package/dist/objects/fields.js +21 -0
- package/dist/{incidents.d.ts → objects/incidents.d.ts} +17 -44
- package/dist/objects/incidents.js +130 -0
- package/dist/objects/lifecycle.d.ts +27 -0
- package/dist/objects/lifecycle.js +96 -0
- package/dist/{policies.d.ts → objects/policies.d.ts} +14 -27
- package/dist/objects/policies.js +189 -0
- package/dist/{processes.d.ts → objects/processes.d.ts} +14 -34
- package/dist/objects/processes.js +146 -0
- package/dist/{project-briefs.d.ts → objects/project-briefs.d.ts} +19 -40
- package/dist/objects/project-briefs.js +255 -0
- package/dist/{skills.d.ts → objects/skills.d.ts} +11 -26
- package/dist/objects/skills.js +156 -0
- package/dist/postinstall.js +4 -2
- package/dist/predictions/planning-fallacy.d.ts +4 -76
- package/dist/predictions/planning-fallacy.js +4 -129
- package/dist/rerankers/clef.d.ts +2 -6
- package/dist/rerankers/clef.js +27 -47
- package/dist/rerankers/cross-encoder.d.ts +0 -7
- package/dist/rerankers/cross-encoder.js +15 -23
- package/dist/rerankers/index.js +8 -7
- package/dist/rerankers/jev.d.ts +1 -4
- package/dist/rerankers/jev.js +30 -49
- package/dist/rerankers/llm.d.ts +2 -4
- package/dist/rerankers/llm.js +33 -50
- package/dist/rerankers/outage-warning.d.ts +7 -0
- package/dist/rerankers/outage-warning.js +31 -0
- package/dist/rerankers/remote.d.ts +3 -0
- package/dist/rerankers/remote.js +23 -0
- package/dist/rerankers/types.d.ts +1 -1
- package/dist/search/as-of.d.ts +1 -1
- package/dist/search/bm25-search.d.ts +2 -2
- package/dist/search/bm25-search.js +7 -7
- package/dist/search/bm25.d.ts +1 -1
- package/dist/search/bm25.js +1 -1
- package/dist/search/boosts.d.ts +5 -1
- package/dist/search/boosts.js +34 -13
- package/dist/search/breakdown.d.ts +2 -2
- package/dist/search/breakdown.js +2 -1
- package/dist/search/explain.d.ts +1 -1
- package/dist/search/explain.js +3 -2
- package/dist/search/finalize.d.ts +2 -2
- package/dist/search/finalize.js +4 -3
- package/dist/search/fusion.d.ts +1 -1
- package/dist/search/fusion.js +3 -3
- package/dist/search/hybrid-score.d.ts +2 -2
- package/dist/search/hybrid-score.js +1 -1
- package/dist/search/hybrid.d.ts +4 -4
- package/dist/search/hybrid.js +11 -8
- package/dist/{multihop.d.ts → search/multihop.d.ts} +2 -2
- package/dist/{multihop.js → search/multihop.js} +7 -5
- package/dist/{path-context.js → search/path-context.js} +3 -1
- package/dist/search/physics-search.d.ts +4 -4
- package/dist/search/physics-search.js +15 -15
- package/dist/search/rerank.d.ts +3 -3
- package/dist/search/rerank.js +4 -3
- package/dist/search/temporal.d.ts +1 -1
- package/dist/search/temporal.js +5 -2
- package/dist/search/vector.d.ts +3 -3
- package/dist/search/vector.js +17 -11
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +26 -18
- package/dist/server/boot.d.ts +24 -0
- package/dist/server/boot.js +465 -0
- package/dist/server/client-ip.d.ts +5 -1
- package/dist/server/client-ip.js +18 -6
- package/dist/server/cursor.d.ts +1 -1
- package/dist/server/cursor.js +2 -3
- package/dist/server/deadline.d.ts +13 -0
- package/dist/server/deadline.js +45 -0
- package/dist/server/key-check-bounds.d.ts +8 -0
- package/dist/server/key-check-bounds.js +46 -0
- package/dist/server/lifecycle.js +1 -1
- package/dist/server/mcp-http.d.ts +1 -4
- package/dist/server/mcp-http.js +34 -24
- package/dist/server/ready.d.ts +7 -0
- package/dist/server/ready.js +38 -0
- package/dist/server/request.d.ts +10 -4
- package/dist/server/request.js +63 -12
- package/dist/server/route-table.d.ts +15 -0
- package/dist/server/route-table.js +209 -0
- package/dist/server/routes/admin.js +13 -8
- package/dist/server/routes/customer-notes.d.ts +5 -5
- package/dist/server/routes/customer-notes.js +32 -97
- package/dist/server/routes/decisions.d.ts +5 -5
- package/dist/server/routes/decisions.js +42 -105
- package/dist/server/routes/incidents.d.ts +5 -5
- package/dist/server/routes/incidents.js +42 -95
- package/dist/server/routes/memories.js +21 -20
- package/dist/server/routes/object-routes.d.ts +40 -0
- package/dist/server/routes/object-routes.js +80 -0
- package/dist/server/routes/policies.d.ts +6 -6
- package/dist/server/routes/policies.js +40 -124
- package/dist/server/routes/predictions.js +29 -45
- package/dist/server/routes/processes.d.ts +5 -5
- package/dist/server/routes/processes.js +38 -118
- package/dist/server/routes/project-briefs.d.ts +6 -6
- package/dist/server/routes/project-briefs.js +38 -110
- package/dist/server/routes/recall.js +14 -12
- package/dist/server/routes/skills.d.ts +6 -6
- package/dist/server/routes/skills.js +37 -125
- package/dist/{server-detect.js → server/server-detect.js} +3 -2
- package/dist/server/sleep-child.d.ts +2 -0
- package/dist/server/sleep-child.js +19 -0
- package/dist/server/sleep-offload.d.ts +20 -0
- package/dist/server/sleep-offload.js +70 -0
- package/dist/server/tls.d.ts +6 -0
- package/dist/server/tls.js +24 -0
- package/dist/server/types.d.ts +27 -8
- package/dist/server/validation.d.ts +3 -4
- package/dist/server/validation.js +6 -11
- package/dist/server.d.ts +41 -50
- package/dist/server.js +26 -560
- package/dist/{project-merge.d.ts → sharing/project-merge.d.ts} +1 -1
- package/dist/{project-merge.js → sharing/project-merge.js} +26 -45
- package/dist/{scope.js → sharing/scope.js} +1 -1
- package/dist/{shared.d.ts → sharing/shared.d.ts} +10 -9
- package/dist/{shared.js → sharing/shared.js} +100 -77
- package/dist/{ambient-store.d.ts → store/ambient.d.ts} +2 -2
- package/dist/{ambient-store.js → store/ambient.js} +10 -10
- package/dist/store/audit-event.d.ts +12 -6
- package/dist/store/audit-event.js +6 -5
- package/dist/{audit.d.ts → store/audit.d.ts} +27 -3
- package/dist/{audit.js → store/audit.js} +91 -6
- package/dist/{auth.d.ts → store/auth.d.ts} +15 -32
- package/dist/{auth.js → store/auth.js} +100 -92
- package/dist/store/candidates.d.ts +23 -12
- package/dist/store/candidates.js +87 -35
- package/dist/{card-detail.d.ts → store/card-detail.d.ts} +3 -3
- package/dist/{card-detail.js → store/card-detail.js} +1 -1
- package/dist/{store-cards.d.ts → store/cards.d.ts} +14 -9
- package/dist/{store-cards.js → store/cards.js} +85 -146
- package/dist/store/compactions.d.ts +78 -0
- package/dist/store/compactions.js +93 -0
- package/dist/store/conflicts.d.ts +22 -5
- package/dist/store/conflicts.js +160 -109
- package/dist/store/connectors/github.d.ts +84 -0
- package/dist/store/connectors/github.js +180 -0
- package/dist/store/connectors/slack.d.ts +69 -0
- package/dist/store/connectors/slack.js +177 -0
- package/dist/store/dashboard-reads.d.ts +27 -0
- package/dist/store/dashboard-reads.js +92 -0
- package/dist/store/delete-and-batch.d.ts +20 -24
- package/dist/store/delete-and-batch.js +64 -40
- package/dist/{delivery-recorder.d.ts → store/delivery-recorder.d.ts} +12 -5
- package/dist/{delivery-recorder.js → store/delivery-recorder.js} +42 -30
- package/dist/store/descendant-page.d.ts +12 -0
- package/dist/store/descendant-page.js +99 -0
- package/dist/store/diagnostics.d.ts +47 -0
- package/dist/store/diagnostics.js +51 -0
- package/dist/store/doctor-reads.d.ts +16 -0
- package/dist/store/doctor-reads.js +19 -0
- package/dist/{dormant.d.ts → store/dormant.d.ts} +46 -12
- package/dist/{dormant.js → store/dormant.js} +151 -6
- package/dist/{embeddings.d.ts → store/embeddings/index.d.ts} +10 -6
- package/dist/{embeddings.js → store/embeddings/index.js} +60 -44
- package/dist/{local-embedding.d.ts → store/embeddings/local.d.ts} +1 -1
- package/dist/{local-embedding.js → store/embeddings/local.js} +68 -57
- package/dist/{embedding-provider.d.ts → store/embeddings/provider.d.ts} +2 -2
- package/dist/{embedding-provider.js → store/embeddings/provider.js} +47 -32
- package/dist/store/entry-reads.d.ts +46 -7
- package/dist/store/entry-reads.js +120 -21
- package/dist/store/entry-row.d.ts +8 -2
- package/dist/store/entry-row.js +28 -8
- package/dist/store/entry-writes.d.ts +33 -4
- package/dist/store/entry-writes.js +108 -26
- package/dist/{failure-log.d.ts → store/failure-log.d.ts} +7 -2
- package/dist/{failure-log.js → store/failure-log.js} +9 -2
- package/dist/{goals.d.ts → store/goals.d.ts} +6 -46
- package/dist/{goals.js → store/goals.js} +45 -94
- package/dist/store/graph-queue.d.ts +29 -0
- package/dist/store/graph-queue.js +101 -0
- package/dist/{graph/read.d.ts → store/graph-reads.d.ts} +26 -34
- package/dist/{graph/read.js → store/graph-reads.js} +63 -115
- package/dist/{graph/types.d.ts → store/graph-rows.d.ts} +68 -8
- package/dist/{graph/rows.js → store/graph-rows.js} +14 -3
- package/dist/store/graph-view-rows.d.ts +12 -0
- package/dist/store/graph-view-rows.js +67 -0
- package/dist/store/graph-writes.d.ts +58 -0
- package/dist/store/graph-writes.js +256 -0
- package/dist/store/half-life.d.ts +34 -0
- package/dist/store/half-life.js +77 -0
- package/dist/store/handoffs.d.ts +6 -3
- package/dist/store/handoffs.js +70 -31
- package/dist/store/index-and-stats.d.ts +8 -1
- package/dist/store/index-and-stats.js +51 -48
- package/dist/store/index.d.ts +4 -0
- package/dist/store/index.js +3 -0
- package/dist/store/key-audit.d.ts +2 -2
- package/dist/store/key-audit.js +4 -4
- package/dist/store/key-writes.d.ts +12 -5
- package/dist/store/key-writes.js +30 -4
- package/dist/store/ledger-turn.d.ts +17 -0
- package/dist/store/ledger-turn.js +27 -0
- package/dist/store/markdown.d.ts +1 -1
- package/dist/store/markdown.js +4 -3
- package/dist/store/mirrors.d.ts +5 -7
- package/dist/store/mirrors.js +39 -25
- package/dist/store/object-types.d.ts +189 -0
- package/dist/store/object-types.js +4 -0
- package/dist/store/open.d.ts +8 -4
- package/dist/store/open.js +34 -23
- package/dist/store/planning-fallacy-evidence.d.ts +42 -0
- package/dist/store/planning-fallacy-evidence.js +81 -0
- package/dist/store/port.d.ts +646 -0
- package/dist/store/port.js +17 -0
- package/dist/{predictions/store.d.ts → store/predictions.d.ts} +15 -2
- package/dist/{predictions/store.js → store/predictions.js} +52 -67
- package/dist/{quarantine.d.ts → store/quarantine.d.ts} +8 -8
- package/dist/{quarantine.js → store/quarantine.js} +64 -22
- package/dist/{raw-archive.d.ts → store/raw-archive.d.ts} +5 -3
- package/dist/{raw-archive.js → store/raw-archive.js} +11 -5
- package/dist/{recall-scope.d.ts → store/recall-scope.d.ts} +4 -7
- package/dist/{recall-scope.js → store/recall-scope.js} +8 -9
- package/dist/{recall-trace.d.ts → store/recall-trace.d.ts} +13 -14
- package/dist/{recall-trace.js → store/recall-trace.js} +38 -43
- package/dist/store/rejected-values.d.ts +55 -0
- package/dist/store/rejected-values.js +162 -0
- package/dist/{rejection.d.ts → store/rejection.d.ts} +2 -2
- package/dist/{rejection.js → store/rejection.js} +3 -2
- package/dist/store/rows.d.ts +2 -3
- package/dist/store/rows.js +18 -11
- package/dist/store/search-rows.d.ts +15 -4
- package/dist/store/search-rows.js +43 -36
- package/dist/store/sessions.d.ts +18 -2
- package/dist/store/sessions.js +83 -46
- package/dist/store/sqlite/commit-watch.d.ts +4 -0
- package/dist/store/sqlite/commit-watch.js +29 -0
- package/dist/store/sqlite/connector-events-group.d.ts +5 -0
- package/dist/store/sqlite/connector-events-group.js +50 -0
- package/dist/store/sqlite/connector-writes-group.d.ts +6 -0
- package/dist/store/sqlite/connector-writes-group.js +65 -0
- package/dist/store/sqlite/dag-reads-group.d.ts +3 -0
- package/dist/store/sqlite/dag-reads-group.js +45 -0
- package/dist/store/sqlite/entry-writes-group.d.ts +18 -0
- package/dist/store/sqlite/entry-writes-group.js +170 -0
- package/dist/store/sqlite/error-codec.d.ts +17 -0
- package/dist/store/sqlite/error-codec.js +59 -0
- package/dist/store/sqlite/executor-counts.d.ts +10 -0
- package/dist/store/sqlite/executor-counts.js +11 -0
- package/dist/store/sqlite/executor.d.ts +28 -0
- package/dist/store/sqlite/executor.js +286 -0
- package/dist/store/sqlite/graph-reads-group.d.ts +5 -0
- package/dist/store/sqlite/graph-reads-group.js +18 -0
- package/dist/store/sqlite/local.d.ts +21 -0
- package/dist/store/sqlite/local.js +38 -0
- package/dist/store/sqlite/object-rows.d.ts +102 -0
- package/dist/store/sqlite/object-rows.js +218 -0
- package/dist/store/sqlite/objects-group.d.ts +20 -0
- package/dist/store/sqlite/objects-group.js +314 -0
- package/dist/store/sqlite/predictions-group.d.ts +5 -0
- package/dist/store/sqlite/predictions-group.js +28 -0
- package/dist/store/sqlite/quarantine-group.d.ts +5 -0
- package/dist/store/sqlite/quarantine-group.js +38 -0
- package/dist/store/sqlite/store.d.ts +26 -0
- package/dist/store/sqlite/store.js +295 -0
- package/dist/store/sqlite/vector-pack.d.ts +18 -0
- package/dist/store/sqlite/vector-pack.js +46 -0
- package/dist/store/sqlite/vector-reads-group.d.ts +3 -0
- package/dist/store/sqlite/vector-reads-group.js +23 -0
- package/dist/store/sqlite/worker-entry.d.ts +2 -0
- package/dist/store/sqlite/worker-entry.js +8 -0
- package/dist/store/sqlite/worker-jobs.d.ts +5 -0
- package/dist/store/sqlite/worker-jobs.js +116 -0
- package/dist/store/sqlite/worker-ops.d.ts +124 -0
- package/dist/store/sqlite/worker-ops.js +82 -0
- package/dist/store/sqlite/worker-store.d.ts +8 -0
- package/dist/store/sqlite/worker-store.js +76 -0
- package/dist/store/summaries.d.ts +2 -11
- package/dist/store/summaries.js +17 -44
- package/dist/{summary-dirty.d.ts → store/summary-dirty.d.ts} +1 -1
- package/dist/store/tenant-lookup.d.ts +1 -1
- package/dist/{tenant.d.ts → store/tenant.d.ts} +2 -2
- package/dist/{tenant.js → store/tenant.js} +1 -1
- package/dist/store/token-ledger-rows.d.ts +61 -0
- package/dist/store/token-ledger-rows.js +68 -0
- package/dist/{token-ledger.d.ts → store/token-ledger.d.ts} +2 -9
- package/dist/{token-ledger.js → store/token-ledger.js} +31 -78
- package/dist/store/tombstone-checks.d.ts +12 -0
- package/dist/store/tombstone-checks.js +31 -0
- package/dist/store/usage-reports.d.ts +7 -0
- package/dist/store/usage-reports.js +26 -0
- package/dist/store/vector-writes.d.ts +10 -3
- package/dist/store/vector-writes.js +35 -5
- package/dist/{working-memory.d.ts → store/working-memory.d.ts} +5 -1
- package/dist/{working-memory.js → store/working-memory.js} +39 -41
- package/dist/support-bundle.d.ts +1 -1
- package/dist/support-bundle.js +13 -33
- package/dist/{gated-write.d.ts → trust/gated-write.d.ts} +2 -2
- package/dist/{gated-write.js → trust/gated-write.js} +6 -6
- package/dist/trust/quarantine.d.ts +4 -0
- package/dist/trust/quarantine.js +8 -0
- package/dist/trust/reject-flow.d.ts +23 -0
- package/dist/trust/reject-flow.js +67 -0
- package/dist/util/anthropic-messages.d.ts +31 -0
- package/dist/util/anthropic-messages.js +46 -0
- package/dist/util/atomic-write.d.ts +3 -0
- package/dist/util/atomic-write.js +107 -0
- package/dist/util/crash-handlers.d.ts +5 -0
- package/dist/util/crash-handlers.js +30 -0
- package/dist/{env.d.ts → util/env.d.ts} +17 -2
- package/dist/{env.js → util/env.js} +22 -2
- package/dist/util/home-path.js +67 -0
- package/dist/{http-retry.d.ts → util/http-retry.d.ts} +6 -2
- package/dist/{http-retry.js → util/http-retry.js} +38 -7
- package/dist/{http-util.d.ts → util/http-util.d.ts} +14 -3
- package/dist/{http-util.js → util/http-util.js} +31 -11
- package/dist/util/json.d.ts +17 -0
- package/dist/util/json.js +25 -0
- package/dist/{log.d.ts → util/log.d.ts} +5 -2
- package/dist/{log.js → util/log.js} +12 -3
- package/dist/util/real-path.d.ts +3 -0
- package/dist/util/real-path.js +15 -0
- package/dist/util/request-scope.d.ts +27 -0
- package/dist/util/request-scope.js +47 -0
- package/dist/{same-text.d.ts → util/same-text.d.ts} +1 -1
- package/dist/{secret-detect.js → util/secret-detect.js} +5 -4
- package/dist/util/stored-json.d.ts +9 -0
- package/dist/util/stored-json.js +8 -0
- package/dist/util/time.d.ts +2 -0
- package/dist/util/time.js +3 -0
- package/dist/util/token-text.d.ts +18 -0
- package/dist/util/token-text.js +23 -0
- package/dist/{version.d.ts → util/version.d.ts} +1 -1
- package/dist/{version.js → util/version.js} +1 -1
- package/extensions/openclaw-plugin/index.ts +1 -5
- 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 -2
- package/dist/api.d.ts +0 -26
- package/dist/api.js +0 -29
- package/dist/capture-contract.js +0 -49
- package/dist/connectors/github/idempotency.d.ts +0 -19
- package/dist/connectors/github/idempotency.js +0 -27
- package/dist/connectors/slack/idempotency.d.ts +0 -17
- package/dist/connectors/slack/idempotency.js +0 -31
- package/dist/customer-notes.js +0 -336
- package/dist/db.d.ts +0 -9
- package/dist/db.js +0 -8
- package/dist/decisions.js +0 -326
- package/dist/extract.js +0 -133
- package/dist/graph/rows.d.ts +0 -45
- package/dist/graph/types.js +0 -11
- package/dist/half-life-migration.js +0 -182
- package/dist/handoff.js +0 -68
- package/dist/home-path.js +0 -24
- package/dist/incidents.js +0 -349
- package/dist/instruction-detect.js +0 -27
- package/dist/json.d.ts +0 -7
- package/dist/json.js +0 -11
- package/dist/ledger-db.d.ts +0 -10
- package/dist/ledger-db.js +0 -42
- package/dist/policies.js +0 -434
- package/dist/processes.js +0 -371
- package/dist/project-briefs.js +0 -523
- package/dist/reject-flow.d.ts +0 -69
- package/dist/reject-flow.js +0 -260
- package/dist/session-owners.d.ts +0 -7
- package/dist/session-owners.js +0 -54
- package/dist/skills.js +0 -367
- package/dist/store-port.d.ts +0 -191
- package/dist/store-port.js +0 -166
- /package/dist/{context-auto.d.ts → api/context-auto.d.ts} +0 -0
- /package/dist/{instruction-detect.d.ts → api/instruction-detect.d.ts} +0 -0
- /package/dist/{recall-history.d.ts → api/recall-history.d.ts} +0 -0
- /package/dist/{codex-patch.d.ts → capture/codex-patch.d.ts} +0 -0
- /package/dist/{compaction-items.d.ts → capture/compaction-items.d.ts} +0 -0
- /package/dist/{compaction-spool.d.ts → capture/compaction-spool.d.ts} +0 -0
- /package/dist/{share-scrub.d.ts → capture/share-scrub.d.ts} +0 -0
- /package/dist/{correction-latency.js → cli/correction-latency.js} +0 -0
- /package/dist/{provenance-coverage.js → cli/provenance-coverage.js} +0 -0
- /package/dist/{quality-repair.d.ts → cli/quality-repair.d.ts} +0 -0
- /package/dist/{stdin.d.ts → cli/stdin.d.ts} +0 -0
- /package/dist/{dedupe.d.ts → consolidate/dedupe.d.ts} +0 -0
- /package/dist/{memory-value-weights.d.ts → consolidate/memory-value-weights.d.ts} +0 -0
- /package/dist/{memory-value-weights.js → consolidate/memory-value-weights.js} +0 -0
- /package/dist/{overlap-index.d.ts → consolidate/overlap-index.d.ts} +0 -0
- /package/dist/{overlap-index.js → consolidate/overlap-index.js} +0 -0
- /package/dist/{trace.d.ts → consolidate/trace.d.ts} +0 -0
- /package/dist/{ablation.d.ts → core/ablation.d.ts} +0 -0
- /package/dist/{ambient.d.ts → core/ambient.d.ts} +0 -0
- /package/dist/{api-errors.d.ts → core/api-errors.d.ts} +0 -0
- /package/dist/{api-errors.js → core/api-errors.js} +0 -0
- /package/dist/{card.d.ts → core/card.d.ts} +0 -0
- /package/dist/{card.js → core/card.js} +0 -0
- /package/dist/{handoff.d.ts → core/handoff.d.ts} +0 -0
- /package/dist/{memory-quality.d.ts → core/memory-quality.d.ts} +0 -0
- /package/dist/{physics-config.d.ts → core/physics-config.d.ts} +0 -0
- /package/dist/{physics-config.js → core/physics-config.js} +0 -0
- /package/dist/{project-remote.d.ts → core/project-remote.d.ts} +0 -0
- /package/dist/{salience.d.ts → core/salience.d.ts} +0 -0
- /package/dist/{dashboard-params.d.ts → dashboard/dashboard-params.d.ts} +0 -0
- /package/dist/{dashboard-params.js → dashboard/dashboard-params.js} +0 -0
- /package/dist/{dashboard-types.d.ts → dashboard/dashboard-types.d.ts} +0 -0
- /package/dist/{dashboard-types.js → dashboard/dashboard-types.js} +0 -0
- /package/dist/{dashboard.d.ts → dashboard/dashboard.d.ts} +0 -0
- /package/dist/{eval-stats.d.ts → eval/eval-stats.d.ts} +0 -0
- /package/dist/{cli → hooks}/hook-blocks.d.ts +0 -0
- /package/dist/{path-context.d.ts → search/path-context.d.ts} +0 -0
- /package/dist/{rrf.d.ts → search/rrf.d.ts} +0 -0
- /package/dist/{rrf.js → search/rrf.js} +0 -0
- /package/dist/{rate-limit.d.ts → server/rate-limit.d.ts} +0 -0
- /package/dist/{rate-limit.js → server/rate-limit.js} +0 -0
- /package/dist/{server-detect.d.ts → server/server-detect.d.ts} +0 -0
- /package/dist/{scope.d.ts → sharing/scope.d.ts} +0 -0
- /package/dist/{summary-dirty.js → store/summary-dirty.js} +0 -0
- /package/dist/{yaml.d.ts → store/yaml.d.ts} +0 -0
- /package/dist/{yaml.js → store/yaml.js} +0 -0
- /package/dist/{escape.d.ts → util/escape.d.ts} +0 -0
- /package/dist/{escape.js → util/escape.js} +0 -0
- /package/dist/{home-path.d.ts → util/home-path.d.ts} +0 -0
- /package/dist/{keyset.d.ts → util/keyset.d.ts} +0 -0
- /package/dist/{keyset.js → util/keyset.js} +0 -0
- /package/dist/{same-text.js → util/same-text.js} +0 -0
- /package/dist/{secret-detect.d.ts → util/secret-detect.d.ts} +0 -0
- /package/dist/{db → util}/sqlite-blocked.d.ts +0 -0
- /package/dist/{db → util}/sqlite-blocked.js +0 -0
- /package/dist/{tokenize.d.ts → util/tokenize.d.ts} +0 -0
- /package/dist/{tokenize.js → util/tokenize.js} +0 -0
- /package/dist/{transcript-tail.d.ts → util/transcript-tail.d.ts} +0 -0
- /package/dist/{transcript-tail.js → util/transcript-tail.js} +0 -0
- /package/dist/{write-budget.d.ts → util/write-budget.d.ts} +0 -0
- /package/dist/{write-budget.js → util/write-budget.js} +0 -0
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
* that mutate these env vars MUST call _resetAblationCacheForTests() in BOTH
|
|
85
85
|
* beforeEach AND afterEach.
|
|
86
86
|
*/
|
|
87
|
-
import { envAblateDecay, envAblateOutcome, envAblateOutcomeFast, envAblateOutcomeSlow, envAblateRecallBoost, envAblateRecency, envEvalRecencyDays, envFakeNowMs, } from '
|
|
87
|
+
import { envAblateDecay, envAblateOutcome, envAblateOutcomeFast, envAblateOutcomeSlow, envAblateRecallBoost, envAblateRecency, envEvalRecencyDays, envFakeNowMs, } from '../util/env.js';
|
|
88
88
|
let _cache;
|
|
89
89
|
function readFlags() {
|
|
90
90
|
if (_cache !== undefined)
|
|
@@ -30,4 +30,4 @@ export declare const AGENT_MEMORY_SOURCE_PREFIX = "agent-memory:";
|
|
|
30
30
|
export declare function toolSourcePrefix(id: ToolId): string;
|
|
31
31
|
export declare const AGENT_MEMORY_TAGS: readonly string[];
|
|
32
32
|
export declare function isToolId(value: string): value is ToolId;
|
|
33
|
-
//# sourceMappingURL=tools.d.ts.map
|
|
33
|
+
//# sourceMappingURL=agent-memory-tools.d.ts.map
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
import { evalNow } from './ablation.js';
|
|
10
10
|
import { Layer } from './memory.js';
|
|
11
11
|
import { calculateStrength } from './memory.js';
|
|
12
|
+
import { DAY_MS } from '../util/time.js';
|
|
13
|
+
const STATE_DECIMALS = 3;
|
|
12
14
|
/** The tallies of two disjoint row sets taken together. */
|
|
13
15
|
export function addAmbientTallies(a, b) {
|
|
14
16
|
const tagCounts = new Map(a.tagCounts);
|
|
@@ -36,7 +38,7 @@ export function isErrorTagged(tags) {
|
|
|
36
38
|
/** Tallies over loaded entries; superseded rows count toward the total only, as they always have here. */
|
|
37
39
|
export function tallyAmbientEntries(entries, now) {
|
|
38
40
|
const currentTime = now ?? evalNow(); // honors HIPPO_FAKE_NOW (eval-only)
|
|
39
|
-
const sevenDaysAgo = currentTime.getTime() - 7 *
|
|
41
|
+
const sevenDaysAgo = currentTime.getTime() - 7 * DAY_MS;
|
|
40
42
|
const t = {
|
|
41
43
|
total: entries.length, strengthSum: 0, fresh: 0, negative: 0, highSchemaFit: 0, errors: 0,
|
|
42
44
|
semantic: 0, episodic: 0, conflicts: 0, extracted: 0, maxDagLevel: 0, tagCounts: new Map(),
|
|
@@ -154,15 +156,15 @@ export function renderAmbientSummary(state) {
|
|
|
154
156
|
export function formatAmbientVector(state) {
|
|
155
157
|
const lines = [];
|
|
156
158
|
lines.push('Ambient State Vector:');
|
|
157
|
-
lines.push(` tag_entropy: ${state.tagEntropy.toFixed(
|
|
158
|
-
lines.push(` avg_strength: ${state.avgStrength.toFixed(
|
|
159
|
-
lines.push(` recency_freshness: ${state.recencyFreshness.toFixed(
|
|
160
|
-
lines.push(` emotional_skew: ${state.emotionalSkew.toFixed(
|
|
161
|
-
lines.push(` schema_fit_ratio: ${state.schemaFitRatio.toFixed(
|
|
162
|
-
lines.push(` error_density: ${state.errorDensity.toFixed(
|
|
163
|
-
lines.push(` consolidation_ratio: ${state.consolidationRatio.toFixed(
|
|
164
|
-
lines.push(` conflict_intensity: ${state.conflictIntensity.toFixed(
|
|
165
|
-
lines.push(` extraction_coverage: ${state.extractionCoverage.toFixed(
|
|
159
|
+
lines.push(` tag_entropy: ${state.tagEntropy.toFixed(STATE_DECIMALS)}`);
|
|
160
|
+
lines.push(` avg_strength: ${state.avgStrength.toFixed(STATE_DECIMALS)}`);
|
|
161
|
+
lines.push(` recency_freshness: ${state.recencyFreshness.toFixed(STATE_DECIMALS)}`);
|
|
162
|
+
lines.push(` emotional_skew: ${state.emotionalSkew.toFixed(STATE_DECIMALS)}`);
|
|
163
|
+
lines.push(` schema_fit_ratio: ${state.schemaFitRatio.toFixed(STATE_DECIMALS)}`);
|
|
164
|
+
lines.push(` error_density: ${state.errorDensity.toFixed(STATE_DECIMALS)}`);
|
|
165
|
+
lines.push(` consolidation_ratio: ${state.consolidationRatio.toFixed(STATE_DECIMALS)}`);
|
|
166
|
+
lines.push(` conflict_intensity: ${state.conflictIntensity.toFixed(STATE_DECIMALS)}`);
|
|
167
|
+
lines.push(` extraction_coverage: ${state.extractionCoverage.toFixed(STATE_DECIMALS)}`);
|
|
166
168
|
lines.push(` dag_depth: ${state.dagDepth}`);
|
|
167
169
|
lines.push(` total_memories: ${state.totalMemories}`);
|
|
168
170
|
return lines.join('\n');
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** A host lifecycle moment hippo can capture from. */
|
|
2
|
-
export type CaptureEvent = 'prompt' | 'tool-failure' | 'pre-compact' | 'post-compact' | 'session-start' | 'session-end' | 'reset';
|
|
2
|
+
export type CaptureEvent = 'prompt' | 'tool-failure' | 'pre-compact' | 'post-compact' | 'session-start' | 'session-end' | 'turn-end' | 'reset';
|
|
3
3
|
/** What hippo read from one host payload, before anything is written. */
|
|
4
4
|
export interface CaptureInput {
|
|
5
5
|
readonly runtime: string;
|
|
@@ -13,13 +13,20 @@ export interface CaptureInput {
|
|
|
13
13
|
readonly trigger: string | null;
|
|
14
14
|
}
|
|
15
15
|
/** The outcome of reading a payload: usable input, a payload hippo refuses, or no payload at all. */
|
|
16
|
-
export type CaptureReceipt = {
|
|
16
|
+
export type CaptureReceipt<I extends CaptureInput = CaptureInput> = {
|
|
17
17
|
readonly status: 'received';
|
|
18
|
-
readonly input:
|
|
18
|
+
readonly input: I;
|
|
19
19
|
} | {
|
|
20
20
|
readonly status: 'skipped' | 'unavailable';
|
|
21
21
|
readonly reason: string;
|
|
22
22
|
};
|
|
23
|
+
/** What a PostCompact payload adds: it always names a session, and carries the summary Claude Code wrote. */
|
|
24
|
+
export interface PostCompactInput extends CaptureInput {
|
|
25
|
+
readonly event: 'post-compact';
|
|
26
|
+
readonly sessionId: string;
|
|
27
|
+
/** null when Claude Code sent none; the transcript fills the record later. */
|
|
28
|
+
readonly compactSummary: string | null;
|
|
29
|
+
}
|
|
23
30
|
/** Working state saved before the host drops context, so the session can resume; it is not a lesson. */
|
|
24
31
|
export interface Checkpoint {
|
|
25
32
|
readonly runtime: string;
|
|
@@ -46,4 +53,10 @@ export declare function isObjectLike<T>(value: T): value is T & object;
|
|
|
46
53
|
export type HookRuntime = 'claude-code' | 'copilot';
|
|
47
54
|
/** Reads a Claude Code PreCompact payload, or a Copilot one after stdin.ts mapped it to the same snake_case keys; only an empty stdin counts as a manual run. */
|
|
48
55
|
export declare function readClaudeCodePreCompact(stdinText: string | undefined, timedOut: boolean, runtime?: HookRuntime): CaptureReceipt;
|
|
56
|
+
/** Reads VS Code's per-reply Stop payload. Pass the raw stdin: stdin.ts would give a Copilot CLI agentStop the same snake_case keys. */
|
|
57
|
+
export declare function readVscodeStop(stdinText: string | undefined, timedOut: boolean): CaptureReceipt;
|
|
58
|
+
/** Reads a Claude Code PostCompact payload; it must name a session, but needs no transcript_path. */
|
|
59
|
+
export declare function readClaudeCodePostCompact(stdinText: string | undefined, timedOut: boolean): CaptureReceipt<PostCompactInput>;
|
|
60
|
+
/** Reads a Claude Code SessionEnd payload, or a Copilot one after stdin.ts mapped it to the same snake_case keys; only an empty stdin counts as a manual run. */
|
|
61
|
+
export declare function readSessionEnd(stdinText: string | undefined, timedOut: boolean, runtime?: HookRuntime): CaptureReceipt;
|
|
49
62
|
//# sourceMappingURL=capture-contract.d.ts.map
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
// The shared shape every agent adapter turns a host payload into, so capture code is written once for all runtimes.
|
|
2
|
+
// Field meanings, statuses and how to add a runtime: docs/integrations/agent-inventory.md.
|
|
3
|
+
/** A string guard that avoids `typeof`; it matches it for every value `JSON.parse` can produce. */
|
|
4
|
+
export function isStringValue(value) {
|
|
5
|
+
return String(value) === value;
|
|
6
|
+
}
|
|
7
|
+
/** An object guard that avoids `typeof`; arrays count as objects, as they do for `typeof`. */
|
|
8
|
+
export function isObjectLike(value) {
|
|
9
|
+
return value !== null && value instanceof Object;
|
|
10
|
+
}
|
|
11
|
+
/** Reads a Claude Code PreCompact payload, or a Copilot one after stdin.ts mapped it to the same snake_case keys; only an empty stdin counts as a manual run. */
|
|
12
|
+
export function readClaudeCodePreCompact(stdinText, timedOut, runtime = 'claude-code') {
|
|
13
|
+
const empty = !stdinText || stdinText.trim() === '';
|
|
14
|
+
if (timedOut && empty) {
|
|
15
|
+
return { status: 'unavailable', reason: 'no PreCompact payload arrived before the stdin wait window closed' };
|
|
16
|
+
}
|
|
17
|
+
const base = { runtime, event: 'pre-compact' };
|
|
18
|
+
if (empty) {
|
|
19
|
+
return { status: 'received', input: { ...base, manual: true, sessionId: null, cwd: null, transcriptPath: null, trigger: null } };
|
|
20
|
+
}
|
|
21
|
+
let payload;
|
|
22
|
+
try {
|
|
23
|
+
payload = JSON.parse(stdinText.trim());
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Non-JSON stdin leaves payload undefined, which the shape check rejects like an explicit null.
|
|
27
|
+
}
|
|
28
|
+
// A bad payload is skipped, never treated as manual: discovery could pick up another session's transcript.
|
|
29
|
+
if (!isObjectLike(payload) || !('transcript_path' in payload) || !isStringValue(payload.transcript_path)) {
|
|
30
|
+
return { status: 'skipped', reason: 'malformed or incomplete PreCompact payload (missing string transcript_path)' };
|
|
31
|
+
}
|
|
32
|
+
const transcriptPath = payload.transcript_path;
|
|
33
|
+
// Path shape only: CLAUDE_CONFIG_DIR can move the transcript root, and a same-user process can already read every transcript.
|
|
34
|
+
if (!/\.jsonl$/i.test(transcriptPath)) {
|
|
35
|
+
return { status: 'skipped', reason: `payload transcript_path is not a .jsonl file: ${transcriptPath}` };
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
status: 'received',
|
|
39
|
+
input: {
|
|
40
|
+
...base,
|
|
41
|
+
manual: false,
|
|
42
|
+
sessionId: 'session_id' in payload && isStringValue(payload.session_id) ? payload.session_id : null,
|
|
43
|
+
cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
|
|
44
|
+
transcriptPath,
|
|
45
|
+
trigger: 'trigger' in payload && isStringValue(payload.trigger) ? payload.trigger : null,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Reads VS Code's per-reply Stop payload. Pass the raw stdin: stdin.ts would give a Copilot CLI agentStop the same snake_case keys. */
|
|
50
|
+
export function readVscodeStop(stdinText, timedOut) {
|
|
51
|
+
if (!stdinText || stdinText.trim() === '') {
|
|
52
|
+
return timedOut
|
|
53
|
+
? { status: 'unavailable', reason: 'no Stop payload arrived before the stdin wait window closed' }
|
|
54
|
+
: { status: 'skipped', reason: 'no payload: turn capture runs only from a VS Code Stop hook' };
|
|
55
|
+
}
|
|
56
|
+
let payload;
|
|
57
|
+
try {
|
|
58
|
+
payload = JSON.parse(stdinText.trim());
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Non-JSON stdin leaves payload undefined, which the shape check rejects.
|
|
62
|
+
}
|
|
63
|
+
if (!isObjectLike(payload) || !('hook_event_name' in payload) || payload.hook_event_name !== 'Stop') {
|
|
64
|
+
return { status: 'skipped', reason: 'not a VS Code Stop payload (no snake_case hook_event_name "Stop")' };
|
|
65
|
+
}
|
|
66
|
+
if (!('transcript_path' in payload) || !isStringValue(payload.transcript_path) || !/\.jsonl$/i.test(payload.transcript_path)) {
|
|
67
|
+
return { status: 'skipped', reason: 'Stop payload names no .jsonl transcript_path' };
|
|
68
|
+
}
|
|
69
|
+
if (!('session_id' in payload) || !isStringValue(payload.session_id) || payload.session_id === '') {
|
|
70
|
+
return { status: 'skipped', reason: 'Stop payload has no session_id' };
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
status: 'received',
|
|
74
|
+
input: {
|
|
75
|
+
runtime: 'vscode',
|
|
76
|
+
event: 'turn-end',
|
|
77
|
+
manual: false,
|
|
78
|
+
sessionId: payload.session_id,
|
|
79
|
+
cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
|
|
80
|
+
transcriptPath: payload.transcript_path,
|
|
81
|
+
trigger: null,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/** Reads a Claude Code PostCompact payload; it must name a session, but needs no transcript_path. */
|
|
86
|
+
export function readClaudeCodePostCompact(stdinText, timedOut) {
|
|
87
|
+
const empty = !stdinText || stdinText.trim() === '';
|
|
88
|
+
if (timedOut && empty) {
|
|
89
|
+
return { status: 'unavailable', reason: 'no PostCompact payload arrived before the stdin wait window closed' };
|
|
90
|
+
}
|
|
91
|
+
let payload;
|
|
92
|
+
try {
|
|
93
|
+
payload = empty ? undefined : JSON.parse(stdinText.trim());
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Non-JSON stdin leaves payload undefined, which the shape check rejects.
|
|
97
|
+
}
|
|
98
|
+
if (!isObjectLike(payload) || !('session_id' in payload) || !isStringValue(payload.session_id) || payload.session_id === '') {
|
|
99
|
+
return { status: 'skipped', reason: 'no PostCompact payload naming a session' };
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
status: 'received',
|
|
103
|
+
input: {
|
|
104
|
+
runtime: 'claude-code',
|
|
105
|
+
event: 'post-compact',
|
|
106
|
+
manual: false,
|
|
107
|
+
sessionId: payload.session_id,
|
|
108
|
+
cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
|
|
109
|
+
transcriptPath: 'transcript_path' in payload && isStringValue(payload.transcript_path) ? payload.transcript_path : null,
|
|
110
|
+
trigger: 'trigger' in payload && isStringValue(payload.trigger) ? payload.trigger : null,
|
|
111
|
+
compactSummary: 'compact_summary' in payload && isStringValue(payload.compact_summary) ? payload.compact_summary : null,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/** Reads a Claude Code SessionEnd payload, or a Copilot one after stdin.ts mapped it to the same snake_case keys; only an empty stdin counts as a manual run. */
|
|
116
|
+
export function readSessionEnd(stdinText, timedOut, runtime = 'claude-code') {
|
|
117
|
+
const empty = !stdinText || stdinText.trim() === '';
|
|
118
|
+
if (timedOut && empty) {
|
|
119
|
+
return { status: 'unavailable', reason: 'no SessionEnd payload arrived before the stdin wait window closed' };
|
|
120
|
+
}
|
|
121
|
+
const base = { runtime, event: 'session-end' };
|
|
122
|
+
if (empty) {
|
|
123
|
+
return { status: 'received', input: { ...base, manual: true, sessionId: null, cwd: null, transcriptPath: null, trigger: null } };
|
|
124
|
+
}
|
|
125
|
+
let payload;
|
|
126
|
+
try {
|
|
127
|
+
payload = JSON.parse(stdinText.trim());
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Non-JSON stdin leaves payload undefined, which the shape check rejects.
|
|
131
|
+
}
|
|
132
|
+
// Explicit array check: this reader has no required key to reject an array for it.
|
|
133
|
+
if (!isObjectLike(payload) || Array.isArray(payload)) {
|
|
134
|
+
return { status: 'skipped', reason: 'malformed SessionEnd payload (not a JSON object)' };
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
status: 'received',
|
|
138
|
+
input: {
|
|
139
|
+
...base,
|
|
140
|
+
manual: false,
|
|
141
|
+
sessionId: 'session_id' in payload && isStringValue(payload.session_id) && payload.session_id !== '' ? payload.session_id : null,
|
|
142
|
+
cwd: 'cwd' in payload && isStringValue(payload.cwd) ? payload.cwd : null,
|
|
143
|
+
transcriptPath: 'transcript_path' in payload && isStringValue(payload.transcript_path) && payload.transcript_path !== '' ? payload.transcript_path : null,
|
|
144
|
+
// Both hosts name a session end's trigger `reason`.
|
|
145
|
+
trigger: 'reason' in payload && isStringValue(payload.reason) ? payload.reason : null,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=capture-contract.js.map
|
|
@@ -64,6 +64,8 @@ export interface ScoredEntryLike {
|
|
|
64
64
|
* the tiebreak can't silently drift between call sites.
|
|
65
65
|
*/
|
|
66
66
|
export declare function compareScoredResults(a: ScoredEntryLike, b: ScoredEntryLike): number;
|
|
67
|
+
/** Larger first, NaN after every number, 0 for equal scores. Not a subtraction: two infinities, or any NaN, subtract to NaN, which a sort reads as a tie. */
|
|
68
|
+
export declare function compareScoresDesc(a: number, b: number): number;
|
|
67
69
|
/**
|
|
68
70
|
* Build a score-desc -> tie-key comparator for the physics layer.
|
|
69
71
|
*
|
|
@@ -79,8 +79,15 @@ function compareTags(a, b) {
|
|
|
79
79
|
* the tiebreak can't silently drift between call sites.
|
|
80
80
|
*/
|
|
81
81
|
export function compareScoredResults(a, b) {
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
return compareScoresDesc(a.score, b.score) || compareEntryIdentity(a.entry, b.entry);
|
|
83
|
+
}
|
|
84
|
+
/** Larger first, NaN after every number, 0 for equal scores. Not a subtraction: two infinities, or any NaN, subtract to NaN, which a sort reads as a tie. */
|
|
85
|
+
export function compareScoresDesc(a, b) {
|
|
86
|
+
if (a > b)
|
|
87
|
+
return -1;
|
|
88
|
+
if (a < b)
|
|
89
|
+
return 1;
|
|
90
|
+
return Number(Number.isNaN(a)) - Number(Number.isNaN(b));
|
|
84
91
|
}
|
|
85
92
|
/**
|
|
86
93
|
* Build a score-desc -> tie-key comparator for the physics layer.
|
|
@@ -100,7 +107,7 @@ export function compareScoredResults(a, b) {
|
|
|
100
107
|
*/
|
|
101
108
|
export function comparePhysicsResultsBy(scoreOf, tieKeyOf) {
|
|
102
109
|
return (a, b) => {
|
|
103
|
-
const d = scoreOf(
|
|
110
|
+
const d = compareScoresDesc(scoreOf(a), scoreOf(b));
|
|
104
111
|
if (d !== 0)
|
|
105
112
|
return d;
|
|
106
113
|
const ai = tieKeyOf ? tieKeyOf(a) : a.memoryId;
|
|
@@ -22,7 +22,7 @@ export interface HippoConfig {
|
|
|
22
22
|
/** Embedding backend. 'local' (default) = zero-dependency transformers.js.
|
|
23
23
|
* 'openai' | 'voyage' | 'cohere' = opt-in API embedder; needs the provider's
|
|
24
24
|
* API key in env (OPENAI_API_KEY / VOYAGE_API_KEY / COHERE_API_KEY).
|
|
25
|
-
* See src/
|
|
25
|
+
* See src/store/embeddings/provider.ts. */
|
|
26
26
|
provider?: 'local' | 'openai' | 'voyage' | 'cohere';
|
|
27
27
|
/** Optional API base-URL override (self-host / proxy). HTTPS only (localhost
|
|
28
28
|
* may use http). Ignored by the local provider. */
|
|
@@ -110,11 +110,11 @@ export interface HippoConfig {
|
|
|
110
110
|
enabled: boolean;
|
|
111
111
|
};
|
|
112
112
|
/** Opt-in learned memory-value rescue veto on the sleep decay pass. Default OFF: the frozen weights
|
|
113
|
-
* (src/memory-value-weights.ts) only run when enabled; the rescue budget is a code constant, not user-tunable. */
|
|
113
|
+
* (src/consolidate/memory-value-weights.ts) only run when enabled; the rescue budget is a code constant, not user-tunable. */
|
|
114
114
|
memoryValue: {
|
|
115
115
|
enabled: boolean;
|
|
116
116
|
};
|
|
117
|
-
/** Dormant memories (src/dormant.ts): when enabled (the default), the
|
|
117
|
+
/** Dormant memories (src/store/dormant.ts): when enabled (the default), the
|
|
118
118
|
* sleep decay pass moves a memory that faded below the threshold into the
|
|
119
119
|
* dormant store instead of deleting it. A dormant memory leaves recall and
|
|
120
120
|
* context like a deleted one, but `hippo dormant restore <id>` brings it
|
|
@@ -136,12 +136,12 @@ export interface HippoConfig {
|
|
|
136
136
|
agentMemories: {
|
|
137
137
|
tools: string[] | null;
|
|
138
138
|
};
|
|
139
|
-
/** Per-turn delivery ledger (src/recall-trace.ts): hashes, ids, counts and rejection reasons for each
|
|
139
|
+
/** Per-turn delivery ledger (src/store/recall-trace.ts): hashes, ids, counts and rejection reasons for each
|
|
140
140
|
* pinned-only context call. Default off; read from the store the token ledger writes to. */
|
|
141
141
|
deliveryLedger: {
|
|
142
142
|
enabled: boolean;
|
|
143
143
|
};
|
|
144
|
-
/** Pilot holdout (src/pilot-arm.ts): share of sessions, in basis points 0-10000, that get no memories pushed.
|
|
144
|
+
/** Pilot holdout (src/api/pilot-arm.ts): share of sessions, in basis points 0-10000, that get no memories pushed.
|
|
145
145
|
* Default 0 = off. Read from the store the token ledger writes to. */
|
|
146
146
|
pilot: {
|
|
147
147
|
holdoutRateBp: number;
|
|
@@ -157,7 +157,7 @@ export interface HippoConfig {
|
|
|
157
157
|
}
|
|
158
158
|
export declare function loadConfig(hippoRoot: string): HippoConfig;
|
|
159
159
|
/** True when the store's config.json sets `"sharedStore": true`. Once true, a root stays true for this process,
|
|
160
|
-
* so a broken edit while a server runs cannot turn it off. Reads only this key
|
|
160
|
+
* so a broken edit while a server runs cannot turn it off. Reads only this key, so loadConfig's warnings stay loadConfig's. */
|
|
161
161
|
export declare function isSharedStore(hippoRoot: string): boolean;
|
|
162
162
|
/** Reads the root as shared for the rest of this process, whatever its config.json says. */
|
|
163
163
|
export declare function markSharedStore(hippoRoot: string): void;
|
|
@@ -5,8 +5,9 @@ import * as fs from 'fs';
|
|
|
5
5
|
import * as path from 'path';
|
|
6
6
|
import { DEFAULT_PHYSICS_CONFIG, mergePhysicsConfig } from './physics-config.js';
|
|
7
7
|
import { DEFAULT_HALF_LIFE_DAYS } from './memory.js';
|
|
8
|
-
import { DEFAULT_LOCAL_BUMP, DEFAULT_RECALL_BUDGET } from './search
|
|
9
|
-
import { log } from '
|
|
8
|
+
import { DEFAULT_LOCAL_BUMP, DEFAULT_RECALL_BUDGET } from './search-types.js';
|
|
9
|
+
import { errorMessage, log } from '../util/log.js';
|
|
10
|
+
import { isJsonObject } from '../util/json.js';
|
|
10
11
|
const DEFAULT_CONFIG = {
|
|
11
12
|
defaultHalfLifeDays: DEFAULT_HALF_LIFE_DAYS,
|
|
12
13
|
defaultBudget: DEFAULT_RECALL_BUDGET,
|
|
@@ -98,23 +99,11 @@ const DEFAULT_CONFIG = {
|
|
|
98
99
|
},
|
|
99
100
|
sharedStore: false,
|
|
100
101
|
};
|
|
101
|
-
function isMemoryValueConfig(value) {
|
|
102
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
103
|
-
}
|
|
104
|
-
function isDormantConfig(value) {
|
|
105
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
106
|
-
}
|
|
107
|
-
function isChurnStalenessConfig(value) {
|
|
108
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
109
|
-
}
|
|
110
|
-
function isDeliveryLedgerConfig(value) {
|
|
111
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
112
|
-
}
|
|
113
102
|
// Only `{"enabled": true}` turns it on; anything malformed warns and stays off.
|
|
114
103
|
function deliveryLedgerEnabled(value) {
|
|
115
104
|
if (value === undefined)
|
|
116
105
|
return false;
|
|
117
|
-
const isObject =
|
|
106
|
+
const isObject = isJsonObject(value);
|
|
118
107
|
const enabled = isObject ? value.enabled : undefined;
|
|
119
108
|
if (enabled === true || enabled === false)
|
|
120
109
|
return enabled;
|
|
@@ -161,23 +150,23 @@ function memoryValueOverride(raw) {
|
|
|
161
150
|
// Spreading a non-object raw.memoryValue (e.g. {"memoryValue": true}) silently leaves `enabled` false;
|
|
162
151
|
// this feature must never be silently off, so warn loudly and fall back to defaults instead.
|
|
163
152
|
const memoryValueRaw = raw.memoryValue;
|
|
164
|
-
const validMemoryValueConfig = memoryValueRaw === undefined ||
|
|
153
|
+
const validMemoryValueConfig = memoryValueRaw === undefined || isJsonObject(memoryValueRaw);
|
|
165
154
|
if (!validMemoryValueConfig) {
|
|
166
155
|
log.warn(`config.json's "memoryValue" must be an object like {"enabled": true} ` +
|
|
167
156
|
`(got ${JSON.stringify(memoryValueRaw)}) - using defaults.`);
|
|
168
157
|
}
|
|
169
|
-
return memoryValueRaw !== undefined &&
|
|
158
|
+
return memoryValueRaw !== undefined && isJsonObject(memoryValueRaw) ? memoryValueRaw : {};
|
|
170
159
|
}
|
|
171
160
|
function dormantSettings(raw) {
|
|
172
161
|
// Same rule as memoryValue above: a malformed value never silently
|
|
173
162
|
// changes what sleep does. Anything but a real object / boolean / number
|
|
174
163
|
// warns and falls back to the default, which keeps faded memories.
|
|
175
164
|
const dormantRaw = raw.dormant;
|
|
176
|
-
if (dormantRaw !== undefined && !
|
|
165
|
+
if (dormantRaw !== undefined && !isJsonObject(dormantRaw)) {
|
|
177
166
|
log.warn(`config.json's "dormant" must be an object like {"enabled": false} ` +
|
|
178
167
|
`(got ${JSON.stringify(dormantRaw)}) - using the default (faded memories kept dormant).`);
|
|
179
168
|
}
|
|
180
|
-
const dormantOverride = dormantRaw !== undefined &&
|
|
169
|
+
const dormantOverride = dormantRaw !== undefined && isJsonObject(dormantRaw) ? dormantRaw : {};
|
|
181
170
|
// Only a real boolean counts: {"enabled": "false"} is a truthy string.
|
|
182
171
|
let dormantEnabled = dormantOverride.enabled ?? DEFAULT_CONFIG.dormant.enabled;
|
|
183
172
|
if (dormantEnabled !== true && dormantEnabled !== false) {
|
|
@@ -196,12 +185,12 @@ function dormantSettings(raw) {
|
|
|
196
185
|
function churnStalenessEnabled(raw) {
|
|
197
186
|
// Same "never silently wrong" rule as memoryValue/dormant above.
|
|
198
187
|
const churnStalenessRaw = raw.churnStaleness;
|
|
199
|
-
const validChurnStalenessConfig = churnStalenessRaw === undefined ||
|
|
188
|
+
const validChurnStalenessConfig = churnStalenessRaw === undefined || isJsonObject(churnStalenessRaw);
|
|
200
189
|
if (!validChurnStalenessConfig) {
|
|
201
190
|
log.warn(`config.json's "churnStaleness" must be an object like {"enabled": true} ` +
|
|
202
191
|
`(got ${JSON.stringify(churnStalenessRaw)}) - using defaults.`);
|
|
203
192
|
}
|
|
204
|
-
const enabled = churnStalenessRaw !== undefined &&
|
|
193
|
+
const enabled = churnStalenessRaw !== undefined && isJsonObject(churnStalenessRaw)
|
|
205
194
|
? churnStalenessRaw.enabled
|
|
206
195
|
: DEFAULT_CONFIG.churnStaleness.enabled;
|
|
207
196
|
if (enabled !== true && enabled !== false) {
|
|
@@ -230,63 +219,95 @@ function sharedStoreFlag(raw) {
|
|
|
230
219
|
return false;
|
|
231
220
|
}
|
|
232
221
|
export function loadConfig(hippoRoot) {
|
|
233
|
-
|
|
234
|
-
if (
|
|
222
|
+
// A caller that names no folder, as an add-on serving another store does, gets the defaults, never the working folder's config.json.
|
|
223
|
+
if (hippoRoot === '')
|
|
235
224
|
return { ...DEFAULT_CONFIG };
|
|
225
|
+
const configPath = path.join(hippoRoot, 'config.json');
|
|
226
|
+
const key = path.resolve(configPath);
|
|
227
|
+
const stamp = fileStamp(configPath);
|
|
228
|
+
const hit = parsedConfigs.get(key);
|
|
229
|
+
if (hit !== undefined && hit.stamp === stamp)
|
|
230
|
+
return { ...hit.config };
|
|
231
|
+
const config = stamp === null ? DEFAULT_CONFIG : parseConfigFile(configPath);
|
|
232
|
+
if (parsedConfigs.size >= PARSED_CONFIGS_MAX)
|
|
233
|
+
parsedConfigs.clear();
|
|
234
|
+
parsedConfigs.set(key, { stamp, config });
|
|
235
|
+
return { ...config };
|
|
236
|
+
}
|
|
237
|
+
const PARSED_CONFIGS_MAX = 64;
|
|
238
|
+
// Each path's parsed config with the stamp of the file it came from, so an unchanged file costs one stat and no parse.
|
|
239
|
+
const parsedConfigs = new Map();
|
|
240
|
+
/** A file's mtime and size, which an edit changes; null when it is missing or cannot be reached, as existsSync answers false. */
|
|
241
|
+
function fileStamp(file) {
|
|
242
|
+
try {
|
|
243
|
+
const stat = fs.statSync(file, { throwIfNoEntry: false });
|
|
244
|
+
return stat === undefined ? null : `${stat.mtimeMs}:${stat.size}`;
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
log.debug(`config: ${file} could not be reached, read as missing: ${errorMessage(err)}`);
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function parseConfigFile(configPath) {
|
|
236
252
|
try {
|
|
237
253
|
const raw = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
238
|
-
|
|
239
|
-
const validBasis = basis === 'clock' || basis === 'session' || basis === 'adaptive';
|
|
240
|
-
const memoryValue = memoryValueOverride(raw);
|
|
241
|
-
const dormant = dormantSettings(raw);
|
|
242
|
-
const churnEnabled = churnStalenessEnabled(raw);
|
|
243
|
-
const halfLifeDays = defaultHalfLifeDays(raw);
|
|
244
|
-
return {
|
|
245
|
-
defaultHalfLifeDays: halfLifeDays,
|
|
246
|
-
defaultBudget: raw.defaultBudget ?? DEFAULT_CONFIG.defaultBudget,
|
|
247
|
-
defaultContextBudget: raw.defaultContextBudget ?? DEFAULT_CONFIG.defaultContextBudget,
|
|
248
|
-
decayBasis: validBasis ? basis : DEFAULT_CONFIG.decayBasis,
|
|
249
|
-
autoLearnOnSleep: raw.autoLearnOnSleep ?? DEFAULT_CONFIG.autoLearnOnSleep,
|
|
250
|
-
autoShareOnSleep: raw.autoShareOnSleep ?? DEFAULT_CONFIG.autoShareOnSleep,
|
|
251
|
-
autoSleep: { ...DEFAULT_CONFIG.autoSleep, ...(raw.autoSleep ?? {}) },
|
|
252
|
-
embeddings: { ...DEFAULT_CONFIG.embeddings, ...(raw.embeddings ?? {}) },
|
|
253
|
-
global: { ...DEFAULT_CONFIG.global, ...(raw.global ?? {}) },
|
|
254
|
-
gitLearnPatterns: raw.gitLearnPatterns ?? DEFAULT_CONFIG.gitLearnPatterns,
|
|
255
|
-
physics: mergePhysicsConfig(raw.physics),
|
|
256
|
-
mmr: { ...DEFAULT_CONFIG.mmr, ...(raw.mmr ?? {}) },
|
|
257
|
-
search: { ...DEFAULT_CONFIG.search, ...(raw.search ?? {}) },
|
|
258
|
-
replay: { ...DEFAULT_CONFIG.replay, ...(raw.replay ?? {}) },
|
|
259
|
-
autoTraceCapture: raw.autoTraceCapture ?? DEFAULT_CONFIG.autoTraceCapture,
|
|
260
|
-
autoTraceWindowDays: raw.autoTraceWindowDays ?? DEFAULT_CONFIG.autoTraceWindowDays,
|
|
261
|
-
pinnedInject: { ...DEFAULT_CONFIG.pinnedInject, ...(raw.pinnedInject ?? {}) },
|
|
262
|
-
contextProjectIsolation: raw.contextProjectIsolation ?? DEFAULT_CONFIG.contextProjectIsolation,
|
|
263
|
-
extraction: { ...DEFAULT_CONFIG.extraction, ...(raw.extraction ?? {}) },
|
|
264
|
-
multihop: { ...DEFAULT_CONFIG.multihop, ...(raw.multihop ?? {}) },
|
|
265
|
-
salience: { ...DEFAULT_CONFIG.salience, ...(raw.salience ?? {}) },
|
|
266
|
-
ambient: { ...DEFAULT_CONFIG.ambient, ...(raw.ambient ?? {}) },
|
|
267
|
-
memoryValue: {
|
|
268
|
-
...DEFAULT_CONFIG.memoryValue,
|
|
269
|
-
...memoryValue,
|
|
270
|
-
},
|
|
271
|
-
dormant,
|
|
272
|
-
churnStaleness: {
|
|
273
|
-
enabled: churnEnabled,
|
|
274
|
-
},
|
|
275
|
-
agentMemories: { tools: agentMemoryTools(raw.agentMemories?.tools) },
|
|
276
|
-
deliveryLedger: { enabled: deliveryLedgerEnabled(raw.deliveryLedger) },
|
|
277
|
-
pilot: { holdoutRateBp: pilotHoldoutRate(raw.pilot) },
|
|
278
|
-
projectIdentity: { remote: projectIdentityRemote(raw.projectIdentity) },
|
|
279
|
-
sharedStore: sharedStoreFlag(raw),
|
|
280
|
-
};
|
|
254
|
+
return configOverDefaults(raw);
|
|
281
255
|
}
|
|
282
256
|
catch (err) {
|
|
283
257
|
if (fs.existsSync(configPath)) {
|
|
284
|
-
log.warn(`failed to parse ${configPath}: ${err
|
|
258
|
+
log.warn(`failed to parse ${configPath}: ${errorMessage(err)}`);
|
|
285
259
|
}
|
|
286
260
|
return { ...DEFAULT_CONFIG };
|
|
287
261
|
}
|
|
288
262
|
}
|
|
263
|
+
function configOverDefaults(raw) {
|
|
264
|
+
const basis = raw.decayBasis;
|
|
265
|
+
const validBasis = basis === 'clock' || basis === 'session' || basis === 'adaptive';
|
|
266
|
+
const memoryValue = memoryValueOverride(raw);
|
|
267
|
+
const dormant = dormantSettings(raw);
|
|
268
|
+
const churnEnabled = churnStalenessEnabled(raw);
|
|
269
|
+
const halfLifeDays = defaultHalfLifeDays(raw);
|
|
270
|
+
return {
|
|
271
|
+
defaultHalfLifeDays: halfLifeDays,
|
|
272
|
+
defaultBudget: raw.defaultBudget ?? DEFAULT_CONFIG.defaultBudget,
|
|
273
|
+
defaultContextBudget: raw.defaultContextBudget ?? DEFAULT_CONFIG.defaultContextBudget,
|
|
274
|
+
decayBasis: validBasis ? basis : DEFAULT_CONFIG.decayBasis,
|
|
275
|
+
autoLearnOnSleep: raw.autoLearnOnSleep ?? DEFAULT_CONFIG.autoLearnOnSleep,
|
|
276
|
+
autoShareOnSleep: raw.autoShareOnSleep ?? DEFAULT_CONFIG.autoShareOnSleep,
|
|
277
|
+
autoSleep: { ...DEFAULT_CONFIG.autoSleep, ...(raw.autoSleep ?? {}) },
|
|
278
|
+
embeddings: { ...DEFAULT_CONFIG.embeddings, ...(raw.embeddings ?? {}) },
|
|
279
|
+
global: { ...DEFAULT_CONFIG.global, ...(raw.global ?? {}) },
|
|
280
|
+
gitLearnPatterns: raw.gitLearnPatterns ?? DEFAULT_CONFIG.gitLearnPatterns,
|
|
281
|
+
physics: mergePhysicsConfig(raw.physics),
|
|
282
|
+
mmr: { ...DEFAULT_CONFIG.mmr, ...(raw.mmr ?? {}) },
|
|
283
|
+
search: { ...DEFAULT_CONFIG.search, ...(raw.search ?? {}) },
|
|
284
|
+
replay: { ...DEFAULT_CONFIG.replay, ...(raw.replay ?? {}) },
|
|
285
|
+
autoTraceCapture: raw.autoTraceCapture ?? DEFAULT_CONFIG.autoTraceCapture,
|
|
286
|
+
autoTraceWindowDays: raw.autoTraceWindowDays ?? DEFAULT_CONFIG.autoTraceWindowDays,
|
|
287
|
+
pinnedInject: { ...DEFAULT_CONFIG.pinnedInject, ...(raw.pinnedInject ?? {}) },
|
|
288
|
+
contextProjectIsolation: raw.contextProjectIsolation ?? DEFAULT_CONFIG.contextProjectIsolation,
|
|
289
|
+
extraction: { ...DEFAULT_CONFIG.extraction, ...(raw.extraction ?? {}) },
|
|
290
|
+
multihop: { ...DEFAULT_CONFIG.multihop, ...(raw.multihop ?? {}) },
|
|
291
|
+
salience: { ...DEFAULT_CONFIG.salience, ...(raw.salience ?? {}) },
|
|
292
|
+
ambient: { ...DEFAULT_CONFIG.ambient, ...(raw.ambient ?? {}) },
|
|
293
|
+
memoryValue: {
|
|
294
|
+
...DEFAULT_CONFIG.memoryValue,
|
|
295
|
+
...memoryValue,
|
|
296
|
+
},
|
|
297
|
+
dormant,
|
|
298
|
+
churnStaleness: {
|
|
299
|
+
enabled: churnEnabled,
|
|
300
|
+
},
|
|
301
|
+
agentMemories: { tools: agentMemoryTools(raw.agentMemories?.tools) },
|
|
302
|
+
deliveryLedger: { enabled: deliveryLedgerEnabled(raw.deliveryLedger) },
|
|
303
|
+
pilot: { holdoutRateBp: pilotHoldoutRate(raw.pilot) },
|
|
304
|
+
projectIdentity: { remote: projectIdentityRemote(raw.projectIdentity) },
|
|
305
|
+
sharedStore: sharedStoreFlag(raw),
|
|
306
|
+
};
|
|
307
|
+
}
|
|
289
308
|
const sharedStoreRoots = new Set();
|
|
309
|
+
// The stamp of each config.json last read as not shared: an unchanged file is not parsed again.
|
|
310
|
+
const notSharedStamps = new Map();
|
|
290
311
|
/** The folder as isGlobalStoreRoot compares it (realpath, case-folded on Windows); its helper sits behind an import cycle. */
|
|
291
312
|
function sharedStoreKey(hippoRoot) {
|
|
292
313
|
let real;
|
|
@@ -294,30 +315,35 @@ function sharedStoreKey(hippoRoot) {
|
|
|
294
315
|
real = fs.realpathSync.native(hippoRoot);
|
|
295
316
|
}
|
|
296
317
|
catch (err) {
|
|
297
|
-
log.debug(`sharedStore: realpath fell back to resolve for ${hippoRoot}: ${
|
|
318
|
+
log.debug(`sharedStore: realpath fell back to resolve for ${hippoRoot}: ${errorMessage(err)}`);
|
|
298
319
|
real = path.resolve(hippoRoot);
|
|
299
320
|
}
|
|
300
321
|
return process.platform === 'win32' ? real.toLowerCase() : real;
|
|
301
322
|
}
|
|
302
323
|
/** True when the store's config.json sets `"sharedStore": true`. Once true, a root stays true for this process,
|
|
303
|
-
* so a broken edit while a server runs cannot turn it off. Reads only this key
|
|
324
|
+
* so a broken edit while a server runs cannot turn it off. Reads only this key, so loadConfig's warnings stay loadConfig's. */
|
|
304
325
|
export function isSharedStore(hippoRoot) {
|
|
305
326
|
const key = sharedStoreKey(hippoRoot);
|
|
306
327
|
if (sharedStoreRoots.has(key))
|
|
307
328
|
return true;
|
|
308
329
|
const configPath = path.join(path.resolve(hippoRoot), 'config.json');
|
|
309
|
-
|
|
330
|
+
const stamp = fileStamp(configPath);
|
|
331
|
+
if (stamp === null || notSharedStamps.get(configPath) === stamp)
|
|
310
332
|
return false;
|
|
311
333
|
let raw;
|
|
312
334
|
try {
|
|
313
335
|
raw = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
314
336
|
}
|
|
315
337
|
catch (err) {
|
|
316
|
-
log.warn(`failed to read ${configPath}: ${err
|
|
338
|
+
log.warn(`failed to read ${configPath}: ${errorMessage(err)} - sharedStore read as false.`);
|
|
317
339
|
return false;
|
|
318
340
|
}
|
|
319
|
-
if (raw?.sharedStore !== true)
|
|
341
|
+
if (raw?.sharedStore !== true) {
|
|
342
|
+
if (notSharedStamps.size >= PARSED_CONFIGS_MAX)
|
|
343
|
+
notSharedStamps.clear();
|
|
344
|
+
notSharedStamps.set(configPath, stamp);
|
|
320
345
|
return false;
|
|
346
|
+
}
|
|
321
347
|
sharedStoreRoots.add(key);
|
|
322
348
|
return true;
|
|
323
349
|
}
|
|
@@ -328,5 +354,6 @@ export function markSharedStore(hippoRoot) {
|
|
|
328
354
|
/** Test seam: forget every root seen as shared. */
|
|
329
355
|
export function _resetSharedStoreCacheForTests() {
|
|
330
356
|
sharedStoreRoots.clear();
|
|
357
|
+
notSharedStamps.clear();
|
|
331
358
|
}
|
|
332
359
|
//# sourceMappingURL=config.js.map
|