@modusensus/dsh-mneme 0.13.0 → 0.14.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +830 -828
- package/assets/icon.svg +3 -3
- package/bin/cli.mjs +964 -964
- package/bin/dsh-mneme-choro.mjs +262 -254
- package/bin/dsh-mneme-mcp.mjs +510 -510
- package/bin/dsh-mneme-serve.mjs +151 -151
- package/cordis.patch.yml +21 -21
- package/docs/CONFIGURATION.md +407 -402
- package/docs/CONTINUITY.md +139 -139
- package/docs/DAEMON.md +57 -57
- package/docs/DIRECTORIES.md +114 -114
- package/docs/DISTILL.md +397 -371
- package/docs/DSH-GO.md +97 -97
- package/docs/ENTITIES.md +247 -247
- package/docs/FORGET.md +77 -77
- package/docs/KB.md +110 -110
- package/docs/LOCAL_MODEL.md +222 -222
- package/docs/SEMANTIC.md +256 -256
- package/docs/SHARE.md +552 -552
- package/docs/SLEEP.md +202 -202
- package/docs/STORAGE.md +122 -122
- package/docs/WORKFLOWS.md +366 -366
- package/lib/api-standalone.js +1007 -1007
- package/lib/api.js +3600 -3394
- package/lib/attachment-text.js +122 -122
- package/lib/bootstrap-http.js +105 -105
- package/lib/bootstrap.js +215 -215
- package/lib/candidates.js +454 -454
- package/lib/capabilities.js +819 -819
- package/lib/choro-command.js +111 -111
- package/lib/client.js +14420 -13436
- package/lib/commands.js +95 -95
- package/lib/config-keys.js +144 -144
- package/lib/config.js +1361 -1317
- package/lib/content-hash.js +54 -54
- package/lib/continuity.js +258 -258
- package/lib/date-hint.js +32 -0
- package/lib/diary/auto.js +190 -190
- package/lib/diary/compose.js +440 -440
- package/lib/diary/dir.js +59 -59
- package/lib/diary/export.js +97 -97
- package/lib/diary/index.js +26 -26
- package/lib/diary/library.js +189 -189
- package/lib/diary/qq-inbox.js +142 -142
- package/lib/diary/rollover.js +61 -61
- package/lib/diary/session-provider.js +122 -122
- package/lib/document-index.js +94 -94
- package/lib/document.js +322 -322
- package/lib/dream/clustering.js +123 -123
- package/lib/dream/decisions.js +945 -907
- package/lib/dream/narratives.js +44 -44
- package/lib/dream/sleep.js +2027 -1887
- package/lib/dream/triage.js +139 -0
- package/lib/dream.js +1879 -1764
- package/lib/dsh-go/host.js +162 -162
- package/lib/dsh-go/panel.js +2091 -2091
- package/lib/dsh-go/text.js +342 -342
- package/lib/dsh-go/views/common.js +68 -68
- package/lib/dsh-go/views/entity.js +48 -48
- package/lib/dsh-go/views/memory.js +198 -198
- package/lib/dsh-go/views/root.js +30 -30
- package/lib/dsh-go/views/settings.js +398 -398
- package/lib/dsh-go/views/status.js +51 -51
- package/lib/embedding.js +342 -342
- package/lib/entities/extractor.js +285 -285
- package/lib/fence.js +24 -24
- package/lib/graph/anchoring.js +184 -184
- package/lib/guide.js +74 -74
- package/lib/heat.js +144 -144
- package/lib/hot-memory.js +119 -107
- package/lib/image-describe.js +158 -0
- package/lib/index.js +852 -822
- package/lib/inject.js +656 -639
- package/lib/kb/index.js +309 -309
- package/lib/kb/routes.js +219 -219
- package/lib/kb/tools.js +148 -148
- package/lib/lang.js +607 -584
- package/lib/local-embedder.js +358 -358
- package/lib/maintenance.js +162 -162
- package/lib/memory-source.js +9 -9
- package/lib/mirror.js +330 -330
- package/lib/organize.js +456 -456
- package/lib/peak-hours.js +172 -172
- package/lib/pipeline-activities.js +178 -178
- package/lib/pipeline-attribution.js +165 -165
- package/lib/pipeline-command.js +279 -279
- package/lib/pipeline-confirm.js +142 -142
- package/lib/pipeline-exec.js +174 -174
- package/lib/pipeline-nudge-auto.js +129 -129
- package/lib/pipeline-nudge.js +1623 -1623
- package/lib/pipeline-observations.js +181 -181
- package/lib/pipeline-observe.js +133 -133
- package/lib/pipeline-runner.js +361 -361
- package/lib/pipeline-runs.js +442 -442
- package/lib/pipeline.js +716 -716
- package/lib/placement.js +13 -13
- package/lib/pre-inject-gate.js +354 -354
- package/lib/profile-extract.js +164 -164
- package/lib/profile-facts.js +356 -356
- package/lib/provenance-http.js +251 -251
- package/lib/quality-filter.js +162 -162
- package/lib/recall-stats.js +190 -190
- package/lib/reclaim-http.js +150 -150
- package/lib/reranker.js +269 -269
- package/lib/runtime/adopt.js +176 -176
- package/lib/runtime/closure.js +172 -172
- package/lib/runtime/download.js +247 -247
- package/lib/runtime/layout.js +265 -265
- package/lib/runtime/loader.js +252 -252
- package/lib/runtime/model-fetch.js +361 -361
- package/lib/runtime/provision.js +237 -237
- package/lib/runtime/tarball.js +130 -130
- package/lib/runtime/verify.js +223 -223
- package/lib/safe-slice.js +18 -18
- package/lib/scope-state.js +277 -277
- package/lib/scope.js +187 -187
- package/lib/search/adaptive.js +60 -60
- package/lib/search/bm25.js +96 -96
- package/lib/semantic.js +572 -572
- package/lib/sensitive-scan.js +209 -209
- package/lib/serve.js +228 -228
- package/lib/service.js +3268 -3196
- package/lib/session-gate.js +91 -91
- package/lib/session-usage.js +350 -350
- package/lib/settings.js +827 -802
- package/lib/share-http.js +281 -281
- package/lib/share-import.js +234 -234
- package/lib/share.js +335 -335
- package/lib/store.js +5895 -5662
- package/lib/summarize.js +1388 -1343
- package/lib/tools.js +1370 -1356
- package/lib/user-settings.js +230 -230
- package/lib/vector-index.js +180 -180
- package/lib/version-check.js +122 -122
- package/lib/wiki/claims.js +267 -0
- package/lib/wiki/cli-hint.js +90 -90
- package/lib/wiki/inject.js +164 -164
- package/lib/wiki/partition.js +200 -200
- package/lib/wiki/plan.js +214 -214
- package/lib/wiki/queries.js +640 -474
- package/lib/wiki/render.js +261 -187
- package/lib/wiki/scan.js +371 -371
- package/lib/wiki/t0.js +500 -463
- package/lib/wiki/t1-jobs.js +232 -232
- package/lib/wiki/t1.js +609 -502
- package/lib/write-admission.js +404 -404
- package/locale/en.json +6 -6
- package/locale/zh.json +6 -6
- package/package.json +15 -1
- package/runtime-manifest.json +526 -526
- package/scripts/benchmark-embed.js +201 -201
- package/scripts/benchmark-recall.js +249 -249
- package/scripts/benchmark-rerank.js +166 -166
- package/scripts/build-runtime-manifest.mjs +224 -224
- package/scripts/changelog-prep.mjs +91 -91
- package/scripts/check-sync.js +44 -44
- package/scripts/e2e-dsh.js +220 -220
- package/scripts/mneme-runtime.mjs +277 -277
- package/scripts/publish-gate.mjs +197 -197
- package/scripts/release-docs.mjs +210 -204
- package/scripts/release-notes.mjs +164 -161
- package/scripts/stress-dsh.js +255 -255
- package/scripts/sync-lib.js +47 -47
- package/scripts/sync-test-badge.mjs +69 -69
- package/scripts/test-count-sync.mjs +48 -48
- package/src/api-standalone.js +1007 -1007
- package/src/api.js +3600 -3394
- package/src/attachment-text.js +122 -122
- package/src/bootstrap-http.js +105 -105
- package/src/bootstrap.js +215 -215
- package/src/candidates.js +454 -454
- package/src/capabilities.js +819 -819
- package/src/choro-command.js +111 -111
- package/src/commands.js +95 -95
- package/src/config-keys.js +144 -144
- package/src/config.js +1361 -1317
- package/src/content-hash.js +54 -54
- package/src/continuity.js +258 -258
- package/src/date-hint.js +32 -0
- package/src/diary/auto.js +190 -190
- package/src/diary/compose.js +440 -440
- package/src/diary/dir.js +59 -59
- package/src/diary/export.js +97 -97
- package/src/diary/index.js +26 -26
- package/src/diary/library.js +189 -189
- package/src/diary/qq-inbox.js +142 -142
- package/src/diary/rollover.js +61 -61
- package/src/diary/session-provider.js +122 -122
- package/src/document-index.js +94 -94
- package/src/document.js +322 -322
- package/src/dream/clustering.js +123 -123
- package/src/dream/decisions.js +945 -907
- package/src/dream/narratives.js +44 -44
- package/src/dream/sleep.js +2027 -1887
- package/src/dream/triage.js +139 -0
- package/src/dream.js +1879 -1764
- package/src/dsh-go/host.js +162 -162
- package/src/dsh-go/panel.js +2091 -2091
- package/src/dsh-go/text.js +342 -342
- package/src/dsh-go/views/common.js +68 -68
- package/src/dsh-go/views/entity.js +48 -48
- package/src/dsh-go/views/memory.js +198 -198
- package/src/dsh-go/views/root.js +30 -30
- package/src/dsh-go/views/settings.js +398 -398
- package/src/dsh-go/views/status.js +51 -51
- package/src/embedding.js +342 -342
- package/src/entities/extractor.js +285 -285
- package/src/fence.js +24 -24
- package/src/graph/anchoring.js +184 -184
- package/src/guide.js +74 -74
- package/src/heat.js +144 -144
- package/src/hot-memory.js +119 -107
- package/src/image-describe.js +158 -0
- package/src/index.js +852 -822
- package/src/inject.js +656 -639
- package/src/kb/index.js +309 -309
- package/src/kb/routes.js +219 -219
- package/src/kb/tools.js +148 -148
- package/src/lang.js +607 -584
- package/src/local-embedder.js +358 -358
- package/src/maintenance.js +162 -162
- package/src/memory-source.js +9 -9
- package/src/mirror.js +330 -330
- package/src/organize.js +456 -456
- package/src/peak-hours.js +172 -172
- package/src/pipeline-activities.js +178 -178
- package/src/pipeline-attribution.js +165 -165
- package/src/pipeline-command.js +279 -279
- package/src/pipeline-confirm.js +142 -142
- package/src/pipeline-exec.js +174 -174
- package/src/pipeline-nudge-auto.js +129 -129
- package/src/pipeline-nudge.js +1623 -1623
- package/src/pipeline-observations.js +181 -181
- package/src/pipeline-observe.js +133 -133
- package/src/pipeline-runner.js +361 -361
- package/src/pipeline-runs.js +442 -442
- package/src/pipeline.js +716 -716
- package/src/placement.js +13 -13
- package/src/pre-inject-gate.js +354 -354
- package/src/profile-extract.js +164 -164
- package/src/profile-facts.js +356 -356
- package/src/provenance-http.js +251 -251
- package/src/quality-filter.js +162 -162
- package/src/recall-stats.js +190 -190
- package/src/reclaim-http.js +150 -150
- package/src/reranker.js +269 -269
- package/src/runtime/adopt.js +176 -176
- package/src/runtime/closure.js +172 -172
- package/src/runtime/download.js +247 -247
- package/src/runtime/layout.js +265 -265
- package/src/runtime/loader.js +252 -252
- package/src/runtime/model-fetch.js +361 -361
- package/src/runtime/provision.js +237 -237
- package/src/runtime/tarball.js +130 -130
- package/src/runtime/verify.js +223 -223
- package/src/safe-slice.js +18 -18
- package/src/scope-state.js +277 -277
- package/src/scope.js +187 -187
- package/src/search/adaptive.js +60 -60
- package/src/search/bm25.js +96 -96
- package/src/semantic.js +572 -572
- package/src/sensitive-scan.js +209 -209
- package/src/serve.js +228 -228
- package/src/service.js +3268 -3196
- package/src/session-gate.js +91 -91
- package/src/session-usage.js +350 -350
- package/src/settings.js +827 -802
- package/src/share-http.js +281 -281
- package/src/share-import.js +234 -234
- package/src/share.js +335 -335
- package/src/store.js +5895 -5662
- package/src/summarize.js +1388 -1343
- package/src/tools.js +1370 -1356
- package/src/user-settings.js +230 -230
- package/src/vector-index.js +180 -180
- package/src/version-check.js +122 -122
- package/src/wiki/claims.js +267 -0
- package/src/wiki/cli-hint.js +90 -90
- package/src/wiki/inject.js +164 -164
- package/src/wiki/partition.js +200 -200
- package/src/wiki/plan.js +214 -214
- package/src/wiki/queries.js +640 -474
- package/src/wiki/render.js +261 -187
- package/src/wiki/scan.js +371 -371
- package/src/wiki/t0.js +500 -463
- package/src/wiki/t1-jobs.js +232 -232
- package/src/wiki/t1.js +609 -502
- package/src/write-admission.js +404 -404
- package/test/adaptive-inject-budget.test.js +85 -85
- package/test/api-hardening.test.js +173 -173
- package/test/api-nudge-route.test.js +259 -259
- package/test/api-routes-gaps.test.js +1092 -1092
- package/test/api.test.js +3007 -2988
- package/test/attachment-text.test.js +139 -139
- package/test/audit.test.js +448 -448
- package/test/baseline-persist.test.js +248 -248
- package/test/benchmark.test.js +94 -94
- package/test/bm25-corpus-cache.test.js +145 -145
- package/test/bootstrap.test.js +228 -228
- package/test/candidates.test.js +345 -345
- package/test/capabilities.test.js +577 -577
- package/test/capacity-warning.test.js +262 -262
- package/test/changelog-prep.test.js +125 -125
- package/test/choro-command.test.js +218 -218
- package/test/cli-enums.test.js +37 -37
- package/test/cli-flag-value.test.js +86 -86
- package/test/cli-receive.test.js +390 -390
- package/test/cli-share.test.js +437 -437
- package/test/client-share.test.js +225 -225
- package/test/client.test.js +4595 -4184
- package/test/clustering.test.js +100 -100
- package/test/commands.test.js +106 -106
- package/test/config-keys-routes.test.js +233 -233
- package/test/config.test.js +153 -153
- package/test/conflict-freeze.test.js +344 -344
- package/test/conflict-ledger-enforce.test.js +452 -0
- package/test/conflict-ledger.test.js +242 -0
- package/test/conflict-reviewed.test.js +79 -79
- package/test/content-hash.test.js +204 -204
- package/test/continuity.test.js +452 -452
- package/test/contrast.test.js +432 -320
- package/test/date-hint.test.js +156 -0
- package/test/dedupe-candidate-window.test.js +180 -180
- package/test/dependency-overrides.test.js +78 -78
- package/test/diary-library.test.js +187 -187
- package/test/diary.test.js +576 -576
- package/test/differentiate-feedback.test.js +248 -248
- package/test/distill-tx-embed-gap.test.js +110 -110
- package/test/docs-config-keys.test.js +65 -65
- package/test/document-dir.test.js +233 -233
- package/test/document.test.js +703 -703
- package/test/dream-archive-guardrail.test.js +116 -116
- package/test/dream-baseline-clamp.test.js +174 -0
- package/test/dream-candidate-hybrid.test.js +281 -281
- package/test/dream-coverage-degrade.test.js +86 -86
- package/test/dream-decision-evidence.test.js +314 -314
- package/test/dream-failure-backoff.test.js +173 -173
- package/test/dream-fence.test.js +207 -207
- package/test/dream-maxtokens-fallback.test.js +132 -132
- package/test/dream-merge-guardrail.test.js +219 -219
- package/test/dream-peak-hours.test.js +194 -194
- package/test/dream.test.js +1528 -1528
- package/test/dsh-go-host.test.js +134 -134
- package/test/dsh-go-panel-actions.test.js +854 -854
- package/test/dsh-go-panel.test.js +251 -251
- package/test/embed-ready-poll.test.js +94 -94
- package/test/embed-text-reasons.test.js +112 -112
- package/test/embedding-cache-f32.test.js +276 -276
- package/test/embedding-ready.test.js +226 -226
- package/test/entities.test.js +711 -711
- package/test/entity-recall.test.js +179 -179
- package/test/epistemic.test.js +325 -325
- package/test/failure-query.test.js +147 -147
- package/test/failure-retention.test.js +105 -105
- package/test/fnew-0112.test.js +311 -311
- package/test/fnew-03.test.js +422 -422
- package/test/forget-corrections.test.js +70 -70
- package/test/graph-anchoring.test.js +184 -184
- package/test/graph-api.test.js +333 -209
- package/test/graph-boosted-relations.test.js +189 -189
- package/test/graph-inject-budget.test.js +103 -103
- package/test/graph-multipath.test.js +269 -269
- package/test/graph-passive-confirm.test.js +91 -91
- package/test/graph-weight-evolution.test.js +104 -104
- package/test/heat.test.js +175 -175
- package/test/helpers/dream-mock.js +86 -86
- package/test/helpers/peer-worker.mjs +25 -25
- package/test/helpers/runtime-source.js +60 -60
- package/test/helpers/tar-builder.js +80 -80
- package/test/helpers/write-admission-samples.js +312 -312
- package/test/hot-memory.test.js +259 -211
- package/test/image-description.test.js +271 -0
- package/test/image-memory.test.js +170 -170
- package/test/inject-content-cap.test.js +91 -91
- package/test/inject-first-round-bm25.test.js +89 -89
- package/test/inject-heat.test.js +77 -77
- package/test/inject-parent-gate.test.js +134 -106
- package/test/inject-pin-explicit.test.js +300 -300
- package/test/inject-pin-vector-crowd.test.js +225 -225
- package/test/inject-pools.test.js +195 -195
- package/test/inject-recall.test.js +172 -172
- package/test/inject-rotation.test.js +161 -161
- package/test/inject.test.js +553 -494
- package/test/issue-617-step1-query-and-fusion.test.js +361 -361
- package/test/kb-api-wiring.test.js +128 -128
- package/test/kb-collections.test.js +272 -272
- package/test/kb-routes.test.js +379 -379
- package/test/lang.test.js +98 -98
- package/test/lastrunat-persist.test.js +101 -101
- package/test/lib-smoke.test.js +116 -116
- package/test/llm-audit.test.js +815 -815
- package/test/llm-message-source.test.js +207 -207
- package/test/local-embedder.test.js +292 -292
- package/test/maintenance.test.js +501 -501
- package/test/mcp-stdio.test.js +385 -385
- package/test/mint-source.test.js +311 -311
- package/test/mirror-dirty.test.js +424 -424
- package/test/mirror-edit-digest.test.js +187 -187
- package/test/mirror-generation.test.js +499 -499
- package/test/mirror-types.test.js +208 -208
- package/test/mirror.test.js +249 -249
- package/test/narrative-bars.test.js +162 -162
- package/test/organize-tool.test.js +232 -232
- package/test/organize.test.js +418 -418
- package/test/panel-chart-scale.test.js +90 -0
- package/test/panel-tokens.test.js +245 -0
- package/test/peak-hours-observability.test.js +70 -70
- package/test/peer-blockers.test.js +193 -193
- package/test/persona-addressing.test.js +83 -83
- package/test/persona-api.test.js +172 -172
- package/test/persona-by-session.test.js +568 -568
- package/test/persona-flag.test.js +36 -36
- package/test/persona-inject.test.js +145 -145
- package/test/persona-settings.test.js +198 -198
- package/test/pipeline-activities.test.js +155 -155
- package/test/pipeline-attribution.test.js +175 -175
- package/test/pipeline-command.test.js +243 -243
- package/test/pipeline-confirm.test.js +148 -148
- package/test/pipeline-exec.test.js +172 -172
- package/test/pipeline-nudge-auto.test.js +248 -248
- package/test/pipeline-nudge.test.js +1278 -1278
- package/test/pipeline-observations.test.js +157 -157
- package/test/pipeline-observe.test.js +127 -127
- package/test/pipeline-r1r2.test.js +278 -278
- package/test/pipeline-runner.test.js +468 -468
- package/test/pipeline-runs.test.js +767 -767
- package/test/pipeline.test.js +636 -636
- package/test/placement.test.js +36 -36
- package/test/policy-epoch.test.js +259 -259
- package/test/pre-inject-gate.test.js +444 -444
- package/test/profile-extract.test.js +269 -269
- package/test/profile-facts.test.js +492 -492
- package/test/prompt-stance.test.js +128 -128
- package/test/provenance-http.test.js +367 -367
- package/test/publish-gate.test.js +272 -272
- package/test/quality-backfill.test.js +290 -290
- package/test/quality-filter.test.js +295 -295
- package/test/readme-claims.test.js +113 -113
- package/test/reasoning-effort.test.js +752 -752
- package/test/recall-anti-update.test.js +82 -82
- package/test/recall-evals.test.js +253 -253
- package/test/recall-layer.test.js +326 -326
- package/test/recall-retention.test.js +128 -128
- package/test/recall-stats.test.js +274 -274
- package/test/receipt-chain.test.js +451 -451
- package/test/reclaim-http.test.js +209 -209
- package/test/reflection-update-gate.test.js +129 -129
- package/test/reflection.test.js +226 -226
- package/test/reindex-backfill.test.js +475 -475
- package/test/reindex-scheduler.test.js +369 -369
- package/test/release-docs.test.js +156 -136
- package/test/release-notes.test.js +265 -240
- package/test/release-workflow.test.js +93 -93
- package/test/reranker-single-logit.test.js +73 -73
- package/test/reranker.test.js +197 -197
- package/test/resident-status.test.js +83 -83
- package/test/route-policy.test.js +113 -113
- package/test/runtime-adopt.test.js +206 -206
- package/test/runtime-cli.test.js +89 -89
- package/test/runtime-closure.test.js +193 -193
- package/test/runtime-download.test.js +302 -302
- package/test/runtime-layout.test.js +163 -163
- package/test/runtime-loader.test.js +255 -255
- package/test/runtime-manifest.test.js +159 -159
- package/test/runtime-model-fetch.test.js +348 -348
- package/test/runtime-provision.test.js +101 -101
- package/test/runtime-tarball.test.js +81 -81
- package/test/runtime-verify.test.js +319 -319
- package/test/scope-candidates.test.js +491 -491
- package/test/scope-distill-stamp.test.js +134 -134
- package/test/scope-explicit.test.js +452 -452
- package/test/scope-inject-soft.test.js +106 -106
- package/test/scope-optional-service.test.js +110 -110
- package/test/scope-retrieval.test.js +197 -197
- package/test/scope-state.test.js +610 -610
- package/test/scope-storage.test.js +255 -255
- package/test/scope-strict.test.js +367 -367
- package/test/search-fusion.test.js +90 -90
- package/test/security-doc.test.js +188 -178
- package/test/semantic.test.js +124 -124
- package/test/sensitive-scan.test.js +251 -251
- package/test/serve-bin.test.js +121 -121
- package/test/serve.test.js +258 -258
- package/test/service-search.test.js +174 -174
- package/test/service.test.js +410 -410
- package/test/session-gate.test.js +264 -264
- package/test/session-usage.test.js +317 -317
- package/test/settings.test.js +273 -273
- package/test/share-foreign-rows.test.js +144 -144
- package/test/share-http.test.js +144 -144
- package/test/share-import.test.js +577 -577
- package/test/share-imported-guard.test.js +311 -311
- package/test/share-imported-identity.test.js +111 -111
- package/test/share-pack.test.js +511 -511
- package/test/share-receive-http.test.js +756 -756
- package/test/share-routes.test.js +337 -337
- package/test/share-store.test.js +133 -133
- package/test/share-validate.test.js +101 -101
- package/test/skip-invalid-restore.test.js +262 -262
- package/test/sleep-action-set.test.js +441 -441
- package/test/sleep-catchup.test.js +315 -315
- package/test/sleep-failure-backoff.test.js +156 -156
- package/test/sleep-heat.test.js +174 -174
- package/test/sleep-scheduler-rearm.test.js +89 -89
- package/test/sleep.test.js +1455 -1418
- package/test/standalone-api.test.js +1344 -1344
- package/test/store-vector-cache.test.js +98 -98
- package/test/store-write-path-columns.test.js +191 -191
- package/test/store.test.js +744 -744
- package/test/stress.test.js +209 -209
- package/test/summarize-occurred-at.test.js +127 -127
- package/test/summarize-parse-diagnostics.test.js +75 -75
- package/test/summarize-reasoning-effort.test.js +189 -189
- package/test/summarize.test.js +2251 -2251
- package/test/supersede-state-tracking.test.js +394 -394
- package/test/test-count-sync.test.js +71 -71
- package/test/tool-state-ignore.test.js +65 -65
- package/test/tools-dto-schema-matrix.test.js +398 -398
- package/test/tools-memory-get-schema.test.js +65 -65
- package/test/tools.test.js +585 -585
- package/test/updated-at-semantics.test.js +113 -113
- package/test/user-settings-preview.test.js +127 -127
- package/test/user-settings-segments.test.js +527 -527
- package/test/vector-index.test.js +334 -334
- package/test/version-check.test.js +152 -152
- package/test/webServer-optional.test.js +82 -82
- package/test/wiki-api.test.js +734 -627
- package/test/wiki-claims.test.js +194 -0
- package/test/wiki-cli-hint.test.js +118 -118
- package/test/wiki-inject.test.js +265 -265
- package/test/wiki-partition.test.js +112 -112
- package/test/wiki-plan.test.js +80 -80
- package/test/wiki-provenance.test.js +202 -0
- package/test/wiki-queries.test.js +398 -277
- package/test/wiki-scan.test.js +208 -208
- package/test/wiki-store.test.js +190 -190
- package/test/wiki-t0.test.js +456 -380
- package/test/wiki-t1-jobs.test.js +125 -125
- package/test/wiki-t1.test.js +460 -235
- package/test/wiki-tools.test.js +176 -176
- package/test/workflow-guards.test.js +155 -155
- package/test/write-admission.test.js +668 -668
package/src/dsh-go/host.js
CHANGED
|
@@ -1,162 +1,162 @@
|
|
|
1
|
-
// In-process call into the mneme HTTP API.
|
|
2
|
-
//
|
|
3
|
-
// The panel runs inside the engine process, exactly where mneme registered its
|
|
4
|
-
// routes. Going through real HTTP would hit the dsh-go bridge guard (401 unless
|
|
5
|
-
// the request carries the process launch token, which is never written to disk),
|
|
6
|
-
// so we dispatch the registered route handler directly and never leave the
|
|
7
|
-
// process. Everything stays on the local web server table: no sockets.
|
|
8
|
-
//
|
|
9
|
-
// Auth is not skipped: mneme's route registrar wraps every route with a policy
|
|
10
|
-
// check, so a write route answers 401 unless the request carries the configured
|
|
11
|
-
// apiToken. We forward it as the x-dsh-mneme-token header (one of the two the
|
|
12
|
-
// registrar accepts) instead of weakening the policy for in-process callers.
|
|
13
|
-
import { EventEmitter } from "node:events";
|
|
14
|
-
|
|
15
|
-
const PREFIX = "/api/dsh-mneme";
|
|
16
|
-
const DEFAULT_TIMEOUT = 5000;
|
|
17
|
-
|
|
18
|
-
function makeRequest(url, method, body, apiToken) {
|
|
19
|
-
const req = new EventEmitter();
|
|
20
|
-
req.url = url;
|
|
21
|
-
req.method = method;
|
|
22
|
-
req.headers = {
|
|
23
|
-
host: "127.0.0.1",
|
|
24
|
-
"content-type": "application/json",
|
|
25
|
-
"content-length": String(body === undefined ? 0 : Buffer.byteLength(body)),
|
|
26
|
-
};
|
|
27
|
-
if (typeof apiToken === "string" && apiToken.length > 0) {
|
|
28
|
-
req.headers["x-dsh-mneme-token"] = apiToken;
|
|
29
|
-
}
|
|
30
|
-
req.socket = { remoteAddress: "127.0.0.1", encrypted: false };
|
|
31
|
-
req.resume = () => {};
|
|
32
|
-
req.pause = () => {};
|
|
33
|
-
req.setEncoding = () => {};
|
|
34
|
-
// The handler attaches its body listeners synchronously when invoked, so the
|
|
35
|
-
// body is only released afterwards by flushRequest(); emitting during
|
|
36
|
-
// construction would fire 'data'/'end' with no listener attached and the
|
|
37
|
-
// handler's readBody() would wait forever.
|
|
38
|
-
req.flush = () => {
|
|
39
|
-
queueMicrotask(() => {
|
|
40
|
-
if (body !== undefined) req.emit("data", Buffer.from(body));
|
|
41
|
-
req.emit("end");
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
return req;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function makeResponse() {
|
|
48
|
-
const chunks = [];
|
|
49
|
-
let settled;
|
|
50
|
-
const done = new Promise((resolve) => {
|
|
51
|
-
settled = resolve;
|
|
52
|
-
});
|
|
53
|
-
const headers = {};
|
|
54
|
-
const res = {
|
|
55
|
-
statusCode: 200,
|
|
56
|
-
headersSent: false,
|
|
57
|
-
done,
|
|
58
|
-
writeHead(status, extra) {
|
|
59
|
-
res.statusCode = status;
|
|
60
|
-
res.headersSent = true;
|
|
61
|
-
if (extra !== undefined && extra !== null) {
|
|
62
|
-
for (const key of Object.keys(extra)) headers[key.toLowerCase()] = extra[key];
|
|
63
|
-
}
|
|
64
|
-
return res;
|
|
65
|
-
},
|
|
66
|
-
setHeader(key, value) {
|
|
67
|
-
headers[key.toLowerCase()] = value;
|
|
68
|
-
return res;
|
|
69
|
-
},
|
|
70
|
-
getHeader(key) {
|
|
71
|
-
return headers[key.toLowerCase()];
|
|
72
|
-
},
|
|
73
|
-
removeHeader(key) {
|
|
74
|
-
delete headers[key.toLowerCase()];
|
|
75
|
-
},
|
|
76
|
-
write(chunk) {
|
|
77
|
-
if (chunk !== undefined && chunk !== null && typeof chunk !== "function") {
|
|
78
|
-
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
|
|
79
|
-
}
|
|
80
|
-
return true;
|
|
81
|
-
},
|
|
82
|
-
end(chunk) {
|
|
83
|
-
if (chunk !== undefined && chunk !== null && typeof chunk !== "function") {
|
|
84
|
-
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
|
|
85
|
-
}
|
|
86
|
-
settled();
|
|
87
|
-
return res;
|
|
88
|
-
},
|
|
89
|
-
flushHeaders() {},
|
|
90
|
-
};
|
|
91
|
-
res.text = () => Buffer.concat(chunks).toString("utf8");
|
|
92
|
-
res.bytes = () => Buffer.concat(chunks);
|
|
93
|
-
return res;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// 超时定时器不能被 unref():handler 永不响应时,它是唯一还挂在事件循环上的
|
|
97
|
-
// 东西;unref 之后 node 22 的 test runner 会判定循环已空,把用例记成 cancelled
|
|
98
|
-
// (CI 的 node22 两腿就是这么红的)。改成显式 cancel —— 成功路径也不白挂 5 秒。
|
|
99
|
-
function timeout(ms) {
|
|
100
|
-
let timer;
|
|
101
|
-
const promise = new Promise((_, reject) => {
|
|
102
|
-
timer = setTimeout(() => reject(new Error("mneme 接口超时")), ms);
|
|
103
|
-
});
|
|
104
|
-
return { promise, cancel: () => clearTimeout(timer) };
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Resolve the mneme route handler and run it in-process.
|
|
109
|
-
* @param {object} ctx - the plugin context (must expose get()).
|
|
110
|
-
* @param {{apiToken?: string}} [options] - the host's configured API token; the
|
|
111
|
-
* route registrar requires it for every token / token-write route.
|
|
112
|
-
*/
|
|
113
|
-
export function createHostCall(ctx, options = {}) {
|
|
114
|
-
const apiToken = options.apiToken;
|
|
115
|
-
return async function callMneme(path, options = {}) {
|
|
116
|
-
const method = (options.method ?? "GET").toUpperCase();
|
|
117
|
-
const body = options.body === undefined ? undefined : JSON.stringify(options.body);
|
|
118
|
-
const url = new URL(PREFIX + path, "http://127.0.0.1");
|
|
119
|
-
const webServer = ctx.get?.("webServer") ?? ctx.reflect?.get?.("webServer");
|
|
120
|
-
if (webServer === undefined || typeof webServer.match !== "function") {
|
|
121
|
-
throw new Error("宿主 webServer 不可用");
|
|
122
|
-
}
|
|
123
|
-
const route = webServer.match(url.pathname);
|
|
124
|
-
if (route === undefined || route === null) throw new Error(`mneme 未注册 ${url.pathname}`);
|
|
125
|
-
const req = makeRequest(url.pathname + url.search, method, body, apiToken);
|
|
126
|
-
const res = makeResponse();
|
|
127
|
-
let run;
|
|
128
|
-
try {
|
|
129
|
-
run = Promise.resolve(route.handler(req, res));
|
|
130
|
-
} finally {
|
|
131
|
-
req.flush();
|
|
132
|
-
}
|
|
133
|
-
// Wait for both: most routes return a promise and end the response inside it,
|
|
134
|
-
// but a few (version-check) return undefined and end later from a callback.
|
|
135
|
-
// Racing the three would return the moment the synchronous call returns and
|
|
136
|
-
// hand an empty body to the caller, which then looks like a failed fetch.
|
|
137
|
-
const guard = timeout(options.timeoutMs ?? DEFAULT_TIMEOUT);
|
|
138
|
-
try {
|
|
139
|
-
await Promise.race([
|
|
140
|
-
Promise.all([run, res.done]).then(() => undefined),
|
|
141
|
-
guard.promise,
|
|
142
|
-
]);
|
|
143
|
-
} finally {
|
|
144
|
-
guard.cancel();
|
|
145
|
-
}
|
|
146
|
-
const text = res.text();
|
|
147
|
-
if (res.statusCode >= 400) {
|
|
148
|
-
const detail = text.length > 200 ? `${text.slice(0, 200)}…` : text;
|
|
149
|
-
const error = new Error(`mneme ${method} ${path} → ${res.statusCode} ${detail}`);
|
|
150
|
-
error.status = res.statusCode;
|
|
151
|
-
error.body = text;
|
|
152
|
-
throw error;
|
|
153
|
-
}
|
|
154
|
-
if (options.raw === true) return text;
|
|
155
|
-
if (text === "") return {};
|
|
156
|
-
try {
|
|
157
|
-
return JSON.parse(text);
|
|
158
|
-
} catch {
|
|
159
|
-
return { text };
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
}
|
|
1
|
+
// In-process call into the mneme HTTP API.
|
|
2
|
+
//
|
|
3
|
+
// The panel runs inside the engine process, exactly where mneme registered its
|
|
4
|
+
// routes. Going through real HTTP would hit the dsh-go bridge guard (401 unless
|
|
5
|
+
// the request carries the process launch token, which is never written to disk),
|
|
6
|
+
// so we dispatch the registered route handler directly and never leave the
|
|
7
|
+
// process. Everything stays on the local web server table: no sockets.
|
|
8
|
+
//
|
|
9
|
+
// Auth is not skipped: mneme's route registrar wraps every route with a policy
|
|
10
|
+
// check, so a write route answers 401 unless the request carries the configured
|
|
11
|
+
// apiToken. We forward it as the x-dsh-mneme-token header (one of the two the
|
|
12
|
+
// registrar accepts) instead of weakening the policy for in-process callers.
|
|
13
|
+
import { EventEmitter } from "node:events";
|
|
14
|
+
|
|
15
|
+
const PREFIX = "/api/dsh-mneme";
|
|
16
|
+
const DEFAULT_TIMEOUT = 5000;
|
|
17
|
+
|
|
18
|
+
function makeRequest(url, method, body, apiToken) {
|
|
19
|
+
const req = new EventEmitter();
|
|
20
|
+
req.url = url;
|
|
21
|
+
req.method = method;
|
|
22
|
+
req.headers = {
|
|
23
|
+
host: "127.0.0.1",
|
|
24
|
+
"content-type": "application/json",
|
|
25
|
+
"content-length": String(body === undefined ? 0 : Buffer.byteLength(body)),
|
|
26
|
+
};
|
|
27
|
+
if (typeof apiToken === "string" && apiToken.length > 0) {
|
|
28
|
+
req.headers["x-dsh-mneme-token"] = apiToken;
|
|
29
|
+
}
|
|
30
|
+
req.socket = { remoteAddress: "127.0.0.1", encrypted: false };
|
|
31
|
+
req.resume = () => {};
|
|
32
|
+
req.pause = () => {};
|
|
33
|
+
req.setEncoding = () => {};
|
|
34
|
+
// The handler attaches its body listeners synchronously when invoked, so the
|
|
35
|
+
// body is only released afterwards by flushRequest(); emitting during
|
|
36
|
+
// construction would fire 'data'/'end' with no listener attached and the
|
|
37
|
+
// handler's readBody() would wait forever.
|
|
38
|
+
req.flush = () => {
|
|
39
|
+
queueMicrotask(() => {
|
|
40
|
+
if (body !== undefined) req.emit("data", Buffer.from(body));
|
|
41
|
+
req.emit("end");
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
return req;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function makeResponse() {
|
|
48
|
+
const chunks = [];
|
|
49
|
+
let settled;
|
|
50
|
+
const done = new Promise((resolve) => {
|
|
51
|
+
settled = resolve;
|
|
52
|
+
});
|
|
53
|
+
const headers = {};
|
|
54
|
+
const res = {
|
|
55
|
+
statusCode: 200,
|
|
56
|
+
headersSent: false,
|
|
57
|
+
done,
|
|
58
|
+
writeHead(status, extra) {
|
|
59
|
+
res.statusCode = status;
|
|
60
|
+
res.headersSent = true;
|
|
61
|
+
if (extra !== undefined && extra !== null) {
|
|
62
|
+
for (const key of Object.keys(extra)) headers[key.toLowerCase()] = extra[key];
|
|
63
|
+
}
|
|
64
|
+
return res;
|
|
65
|
+
},
|
|
66
|
+
setHeader(key, value) {
|
|
67
|
+
headers[key.toLowerCase()] = value;
|
|
68
|
+
return res;
|
|
69
|
+
},
|
|
70
|
+
getHeader(key) {
|
|
71
|
+
return headers[key.toLowerCase()];
|
|
72
|
+
},
|
|
73
|
+
removeHeader(key) {
|
|
74
|
+
delete headers[key.toLowerCase()];
|
|
75
|
+
},
|
|
76
|
+
write(chunk) {
|
|
77
|
+
if (chunk !== undefined && chunk !== null && typeof chunk !== "function") {
|
|
78
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
},
|
|
82
|
+
end(chunk) {
|
|
83
|
+
if (chunk !== undefined && chunk !== null && typeof chunk !== "function") {
|
|
84
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
|
|
85
|
+
}
|
|
86
|
+
settled();
|
|
87
|
+
return res;
|
|
88
|
+
},
|
|
89
|
+
flushHeaders() {},
|
|
90
|
+
};
|
|
91
|
+
res.text = () => Buffer.concat(chunks).toString("utf8");
|
|
92
|
+
res.bytes = () => Buffer.concat(chunks);
|
|
93
|
+
return res;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// 超时定时器不能被 unref():handler 永不响应时,它是唯一还挂在事件循环上的
|
|
97
|
+
// 东西;unref 之后 node 22 的 test runner 会判定循环已空,把用例记成 cancelled
|
|
98
|
+
// (CI 的 node22 两腿就是这么红的)。改成显式 cancel —— 成功路径也不白挂 5 秒。
|
|
99
|
+
function timeout(ms) {
|
|
100
|
+
let timer;
|
|
101
|
+
const promise = new Promise((_, reject) => {
|
|
102
|
+
timer = setTimeout(() => reject(new Error("mneme 接口超时")), ms);
|
|
103
|
+
});
|
|
104
|
+
return { promise, cancel: () => clearTimeout(timer) };
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Resolve the mneme route handler and run it in-process.
|
|
109
|
+
* @param {object} ctx - the plugin context (must expose get()).
|
|
110
|
+
* @param {{apiToken?: string}} [options] - the host's configured API token; the
|
|
111
|
+
* route registrar requires it for every token / token-write route.
|
|
112
|
+
*/
|
|
113
|
+
export function createHostCall(ctx, options = {}) {
|
|
114
|
+
const apiToken = options.apiToken;
|
|
115
|
+
return async function callMneme(path, options = {}) {
|
|
116
|
+
const method = (options.method ?? "GET").toUpperCase();
|
|
117
|
+
const body = options.body === undefined ? undefined : JSON.stringify(options.body);
|
|
118
|
+
const url = new URL(PREFIX + path, "http://127.0.0.1");
|
|
119
|
+
const webServer = ctx.get?.("webServer") ?? ctx.reflect?.get?.("webServer");
|
|
120
|
+
if (webServer === undefined || typeof webServer.match !== "function") {
|
|
121
|
+
throw new Error("宿主 webServer 不可用");
|
|
122
|
+
}
|
|
123
|
+
const route = webServer.match(url.pathname);
|
|
124
|
+
if (route === undefined || route === null) throw new Error(`mneme 未注册 ${url.pathname}`);
|
|
125
|
+
const req = makeRequest(url.pathname + url.search, method, body, apiToken);
|
|
126
|
+
const res = makeResponse();
|
|
127
|
+
let run;
|
|
128
|
+
try {
|
|
129
|
+
run = Promise.resolve(route.handler(req, res));
|
|
130
|
+
} finally {
|
|
131
|
+
req.flush();
|
|
132
|
+
}
|
|
133
|
+
// Wait for both: most routes return a promise and end the response inside it,
|
|
134
|
+
// but a few (version-check) return undefined and end later from a callback.
|
|
135
|
+
// Racing the three would return the moment the synchronous call returns and
|
|
136
|
+
// hand an empty body to the caller, which then looks like a failed fetch.
|
|
137
|
+
const guard = timeout(options.timeoutMs ?? DEFAULT_TIMEOUT);
|
|
138
|
+
try {
|
|
139
|
+
await Promise.race([
|
|
140
|
+
Promise.all([run, res.done]).then(() => undefined),
|
|
141
|
+
guard.promise,
|
|
142
|
+
]);
|
|
143
|
+
} finally {
|
|
144
|
+
guard.cancel();
|
|
145
|
+
}
|
|
146
|
+
const text = res.text();
|
|
147
|
+
if (res.statusCode >= 400) {
|
|
148
|
+
const detail = text.length > 200 ? `${text.slice(0, 200)}…` : text;
|
|
149
|
+
const error = new Error(`mneme ${method} ${path} → ${res.statusCode} ${detail}`);
|
|
150
|
+
error.status = res.statusCode;
|
|
151
|
+
error.body = text;
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
if (options.raw === true) return text;
|
|
155
|
+
if (text === "") return {};
|
|
156
|
+
try {
|
|
157
|
+
return JSON.parse(text);
|
|
158
|
+
} catch {
|
|
159
|
+
return { text };
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
}
|