@modusensus/dsh-mneme 0.14.0-beta.1 → 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 -830
- package/assets/icon.svg +3 -3
- package/bin/cli.mjs +964 -964
- package/bin/dsh-mneme-choro.mjs +262 -262
- 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 -404
- 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 -3600
- 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 -14322
- package/lib/commands.js +95 -95
- package/lib/config-keys.js +144 -144
- package/lib/config.js +1361 -1344
- 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 -945
- package/lib/dream/narratives.js +44 -44
- package/lib/dream/sleep.js +2027 -2027
- package/lib/dream/triage.js +139 -139
- package/lib/dream.js +1879 -1879
- 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 -119
- package/lib/image-describe.js +158 -0
- package/lib/index.js +852 -852
- package/lib/inject.js +656 -651
- 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 -595
- 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 -3268
- package/lib/session-gate.js +91 -91
- package/lib/session-usage.js +350 -350
- package/lib/settings.js +827 -817
- 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 -5895
- 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 -267
- 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 -640
- package/lib/wiki/render.js +261 -261
- package/lib/wiki/scan.js +371 -371
- package/lib/wiki/t0.js +500 -500
- package/lib/wiki/t1-jobs.js +232 -232
- package/lib/wiki/t1.js +609 -609
- package/lib/write-admission.js +404 -404
- package/locale/en.json +6 -6
- package/locale/zh.json +6 -6
- package/package.json +1 -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 -210
- package/scripts/release-notes.mjs +164 -164
- 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 -3600
- 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 -1344
- 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 -945
- package/src/dream/narratives.js +44 -44
- package/src/dream/sleep.js +2027 -2027
- package/src/dream/triage.js +139 -139
- package/src/dream.js +1879 -1879
- 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 -119
- package/src/image-describe.js +158 -0
- package/src/index.js +852 -852
- package/src/inject.js +656 -651
- 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 -595
- 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 -3268
- package/src/session-gate.js +91 -91
- package/src/session-usage.js +350 -350
- package/src/settings.js +827 -817
- 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 -5895
- 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 -267
- 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 -640
- package/src/wiki/render.js +261 -261
- package/src/wiki/scan.js +371 -371
- package/src/wiki/t0.js +500 -500
- package/src/wiki/t1-jobs.js +232 -232
- package/src/wiki/t1.js +609 -609
- 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 -2998
- 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 -4425
- 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 -452
- package/test/conflict-ledger.test.js +242 -242
- 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 -432
- 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 -174
- 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 -333
- 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 -259
- 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 -109
- 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 -553
- 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 -90
- package/test/panel-tokens.test.js +245 -245
- 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 -156
- package/test/release-notes.test.js +265 -265
- 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 -188
- 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 -1455
- 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 -734
- package/test/wiki-claims.test.js +194 -194
- 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 -202
- package/test/wiki-queries.test.js +398 -398
- package/test/wiki-scan.test.js +208 -208
- package/test/wiki-store.test.js +190 -190
- package/test/wiki-t0.test.js +456 -456
- package/test/wiki-t1-jobs.test.js +125 -125
- package/test/wiki-t1.test.js +460 -460
- 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,113 +1,113 @@
|
|
|
1
|
-
// 两份 README 曾经都写着「默认全离线」「offline by default」「默认零网络依赖」——
|
|
2
|
-
// 这与代码默认值相反:autoDream 与 autoSummarize 默认开(src/config.js),
|
|
3
|
-
// 两者都把记忆正文交给 ctx.llm.stream(...)(src/dream.js / src/summarize.js);
|
|
4
|
-
// embedProvider 默认还是 "openai",只有显式改成 "local"(ONNX)才真正离线。
|
|
5
|
-
// 一句假话比不写更坏:读者会据此以为装完就能断网用,而它默认会把正文发给宿主模型。
|
|
6
|
-
// 所以这里锁两件事:一、绝对离线声明不许回来;二、隐私节必须写出「巩固走宿主模型」这个出站事实——
|
|
7
|
-
// 删掉假话后如果什么都不说,误导是一样的。
|
|
8
|
-
import test from "node:test";
|
|
9
|
-
import assert from "node:assert/strict";
|
|
10
|
-
import { readFileSync, existsSync } from "node:fs";
|
|
11
|
-
import { fileURLToPath } from "node:url";
|
|
12
|
-
import path from "node:path";
|
|
13
|
-
|
|
14
|
-
const pkgRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
|
|
15
|
-
const repoRoot = path.dirname(pkgRoot);
|
|
16
|
-
const rootReadmePath = path.join(repoRoot, "README.md");
|
|
17
|
-
|
|
18
|
-
// npm 的 files 清单把整个 test/ 打进包里,所以在 packed / installed 包里跑 npm test 时,
|
|
19
|
-
// 这个文件照样会被执行——但那里没有仓库根 README(只有包内 dsh-mneme/README.md)。
|
|
20
|
-
// 直接 readFileSync 会让整个测试文件在加载阶段 ENOENT 崩掉,把「不是这个仓」报成「断言失败」。
|
|
21
|
-
// 所以仓库根不在时显式 skip:这条守卫的适用面本来就只是仓库,不该在包内假红。
|
|
22
|
-
const hasRepoRoot = existsSync(rootReadmePath);
|
|
23
|
-
const rootReadme = hasRepoRoot ? readFileSync(rootReadmePath, "utf8") : "";
|
|
24
|
-
const pkgReadme = readFileSync(path.join(pkgRoot, "README.md"), "utf8");
|
|
25
|
-
const outsideRepo = hasRepoRoot ? {} : { skip: "not a repo checkout: 仓库根 README 不存在(包内安装态)" };
|
|
26
|
-
|
|
27
|
-
// 只锁「默认 / 无条件」的说法。带条件的离线表述(把 embedProvider 改成 local、离线巩固论文、
|
|
28
|
-
// 运行时离线取件)都是真话,不在这个列表里,否则守卫会把正确写法也判红。
|
|
29
|
-
const ABSOLUTE_CLAIMS = [
|
|
30
|
-
"默认全离线",
|
|
31
|
-
"默认零网络依赖",
|
|
32
|
-
"offline by default",
|
|
33
|
-
"Zero network dependency by default",
|
|
34
|
-
"完全离线的语义记忆引擎",
|
|
35
|
-
];
|
|
36
|
-
|
|
37
|
-
function section(text, heading) {
|
|
38
|
-
const start = text.indexOf(heading);
|
|
39
|
-
assert.ok(start >= 0, `README 里应有「${heading}」一节`);
|
|
40
|
-
const rest = text.slice(start + heading.length);
|
|
41
|
-
const next = rest.search(/\r?\n## /);
|
|
42
|
-
return next === -1 ? rest : rest.slice(0, next);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
test("两份 README 都不许再把「离线」写成默认行为", outsideRepo, () => {
|
|
46
|
-
for (const [name, text] of [
|
|
47
|
-
["README.md", rootReadme],
|
|
48
|
-
["dsh-mneme/README.md", pkgReadme],
|
|
49
|
-
]) {
|
|
50
|
-
for (const claim of ABSOLUTE_CLAIMS) {
|
|
51
|
-
assert.ok(!text.includes(claim), `${name} 仍含绝对离线声明:${claim}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
test("隐私节必须写出「巩固与摘要走宿主模型」这个出站事实", outsideRepo, () => {
|
|
57
|
-
const zh = section(rootReadme, "## 隐私承诺");
|
|
58
|
-
assert.ok(zh.includes("宿主模型"), "中文隐私节应说明巩固与摘要走宿主模型");
|
|
59
|
-
assert.ok(
|
|
60
|
-
zh.includes("autoDream") || zh.includes("autoSummarize"),
|
|
61
|
-
"中文隐私节应点名 autoDream / autoSummarize,否则读者不知道是谁在出站",
|
|
62
|
-
);
|
|
63
|
-
const en = section(rootReadme, "## Privacy");
|
|
64
|
-
assert.ok(
|
|
65
|
-
en.includes("host model"),
|
|
66
|
-
"English Privacy section should disclose that consolidation uses the host model",
|
|
67
|
-
);
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// 「模型工具」表是代码的投影,不是愿望清单(AGENTS.md 给 SECURITY.md 定的那条规矩,
|
|
71
|
-
// 这张表一直没有)。它已经跑偏两次:#471 加 set_scope_state、#231 加 memory_organize,
|
|
72
|
-
// 两次都没人回头改表或改那个数字——因为没人核过。所以这里全部**从代码反推**:
|
|
73
|
-
// 工具集从 tools.js 的 name: "…" 取,opt-in 从 hiddenTools 的 `!== true` 判据取
|
|
74
|
-
// (`=== true` 那种是「默认在、用户可关」,不能算进 opt-in,否则默认注册数会算少)。
|
|
75
|
-
test("包 README 的「模型工具」表与 tools.js 注册表一致", () => {
|
|
76
|
-
const toolsSrc = readFileSync(path.join(pkgRoot, "src/tools.js"), "utf8");
|
|
77
|
-
const declared = [...toolsSrc.matchAll(/^ {6}name: "((?:memory_|set_scope)[a-z_]*)",/gm)].map((m) => m[1]);
|
|
78
|
-
assert.ok(declared.length >= 10, `tools.js 的工具名解析失败(只看到 ${declared.length} 个)——先修这条守卫,别改表`);
|
|
79
|
-
const optIn = [...toolsSrc.matchAll(/if \(config\?\.(\w+) !== true\) hiddenTools\.add\("([a-z_]+)"\)/g)]
|
|
80
|
-
.map((m) => ({ key: m[1], tool: m[2] }));
|
|
81
|
-
const defaultCount = declared.length - optIn.length;
|
|
82
|
-
|
|
83
|
-
const heading = pkgReadme.match(/^### 模型工具(([^)]*))$/m);
|
|
84
|
-
assert.ok(heading, "包 README 应有「### 模型工具(N 个)」这一节标题(标题格式变了就同步改这条守卫)");
|
|
85
|
-
const bodyStart = pkgReadme.indexOf(heading[0]);
|
|
86
|
-
const bodyRest = pkgReadme.slice(bodyStart + heading[0].length);
|
|
87
|
-
const nextSection = bodyRest.search(/\r?\n#{2,3} /);
|
|
88
|
-
const body = nextSection === -1 ? bodyRest : bodyRest.slice(0, nextSection);
|
|
89
|
-
const rows = [...body.matchAll(/^\| `([a-z_]+)` \|/gm)].map((m) => m[1]);
|
|
90
|
-
|
|
91
|
-
assert.deepEqual(
|
|
92
|
-
[...new Set(declared)].sort(),
|
|
93
|
-
[...new Set(rows)].sort(),
|
|
94
|
-
"表与注册表必须一一对应:少了是漏文档,多了是文档写了不存在的东西"
|
|
95
|
-
);
|
|
96
|
-
assert.equal(rows.length, new Set(rows).size, "表里不许有重复行(重复行会让数量核对失效)");
|
|
97
|
-
// 按**顺序**比数字,不是各自 includes:把「默认注册 11 个;开后 12 个」写成
|
|
98
|
-
// 「默认 12、开后 11」时,两个独立的 includes 都会绿——而那正是这条守卫要防的
|
|
99
|
-
// 第二种错法(第一种是数字与表不符,已被上面的集合比对盖住)。
|
|
100
|
-
const nums = (heading[1].match(/\d+/g) ?? []).map(Number);
|
|
101
|
-
const expected = optIn.length ? [defaultCount, declared.length] : [defaultCount];
|
|
102
|
-
assert.deepEqual(
|
|
103
|
-
nums,
|
|
104
|
-
expected,
|
|
105
|
-
`标题里的数字要按序是「默认注册数、全数」= ${expected.join(" 与 ")}(实跑 ${nums.join(" 与 ") || "没有数字"})`
|
|
106
|
-
);
|
|
107
|
-
// opt-in 工具那一行必须点名它的开关:读者看到表里有它,得知道默认是不出现的。
|
|
108
|
-
for (const { key, tool } of optIn) {
|
|
109
|
-
const row = body.match(new RegExp(`^\\| \`${tool}\` \\|(.*)$`, "m"));
|
|
110
|
-
assert.ok(row, `${tool} 必须在表里`);
|
|
111
|
-
assert.ok(row[1].includes(key), `${tool} 那行要写明它需要 ${key} 才注册`);
|
|
112
|
-
}
|
|
113
|
-
});
|
|
1
|
+
// 两份 README 曾经都写着「默认全离线」「offline by default」「默认零网络依赖」——
|
|
2
|
+
// 这与代码默认值相反:autoDream 与 autoSummarize 默认开(src/config.js),
|
|
3
|
+
// 两者都把记忆正文交给 ctx.llm.stream(...)(src/dream.js / src/summarize.js);
|
|
4
|
+
// embedProvider 默认还是 "openai",只有显式改成 "local"(ONNX)才真正离线。
|
|
5
|
+
// 一句假话比不写更坏:读者会据此以为装完就能断网用,而它默认会把正文发给宿主模型。
|
|
6
|
+
// 所以这里锁两件事:一、绝对离线声明不许回来;二、隐私节必须写出「巩固走宿主模型」这个出站事实——
|
|
7
|
+
// 删掉假话后如果什么都不说,误导是一样的。
|
|
8
|
+
import test from "node:test";
|
|
9
|
+
import assert from "node:assert/strict";
|
|
10
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
11
|
+
import { fileURLToPath } from "node:url";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
|
|
14
|
+
const pkgRoot = path.dirname(path.dirname(fileURLToPath(import.meta.url)));
|
|
15
|
+
const repoRoot = path.dirname(pkgRoot);
|
|
16
|
+
const rootReadmePath = path.join(repoRoot, "README.md");
|
|
17
|
+
|
|
18
|
+
// npm 的 files 清单把整个 test/ 打进包里,所以在 packed / installed 包里跑 npm test 时,
|
|
19
|
+
// 这个文件照样会被执行——但那里没有仓库根 README(只有包内 dsh-mneme/README.md)。
|
|
20
|
+
// 直接 readFileSync 会让整个测试文件在加载阶段 ENOENT 崩掉,把「不是这个仓」报成「断言失败」。
|
|
21
|
+
// 所以仓库根不在时显式 skip:这条守卫的适用面本来就只是仓库,不该在包内假红。
|
|
22
|
+
const hasRepoRoot = existsSync(rootReadmePath);
|
|
23
|
+
const rootReadme = hasRepoRoot ? readFileSync(rootReadmePath, "utf8") : "";
|
|
24
|
+
const pkgReadme = readFileSync(path.join(pkgRoot, "README.md"), "utf8");
|
|
25
|
+
const outsideRepo = hasRepoRoot ? {} : { skip: "not a repo checkout: 仓库根 README 不存在(包内安装态)" };
|
|
26
|
+
|
|
27
|
+
// 只锁「默认 / 无条件」的说法。带条件的离线表述(把 embedProvider 改成 local、离线巩固论文、
|
|
28
|
+
// 运行时离线取件)都是真话,不在这个列表里,否则守卫会把正确写法也判红。
|
|
29
|
+
const ABSOLUTE_CLAIMS = [
|
|
30
|
+
"默认全离线",
|
|
31
|
+
"默认零网络依赖",
|
|
32
|
+
"offline by default",
|
|
33
|
+
"Zero network dependency by default",
|
|
34
|
+
"完全离线的语义记忆引擎",
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
function section(text, heading) {
|
|
38
|
+
const start = text.indexOf(heading);
|
|
39
|
+
assert.ok(start >= 0, `README 里应有「${heading}」一节`);
|
|
40
|
+
const rest = text.slice(start + heading.length);
|
|
41
|
+
const next = rest.search(/\r?\n## /);
|
|
42
|
+
return next === -1 ? rest : rest.slice(0, next);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
test("两份 README 都不许再把「离线」写成默认行为", outsideRepo, () => {
|
|
46
|
+
for (const [name, text] of [
|
|
47
|
+
["README.md", rootReadme],
|
|
48
|
+
["dsh-mneme/README.md", pkgReadme],
|
|
49
|
+
]) {
|
|
50
|
+
for (const claim of ABSOLUTE_CLAIMS) {
|
|
51
|
+
assert.ok(!text.includes(claim), `${name} 仍含绝对离线声明:${claim}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
test("隐私节必须写出「巩固与摘要走宿主模型」这个出站事实", outsideRepo, () => {
|
|
57
|
+
const zh = section(rootReadme, "## 隐私承诺");
|
|
58
|
+
assert.ok(zh.includes("宿主模型"), "中文隐私节应说明巩固与摘要走宿主模型");
|
|
59
|
+
assert.ok(
|
|
60
|
+
zh.includes("autoDream") || zh.includes("autoSummarize"),
|
|
61
|
+
"中文隐私节应点名 autoDream / autoSummarize,否则读者不知道是谁在出站",
|
|
62
|
+
);
|
|
63
|
+
const en = section(rootReadme, "## Privacy");
|
|
64
|
+
assert.ok(
|
|
65
|
+
en.includes("host model"),
|
|
66
|
+
"English Privacy section should disclose that consolidation uses the host model",
|
|
67
|
+
);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
// 「模型工具」表是代码的投影,不是愿望清单(AGENTS.md 给 SECURITY.md 定的那条规矩,
|
|
71
|
+
// 这张表一直没有)。它已经跑偏两次:#471 加 set_scope_state、#231 加 memory_organize,
|
|
72
|
+
// 两次都没人回头改表或改那个数字——因为没人核过。所以这里全部**从代码反推**:
|
|
73
|
+
// 工具集从 tools.js 的 name: "…" 取,opt-in 从 hiddenTools 的 `!== true` 判据取
|
|
74
|
+
// (`=== true` 那种是「默认在、用户可关」,不能算进 opt-in,否则默认注册数会算少)。
|
|
75
|
+
test("包 README 的「模型工具」表与 tools.js 注册表一致", () => {
|
|
76
|
+
const toolsSrc = readFileSync(path.join(pkgRoot, "src/tools.js"), "utf8");
|
|
77
|
+
const declared = [...toolsSrc.matchAll(/^ {6}name: "((?:memory_|set_scope)[a-z_]*)",/gm)].map((m) => m[1]);
|
|
78
|
+
assert.ok(declared.length >= 10, `tools.js 的工具名解析失败(只看到 ${declared.length} 个)——先修这条守卫,别改表`);
|
|
79
|
+
const optIn = [...toolsSrc.matchAll(/if \(config\?\.(\w+) !== true\) hiddenTools\.add\("([a-z_]+)"\)/g)]
|
|
80
|
+
.map((m) => ({ key: m[1], tool: m[2] }));
|
|
81
|
+
const defaultCount = declared.length - optIn.length;
|
|
82
|
+
|
|
83
|
+
const heading = pkgReadme.match(/^### 模型工具(([^)]*))$/m);
|
|
84
|
+
assert.ok(heading, "包 README 应有「### 模型工具(N 个)」这一节标题(标题格式变了就同步改这条守卫)");
|
|
85
|
+
const bodyStart = pkgReadme.indexOf(heading[0]);
|
|
86
|
+
const bodyRest = pkgReadme.slice(bodyStart + heading[0].length);
|
|
87
|
+
const nextSection = bodyRest.search(/\r?\n#{2,3} /);
|
|
88
|
+
const body = nextSection === -1 ? bodyRest : bodyRest.slice(0, nextSection);
|
|
89
|
+
const rows = [...body.matchAll(/^\| `([a-z_]+)` \|/gm)].map((m) => m[1]);
|
|
90
|
+
|
|
91
|
+
assert.deepEqual(
|
|
92
|
+
[...new Set(declared)].sort(),
|
|
93
|
+
[...new Set(rows)].sort(),
|
|
94
|
+
"表与注册表必须一一对应:少了是漏文档,多了是文档写了不存在的东西"
|
|
95
|
+
);
|
|
96
|
+
assert.equal(rows.length, new Set(rows).size, "表里不许有重复行(重复行会让数量核对失效)");
|
|
97
|
+
// 按**顺序**比数字,不是各自 includes:把「默认注册 11 个;开后 12 个」写成
|
|
98
|
+
// 「默认 12、开后 11」时,两个独立的 includes 都会绿——而那正是这条守卫要防的
|
|
99
|
+
// 第二种错法(第一种是数字与表不符,已被上面的集合比对盖住)。
|
|
100
|
+
const nums = (heading[1].match(/\d+/g) ?? []).map(Number);
|
|
101
|
+
const expected = optIn.length ? [defaultCount, declared.length] : [defaultCount];
|
|
102
|
+
assert.deepEqual(
|
|
103
|
+
nums,
|
|
104
|
+
expected,
|
|
105
|
+
`标题里的数字要按序是「默认注册数、全数」= ${expected.join(" 与 ")}(实跑 ${nums.join(" 与 ") || "没有数字"})`
|
|
106
|
+
);
|
|
107
|
+
// opt-in 工具那一行必须点名它的开关:读者看到表里有它,得知道默认是不出现的。
|
|
108
|
+
for (const { key, tool } of optIn) {
|
|
109
|
+
const row = body.match(new RegExp(`^\\| \`${tool}\` \\|(.*)$`, "m"));
|
|
110
|
+
assert.ok(row, `${tool} 必须在表里`);
|
|
111
|
+
assert.ok(row[1].includes(key), `${tool} 那行要写明它需要 ${key} 才注册`);
|
|
112
|
+
}
|
|
113
|
+
});
|