@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
package/test/config.test.js
CHANGED
|
@@ -1,153 +1,153 @@
|
|
|
1
|
-
import test from "node:test";
|
|
2
|
-
import assert from "node:assert/strict";
|
|
3
|
-
import { readFileSync } from "node:fs";
|
|
4
|
-
import { fileURLToPath } from "node:url";
|
|
5
|
-
import { Config } from "../src/config.js";
|
|
6
|
-
import { isCodingTask } from "../src/service.js";
|
|
7
|
-
|
|
8
|
-
test("session incognito is opt-in, with a default-on subordinate selector", () => {
|
|
9
|
-
const cfg = Config({});
|
|
10
|
-
assert.equal(cfg.sessionGateEnabled, false);
|
|
11
|
-
assert.equal(cfg.sessionGateSubagents, true);
|
|
12
|
-
assert.deepEqual(cfg.sessionGateSessions, []);
|
|
13
|
-
assert.deepEqual(Config({ sessionGateSessions: ["s1", "s2"] }).sessionGateSessions, ["s1", "s2"]);
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// ---------------------------------------------------------------- rerank opt-in (item ⑥)
|
|
17
|
-
|
|
18
|
-
test("rerank is opt-in: default config does not enable the local reranker", () => {
|
|
19
|
-
const cfg = Config({});
|
|
20
|
-
assert.equal(cfg.rerankEnabled, false, "rerankEnabled defaults to false");
|
|
21
|
-
assert.equal(cfg.rerankProvider, "none", "rerankProvider defaults to none");
|
|
22
|
-
// The plugin gate in index.js: LocalReranker is only constructed when both
|
|
23
|
-
// hold — under defaults the gate is closed, so onnxruntime is never loaded.
|
|
24
|
-
assert.equal(cfg.rerankEnabled && cfg.rerankProvider === "local", false, "gate closed by default");
|
|
25
|
-
const enabled = Config({ rerankEnabled: true, rerankProvider: "local" });
|
|
26
|
-
assert.equal(enabled.rerankEnabled && enabled.rerankProvider === "local", true, "explicit opt-in opens the gate");
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
test("dream sliding window + implicit keep config defaults and bounds (v0.4.4)", () => {
|
|
30
|
-
const cfg = Config({});
|
|
31
|
-
assert.equal(cfg.dreamMaxSnapshotSize, 200, "window defaults to 200");
|
|
32
|
-
assert.equal(cfg.dreamImplicitKeep, true, "implicit keep defaults to true");
|
|
33
|
-
const capped = Config({ dreamMaxSnapshotSize: 1000 });
|
|
34
|
-
assert.equal(capped.dreamMaxSnapshotSize, 1000, "upper bound accepted");
|
|
35
|
-
const off = Config({ dreamImplicitKeep: false });
|
|
36
|
-
assert.equal(off.dreamImplicitKeep, false, "implicit keep can be disabled");
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test("dream explicit coverage threshold config defaults and bounds (v0.4.4 fix)", () => {
|
|
40
|
-
const cfg = Config({});
|
|
41
|
-
assert.equal(cfg.dreamMinExplicitCoverage, 0.5, "coverage threshold defaults to 0.5");
|
|
42
|
-
const low = Config({ dreamMinExplicitCoverage: 0.1 });
|
|
43
|
-
assert.equal(low.dreamMinExplicitCoverage, 0.1, "lower bound accepted");
|
|
44
|
-
const high = Config({ dreamMinExplicitCoverage: 1 });
|
|
45
|
-
assert.equal(high.dreamMinExplicitCoverage, 1, "upper bound accepted");
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
test("startup probe: the reranker module never statically imports transformers/onnxruntime", () => {
|
|
49
|
-
// LocalReranker is imported eagerly by index.js, so a bare install must not
|
|
50
|
-
// pull onnxruntime in at module load. The heavy load is a lazy dynamic import
|
|
51
|
-
// that only runs inside init(), which index.js calls only when the opt-in gate
|
|
52
|
-
// is open (rerankEnabled && rerankProvider === "local").
|
|
53
|
-
const src = readFileSync(new URL("../src/reranker.js", import.meta.url), "utf8");
|
|
54
|
-
assert.ok(
|
|
55
|
-
!src.includes('from "@huggingface/transformers"'),
|
|
56
|
-
"no static transformers.js import in reranker.js"
|
|
57
|
-
);
|
|
58
|
-
// issue #131 之后,懒加载的落点从 reranker 内部搬到了 src/runtime/loader.js
|
|
59
|
-
// (三层解析:自管 payload → 宿主裸 specifier)。判据随之改成两条,意图不变:
|
|
60
|
-
// reranker 不得静态导入,且必须经由 loader 间接加载;动态 import 只允许出现在
|
|
61
|
-
// loader 里(它是唯一知道「运行时从哪来」的模块)。
|
|
62
|
-
assert.match(src, /from "\.\/runtime\/loader\.js"/, "reranker 经 runtime/loader.js 取运行时");
|
|
63
|
-
assert.match(src, /loadTransformers\(/, "reranker 必须走三层解析,而不是自己拼 import");
|
|
64
|
-
assert.ok(
|
|
65
|
-
!/^\s*import[^\n]*@huggingface\/transformers/m.test(src),
|
|
66
|
-
"reranker 不允许任何形式的静态 transformers 导入"
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
const loaderSrc = readFileSync(new URL("../src/runtime/loader.js", import.meta.url), "utf8");
|
|
70
|
-
assert.match(loaderSrc, /import\(specifier\)/, "loader 用动态 import 保持懒加载");
|
|
71
|
-
assert.ok(
|
|
72
|
-
!/^\s*import[^\n]*@huggingface\/transformers/m.test(loaderSrc),
|
|
73
|
-
"loader 不得静态导入 transformers,否则惰性加载就失效了"
|
|
74
|
-
);
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
// ---------------------------------------------------------------- codingKeywords 工程协作词(2026-11-06)
|
|
78
|
-
// 生产日志里「合并 / 开 PR / 看 CI / 发版 / 验收 / 冲突 / 分支 / issue」这类
|
|
79
|
-
// 工程协作话在原 56 项词表里一个都不命中,被判成非编码任务,于是
|
|
80
|
-
// rejected_solution / pitfall / constraint 三类编码记忆被 codingGate 整类滤掉。
|
|
81
|
-
// 实测这类 query 占非编码调用的 17.1~17.8%。本组用例锁住补词后的词表与行为。
|
|
82
|
-
|
|
83
|
-
test("codingKeywords 覆盖工程协作动作,且不含歧义词", () => {
|
|
84
|
-
const { codingKeywords } = Config({});
|
|
85
|
-
|
|
86
|
-
// 这 34 项就是补进去的工程协作词,一个都不能少(少了就等于白改)。
|
|
87
|
-
// 不另加「长度必须是 90」的断言:那是把「逐词覆盖」和「不多不少」两个语义
|
|
88
|
-
// 绑在一处,删一个词会同时触发两条断言,看报告的人会误以为两条用例各自
|
|
89
|
-
// 独立兜底。逐词断言已经足够——多出来的词由下面的「不得含」三条反向兜住。
|
|
90
|
-
//
|
|
91
|
-
// 「审评」必须与「评审」并列:她真实说的是「等审评」「看CI和审评」(8 条 /
|
|
92
|
-
// 779 次),「评审」只有 4 条 / 420 次。同义不同形,子串匹配两套都得分开放。
|
|
93
|
-
const engineering = [
|
|
94
|
-
"提交", "合并", "分支", "冲突", "验收", "审查", "评审", "审评", "发版",
|
|
95
|
-
"仓库", "回滚", "推送", "拉取", "变基", "上线", "打包", "迁移",
|
|
96
|
-
"字段", "鉴权", "超时", "并发", "闪退", "白屏", "端口", "进程",
|
|
97
|
-
"守护", "定时任务", "索引", "缓存", "死锁", "内存泄漏", "日志",
|
|
98
|
-
"版本号", "环境变量"
|
|
99
|
-
];
|
|
100
|
-
for (const kw of engineering) {
|
|
101
|
-
assert.ok(codingKeywords.includes(kw), `缺少工程协作词「${kw}」`);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// 刻意不加的两个:
|
|
105
|
-
// 「事务」唯一命中是政治学简答「公共事务委托给企业和社会组织」,加进去
|
|
106
|
-
// 会把考研答题场景判成编码任务,方向正好相反。
|
|
107
|
-
// 「依赖包」纯冗余——「依赖」已在表内,它永远不会单独生效。
|
|
108
|
-
assert.ok(!codingKeywords.includes("事务"), "不得加「事务」:会把政治学简答判成编码任务");
|
|
109
|
-
assert.ok(!codingKeywords.includes("依赖包"), "不得加「依赖包」:「依赖」已在表内,纯冗余");
|
|
110
|
-
|
|
111
|
-
// 无重复
|
|
112
|
-
assert.equal(new Set(codingKeywords).size, codingKeywords.length, "词表不得有重复项");
|
|
113
|
-
|
|
114
|
-
// 英文词一律不加:isCodingTask 是纯子串匹配,无词边界的短英文词会误命中。
|
|
115
|
-
// 实测 pr 命中 69 条/6002 次,其中无词边界 30 条/3477 次(57.9%)是
|
|
116
|
-
// C:/Program File/GitHub CLI、pnpm 路径、prompt 这类文本。
|
|
117
|
-
for (const kw of ["pr", "ci", "push", "pull", "rebase", "revert", "diff"]) {
|
|
118
|
-
assert.ok(!codingKeywords.includes(kw), `不得加英文短词「${kw}」:无词边界会误命中`);
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
test("工程协作话被判成编码任务,考研答题话仍判成非编码", () => {
|
|
123
|
-
// 走生产的 isCodingTask,不在这里另写一份判断逻辑。
|
|
124
|
-
// 此前这条用例自己写 const isCoding = (t) => codingKeywords.some(...),
|
|
125
|
-
// 测的是「词表内容对不对」,不是「生产函数怎么用它」——实测把
|
|
126
|
-
// src/service.js 的 isCodingTask 改成永远 return false(整个编码门废掉),
|
|
127
|
-
// 全仓 177 个相关用例仍然全绿。所以这里必须 import 真函数。
|
|
128
|
-
const { codingKeywords } = Config({});
|
|
129
|
-
|
|
130
|
-
// 这些是她真实说过的工程协作话,补词前全部被判成非编码
|
|
131
|
-
for (const q of [
|
|
132
|
-
"提交这个issue然后你在主分支的基础上开分支修",
|
|
133
|
-
"先回帖再开分支。",
|
|
134
|
-
"合并",
|
|
135
|
-
"看看#536,解决冲突",
|
|
136
|
-
"看看ci和评审",
|
|
137
|
-
"A+B,今天就能发版",
|
|
138
|
-
"等审评。你看看#35那个pr。",
|
|
139
|
-
"按照你说的,先合并完前面的再开#493"
|
|
140
|
-
]) {
|
|
141
|
-
assert.equal(isCodingTask(q, codingKeywords), true, `「${q}」应判成编码任务`);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// 考研答题话:补词后仍然不能被判成编码任务,否则她的答题场景会注入编码踩坑
|
|
145
|
-
for (const q of [
|
|
146
|
-
"1.B,2.这个就是……政府职能转变,公共事务委托给企业和社会组织",
|
|
147
|
-
"背95单词",
|
|
148
|
-
"英语阅读 1 篇(2016 起正序)",
|
|
149
|
-
"631 专业课块 · 15:30–17:00"
|
|
150
|
-
]) {
|
|
151
|
-
assert.equal(isCodingTask(q, codingKeywords), false, `「${q}」应判成非编码任务`);
|
|
152
|
-
}
|
|
153
|
-
});
|
|
1
|
+
import test from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { readFileSync } from "node:fs";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { Config } from "../src/config.js";
|
|
6
|
+
import { isCodingTask } from "../src/service.js";
|
|
7
|
+
|
|
8
|
+
test("session incognito is opt-in, with a default-on subordinate selector", () => {
|
|
9
|
+
const cfg = Config({});
|
|
10
|
+
assert.equal(cfg.sessionGateEnabled, false);
|
|
11
|
+
assert.equal(cfg.sessionGateSubagents, true);
|
|
12
|
+
assert.deepEqual(cfg.sessionGateSessions, []);
|
|
13
|
+
assert.deepEqual(Config({ sessionGateSessions: ["s1", "s2"] }).sessionGateSessions, ["s1", "s2"]);
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// ---------------------------------------------------------------- rerank opt-in (item ⑥)
|
|
17
|
+
|
|
18
|
+
test("rerank is opt-in: default config does not enable the local reranker", () => {
|
|
19
|
+
const cfg = Config({});
|
|
20
|
+
assert.equal(cfg.rerankEnabled, false, "rerankEnabled defaults to false");
|
|
21
|
+
assert.equal(cfg.rerankProvider, "none", "rerankProvider defaults to none");
|
|
22
|
+
// The plugin gate in index.js: LocalReranker is only constructed when both
|
|
23
|
+
// hold — under defaults the gate is closed, so onnxruntime is never loaded.
|
|
24
|
+
assert.equal(cfg.rerankEnabled && cfg.rerankProvider === "local", false, "gate closed by default");
|
|
25
|
+
const enabled = Config({ rerankEnabled: true, rerankProvider: "local" });
|
|
26
|
+
assert.equal(enabled.rerankEnabled && enabled.rerankProvider === "local", true, "explicit opt-in opens the gate");
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("dream sliding window + implicit keep config defaults and bounds (v0.4.4)", () => {
|
|
30
|
+
const cfg = Config({});
|
|
31
|
+
assert.equal(cfg.dreamMaxSnapshotSize, 200, "window defaults to 200");
|
|
32
|
+
assert.equal(cfg.dreamImplicitKeep, true, "implicit keep defaults to true");
|
|
33
|
+
const capped = Config({ dreamMaxSnapshotSize: 1000 });
|
|
34
|
+
assert.equal(capped.dreamMaxSnapshotSize, 1000, "upper bound accepted");
|
|
35
|
+
const off = Config({ dreamImplicitKeep: false });
|
|
36
|
+
assert.equal(off.dreamImplicitKeep, false, "implicit keep can be disabled");
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("dream explicit coverage threshold config defaults and bounds (v0.4.4 fix)", () => {
|
|
40
|
+
const cfg = Config({});
|
|
41
|
+
assert.equal(cfg.dreamMinExplicitCoverage, 0.5, "coverage threshold defaults to 0.5");
|
|
42
|
+
const low = Config({ dreamMinExplicitCoverage: 0.1 });
|
|
43
|
+
assert.equal(low.dreamMinExplicitCoverage, 0.1, "lower bound accepted");
|
|
44
|
+
const high = Config({ dreamMinExplicitCoverage: 1 });
|
|
45
|
+
assert.equal(high.dreamMinExplicitCoverage, 1, "upper bound accepted");
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("startup probe: the reranker module never statically imports transformers/onnxruntime", () => {
|
|
49
|
+
// LocalReranker is imported eagerly by index.js, so a bare install must not
|
|
50
|
+
// pull onnxruntime in at module load. The heavy load is a lazy dynamic import
|
|
51
|
+
// that only runs inside init(), which index.js calls only when the opt-in gate
|
|
52
|
+
// is open (rerankEnabled && rerankProvider === "local").
|
|
53
|
+
const src = readFileSync(new URL("../src/reranker.js", import.meta.url), "utf8");
|
|
54
|
+
assert.ok(
|
|
55
|
+
!src.includes('from "@huggingface/transformers"'),
|
|
56
|
+
"no static transformers.js import in reranker.js"
|
|
57
|
+
);
|
|
58
|
+
// issue #131 之后,懒加载的落点从 reranker 内部搬到了 src/runtime/loader.js
|
|
59
|
+
// (三层解析:自管 payload → 宿主裸 specifier)。判据随之改成两条,意图不变:
|
|
60
|
+
// reranker 不得静态导入,且必须经由 loader 间接加载;动态 import 只允许出现在
|
|
61
|
+
// loader 里(它是唯一知道「运行时从哪来」的模块)。
|
|
62
|
+
assert.match(src, /from "\.\/runtime\/loader\.js"/, "reranker 经 runtime/loader.js 取运行时");
|
|
63
|
+
assert.match(src, /loadTransformers\(/, "reranker 必须走三层解析,而不是自己拼 import");
|
|
64
|
+
assert.ok(
|
|
65
|
+
!/^\s*import[^\n]*@huggingface\/transformers/m.test(src),
|
|
66
|
+
"reranker 不允许任何形式的静态 transformers 导入"
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
const loaderSrc = readFileSync(new URL("../src/runtime/loader.js", import.meta.url), "utf8");
|
|
70
|
+
assert.match(loaderSrc, /import\(specifier\)/, "loader 用动态 import 保持懒加载");
|
|
71
|
+
assert.ok(
|
|
72
|
+
!/^\s*import[^\n]*@huggingface\/transformers/m.test(loaderSrc),
|
|
73
|
+
"loader 不得静态导入 transformers,否则惰性加载就失效了"
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// ---------------------------------------------------------------- codingKeywords 工程协作词(2026-11-06)
|
|
78
|
+
// 生产日志里「合并 / 开 PR / 看 CI / 发版 / 验收 / 冲突 / 分支 / issue」这类
|
|
79
|
+
// 工程协作话在原 56 项词表里一个都不命中,被判成非编码任务,于是
|
|
80
|
+
// rejected_solution / pitfall / constraint 三类编码记忆被 codingGate 整类滤掉。
|
|
81
|
+
// 实测这类 query 占非编码调用的 17.1~17.8%。本组用例锁住补词后的词表与行为。
|
|
82
|
+
|
|
83
|
+
test("codingKeywords 覆盖工程协作动作,且不含歧义词", () => {
|
|
84
|
+
const { codingKeywords } = Config({});
|
|
85
|
+
|
|
86
|
+
// 这 34 项就是补进去的工程协作词,一个都不能少(少了就等于白改)。
|
|
87
|
+
// 不另加「长度必须是 90」的断言:那是把「逐词覆盖」和「不多不少」两个语义
|
|
88
|
+
// 绑在一处,删一个词会同时触发两条断言,看报告的人会误以为两条用例各自
|
|
89
|
+
// 独立兜底。逐词断言已经足够——多出来的词由下面的「不得含」三条反向兜住。
|
|
90
|
+
//
|
|
91
|
+
// 「审评」必须与「评审」并列:她真实说的是「等审评」「看CI和审评」(8 条 /
|
|
92
|
+
// 779 次),「评审」只有 4 条 / 420 次。同义不同形,子串匹配两套都得分开放。
|
|
93
|
+
const engineering = [
|
|
94
|
+
"提交", "合并", "分支", "冲突", "验收", "审查", "评审", "审评", "发版",
|
|
95
|
+
"仓库", "回滚", "推送", "拉取", "变基", "上线", "打包", "迁移",
|
|
96
|
+
"字段", "鉴权", "超时", "并发", "闪退", "白屏", "端口", "进程",
|
|
97
|
+
"守护", "定时任务", "索引", "缓存", "死锁", "内存泄漏", "日志",
|
|
98
|
+
"版本号", "环境变量"
|
|
99
|
+
];
|
|
100
|
+
for (const kw of engineering) {
|
|
101
|
+
assert.ok(codingKeywords.includes(kw), `缺少工程协作词「${kw}」`);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// 刻意不加的两个:
|
|
105
|
+
// 「事务」唯一命中是政治学简答「公共事务委托给企业和社会组织」,加进去
|
|
106
|
+
// 会把考研答题场景判成编码任务,方向正好相反。
|
|
107
|
+
// 「依赖包」纯冗余——「依赖」已在表内,它永远不会单独生效。
|
|
108
|
+
assert.ok(!codingKeywords.includes("事务"), "不得加「事务」:会把政治学简答判成编码任务");
|
|
109
|
+
assert.ok(!codingKeywords.includes("依赖包"), "不得加「依赖包」:「依赖」已在表内,纯冗余");
|
|
110
|
+
|
|
111
|
+
// 无重复
|
|
112
|
+
assert.equal(new Set(codingKeywords).size, codingKeywords.length, "词表不得有重复项");
|
|
113
|
+
|
|
114
|
+
// 英文词一律不加:isCodingTask 是纯子串匹配,无词边界的短英文词会误命中。
|
|
115
|
+
// 实测 pr 命中 69 条/6002 次,其中无词边界 30 条/3477 次(57.9%)是
|
|
116
|
+
// C:/Program File/GitHub CLI、pnpm 路径、prompt 这类文本。
|
|
117
|
+
for (const kw of ["pr", "ci", "push", "pull", "rebase", "revert", "diff"]) {
|
|
118
|
+
assert.ok(!codingKeywords.includes(kw), `不得加英文短词「${kw}」:无词边界会误命中`);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
test("工程协作话被判成编码任务,考研答题话仍判成非编码", () => {
|
|
123
|
+
// 走生产的 isCodingTask,不在这里另写一份判断逻辑。
|
|
124
|
+
// 此前这条用例自己写 const isCoding = (t) => codingKeywords.some(...),
|
|
125
|
+
// 测的是「词表内容对不对」,不是「生产函数怎么用它」——实测把
|
|
126
|
+
// src/service.js 的 isCodingTask 改成永远 return false(整个编码门废掉),
|
|
127
|
+
// 全仓 177 个相关用例仍然全绿。所以这里必须 import 真函数。
|
|
128
|
+
const { codingKeywords } = Config({});
|
|
129
|
+
|
|
130
|
+
// 这些是她真实说过的工程协作话,补词前全部被判成非编码
|
|
131
|
+
for (const q of [
|
|
132
|
+
"提交这个issue然后你在主分支的基础上开分支修",
|
|
133
|
+
"先回帖再开分支。",
|
|
134
|
+
"合并",
|
|
135
|
+
"看看#536,解决冲突",
|
|
136
|
+
"看看ci和评审",
|
|
137
|
+
"A+B,今天就能发版",
|
|
138
|
+
"等审评。你看看#35那个pr。",
|
|
139
|
+
"按照你说的,先合并完前面的再开#493"
|
|
140
|
+
]) {
|
|
141
|
+
assert.equal(isCodingTask(q, codingKeywords), true, `「${q}」应判成编码任务`);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// 考研答题话:补词后仍然不能被判成编码任务,否则她的答题场景会注入编码踩坑
|
|
145
|
+
for (const q of [
|
|
146
|
+
"1.B,2.这个就是……政府职能转变,公共事务委托给企业和社会组织",
|
|
147
|
+
"背95单词",
|
|
148
|
+
"英语阅读 1 篇(2016 起正序)",
|
|
149
|
+
"631 专业课块 · 15:30–17:00"
|
|
150
|
+
]) {
|
|
151
|
+
assert.equal(isCodingTask(q, codingKeywords), false, `「${q}」应判成非编码任务`);
|
|
152
|
+
}
|
|
153
|
+
});
|