@modusensus/dsh-mneme 0.13.0 → 0.14.0-beta.2
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/LICENSE +21 -21
- package/README.md +830 -828
- package/assets/icon.svg +3 -3
- package/bin/cli.mjs +964 -964
- package/bin/dsh-mneme-choro.mjs +262 -254
- package/bin/dsh-mneme-mcp.mjs +510 -510
- package/bin/dsh-mneme-serve.mjs +151 -151
- package/cordis.patch.yml +21 -21
- package/docs/CONFIGURATION.md +407 -402
- package/docs/CONTINUITY.md +139 -139
- package/docs/DAEMON.md +57 -57
- package/docs/DIRECTORIES.md +114 -114
- package/docs/DISTILL.md +397 -371
- package/docs/DSH-GO.md +97 -97
- package/docs/ENTITIES.md +247 -247
- package/docs/FORGET.md +77 -77
- package/docs/KB.md +110 -110
- package/docs/LOCAL_MODEL.md +222 -222
- package/docs/SEMANTIC.md +256 -256
- package/docs/SHARE.md +552 -552
- package/docs/SLEEP.md +202 -202
- package/docs/STORAGE.md +122 -122
- package/docs/WORKFLOWS.md +366 -366
- package/lib/api-standalone.js +1007 -1007
- package/lib/api.js +3600 -3394
- package/lib/attachment-text.js +122 -122
- package/lib/bootstrap-http.js +105 -105
- package/lib/bootstrap.js +215 -215
- package/lib/candidates.js +454 -454
- package/lib/capabilities.js +819 -819
- package/lib/choro-command.js +111 -111
- package/lib/client.js +14420 -13436
- package/lib/commands.js +95 -95
- package/lib/config-keys.js +144 -144
- package/lib/config.js +1361 -1317
- package/lib/content-hash.js +54 -54
- package/lib/continuity.js +258 -258
- package/lib/date-hint.js +32 -0
- package/lib/diary/auto.js +190 -190
- package/lib/diary/compose.js +440 -440
- package/lib/diary/dir.js +59 -59
- package/lib/diary/export.js +97 -97
- package/lib/diary/index.js +26 -26
- package/lib/diary/library.js +189 -189
- package/lib/diary/qq-inbox.js +142 -142
- package/lib/diary/rollover.js +61 -61
- package/lib/diary/session-provider.js +122 -122
- package/lib/document-index.js +94 -94
- package/lib/document.js +322 -322
- package/lib/dream/clustering.js +123 -123
- package/lib/dream/decisions.js +945 -907
- package/lib/dream/narratives.js +44 -44
- package/lib/dream/sleep.js +2027 -1887
- package/lib/dream/triage.js +139 -0
- package/lib/dream.js +1879 -1764
- package/lib/dsh-go/host.js +162 -162
- package/lib/dsh-go/panel.js +2091 -2091
- package/lib/dsh-go/text.js +342 -342
- package/lib/dsh-go/views/common.js +68 -68
- package/lib/dsh-go/views/entity.js +48 -48
- package/lib/dsh-go/views/memory.js +198 -198
- package/lib/dsh-go/views/root.js +30 -30
- package/lib/dsh-go/views/settings.js +398 -398
- package/lib/dsh-go/views/status.js +51 -51
- package/lib/embedding.js +342 -342
- package/lib/entities/extractor.js +285 -285
- package/lib/fence.js +24 -24
- package/lib/graph/anchoring.js +184 -184
- package/lib/guide.js +74 -74
- package/lib/heat.js +144 -144
- package/lib/hot-memory.js +119 -107
- package/lib/image-describe.js +158 -0
- package/lib/index.js +852 -822
- package/lib/inject.js +656 -639
- package/lib/kb/index.js +309 -309
- package/lib/kb/routes.js +219 -219
- package/lib/kb/tools.js +148 -148
- package/lib/lang.js +607 -584
- package/lib/local-embedder.js +358 -358
- package/lib/maintenance.js +162 -162
- package/lib/memory-source.js +9 -9
- package/lib/mirror.js +330 -330
- package/lib/organize.js +456 -456
- package/lib/peak-hours.js +172 -172
- package/lib/pipeline-activities.js +178 -178
- package/lib/pipeline-attribution.js +165 -165
- package/lib/pipeline-command.js +279 -279
- package/lib/pipeline-confirm.js +142 -142
- package/lib/pipeline-exec.js +174 -174
- package/lib/pipeline-nudge-auto.js +129 -129
- package/lib/pipeline-nudge.js +1623 -1623
- package/lib/pipeline-observations.js +181 -181
- package/lib/pipeline-observe.js +133 -133
- package/lib/pipeline-runner.js +361 -361
- package/lib/pipeline-runs.js +442 -442
- package/lib/pipeline.js +716 -716
- package/lib/placement.js +13 -13
- package/lib/pre-inject-gate.js +354 -354
- package/lib/profile-extract.js +164 -164
- package/lib/profile-facts.js +356 -356
- package/lib/provenance-http.js +251 -251
- package/lib/quality-filter.js +162 -162
- package/lib/recall-stats.js +190 -190
- package/lib/reclaim-http.js +150 -150
- package/lib/reranker.js +269 -269
- package/lib/runtime/adopt.js +176 -176
- package/lib/runtime/closure.js +172 -172
- package/lib/runtime/download.js +247 -247
- package/lib/runtime/layout.js +265 -265
- package/lib/runtime/loader.js +252 -252
- package/lib/runtime/model-fetch.js +361 -361
- package/lib/runtime/provision.js +237 -237
- package/lib/runtime/tarball.js +130 -130
- package/lib/runtime/verify.js +223 -223
- package/lib/safe-slice.js +18 -18
- package/lib/scope-state.js +277 -277
- package/lib/scope.js +187 -187
- package/lib/search/adaptive.js +60 -60
- package/lib/search/bm25.js +96 -96
- package/lib/semantic.js +572 -572
- package/lib/sensitive-scan.js +209 -209
- package/lib/serve.js +228 -228
- package/lib/service.js +3268 -3196
- package/lib/session-gate.js +91 -91
- package/lib/session-usage.js +350 -350
- package/lib/settings.js +827 -802
- package/lib/share-http.js +281 -281
- package/lib/share-import.js +234 -234
- package/lib/share.js +335 -335
- package/lib/store.js +5895 -5662
- package/lib/summarize.js +1388 -1343
- package/lib/tools.js +1370 -1356
- package/lib/user-settings.js +230 -230
- package/lib/vector-index.js +180 -180
- package/lib/version-check.js +122 -122
- package/lib/wiki/claims.js +267 -0
- package/lib/wiki/cli-hint.js +90 -90
- package/lib/wiki/inject.js +164 -164
- package/lib/wiki/partition.js +200 -200
- package/lib/wiki/plan.js +214 -214
- package/lib/wiki/queries.js +640 -474
- package/lib/wiki/render.js +261 -187
- package/lib/wiki/scan.js +371 -371
- package/lib/wiki/t0.js +500 -463
- package/lib/wiki/t1-jobs.js +232 -232
- package/lib/wiki/t1.js +609 -502
- package/lib/write-admission.js +404 -404
- package/locale/en.json +6 -6
- package/locale/zh.json +6 -6
- package/package.json +15 -1
- package/runtime-manifest.json +526 -526
- package/scripts/benchmark-embed.js +201 -201
- package/scripts/benchmark-recall.js +249 -249
- package/scripts/benchmark-rerank.js +166 -166
- package/scripts/build-runtime-manifest.mjs +224 -224
- package/scripts/changelog-prep.mjs +91 -91
- package/scripts/check-sync.js +44 -44
- package/scripts/e2e-dsh.js +220 -220
- package/scripts/mneme-runtime.mjs +277 -277
- package/scripts/publish-gate.mjs +197 -197
- package/scripts/release-docs.mjs +210 -204
- package/scripts/release-notes.mjs +164 -161
- package/scripts/stress-dsh.js +255 -255
- package/scripts/sync-lib.js +47 -47
- package/scripts/sync-test-badge.mjs +69 -69
- package/scripts/test-count-sync.mjs +48 -48
- package/src/api-standalone.js +1007 -1007
- package/src/api.js +3600 -3394
- package/src/attachment-text.js +122 -122
- package/src/bootstrap-http.js +105 -105
- package/src/bootstrap.js +215 -215
- package/src/candidates.js +454 -454
- package/src/capabilities.js +819 -819
- package/src/choro-command.js +111 -111
- package/src/commands.js +95 -95
- package/src/config-keys.js +144 -144
- package/src/config.js +1361 -1317
- package/src/content-hash.js +54 -54
- package/src/continuity.js +258 -258
- package/src/date-hint.js +32 -0
- package/src/diary/auto.js +190 -190
- package/src/diary/compose.js +440 -440
- package/src/diary/dir.js +59 -59
- package/src/diary/export.js +97 -97
- package/src/diary/index.js +26 -26
- package/src/diary/library.js +189 -189
- package/src/diary/qq-inbox.js +142 -142
- package/src/diary/rollover.js +61 -61
- package/src/diary/session-provider.js +122 -122
- package/src/document-index.js +94 -94
- package/src/document.js +322 -322
- package/src/dream/clustering.js +123 -123
- package/src/dream/decisions.js +945 -907
- package/src/dream/narratives.js +44 -44
- package/src/dream/sleep.js +2027 -1887
- package/src/dream/triage.js +139 -0
- package/src/dream.js +1879 -1764
- package/src/dsh-go/host.js +162 -162
- package/src/dsh-go/panel.js +2091 -2091
- package/src/dsh-go/text.js +342 -342
- package/src/dsh-go/views/common.js +68 -68
- package/src/dsh-go/views/entity.js +48 -48
- package/src/dsh-go/views/memory.js +198 -198
- package/src/dsh-go/views/root.js +30 -30
- package/src/dsh-go/views/settings.js +398 -398
- package/src/dsh-go/views/status.js +51 -51
- package/src/embedding.js +342 -342
- package/src/entities/extractor.js +285 -285
- package/src/fence.js +24 -24
- package/src/graph/anchoring.js +184 -184
- package/src/guide.js +74 -74
- package/src/heat.js +144 -144
- package/src/hot-memory.js +119 -107
- package/src/image-describe.js +158 -0
- package/src/index.js +852 -822
- package/src/inject.js +656 -639
- package/src/kb/index.js +309 -309
- package/src/kb/routes.js +219 -219
- package/src/kb/tools.js +148 -148
- package/src/lang.js +607 -584
- package/src/local-embedder.js +358 -358
- package/src/maintenance.js +162 -162
- package/src/memory-source.js +9 -9
- package/src/mirror.js +330 -330
- package/src/organize.js +456 -456
- package/src/peak-hours.js +172 -172
- package/src/pipeline-activities.js +178 -178
- package/src/pipeline-attribution.js +165 -165
- package/src/pipeline-command.js +279 -279
- package/src/pipeline-confirm.js +142 -142
- package/src/pipeline-exec.js +174 -174
- package/src/pipeline-nudge-auto.js +129 -129
- package/src/pipeline-nudge.js +1623 -1623
- package/src/pipeline-observations.js +181 -181
- package/src/pipeline-observe.js +133 -133
- package/src/pipeline-runner.js +361 -361
- package/src/pipeline-runs.js +442 -442
- package/src/pipeline.js +716 -716
- package/src/placement.js +13 -13
- package/src/pre-inject-gate.js +354 -354
- package/src/profile-extract.js +164 -164
- package/src/profile-facts.js +356 -356
- package/src/provenance-http.js +251 -251
- package/src/quality-filter.js +162 -162
- package/src/recall-stats.js +190 -190
- package/src/reclaim-http.js +150 -150
- package/src/reranker.js +269 -269
- package/src/runtime/adopt.js +176 -176
- package/src/runtime/closure.js +172 -172
- package/src/runtime/download.js +247 -247
- package/src/runtime/layout.js +265 -265
- package/src/runtime/loader.js +252 -252
- package/src/runtime/model-fetch.js +361 -361
- package/src/runtime/provision.js +237 -237
- package/src/runtime/tarball.js +130 -130
- package/src/runtime/verify.js +223 -223
- package/src/safe-slice.js +18 -18
- package/src/scope-state.js +277 -277
- package/src/scope.js +187 -187
- package/src/search/adaptive.js +60 -60
- package/src/search/bm25.js +96 -96
- package/src/semantic.js +572 -572
- package/src/sensitive-scan.js +209 -209
- package/src/serve.js +228 -228
- package/src/service.js +3268 -3196
- package/src/session-gate.js +91 -91
- package/src/session-usage.js +350 -350
- package/src/settings.js +827 -802
- package/src/share-http.js +281 -281
- package/src/share-import.js +234 -234
- package/src/share.js +335 -335
- package/src/store.js +5895 -5662
- package/src/summarize.js +1388 -1343
- package/src/tools.js +1370 -1356
- package/src/user-settings.js +230 -230
- package/src/vector-index.js +180 -180
- package/src/version-check.js +122 -122
- package/src/wiki/claims.js +267 -0
- package/src/wiki/cli-hint.js +90 -90
- package/src/wiki/inject.js +164 -164
- package/src/wiki/partition.js +200 -200
- package/src/wiki/plan.js +214 -214
- package/src/wiki/queries.js +640 -474
- package/src/wiki/render.js +261 -187
- package/src/wiki/scan.js +371 -371
- package/src/wiki/t0.js +500 -463
- package/src/wiki/t1-jobs.js +232 -232
- package/src/wiki/t1.js +609 -502
- package/src/write-admission.js +404 -404
- package/test/adaptive-inject-budget.test.js +85 -85
- package/test/api-hardening.test.js +173 -173
- package/test/api-nudge-route.test.js +259 -259
- package/test/api-routes-gaps.test.js +1092 -1092
- package/test/api.test.js +3007 -2988
- package/test/attachment-text.test.js +139 -139
- package/test/audit.test.js +448 -448
- package/test/baseline-persist.test.js +248 -248
- package/test/benchmark.test.js +94 -94
- package/test/bm25-corpus-cache.test.js +145 -145
- package/test/bootstrap.test.js +228 -228
- package/test/candidates.test.js +345 -345
- package/test/capabilities.test.js +577 -577
- package/test/capacity-warning.test.js +262 -262
- package/test/changelog-prep.test.js +125 -125
- package/test/choro-command.test.js +218 -218
- package/test/cli-enums.test.js +37 -37
- package/test/cli-flag-value.test.js +86 -86
- package/test/cli-receive.test.js +390 -390
- package/test/cli-share.test.js +437 -437
- package/test/client-share.test.js +225 -225
- package/test/client.test.js +4595 -4184
- package/test/clustering.test.js +100 -100
- package/test/commands.test.js +106 -106
- package/test/config-keys-routes.test.js +233 -233
- package/test/config.test.js +153 -153
- package/test/conflict-freeze.test.js +344 -344
- package/test/conflict-ledger-enforce.test.js +452 -0
- package/test/conflict-ledger.test.js +242 -0
- package/test/conflict-reviewed.test.js +79 -79
- package/test/content-hash.test.js +204 -204
- package/test/continuity.test.js +452 -452
- package/test/contrast.test.js +432 -320
- package/test/date-hint.test.js +156 -0
- package/test/dedupe-candidate-window.test.js +180 -180
- package/test/dependency-overrides.test.js +78 -78
- package/test/diary-library.test.js +187 -187
- package/test/diary.test.js +576 -576
- package/test/differentiate-feedback.test.js +248 -248
- package/test/distill-tx-embed-gap.test.js +110 -110
- package/test/docs-config-keys.test.js +65 -65
- package/test/document-dir.test.js +233 -233
- package/test/document.test.js +703 -703
- package/test/dream-archive-guardrail.test.js +116 -116
- package/test/dream-baseline-clamp.test.js +174 -0
- package/test/dream-candidate-hybrid.test.js +281 -281
- package/test/dream-coverage-degrade.test.js +86 -86
- package/test/dream-decision-evidence.test.js +314 -314
- package/test/dream-failure-backoff.test.js +173 -173
- package/test/dream-fence.test.js +207 -207
- package/test/dream-maxtokens-fallback.test.js +132 -132
- package/test/dream-merge-guardrail.test.js +219 -219
- package/test/dream-peak-hours.test.js +194 -194
- package/test/dream.test.js +1528 -1528
- package/test/dsh-go-host.test.js +134 -134
- package/test/dsh-go-panel-actions.test.js +854 -854
- package/test/dsh-go-panel.test.js +251 -251
- package/test/embed-ready-poll.test.js +94 -94
- package/test/embed-text-reasons.test.js +112 -112
- package/test/embedding-cache-f32.test.js +276 -276
- package/test/embedding-ready.test.js +226 -226
- package/test/entities.test.js +711 -711
- package/test/entity-recall.test.js +179 -179
- package/test/epistemic.test.js +325 -325
- package/test/failure-query.test.js +147 -147
- package/test/failure-retention.test.js +105 -105
- package/test/fnew-0112.test.js +311 -311
- package/test/fnew-03.test.js +422 -422
- package/test/forget-corrections.test.js +70 -70
- package/test/graph-anchoring.test.js +184 -184
- package/test/graph-api.test.js +333 -209
- package/test/graph-boosted-relations.test.js +189 -189
- package/test/graph-inject-budget.test.js +103 -103
- package/test/graph-multipath.test.js +269 -269
- package/test/graph-passive-confirm.test.js +91 -91
- package/test/graph-weight-evolution.test.js +104 -104
- package/test/heat.test.js +175 -175
- package/test/helpers/dream-mock.js +86 -86
- package/test/helpers/peer-worker.mjs +25 -25
- package/test/helpers/runtime-source.js +60 -60
- package/test/helpers/tar-builder.js +80 -80
- package/test/helpers/write-admission-samples.js +312 -312
- package/test/hot-memory.test.js +259 -211
- package/test/image-description.test.js +271 -0
- package/test/image-memory.test.js +170 -170
- package/test/inject-content-cap.test.js +91 -91
- package/test/inject-first-round-bm25.test.js +89 -89
- package/test/inject-heat.test.js +77 -77
- package/test/inject-parent-gate.test.js +134 -106
- package/test/inject-pin-explicit.test.js +300 -300
- package/test/inject-pin-vector-crowd.test.js +225 -225
- package/test/inject-pools.test.js +195 -195
- package/test/inject-recall.test.js +172 -172
- package/test/inject-rotation.test.js +161 -161
- package/test/inject.test.js +553 -494
- package/test/issue-617-step1-query-and-fusion.test.js +361 -361
- package/test/kb-api-wiring.test.js +128 -128
- package/test/kb-collections.test.js +272 -272
- package/test/kb-routes.test.js +379 -379
- package/test/lang.test.js +98 -98
- package/test/lastrunat-persist.test.js +101 -101
- package/test/lib-smoke.test.js +116 -116
- package/test/llm-audit.test.js +815 -815
- package/test/llm-message-source.test.js +207 -207
- package/test/local-embedder.test.js +292 -292
- package/test/maintenance.test.js +501 -501
- package/test/mcp-stdio.test.js +385 -385
- package/test/mint-source.test.js +311 -311
- package/test/mirror-dirty.test.js +424 -424
- package/test/mirror-edit-digest.test.js +187 -187
- package/test/mirror-generation.test.js +499 -499
- package/test/mirror-types.test.js +208 -208
- package/test/mirror.test.js +249 -249
- package/test/narrative-bars.test.js +162 -162
- package/test/organize-tool.test.js +232 -232
- package/test/organize.test.js +418 -418
- package/test/panel-chart-scale.test.js +90 -0
- package/test/panel-tokens.test.js +245 -0
- package/test/peak-hours-observability.test.js +70 -70
- package/test/peer-blockers.test.js +193 -193
- package/test/persona-addressing.test.js +83 -83
- package/test/persona-api.test.js +172 -172
- package/test/persona-by-session.test.js +568 -568
- package/test/persona-flag.test.js +36 -36
- package/test/persona-inject.test.js +145 -145
- package/test/persona-settings.test.js +198 -198
- package/test/pipeline-activities.test.js +155 -155
- package/test/pipeline-attribution.test.js +175 -175
- package/test/pipeline-command.test.js +243 -243
- package/test/pipeline-confirm.test.js +148 -148
- package/test/pipeline-exec.test.js +172 -172
- package/test/pipeline-nudge-auto.test.js +248 -248
- package/test/pipeline-nudge.test.js +1278 -1278
- package/test/pipeline-observations.test.js +157 -157
- package/test/pipeline-observe.test.js +127 -127
- package/test/pipeline-r1r2.test.js +278 -278
- package/test/pipeline-runner.test.js +468 -468
- package/test/pipeline-runs.test.js +767 -767
- package/test/pipeline.test.js +636 -636
- package/test/placement.test.js +36 -36
- package/test/policy-epoch.test.js +259 -259
- package/test/pre-inject-gate.test.js +444 -444
- package/test/profile-extract.test.js +269 -269
- package/test/profile-facts.test.js +492 -492
- package/test/prompt-stance.test.js +128 -128
- package/test/provenance-http.test.js +367 -367
- package/test/publish-gate.test.js +272 -272
- package/test/quality-backfill.test.js +290 -290
- package/test/quality-filter.test.js +295 -295
- package/test/readme-claims.test.js +113 -113
- package/test/reasoning-effort.test.js +752 -752
- package/test/recall-anti-update.test.js +82 -82
- package/test/recall-evals.test.js +253 -253
- package/test/recall-layer.test.js +326 -326
- package/test/recall-retention.test.js +128 -128
- package/test/recall-stats.test.js +274 -274
- package/test/receipt-chain.test.js +451 -451
- package/test/reclaim-http.test.js +209 -209
- package/test/reflection-update-gate.test.js +129 -129
- package/test/reflection.test.js +226 -226
- package/test/reindex-backfill.test.js +475 -475
- package/test/reindex-scheduler.test.js +369 -369
- package/test/release-docs.test.js +156 -136
- package/test/release-notes.test.js +265 -240
- package/test/release-workflow.test.js +93 -93
- package/test/reranker-single-logit.test.js +73 -73
- package/test/reranker.test.js +197 -197
- package/test/resident-status.test.js +83 -83
- package/test/route-policy.test.js +113 -113
- package/test/runtime-adopt.test.js +206 -206
- package/test/runtime-cli.test.js +89 -89
- package/test/runtime-closure.test.js +193 -193
- package/test/runtime-download.test.js +302 -302
- package/test/runtime-layout.test.js +163 -163
- package/test/runtime-loader.test.js +255 -255
- package/test/runtime-manifest.test.js +159 -159
- package/test/runtime-model-fetch.test.js +348 -348
- package/test/runtime-provision.test.js +101 -101
- package/test/runtime-tarball.test.js +81 -81
- package/test/runtime-verify.test.js +319 -319
- package/test/scope-candidates.test.js +491 -491
- package/test/scope-distill-stamp.test.js +134 -134
- package/test/scope-explicit.test.js +452 -452
- package/test/scope-inject-soft.test.js +106 -106
- package/test/scope-optional-service.test.js +110 -110
- package/test/scope-retrieval.test.js +197 -197
- package/test/scope-state.test.js +610 -610
- package/test/scope-storage.test.js +255 -255
- package/test/scope-strict.test.js +367 -367
- package/test/search-fusion.test.js +90 -90
- package/test/security-doc.test.js +188 -178
- package/test/semantic.test.js +124 -124
- package/test/sensitive-scan.test.js +251 -251
- package/test/serve-bin.test.js +121 -121
- package/test/serve.test.js +258 -258
- package/test/service-search.test.js +174 -174
- package/test/service.test.js +410 -410
- package/test/session-gate.test.js +264 -264
- package/test/session-usage.test.js +317 -317
- package/test/settings.test.js +273 -273
- package/test/share-foreign-rows.test.js +144 -144
- package/test/share-http.test.js +144 -144
- package/test/share-import.test.js +577 -577
- package/test/share-imported-guard.test.js +311 -311
- package/test/share-imported-identity.test.js +111 -111
- package/test/share-pack.test.js +511 -511
- package/test/share-receive-http.test.js +756 -756
- package/test/share-routes.test.js +337 -337
- package/test/share-store.test.js +133 -133
- package/test/share-validate.test.js +101 -101
- package/test/skip-invalid-restore.test.js +262 -262
- package/test/sleep-action-set.test.js +441 -441
- package/test/sleep-catchup.test.js +315 -315
- package/test/sleep-failure-backoff.test.js +156 -156
- package/test/sleep-heat.test.js +174 -174
- package/test/sleep-scheduler-rearm.test.js +89 -89
- package/test/sleep.test.js +1455 -1418
- package/test/standalone-api.test.js +1344 -1344
- package/test/store-vector-cache.test.js +98 -98
- package/test/store-write-path-columns.test.js +191 -191
- package/test/store.test.js +744 -744
- package/test/stress.test.js +209 -209
- package/test/summarize-occurred-at.test.js +127 -127
- package/test/summarize-parse-diagnostics.test.js +75 -75
- package/test/summarize-reasoning-effort.test.js +189 -189
- package/test/summarize.test.js +2251 -2251
- package/test/supersede-state-tracking.test.js +394 -394
- package/test/test-count-sync.test.js +71 -71
- package/test/tool-state-ignore.test.js +65 -65
- package/test/tools-dto-schema-matrix.test.js +398 -398
- package/test/tools-memory-get-schema.test.js +65 -65
- package/test/tools.test.js +585 -585
- package/test/updated-at-semantics.test.js +113 -113
- package/test/user-settings-preview.test.js +127 -127
- package/test/user-settings-segments.test.js +527 -527
- package/test/vector-index.test.js +334 -334
- package/test/version-check.test.js +152 -152
- package/test/webServer-optional.test.js +82 -82
- package/test/wiki-api.test.js +734 -627
- package/test/wiki-claims.test.js +194 -0
- package/test/wiki-cli-hint.test.js +118 -118
- package/test/wiki-inject.test.js +265 -265
- package/test/wiki-partition.test.js +112 -112
- package/test/wiki-plan.test.js +80 -80
- package/test/wiki-provenance.test.js +202 -0
- package/test/wiki-queries.test.js +398 -277
- package/test/wiki-scan.test.js +208 -208
- package/test/wiki-store.test.js +190 -190
- package/test/wiki-t0.test.js +456 -380
- package/test/wiki-t1-jobs.test.js +125 -125
- package/test/wiki-t1.test.js +460 -235
- package/test/wiki-tools.test.js +176 -176
- package/test/workflow-guards.test.js +155 -155
- package/test/write-admission.test.js +668 -668
package/src/quality-filter.js
CHANGED
|
@@ -1,162 +1,162 @@
|
|
|
1
|
-
// Rule-based memory quality filter (Bug7). Pure + total: no shared state, no
|
|
2
|
-
// async, no external calls, so it can be unit-tested in isolation and wired
|
|
3
|
-
// into the writer without any I/O or store access.
|
|
4
|
-
//
|
|
5
|
-
// evaluateMemoryQuality scores a memory 0-100 and tags low-value signals. The
|
|
6
|
-
// writer then decides (config.memoryQualityFilter):
|
|
7
|
-
// score >= degradeThreshold (60) → stored normally
|
|
8
|
-
// archiveThreshold (30) <= score < 60 → quality_score persisted; the
|
|
9
|
-
// injection sort re-ranks by importance * quality_score/100 (degraded)
|
|
10
|
-
// score < archiveThreshold (30) → archived + tagged low_quality (still
|
|
11
|
-
// recallable via explicit search, just never auto-injected)
|
|
12
|
-
//
|
|
13
|
-
// Signals and their deductions from the base 100:
|
|
14
|
-
// meta meta-memory vocabulary (the memory talks about the
|
|
15
|
-
// memory system itself, not the user's world) −45
|
|
16
|
-
// self_referential title/content mentions its own type label −15
|
|
17
|
-
// short_content content shorter than minContentLength −80
|
|
18
|
-
// repetitive trigram repetition ratio > 0.7 −50
|
|
19
|
-
// duplicate bigram similarity to a recent memory > 0.85 −80
|
|
20
|
-
//
|
|
21
|
-
// The meta signal alone lands a well-formed memory in the degraded band
|
|
22
|
-
// (30..60) — it is still stored and searchable, just demoted in injection.
|
|
23
|
-
// Reaching the archive band (< 30) needs a degenerate body (short, repetitive
|
|
24
|
-
// or near-duplicated) or stacked signals.
|
|
25
|
-
|
|
26
|
-
export const META_MEMORY_RE =
|
|
27
|
-
/记忆|mneme|recall|inject|上下文|token|prompt|系统指令|作为AI|作为助手|我需要记住|总结一下刚才/;
|
|
28
|
-
|
|
29
|
-
// The deduction table is exported because a SECOND reader needs the same numbers: the
|
|
30
|
-
// one-time backfill in store.js reconstructs a stored score from a row's surviving tags
|
|
31
|
-
// (it cannot re-score wholesale — that would also re-apply signals that were never on
|
|
32
|
-
// the row). Duplicating 45/15/80/50/80 there would make "what a tag costs" two facts
|
|
33
|
-
// that can drift apart, and the drift would be silent: the backfill would just write
|
|
34
|
-
// slightly wrong numbers. Keys are the tag names, not the reasons.
|
|
35
|
-
export const SIGNAL_DEDUCTIONS = Object.freeze({
|
|
36
|
-
meta: 45,
|
|
37
|
-
self_referential: 15,
|
|
38
|
-
short_content: 80,
|
|
39
|
-
repetitive: 50,
|
|
40
|
-
duplicate: 80
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
// Own-type labels, used for self-reference detection (the English type value
|
|
44
|
-
// the AI writers emit plus the Chinese equivalent a human would type).
|
|
45
|
-
const TYPE_LABELS = {
|
|
46
|
-
preference: ["preference", "偏好"],
|
|
47
|
-
project: ["project", "项目"],
|
|
48
|
-
decision: ["decision", "决策", "决定"],
|
|
49
|
-
history: ["history", "历史", "事件"],
|
|
50
|
-
summary: ["summary", "总结", "摘要", "总览"],
|
|
51
|
-
pattern: ["pattern", "模式", "规律"],
|
|
52
|
-
rejected_solution: ["rejected_solution", "被否决", "废弃方案"],
|
|
53
|
-
pitfall: ["pitfall", "踩坑"],
|
|
54
|
-
constraint: ["constraint", "约束"]
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
/** Normalized bigram-overlap similarity in [0,1]; 0 for tiny/empty inputs. */
|
|
58
|
-
export function textSimilarity(a, b) {
|
|
59
|
-
const bigrams = (s) => {
|
|
60
|
-
const set = new Set();
|
|
61
|
-
const t = String(s).replace(/\s+/g, "");
|
|
62
|
-
for (let i = 0; i < t.length - 1; i++) set.add(t.slice(i, i + 2));
|
|
63
|
-
return set;
|
|
64
|
-
};
|
|
65
|
-
const A = bigrams(a);
|
|
66
|
-
const B = bigrams(b);
|
|
67
|
-
if (!A.size || !B.size) return 0;
|
|
68
|
-
let inter = 0;
|
|
69
|
-
for (const g of A) if (B.has(g)) inter++;
|
|
70
|
-
return inter / Math.min(A.size, B.size);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Repetition threshold. Calibrated 2026-11-04 against a real 12,827-row library:
|
|
74
|
-
// the highest trigram ratio among genuine memories was 0.591 (a note where the
|
|
75
|
-
// same install paths repeat), so 0.7 keeps every real memory clear while still
|
|
76
|
-
// catching degenerate fillers (a single char x20 = 0.94, a sentence x5 = 0.79).
|
|
77
|
-
// Do not lower this without re-measuring: 0.6 leaves only 0.009 of headroom.
|
|
78
|
-
export const REPETITION_THRESHOLD = 0.7;
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Trigram repetition ratio in [0,1]: the share of 3-char windows that are not
|
|
82
|
-
* the first occurrence of their own trigram. 0 = every trigram distinct.
|
|
83
|
-
*
|
|
84
|
-
* Why this instead of unique-chars / total (the measure shipped in v0.7.12):
|
|
85
|
-
* that one is a function of LENGTH, not of repetition. Chinese prose draws from
|
|
86
|
-
* a few hundred common characters, so uniqueChars/total decays toward 0 as the
|
|
87
|
-
* text grows — measured on a real library it fell below the old 0.3 gate for
|
|
88
|
-
* 94% of 800-2000 char memories and 100% of those over 2000 chars. Long memories
|
|
89
|
-
* were being tagged "repetitive" for being long. Trigram repetition is
|
|
90
|
-
* length-stable: concatenating distinct real memories up to 30,000 chars only
|
|
91
|
-
* reaches 0.428, while genuinely duplicated text passes 0.6 by the second copy.
|
|
92
|
-
*/
|
|
93
|
-
export function repetitionRatio(text) {
|
|
94
|
-
const t = String(text).replace(/\s+/g, "");
|
|
95
|
-
if (t.length < 3) return 0;
|
|
96
|
-
const total = t.length - 2;
|
|
97
|
-
const seen = new Set();
|
|
98
|
-
for (let i = 0; i < total; i++) seen.add(t.slice(i, i + 3));
|
|
99
|
-
return 1 - seen.size / total;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Score a memory's quality. `recentContents` (optional) is the list of recent
|
|
104
|
-
* memory contents used for near-duplicate detection; when omitted the duplicate
|
|
105
|
-
* signal is skipped. Never throws: every input is coerced defensively.
|
|
106
|
-
* @param {object} memory { type, title, content }
|
|
107
|
-
* @param {object} [options]
|
|
108
|
-
* @param {number} [options.minContentLength=10]
|
|
109
|
-
* @param {string[]} [options.recentContents] up to ~20 recent contents
|
|
110
|
-
* @returns {{score: number, tags: string[], reason: string}}
|
|
111
|
-
*/
|
|
112
|
-
export function evaluateMemoryQuality(memory, options = {}) {
|
|
113
|
-
const minContentLength = options.minContentLength ?? 10;
|
|
114
|
-
const recentContents = Array.isArray(options.recentContents) ? options.recentContents : [];
|
|
115
|
-
const title = String(memory?.title ?? "");
|
|
116
|
-
const content = String(memory?.content ?? "");
|
|
117
|
-
const text = `${title}\n${content}`;
|
|
118
|
-
const trimmed = content.trim();
|
|
119
|
-
const tags = [];
|
|
120
|
-
const reasons = [];
|
|
121
|
-
let score = 100;
|
|
122
|
-
|
|
123
|
-
if (META_MEMORY_RE.test(text)) {
|
|
124
|
-
score -= SIGNAL_DEDUCTIONS.meta;
|
|
125
|
-
tags.push("meta");
|
|
126
|
-
reasons.push("meta-memory vocabulary");
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
const labels = TYPE_LABELS[memory?.type];
|
|
130
|
-
if (labels && labels.some((l) => text.includes(l))) {
|
|
131
|
-
score -= SIGNAL_DEDUCTIONS.self_referential;
|
|
132
|
-
tags.push("self_referential");
|
|
133
|
-
reasons.push("mentions its own type");
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
if (minContentLength > 0 && trimmed.length < minContentLength) {
|
|
137
|
-
score -= SIGNAL_DEDUCTIONS.short_content;
|
|
138
|
-
tags.push("short_content");
|
|
139
|
-
reasons.push(`content shorter than ${minContentLength} chars`);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
if (trimmed.length > 0 && repetitionRatio(trimmed) > REPETITION_THRESHOLD) {
|
|
143
|
-
score -= SIGNAL_DEDUCTIONS.repetitive;
|
|
144
|
-
tags.push("repetitive");
|
|
145
|
-
reasons.push("repetitive content");
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (recentContents.length > 0 && trimmed.length > 0) {
|
|
149
|
-
for (const other of recentContents) {
|
|
150
|
-
if (textSimilarity(trimmed, other) > 0.85) {
|
|
151
|
-
score -= SIGNAL_DEDUCTIONS.duplicate;
|
|
152
|
-
tags.push("duplicate");
|
|
153
|
-
reasons.push("near-duplicate of a recent memory");
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
score = Math.max(0, Math.min(100, Math.round(score)));
|
|
160
|
-
if (score < 30) tags.push("low_quality");
|
|
161
|
-
return { score, tags: [...new Set(tags)], reason: reasons.length ? reasons.join("; ") : "ok" };
|
|
162
|
-
}
|
|
1
|
+
// Rule-based memory quality filter (Bug7). Pure + total: no shared state, no
|
|
2
|
+
// async, no external calls, so it can be unit-tested in isolation and wired
|
|
3
|
+
// into the writer without any I/O or store access.
|
|
4
|
+
//
|
|
5
|
+
// evaluateMemoryQuality scores a memory 0-100 and tags low-value signals. The
|
|
6
|
+
// writer then decides (config.memoryQualityFilter):
|
|
7
|
+
// score >= degradeThreshold (60) → stored normally
|
|
8
|
+
// archiveThreshold (30) <= score < 60 → quality_score persisted; the
|
|
9
|
+
// injection sort re-ranks by importance * quality_score/100 (degraded)
|
|
10
|
+
// score < archiveThreshold (30) → archived + tagged low_quality (still
|
|
11
|
+
// recallable via explicit search, just never auto-injected)
|
|
12
|
+
//
|
|
13
|
+
// Signals and their deductions from the base 100:
|
|
14
|
+
// meta meta-memory vocabulary (the memory talks about the
|
|
15
|
+
// memory system itself, not the user's world) −45
|
|
16
|
+
// self_referential title/content mentions its own type label −15
|
|
17
|
+
// short_content content shorter than minContentLength −80
|
|
18
|
+
// repetitive trigram repetition ratio > 0.7 −50
|
|
19
|
+
// duplicate bigram similarity to a recent memory > 0.85 −80
|
|
20
|
+
//
|
|
21
|
+
// The meta signal alone lands a well-formed memory in the degraded band
|
|
22
|
+
// (30..60) — it is still stored and searchable, just demoted in injection.
|
|
23
|
+
// Reaching the archive band (< 30) needs a degenerate body (short, repetitive
|
|
24
|
+
// or near-duplicated) or stacked signals.
|
|
25
|
+
|
|
26
|
+
export const META_MEMORY_RE =
|
|
27
|
+
/记忆|mneme|recall|inject|上下文|token|prompt|系统指令|作为AI|作为助手|我需要记住|总结一下刚才/;
|
|
28
|
+
|
|
29
|
+
// The deduction table is exported because a SECOND reader needs the same numbers: the
|
|
30
|
+
// one-time backfill in store.js reconstructs a stored score from a row's surviving tags
|
|
31
|
+
// (it cannot re-score wholesale — that would also re-apply signals that were never on
|
|
32
|
+
// the row). Duplicating 45/15/80/50/80 there would make "what a tag costs" two facts
|
|
33
|
+
// that can drift apart, and the drift would be silent: the backfill would just write
|
|
34
|
+
// slightly wrong numbers. Keys are the tag names, not the reasons.
|
|
35
|
+
export const SIGNAL_DEDUCTIONS = Object.freeze({
|
|
36
|
+
meta: 45,
|
|
37
|
+
self_referential: 15,
|
|
38
|
+
short_content: 80,
|
|
39
|
+
repetitive: 50,
|
|
40
|
+
duplicate: 80
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Own-type labels, used for self-reference detection (the English type value
|
|
44
|
+
// the AI writers emit plus the Chinese equivalent a human would type).
|
|
45
|
+
const TYPE_LABELS = {
|
|
46
|
+
preference: ["preference", "偏好"],
|
|
47
|
+
project: ["project", "项目"],
|
|
48
|
+
decision: ["decision", "决策", "决定"],
|
|
49
|
+
history: ["history", "历史", "事件"],
|
|
50
|
+
summary: ["summary", "总结", "摘要", "总览"],
|
|
51
|
+
pattern: ["pattern", "模式", "规律"],
|
|
52
|
+
rejected_solution: ["rejected_solution", "被否决", "废弃方案"],
|
|
53
|
+
pitfall: ["pitfall", "踩坑"],
|
|
54
|
+
constraint: ["constraint", "约束"]
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/** Normalized bigram-overlap similarity in [0,1]; 0 for tiny/empty inputs. */
|
|
58
|
+
export function textSimilarity(a, b) {
|
|
59
|
+
const bigrams = (s) => {
|
|
60
|
+
const set = new Set();
|
|
61
|
+
const t = String(s).replace(/\s+/g, "");
|
|
62
|
+
for (let i = 0; i < t.length - 1; i++) set.add(t.slice(i, i + 2));
|
|
63
|
+
return set;
|
|
64
|
+
};
|
|
65
|
+
const A = bigrams(a);
|
|
66
|
+
const B = bigrams(b);
|
|
67
|
+
if (!A.size || !B.size) return 0;
|
|
68
|
+
let inter = 0;
|
|
69
|
+
for (const g of A) if (B.has(g)) inter++;
|
|
70
|
+
return inter / Math.min(A.size, B.size);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Repetition threshold. Calibrated 2026-11-04 against a real 12,827-row library:
|
|
74
|
+
// the highest trigram ratio among genuine memories was 0.591 (a note where the
|
|
75
|
+
// same install paths repeat), so 0.7 keeps every real memory clear while still
|
|
76
|
+
// catching degenerate fillers (a single char x20 = 0.94, a sentence x5 = 0.79).
|
|
77
|
+
// Do not lower this without re-measuring: 0.6 leaves only 0.009 of headroom.
|
|
78
|
+
export const REPETITION_THRESHOLD = 0.7;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Trigram repetition ratio in [0,1]: the share of 3-char windows that are not
|
|
82
|
+
* the first occurrence of their own trigram. 0 = every trigram distinct.
|
|
83
|
+
*
|
|
84
|
+
* Why this instead of unique-chars / total (the measure shipped in v0.7.12):
|
|
85
|
+
* that one is a function of LENGTH, not of repetition. Chinese prose draws from
|
|
86
|
+
* a few hundred common characters, so uniqueChars/total decays toward 0 as the
|
|
87
|
+
* text grows — measured on a real library it fell below the old 0.3 gate for
|
|
88
|
+
* 94% of 800-2000 char memories and 100% of those over 2000 chars. Long memories
|
|
89
|
+
* were being tagged "repetitive" for being long. Trigram repetition is
|
|
90
|
+
* length-stable: concatenating distinct real memories up to 30,000 chars only
|
|
91
|
+
* reaches 0.428, while genuinely duplicated text passes 0.6 by the second copy.
|
|
92
|
+
*/
|
|
93
|
+
export function repetitionRatio(text) {
|
|
94
|
+
const t = String(text).replace(/\s+/g, "");
|
|
95
|
+
if (t.length < 3) return 0;
|
|
96
|
+
const total = t.length - 2;
|
|
97
|
+
const seen = new Set();
|
|
98
|
+
for (let i = 0; i < total; i++) seen.add(t.slice(i, i + 3));
|
|
99
|
+
return 1 - seen.size / total;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Score a memory's quality. `recentContents` (optional) is the list of recent
|
|
104
|
+
* memory contents used for near-duplicate detection; when omitted the duplicate
|
|
105
|
+
* signal is skipped. Never throws: every input is coerced defensively.
|
|
106
|
+
* @param {object} memory { type, title, content }
|
|
107
|
+
* @param {object} [options]
|
|
108
|
+
* @param {number} [options.minContentLength=10]
|
|
109
|
+
* @param {string[]} [options.recentContents] up to ~20 recent contents
|
|
110
|
+
* @returns {{score: number, tags: string[], reason: string}}
|
|
111
|
+
*/
|
|
112
|
+
export function evaluateMemoryQuality(memory, options = {}) {
|
|
113
|
+
const minContentLength = options.minContentLength ?? 10;
|
|
114
|
+
const recentContents = Array.isArray(options.recentContents) ? options.recentContents : [];
|
|
115
|
+
const title = String(memory?.title ?? "");
|
|
116
|
+
const content = String(memory?.content ?? "");
|
|
117
|
+
const text = `${title}\n${content}`;
|
|
118
|
+
const trimmed = content.trim();
|
|
119
|
+
const tags = [];
|
|
120
|
+
const reasons = [];
|
|
121
|
+
let score = 100;
|
|
122
|
+
|
|
123
|
+
if (META_MEMORY_RE.test(text)) {
|
|
124
|
+
score -= SIGNAL_DEDUCTIONS.meta;
|
|
125
|
+
tags.push("meta");
|
|
126
|
+
reasons.push("meta-memory vocabulary");
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const labels = TYPE_LABELS[memory?.type];
|
|
130
|
+
if (labels && labels.some((l) => text.includes(l))) {
|
|
131
|
+
score -= SIGNAL_DEDUCTIONS.self_referential;
|
|
132
|
+
tags.push("self_referential");
|
|
133
|
+
reasons.push("mentions its own type");
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (minContentLength > 0 && trimmed.length < minContentLength) {
|
|
137
|
+
score -= SIGNAL_DEDUCTIONS.short_content;
|
|
138
|
+
tags.push("short_content");
|
|
139
|
+
reasons.push(`content shorter than ${minContentLength} chars`);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (trimmed.length > 0 && repetitionRatio(trimmed) > REPETITION_THRESHOLD) {
|
|
143
|
+
score -= SIGNAL_DEDUCTIONS.repetitive;
|
|
144
|
+
tags.push("repetitive");
|
|
145
|
+
reasons.push("repetitive content");
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (recentContents.length > 0 && trimmed.length > 0) {
|
|
149
|
+
for (const other of recentContents) {
|
|
150
|
+
if (textSimilarity(trimmed, other) > 0.85) {
|
|
151
|
+
score -= SIGNAL_DEDUCTIONS.duplicate;
|
|
152
|
+
tags.push("duplicate");
|
|
153
|
+
reasons.push("near-duplicate of a recent memory");
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
score = Math.max(0, Math.min(100, Math.round(score)));
|
|
160
|
+
if (score < 30) tags.push("low_quality");
|
|
161
|
+
return { score, tags: [...new Set(tags)], reason: reasons.length ? reasons.join("; ") : "ok" };
|
|
162
|
+
}
|