@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
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { readFileSync } from "node:fs";
|
|
4
|
-
import { dirname, join } from "node:path";
|
|
5
|
-
import { fileURLToPath } from "node:url";
|
|
6
|
-
import { applyTestCount, readTestCounts } from "../scripts/test-count-sync.mjs";
|
|
7
|
-
|
|
8
|
-
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
9
|
-
const PKG_ROOT = join(HERE, "..");
|
|
10
|
-
const REPO_ROOT = join(PKG_ROOT, "..");
|
|
11
|
-
const READMES = [join(REPO_ROOT, "README.md"), join(PKG_ROOT, "README.md")];
|
|
12
|
-
|
|
13
|
-
// 双 README 是发布门面,同一个数字在里面重复出现三到五次(一个 shields.io 徽章 +
|
|
14
|
-
// 每条开发命令注释一处,root 是双语所以中英各一条)。它们必须永远同数——否则
|
|
15
|
-
// 「这个项目有多少测试」取决于读者恰好看了哪一行。
|
|
16
|
-
//
|
|
17
|
-
// v0.8.11 实际漂移过:徽章 1437、四条注释留在 1431。本用例就是那次漂移的回归锁,
|
|
18
|
-
// 跑在真实 README 上(不是 fixture),所以它能在发版前拦住同类漂移。
|
|
19
|
-
test("双 README 的测试数处处一致(徽章与所有注释同数)", () => {
|
|
20
|
-
for (const f of READMES) {
|
|
21
|
-
const counts = readTestCounts(readFileSync(f, "utf8"));
|
|
22
|
-
const shapes = new Set(counts.map((c) => c.shape));
|
|
23
|
-
assert.ok(counts.length >= 2, `${f} 抽到的测试数出现处太少:${JSON.stringify(counts)}`);
|
|
24
|
-
assert.ok(shapes.has("badge"), `${f} 没抽到徽章:${JSON.stringify(counts)}`);
|
|
25
|
-
const values = [...new Set(counts.map((c) => c.value))];
|
|
26
|
-
assert.equal(values.length, 1, `${f} 测试数不一致:${JSON.stringify(counts)}`);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// v0.8.11 的真实漂移样本(徽章已 1437、注释仍 1431)。锁住「徽章 + 四种注释形状」
|
|
31
|
-
// 全覆盖:少任何一种,就会有一处静默落后——release-prep.mjs 原先只覆盖徽章 URL,
|
|
32
|
-
// 自动发版路径因此反倒成了漂移来源。
|
|
33
|
-
test("applyTestCount 覆盖徽章与全部四种注释形状(真实漂移样本)", () => {
|
|
34
|
-
const drifted = [
|
|
35
|
-
'<img src="https://img.shields.io/badge/tests-1431%20total-3E63DD?style=flat-square" alt="tests">',
|
|
36
|
-
"[](https://github.com/slow-stack/mneme)",
|
|
37
|
-
"npm test # 1431 个测试",
|
|
38
|
-
"npm test # 运行 1431 个测试",
|
|
39
|
-
"test/ # 1431 个 node:test 测试(审计与三轴线压测不变量)",
|
|
40
|
-
"npm test # 1431 tests"
|
|
41
|
-
].join("\n");
|
|
42
|
-
const fixed = applyTestCount(drifted, 1437);
|
|
43
|
-
assert.ok(!/\b1431\b/.test(fixed), "仍有 1431 未被替换:\n" + fixed);
|
|
44
|
-
const counts = readTestCounts(fixed);
|
|
45
|
-
assert.equal(counts.length, 6, "六处出现都该被认出来:" + JSON.stringify(counts));
|
|
46
|
-
assert.deepEqual([...new Set(counts.map((c) => c.value))], [1437]);
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
test("applyTestCount 幂等:同一个数重复施加不再产生变化", () => {
|
|
50
|
-
const once = applyTestCount("tests-9%20total-3E63DD\n# 9 个测试\n# 9 tests", 12);
|
|
51
|
-
assert.equal(applyTestCount(once, 12), once);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
// 历史版本表里的「745 测试全绿」「790 通过」是各版本当时的真实记录(sync-test-badge
|
|
55
|
-
// 的注释也写明了刻意不改它们)。替换规则只认徽章 URL 与 `#` 前缀注释两种形状,
|
|
56
|
-
// 这条用例锁住那个边界,免得将来放宽正则把历史改写掉。
|
|
57
|
-
test("applyTestCount 不碰历史版本表里的「N 测试全绿」", () => {
|
|
58
|
-
const history = "| **v0.8.0** | 745 测试全绿 |\n| **v0.7.9** | 790 通过 |\n| v0.2.7 | 263 |";
|
|
59
|
-
assert.equal(applyTestCount(history, 1437), history);
|
|
60
|
-
});
|
|
61
|
-
// 徽章报的是套件总数(`ℹ tests N`),不是通过数:本地 Windows 未开开发者模式时有一条
|
|
62
|
-
// 符号链接用例被条件跳过,pass 数会比总数少 1。徽章字面量若退回 `%20passed`,读者会把它
|
|
63
|
-
// 读成「N 个用例都通过了」,而它其实只表示「跑了 N 个套件」——#599 评审指出这一处措辞
|
|
64
|
-
// 与实际口径不符。这条用例锁住那个词,改回 `passed` 立刻转红。
|
|
65
|
-
test("双 README 的徽章字面量报总数(total),不谎称全部通过(passed)", () => {
|
|
66
|
-
for (const f of READMES) {
|
|
67
|
-
const text = readFileSync(f, "utf8");
|
|
68
|
-
assert.ok(/tests-\d+%20total/.test(text), `${f} 徽章必须写 %20total:${text.match(/tests-\d+%20\w+/)}`);
|
|
69
|
-
assert.ok(!/tests-\d+%20passed/.test(text), `${f} 徽章不得退回 %20passed`);
|
|
70
|
-
}
|
|
71
|
-
});
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { applyTestCount, readTestCounts } from "../scripts/test-count-sync.mjs";
|
|
7
|
+
|
|
8
|
+
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
9
|
+
const PKG_ROOT = join(HERE, "..");
|
|
10
|
+
const REPO_ROOT = join(PKG_ROOT, "..");
|
|
11
|
+
const READMES = [join(REPO_ROOT, "README.md"), join(PKG_ROOT, "README.md")];
|
|
12
|
+
|
|
13
|
+
// 双 README 是发布门面,同一个数字在里面重复出现三到五次(一个 shields.io 徽章 +
|
|
14
|
+
// 每条开发命令注释一处,root 是双语所以中英各一条)。它们必须永远同数——否则
|
|
15
|
+
// 「这个项目有多少测试」取决于读者恰好看了哪一行。
|
|
16
|
+
//
|
|
17
|
+
// v0.8.11 实际漂移过:徽章 1437、四条注释留在 1431。本用例就是那次漂移的回归锁,
|
|
18
|
+
// 跑在真实 README 上(不是 fixture),所以它能在发版前拦住同类漂移。
|
|
19
|
+
test("双 README 的测试数处处一致(徽章与所有注释同数)", () => {
|
|
20
|
+
for (const f of READMES) {
|
|
21
|
+
const counts = readTestCounts(readFileSync(f, "utf8"));
|
|
22
|
+
const shapes = new Set(counts.map((c) => c.shape));
|
|
23
|
+
assert.ok(counts.length >= 2, `${f} 抽到的测试数出现处太少:${JSON.stringify(counts)}`);
|
|
24
|
+
assert.ok(shapes.has("badge"), `${f} 没抽到徽章:${JSON.stringify(counts)}`);
|
|
25
|
+
const values = [...new Set(counts.map((c) => c.value))];
|
|
26
|
+
assert.equal(values.length, 1, `${f} 测试数不一致:${JSON.stringify(counts)}`);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// v0.8.11 的真实漂移样本(徽章已 1437、注释仍 1431)。锁住「徽章 + 四种注释形状」
|
|
31
|
+
// 全覆盖:少任何一种,就会有一处静默落后——release-prep.mjs 原先只覆盖徽章 URL,
|
|
32
|
+
// 自动发版路径因此反倒成了漂移来源。
|
|
33
|
+
test("applyTestCount 覆盖徽章与全部四种注释形状(真实漂移样本)", () => {
|
|
34
|
+
const drifted = [
|
|
35
|
+
'<img src="https://img.shields.io/badge/tests-1431%20total-3E63DD?style=flat-square" alt="tests">',
|
|
36
|
+
"[](https://github.com/slow-stack/mneme)",
|
|
37
|
+
"npm test # 1431 个测试",
|
|
38
|
+
"npm test # 运行 1431 个测试",
|
|
39
|
+
"test/ # 1431 个 node:test 测试(审计与三轴线压测不变量)",
|
|
40
|
+
"npm test # 1431 tests"
|
|
41
|
+
].join("\n");
|
|
42
|
+
const fixed = applyTestCount(drifted, 1437);
|
|
43
|
+
assert.ok(!/\b1431\b/.test(fixed), "仍有 1431 未被替换:\n" + fixed);
|
|
44
|
+
const counts = readTestCounts(fixed);
|
|
45
|
+
assert.equal(counts.length, 6, "六处出现都该被认出来:" + JSON.stringify(counts));
|
|
46
|
+
assert.deepEqual([...new Set(counts.map((c) => c.value))], [1437]);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test("applyTestCount 幂等:同一个数重复施加不再产生变化", () => {
|
|
50
|
+
const once = applyTestCount("tests-9%20total-3E63DD\n# 9 个测试\n# 9 tests", 12);
|
|
51
|
+
assert.equal(applyTestCount(once, 12), once);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// 历史版本表里的「745 测试全绿」「790 通过」是各版本当时的真实记录(sync-test-badge
|
|
55
|
+
// 的注释也写明了刻意不改它们)。替换规则只认徽章 URL 与 `#` 前缀注释两种形状,
|
|
56
|
+
// 这条用例锁住那个边界,免得将来放宽正则把历史改写掉。
|
|
57
|
+
test("applyTestCount 不碰历史版本表里的「N 测试全绿」", () => {
|
|
58
|
+
const history = "| **v0.8.0** | 745 测试全绿 |\n| **v0.7.9** | 790 通过 |\n| v0.2.7 | 263 |";
|
|
59
|
+
assert.equal(applyTestCount(history, 1437), history);
|
|
60
|
+
});
|
|
61
|
+
// 徽章报的是套件总数(`ℹ tests N`),不是通过数:本地 Windows 未开开发者模式时有一条
|
|
62
|
+
// 符号链接用例被条件跳过,pass 数会比总数少 1。徽章字面量若退回 `%20passed`,读者会把它
|
|
63
|
+
// 读成「N 个用例都通过了」,而它其实只表示「跑了 N 个套件」——#599 评审指出这一处措辞
|
|
64
|
+
// 与实际口径不符。这条用例锁住那个词,改回 `passed` 立刻转红。
|
|
65
|
+
test("双 README 的徽章字面量报总数(total),不谎称全部通过(passed)", () => {
|
|
66
|
+
for (const f of READMES) {
|
|
67
|
+
const text = readFileSync(f, "utf8");
|
|
68
|
+
assert.ok(/tests-\d+%20total/.test(text), `${f} 徽章必须写 %20total:${text.match(/tests-\d+%20\w+/)}`);
|
|
69
|
+
assert.ok(!/tests-\d+%20passed/.test(text), `${f} 徽章不得退回 %20passed`);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
// 锁「本地工具状态目录不得再进库」这条预防层,以及它配套的那条公开记档。
|
|
2
|
-
//
|
|
3
|
-
// 背景:2026-11-05 分支 feat/choro-panel-run-and-vectors 有一次粗粒度 git add 把 .mimosa/
|
|
4
|
-
// (本地扫描钩子的状态目录,22 个文件)吸进了功能提交。文件两个提交后删掉了,但 blob 留在历史里、
|
|
5
|
-
// 仓库是 PUBLIC,其中一条 hook-status 记着一台机器的绝对路径。删文件不是补偿——删只把暴露从
|
|
6
|
-
// 目录树挪进对象存储(详见 SECURITY.md 的 2026-11-05 条目)。所以真正的防线只有两层:
|
|
7
|
-
//
|
|
8
|
-
// 1. 忽略规则(本文件第 1 组用例)——两个 .gitignore 都必须有。仓库里有两个 .mimosa 前缀
|
|
9
|
-
// (仓库根与 dsh-mneme/),只写一处时另一处照样会被 add 进来;历史重写那次就栽在这里。
|
|
10
|
-
// 2. 忽略规则若被谁「顺手清掉」,本文件必须变红——否则下一次 add -A 又是同一个坑。
|
|
11
|
-
//
|
|
12
|
-
// 第 2 组用例守的是记档本身:SECURITY.md 要中英各一条(两份文档都在同一文件里,缺一边等于
|
|
13
|
-
// 一种语言的读者看不到这件事),且条目里不得出现任何本机绝对路径——一份记录泄露的文档
|
|
14
|
-
// 自己再泄露一次就是二次事故。
|
|
15
|
-
import test from "node:test";
|
|
16
|
-
import assert from "node:assert/strict";
|
|
17
|
-
import { readFileSync } from "node:fs";
|
|
18
|
-
import { fileURLToPath } from "node:url";
|
|
19
|
-
import path from "node:path";
|
|
20
|
-
|
|
21
|
-
const pkgRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
|
|
22
|
-
const repoRoot = path.dirname(pkgRoot);
|
|
23
|
-
|
|
24
|
-
// 两个前缀都必须覆盖:历史上漏的就是「只写了 dsh-mneme/.mimosa」。
|
|
25
|
-
const gitignores = [
|
|
26
|
-
{ label: "仓库根 .gitignore", file: path.join(repoRoot, ".gitignore") },
|
|
27
|
-
{ label: "dsh-mneme/.gitignore", file: path.join(pkgRoot, ".gitignore") },
|
|
28
|
-
];
|
|
29
|
-
|
|
30
|
-
for (const { label, file } of gitignores) {
|
|
31
|
-
test(`${label} 忽略 .mimosa/(本地工具状态不进库)`, () => {
|
|
32
|
-
const lines = readFileSync(file, "utf8").split(/\r?\n/).map((l) => l.trim());
|
|
33
|
-
assert.ok(
|
|
34
|
-
lines.includes(".mimosa/"),
|
|
35
|
-
`${label} 缺少 .mimosa/ 忽略规则。少了它,下一次 git add -A 会把钩子状态目录再带进库——` +
|
|
36
|
-
"2026-11-05 已经发生过一次,且 blob 至今仍可从历史取到。两处都要写:本仓有两个 .mimosa 前缀。"
|
|
37
|
-
);
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
test("SECURITY.md 有这次暴露的中英双份记档,且记档本身不含本机绝对路径", () => {
|
|
42
|
-
const doc = readFileSync(path.join(repoRoot, "SECURITY.md"), "utf8");
|
|
43
|
-
const headings = doc.split(/\r?\n/).filter((l) => l.startsWith("### 2026-11-05 — "));
|
|
44
|
-
assert.equal(
|
|
45
|
-
headings.length,
|
|
46
|
-
2,
|
|
47
|
-
`SECURITY.md 应有中英各一条「### 2026-11-05 — 」记档,实际 ${headings.length} 条。` +
|
|
48
|
-
"只写一边等于另一种语言的读者看不到这条已知暴露。"
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
// 记档里点名的是「本机目录结构」这件事本身,不能反过来把路径抄进去:
|
|
52
|
-
// 一条记录泄露的条目自己再泄露一次,就是把事故重演一遍。
|
|
53
|
-
// 只扫记档那两段(每条从标题到下一个 `### `),别拿整篇文档去撞历史遗留的行。
|
|
54
|
-
const lines = doc.split(/\r?\n/);
|
|
55
|
-
const section = [];
|
|
56
|
-
let inside = false;
|
|
57
|
-
for (const l of lines) {
|
|
58
|
-
if (l.startsWith("### ")) inside = l.startsWith("### 2026-11-05 — ");
|
|
59
|
-
if (inside) section.push(l);
|
|
60
|
-
}
|
|
61
|
-
const leaked = section.filter((l) =>
|
|
62
|
-
/[A-Za-z]:\\Users\\/.test(l) || l.includes("/Users/") || l.includes("AppData")
|
|
63
|
-
);
|
|
64
|
-
assert.deepEqual(leaked, [], `记档不得出现本机绝对路径,实际命中:${leaked.join(" | ")}`);
|
|
65
|
-
});
|
|
1
|
+
// 锁「本地工具状态目录不得再进库」这条预防层,以及它配套的那条公开记档。
|
|
2
|
+
//
|
|
3
|
+
// 背景:2026-11-05 分支 feat/choro-panel-run-and-vectors 有一次粗粒度 git add 把 .mimosa/
|
|
4
|
+
// (本地扫描钩子的状态目录,22 个文件)吸进了功能提交。文件两个提交后删掉了,但 blob 留在历史里、
|
|
5
|
+
// 仓库是 PUBLIC,其中一条 hook-status 记着一台机器的绝对路径。删文件不是补偿——删只把暴露从
|
|
6
|
+
// 目录树挪进对象存储(详见 SECURITY.md 的 2026-11-05 条目)。所以真正的防线只有两层:
|
|
7
|
+
//
|
|
8
|
+
// 1. 忽略规则(本文件第 1 组用例)——两个 .gitignore 都必须有。仓库里有两个 .mimosa 前缀
|
|
9
|
+
// (仓库根与 dsh-mneme/),只写一处时另一处照样会被 add 进来;历史重写那次就栽在这里。
|
|
10
|
+
// 2. 忽略规则若被谁「顺手清掉」,本文件必须变红——否则下一次 add -A 又是同一个坑。
|
|
11
|
+
//
|
|
12
|
+
// 第 2 组用例守的是记档本身:SECURITY.md 要中英各一条(两份文档都在同一文件里,缺一边等于
|
|
13
|
+
// 一种语言的读者看不到这件事),且条目里不得出现任何本机绝对路径——一份记录泄露的文档
|
|
14
|
+
// 自己再泄露一次就是二次事故。
|
|
15
|
+
import test from "node:test";
|
|
16
|
+
import assert from "node:assert/strict";
|
|
17
|
+
import { readFileSync } from "node:fs";
|
|
18
|
+
import { fileURLToPath } from "node:url";
|
|
19
|
+
import path from "node:path";
|
|
20
|
+
|
|
21
|
+
const pkgRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
|
|
22
|
+
const repoRoot = path.dirname(pkgRoot);
|
|
23
|
+
|
|
24
|
+
// 两个前缀都必须覆盖:历史上漏的就是「只写了 dsh-mneme/.mimosa」。
|
|
25
|
+
const gitignores = [
|
|
26
|
+
{ label: "仓库根 .gitignore", file: path.join(repoRoot, ".gitignore") },
|
|
27
|
+
{ label: "dsh-mneme/.gitignore", file: path.join(pkgRoot, ".gitignore") },
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
for (const { label, file } of gitignores) {
|
|
31
|
+
test(`${label} 忽略 .mimosa/(本地工具状态不进库)`, () => {
|
|
32
|
+
const lines = readFileSync(file, "utf8").split(/\r?\n/).map((l) => l.trim());
|
|
33
|
+
assert.ok(
|
|
34
|
+
lines.includes(".mimosa/"),
|
|
35
|
+
`${label} 缺少 .mimosa/ 忽略规则。少了它,下一次 git add -A 会把钩子状态目录再带进库——` +
|
|
36
|
+
"2026-11-05 已经发生过一次,且 blob 至今仍可从历史取到。两处都要写:本仓有两个 .mimosa 前缀。"
|
|
37
|
+
);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
test("SECURITY.md 有这次暴露的中英双份记档,且记档本身不含本机绝对路径", () => {
|
|
42
|
+
const doc = readFileSync(path.join(repoRoot, "SECURITY.md"), "utf8");
|
|
43
|
+
const headings = doc.split(/\r?\n/).filter((l) => l.startsWith("### 2026-11-05 — "));
|
|
44
|
+
assert.equal(
|
|
45
|
+
headings.length,
|
|
46
|
+
2,
|
|
47
|
+
`SECURITY.md 应有中英各一条「### 2026-11-05 — 」记档,实际 ${headings.length} 条。` +
|
|
48
|
+
"只写一边等于另一种语言的读者看不到这条已知暴露。"
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
// 记档里点名的是「本机目录结构」这件事本身,不能反过来把路径抄进去:
|
|
52
|
+
// 一条记录泄露的条目自己再泄露一次,就是把事故重演一遍。
|
|
53
|
+
// 只扫记档那两段(每条从标题到下一个 `### `),别拿整篇文档去撞历史遗留的行。
|
|
54
|
+
const lines = doc.split(/\r?\n/);
|
|
55
|
+
const section = [];
|
|
56
|
+
let inside = false;
|
|
57
|
+
for (const l of lines) {
|
|
58
|
+
if (l.startsWith("### ")) inside = l.startsWith("### 2026-11-05 — ");
|
|
59
|
+
if (inside) section.push(l);
|
|
60
|
+
}
|
|
61
|
+
const leaked = section.filter((l) =>
|
|
62
|
+
/[A-Za-z]:\\Users\\/.test(l) || l.includes("/Users/") || l.includes("AppData")
|
|
63
|
+
);
|
|
64
|
+
assert.deepEqual(leaked, [], `记档不得出现本机绝对路径,实际命中:${leaked.join(" | ")}`);
|
|
65
|
+
});
|