dsh-standards 1.0.0 → 1.0.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/40-checker/README.md +2 -2
- package/40-checker/scripts/runtime-child.mjs +13 -0
- package/40-checker/src/cli.mjs +64 -5
- package/40-checker/src/manifest.mjs +20 -1
- package/40-checker/src/report.mjs +6 -1
- package/40-checker/src/semver.mjs +77 -11
- package/CHANGELOG.md +32 -0
- package/NOTICE +14 -0
- package/README.md +6 -6
- package/bin/dsh-standards.mjs +1 -0
- package/package.json +14 -5
- package/40-checker/.github/workflows/plugin-verify.yml +0 -70
- package/40-checker/results/boost/REPORT.md +0 -304
- package/40-checker/results/boost/lev12458.json +0 -1747
- package/40-checker/results/client/README.md +0 -16
- package/40-checker/results/entry/18/DDDMUC__dsh-free-search.json +0 -381
- package/40-checker/results/entry/18/DDDMUC__dsh-free-search.runtime.json +0 -34
- package/40-checker/results/entry/18/Ebony-Vinyl__dsh-our-free-model.json +0 -361
- package/40-checker/results/entry/18/Ebony-Vinyl__dsh-our-free-model.runtime.json +0 -34
- package/40-checker/results/entry/18/README.md +0 -24
- package/40-checker/results/entry/18/RUNTIME.md +0 -18
- package/40-checker/results/entry/18/SeaOf0__dsh-redteam-model.json +0 -391
- package/40-checker/results/entry/18/YuJunZhiXue__dsh-purge.json +0 -432
- package/40-checker/results/entry/18/ci-diet.json +0 -365
- package/40-checker/results/entry/18/ci-diet.runtime-attempt.json +0 -38
- package/40-checker/results/entry/18/daily-log.json +0 -357
- package/40-checker/results/entry/18/daily-log.runtime.json +0 -519
- package/40-checker/results/entry/18/fullbase/ATTRIBUTION.md +0 -29
- package/40-checker/results/entry/18/fullbase/DDDMUC__dsh-free-search.json +0 -99
- package/40-checker/results/entry/18/fullbase/Ebony-Vinyl__dsh-our-free-model.json +0 -95
- package/40-checker/results/entry/18/fullbase/REPORT.md +0 -261
- package/40-checker/results/entry/18/fullbase/SeaOf0__dsh-redteam-model.json +0 -144
- package/40-checker/results/entry/18/fullbase/YuJunZhiXue__dsh-purge.json +0 -106
- package/40-checker/results/entry/18/fullbase/ci-diet.json +0 -99
- package/40-checker/results/entry/18/fullbase/daily-log.json +0 -94
- package/40-checker/results/entry/18/fullbase/howmp__dsh-pentest.json +0 -104
- package/40-checker/results/entry/18/fullbase/kingcharleslzy-ai__dsh-purge.json +0 -143
- package/40-checker/results/entry/18/fullbase/liguobao__ds-harness-remote.json +0 -134
- package/40-checker/results/entry/18/fullbase/mmparko__dsh-purge.json +0 -138
- package/40-checker/results/entry/18/fullbase/project-memory.json +0 -108
- package/40-checker/results/entry/18/fullbase/qiushi.json +0 -94
- package/40-checker/results/entry/18/fullbase/shaobeichen__dsh-pocket.json +0 -94
- package/40-checker/results/entry/18/fullbase/status-rotator.json +0 -94
- package/40-checker/results/entry/18/fullbase/summary.json +0 -297
- package/40-checker/results/entry/18/fullbase/telemetry.json +0 -94
- package/40-checker/results/entry/18/fullbase/ui-auth.json +0 -94
- package/40-checker/results/entry/18/fullbase/verification.json +0 -94
- package/40-checker/results/entry/18/fullbase/ysr666__dsh-vision-router.json +0 -106
- package/40-checker/results/entry/18/howmp__dsh-pentest.json +0 -361
- package/40-checker/results/entry/18/kingcharleslzy-ai__dsh-purge.json +0 -411
- package/40-checker/results/entry/18/liguobao__ds-harness-remote.json +0 -379
- package/40-checker/results/entry/18/mmparko__dsh-purge.json +0 -441
- package/40-checker/results/entry/18/project-memory.json +0 -361
- package/40-checker/results/entry/18/project-memory.runtime.json +0 -519
- package/40-checker/results/entry/18/qiushi.json +0 -353
- package/40-checker/results/entry/18/qiushi.runtime.json +0 -519
- package/40-checker/results/entry/18/realweb/REPORT.md +0 -73
- package/40-checker/results/entry/18/realweb/SeaOf0__dsh-redteam-model.json +0 -104
- package/40-checker/results/entry/18/realweb/YuJunZhiXue__dsh-purge.json +0 -64
- package/40-checker/results/entry/18/realweb/howmp__dsh-pentest.json +0 -65
- package/40-checker/results/entry/18/realweb/kingcharleslzy-ai__dsh-purge.json +0 -75
- package/40-checker/results/entry/18/realweb/mmparko__dsh-purge.json +0 -70
- package/40-checker/results/entry/18/realweb/shaobeichen__dsh-pocket.json +0 -56
- package/40-checker/results/entry/18/realweb/summary.json +0 -196
- package/40-checker/results/entry/18/realweb/ui-auth.json +0 -56
- package/40-checker/results/entry/18/realweb/ysr666__dsh-vision-router.json +0 -61
- package/40-checker/results/entry/18/richbase/REPORT.md +0 -70
- package/40-checker/results/entry/18/richbase/SeaOf0__dsh-redteam-model.json +0 -61
- package/40-checker/results/entry/18/richbase/SeaOf0__dsh-redteam-model.log +0 -38
- package/40-checker/results/entry/18/shaobeichen__dsh-pocket.json +0 -363
- package/40-checker/results/entry/18/status-rotator.json +0 -362
- package/40-checker/results/entry/18/status-rotator.runtime.json +0 -519
- package/40-checker/results/entry/18/summary.json +0 -266
- package/40-checker/results/entry/18/targetonly/DDDMUC__dsh-free-search.json +0 -34
- package/40-checker/results/entry/18/targetonly/Ebony-Vinyl__dsh-our-free-model.json +0 -34
- package/40-checker/results/entry/18/targetonly/SeaOf0__dsh-redteam-model.json +0 -84
- package/40-checker/results/entry/18/targetonly/YuJunZhiXue__dsh-purge.json +0 -52
- package/40-checker/results/entry/18/targetonly/ci-diet.json +0 -34
- package/40-checker/results/entry/18/targetonly/daily-log.json +0 -34
- package/40-checker/results/entry/18/targetonly/howmp__dsh-pentest.json +0 -46
- package/40-checker/results/entry/18/targetonly/kingcharleslzy-ai__dsh-purge.json +0 -61
- package/40-checker/results/entry/18/targetonly/liguobao__ds-harness-remote.json +0 -39
- package/40-checker/results/entry/18/targetonly/mmparko__dsh-purge.json +0 -57
- package/40-checker/results/entry/18/targetonly/project-memory.json +0 -34
- package/40-checker/results/entry/18/targetonly/qiushi.json +0 -34
- package/40-checker/results/entry/18/targetonly/shaobeichen__dsh-pocket.json +0 -34
- package/40-checker/results/entry/18/targetonly/status-rotator.json +0 -34
- package/40-checker/results/entry/18/targetonly/summary.json +0 -133
- package/40-checker/results/entry/18/targetonly/telemetry.json +0 -34
- package/40-checker/results/entry/18/targetonly/ui-auth.json +0 -34
- package/40-checker/results/entry/18/targetonly/verification.json +0 -34
- package/40-checker/results/entry/18/targetonly/ysr666__dsh-vision-router.json +0 -43
- package/40-checker/results/entry/18/telemetry.json +0 -349
- package/40-checker/results/entry/18/ui-auth.json +0 -369
- package/40-checker/results/entry/18/verification.json +0 -358
- package/40-checker/results/entry/18/ysr666__dsh-vision-router.json +0 -409
- package/40-checker/results/fixtures/bad.json +0 -347
- package/40-checker/results/fixtures/bundle.json +0 -378
- package/40-checker/results/fixtures/good-listing.json +0 -382
- package/40-checker/results/fixtures/good-static.json +0 -322
- package/40-checker/results/fixtures/good.json +0 -375
- package/40-checker/results/fixtures/good.sarif +0 -274
- package/40-checker/results/flow/README.md +0 -19
- package/40-checker/results/flow/j3-j7-fixture.json +0 -51
- package/40-checker/results/flow/j5-j8-client-missing.json +0 -45
- package/40-checker/results/flow/j5-j8-good.json +0 -45
- package/40-checker/results/flow/journey-fixture-bundle.json +0 -90
- package/40-checker/results/flow/journey-fixture-j1-j2-j4-j6.json +0 -107
- package/40-checker/results/flow/real/DDDMUC__dsh-free-search.json +0 -297
- package/40-checker/results/flow/real/REPORT.md +0 -335
- package/40-checker/results/flow/real/YuJunZhiXue__dsh-purge.json +0 -317
- package/40-checker/results/flow/real/ci-diet.json +0 -351
- package/40-checker/results/flow/real/daily-log.json +0 -286
- package/40-checker/results/flow/real/index.json +0 -325
- package/40-checker/results/flow/real/project-memory.json +0 -290
- package/40-checker/results/flow/real/qiushi.json +0 -277
- package/40-checker/results/flow/real/status-rotator.json +0 -275
- package/40-checker/results/flow/real/telemetry.json +0 -178
- package/40-checker/results/flow/real/ui-auth.json +0 -288
- package/40-checker/results/flow/real/verification.json +0 -265
- package/40-checker/results/governance/co-maintainer-packet.md +0 -85
- package/40-checker/results/l1/ci-diet.json +0 -406
- package/40-checker/results/l1/npm-dsh-telemetry-redactor-0.1.0.json +0 -390
- package/40-checker/results/l1/npm-dsh-verification-receipt-0.1.0.json +0 -406
- package/40-checker/results/l1/npm-qiushi-dsh-evidence-audit-0.1.0.json +0 -394
- package/40-checker/results/l1/npm-zzerx-dsh-plugin-daily-log-0.4.3.json +0 -405
- package/40-checker/results/l1/project-memory.json +0 -402
- package/40-checker/results/l1/source-DDDMUC__dsh-free-search.json +0 -422
- package/40-checker/results/l1/source-Ebony-Vinyl__dsh-our-free-model.json +0 -421
- package/40-checker/results/l1/source-SeaOf0__dsh-redteam-model.json +0 -432
- package/40-checker/results/l1/source-YuJunZhiXue__dsh-purge.json +0 -473
- package/40-checker/results/l1/source-howmp__dsh-pentest.json +0 -402
- package/40-checker/results/l1/source-kingcharleslzy-ai__dsh-purge.json +0 -452
- package/40-checker/results/l1/source-liguobao__ds-harness-remote.json +0 -420
- package/40-checker/results/l1/source-mmparko__dsh-purge.json +0 -482
- package/40-checker/results/l1/source-shaobeichen__dsh-pocket.json +0 -404
- package/40-checker/results/l1/source-ysr666__dsh-vision-router.json +0 -384
- package/40-checker/results/l1/status-rotator.json +0 -403
- package/40-checker/results/l1/ui-auth.json +0 -429
- package/40-checker/results/l1/ysr666__dsh-vision-router.published.json +0 -384
- package/40-checker/results/lev3/REPORT.md +0 -342
- package/40-checker/results/lev3/lev3.json +0 -4835
- package/40-checker/results/lev6/REPORT.md +0 -460
- package/40-checker/results/lev6/capture-sample.json +0 -241
- package/40-checker/results/lev6/capture.jsonl +0 -4
- package/40-checker/results/lev6/lev6.json +0 -245
- package/40-checker/results/lev6/replication-r1.json +0 -245
- package/40-checker/results/levels/README.md +0 -16
- package/40-checker/results/levels/dsh-plugin-doctor.json +0 -141
- package/40-checker/results/levels/dsh-plugin-guide.json +0 -136
- package/40-checker/results/m1/dsh-ci-diet-0.5.2.json +0 -352
- package/40-checker/results/m1/dsh-status-rotator-0.38.0.json +0 -349
- package/40-checker/results/m1/dsh-telemetry-redactor-0.1.0.json +0 -336
- package/40-checker/results/m1/dsh-ui-auth-0.7.1.json +0 -356
- package/40-checker/results/m1/dsh-verification-receipt-0.1.0.json +0 -344
- package/40-checker/results/m1/index-level.json +0 -13
- package/40-checker/results/m1/levels.json +0 -72100
- package/40-checker/results/m1/qiushi-dsh-evidence-audit-0.1.0.json +0 -339
- package/40-checker/results/m1/yolk_vat-y-dsh-project-memory-0.6.7.json +0 -348
- package/40-checker/results/m1/zzerx-dsh-plugin-daily-log-0.4.3.json +0 -344
- package/40-checker/results/m2/dsh-ci-diet.json +0 -421
- package/40-checker/results/m2/dsh-ci-diet.unshare-landlock.json +0 -424
- package/40-checker/results/m2/dsh-ci-diet.unshare.json +0 -423
- package/40-checker/results/m2/fixture-bundle.image.json +0 -404
- package/40-checker/results/m2/fixture-bundle.json +0 -392
- package/40-checker/results/m2/fixture-bundle.landlock.json +0 -396
- package/40-checker/results/m2/fixture-bundle.unshare.json +0 -395
- package/40-checker/results/m2/fs-write.json +0 -338
- package/40-checker/results/m2/hang.json +0 -31
- package/40-checker/results/m2/hang.unshare-landlock.json +0 -34
- package/40-checker/results/m2/hang.unshare.json +0 -33
- package/40-checker/results/m2/project-memory.json +0 -417
- package/40-checker/results/m2/status-rotator.json +0 -418
- package/40-checker/results/m2/ui-auth.json +0 -444
- package/40-checker/results/negative/bad-entry.json +0 -345
- package/40-checker/results/negative/no-entry.json +0 -345
- package/40-checker/results/negative/no-patch.json +0 -344
- package/40-checker/results/negative/root-missing.json +0 -344
- package/40-checker/results/negative/root-missing.runtime.json +0 -30
- package/40-checker/results/negative/summary.json +0 -51
- package/40-checker/results/negative/workspace.json +0 -344
- package/40-checker/results/patched/Ebony-Vinyl__dsh-our-free-model.json +0 -334
- package/40-checker/results/patched/Ebony-Vinyl__dsh-our-free-model.overlay.json +0 -335
- package/40-checker/results/patched/SeaOf0__dsh-redteam-model.json +0 -315
- package/40-checker/results/patched/SeaOf0__dsh-redteam-model.overlay.json +0 -316
- package/40-checker/results/patched/mmparko__dsh-purge.json +0 -357
- package/40-checker/results/patched/mmparko__dsh-purge.overlay.json +0 -358
- package/40-checker/results/patched/shaobeichen__dsh-pocket.json +0 -315
- package/40-checker/results/patched/shaobeichen__dsh-pocket.overlay.json +0 -316
- package/40-checker/results/real/DDDMUC__dsh-free-search.json +0 -344
- package/40-checker/results/real/Ebony-Vinyl__dsh-our-free-model.json +0 -343
- package/40-checker/results/real/SeaOf0__dsh-redteam-model.json +0 -354
- package/40-checker/results/real/YuJunZhiXue__dsh-purge.json +0 -395
- package/40-checker/results/real/howmp__dsh-pentest.json +0 -324
- package/40-checker/results/real/kingcharleslzy-ai__dsh-purge.json +0 -374
- package/40-checker/results/real/liguobao__ds-harness-remote.json +0 -342
- package/40-checker/results/real/mmparko__dsh-purge.json +0 -404
- package/40-checker/results/real/shaobeichen__dsh-pocket.json +0 -326
- package/40-checker/results/real/ysr666__dsh-vision-router.json +0 -372
- package/40-checker/results/real/ysr666__dsh-vision-router.listing.json +0 -378
- package/40-checker/results/round-robin/compare.json +0 -52
- package/40-checker/results/round-robin/runner-a.json +0 -9
- package/40-checker/results/round-robin/runner-b.json +0 -9
- package/40-checker/results/sample20/123dbl__dsh-side-session.json +0 -344
- package/40-checker/results/sample20/173787247__dsh-wsl-dns.json +0 -360
- package/40-checker/results/sample20/863683348__dsh-insight.json +0 -375
- package/40-checker/results/sample20/Ansellwan__DSH-Custom-Wallpaper.json +0 -344
- package/40-checker/results/sample20/Jamailar__beav-deepseek-harness.json +0 -341
- package/40-checker/results/sample20/ManoloRemiddi__DSH-Metafolder-Plugin.json +0 -344
- package/40-checker/results/sample20/NEAZ71eve__dsh-tool-github.json +0 -384
- package/40-checker/results/sample20/README.md +0 -3
- package/40-checker/results/sample20/RINGOLINK__dsh-desktop-shell.json +0 -352
- package/40-checker/results/sample20/Zxznb666__dsh-qoder-cn-subagent.json +0 -349
- package/40-checker/results/sample20/agent-mobile__dsh-mobile-gateway.json +0 -353
- package/40-checker/results/sample20/fangqiing__dsh-knowledge-lite.json +0 -359
- package/40-checker/results/sample20/fzy0517__deepseek-harness-session-cleaner.json +0 -344
- package/40-checker/results/sample20/gjy1992__dsh-diagram.json +0 -350
- package/40-checker/results/sample20/mrme000m__dsh-prime-orchestrator.json +0 -414
- package/40-checker/results/sample20/redstonedust__dsh-solidworks-copilot.json +0 -362
- package/40-checker/results/sample20/summary.json +0 -234
- package/40-checker/results/sample20/w2112515__dsh-remote-host.json +0 -344
- package/40-checker/results/sample20/wkfedor__deepseek-harness-voice-input.json +0 -350
- package/40-checker/results/sample20/xfgil__dsh-hot-reloader.json +0 -344
- package/40-checker/results/sample20/yizhiyizhi0128__dsh-peak-scheduler.json +0 -360
- package/40-checker/results/sample20-ci/123dbl__dsh-side-session.json +0 -344
- package/40-checker/results/sample20-ci/173787247__dsh-wsl-dns.json +0 -360
- package/40-checker/results/sample20-ci/863683348__dsh-insight.json +0 -375
- package/40-checker/results/sample20-ci/Ansellwan__DSH-Custom-Wallpaper.json +0 -344
- package/40-checker/results/sample20-ci/Jamailar__beav-deepseek-harness.json +0 -367
- package/40-checker/results/sample20-ci/ManoloRemiddi__DSH-Metafolder-Plugin.json +0 -344
- package/40-checker/results/sample20-ci/NEAZ71eve__dsh-tool-github.json +0 -392
- package/40-checker/results/sample20-ci/README.md +0 -5
- package/40-checker/results/sample20-ci/RINGOLINK__dsh-desktop-shell.json +0 -361
- package/40-checker/results/sample20-ci/Zxznb666__dsh-qoder-cn-subagent.json +0 -349
- package/40-checker/results/sample20-ci/agent-mobile__dsh-mobile-gateway.json +0 -384
- package/40-checker/results/sample20-ci/fangqiing__dsh-knowledge-lite.json +0 -360
- package/40-checker/results/sample20-ci/fzy0517__deepseek-harness-session-cleaner.json +0 -354
- package/40-checker/results/sample20-ci/gjy1992__dsh-diagram.json +0 -381
- package/40-checker/results/sample20-ci/mrme000m__dsh-prime-orchestrator.json +0 -452
- package/40-checker/results/sample20-ci/redstonedust__dsh-solidworks-copilot.json +0 -371
- package/40-checker/results/sample20-ci/summary.json +0 -195
- package/40-checker/results/sample20-ci/w2112515__dsh-remote-host.json +0 -399
- package/40-checker/results/sample20-ci/wkfedor__deepseek-harness-voice-input.json +0 -358
- package/40-checker/results/sample20-ci/xfgil__dsh-hot-reloader.json +0 -344
- package/40-checker/results/sample20-ci/yizhiyizhi0128__dsh-peak-scheduler.json +0 -370
- package/40-checker/results/sample20-ci/zed1902209846-dotcom__DPwhale-plugin.json +0 -231
- package/40-checker/results/sample60/123dbl__dsh-side-session.json +0 -344
- package/40-checker/results/sample60/173787247__dsh-wsl-dns.json +0 -360
- package/40-checker/results/sample60/863683348__dsh-insight.json +0 -375
- package/40-checker/results/sample60/Anionex__dsh-turn-rewind.json +0 -349
- package/40-checker/results/sample60/Ansellwan__DSH-Custom-Wallpaper.json +0 -344
- package/40-checker/results/sample60/Ebony-Vinyl__EAC-Pack.json +0 -352
- package/40-checker/results/sample60/EricWang1358__dsh-web-studyhub.json +0 -376
- package/40-checker/results/sample60/GanyuanRan__Aegis.json +0 -349
- package/40-checker/results/sample60/HiSeax__dsh-codely.json +0 -358
- package/40-checker/results/sample60/Jamailar__beav-deepseek-harness.json +0 -341
- package/40-checker/results/sample60/ManoloRemiddi__DSH-Metafolder-Plugin.json +0 -344
- package/40-checker/results/sample60/MichengAI__dsh-archive-manager.json +0 -357
- package/40-checker/results/sample60/MichengAI__dsh-im-connect.json +0 -347
- package/40-checker/results/sample60/MindLab-Research__dsh-generative-ui.json +0 -350
- package/40-checker/results/sample60/NEAZ71eve__dsh-tool-github.json +0 -384
- package/40-checker/results/sample60/README.md +0 -7
- package/40-checker/results/sample60/RINGOLINK__dsh-desktop-shell.json +0 -352
- package/40-checker/results/sample60/SeanTolstoyevski__dsh-code-review.json +0 -352
- package/40-checker/results/sample60/Tasihi89__dsh-talk-map.json +0 -344
- package/40-checker/results/sample60/Tyan66666__billion-context-dsh.json +0 -469
- package/40-checker/results/sample60/V1ki__dsh-plugin-subscriptions.json +0 -350
- package/40-checker/results/sample60/Yu-tao-Li__dsh-computer-use-win.json +0 -341
- package/40-checker/results/sample60/ZSeven-W__dsh-ios.json +0 -344
- package/40-checker/results/sample60/Zxznb666__dsh-qoder-cn-subagent.json +0 -349
- package/40-checker/results/sample60/agent-mobile__dsh-mobile-gateway.json +0 -353
- package/40-checker/results/sample60/c3cvld7aag__fujiang-dsh.json +0 -361
- package/40-checker/results/sample60/cxzrdxy__dsh-file-explorer.json +0 -389
- package/40-checker/results/sample60/dhicoc__dsh-reverse-skill.json +0 -341
- package/40-checker/results/sample60/fangqiing__dsh-knowledge-lite.json +0 -359
- package/40-checker/results/sample60/fwerkor__local-shell-mcp.json +0 -369
- package/40-checker/results/sample60/fzy0517__deepseek-harness-session-cleaner.json +0 -344
- package/40-checker/results/sample60/gjy1992__dsh-diagram.json +0 -350
- package/40-checker/results/sample60/howmp__dsh-pentest.json +0 -341
- package/40-checker/results/sample60/linhay__harmony-next.skills.json +0 -344
- package/40-checker/results/sample60/liustack__modsearch.json +0 -371
- package/40-checker/results/sample60/mmparko__dsh-purge.json +0 -372
- package/40-checker/results/sample60/mrme000m__dsh-prime-orchestrator.json +0 -414
- package/40-checker/results/sample60/omdsh-dev__dsh_workflow.json +0 -439
- package/40-checker/results/sample60/redstonedust__dsh-solidworks-copilot.json +0 -362
- package/40-checker/results/sample60/seriousz158__dsh-memory.json +0 -350
- package/40-checker/results/sample60/shanliuling__dsh-image-gen.json +0 -353
- package/40-checker/results/sample60/shanliuling__skills-link.json +0 -344
- package/40-checker/results/sample60/shengsheng90__DSH-taskboard.json +0 -341
- package/40-checker/results/sample60/sjh9714__dsh-win32.json +0 -374
- package/40-checker/results/sample60/skymecode__deepseek-harness-for-vscode.json +0 -351
- package/40-checker/results/sample60/sopaco__terrain.json +0 -352
- package/40-checker/results/sample60/summary.json +0 -658
- package/40-checker/results/sample60/tinqiao-oss__engramory.json +0 -352
- package/40-checker/results/sample60/tong-io__tongflow.json +0 -359
- package/40-checker/results/sample60/vibeinging__dsh-desktop.json +0 -382
- package/40-checker/results/sample60/w2112515__dsh-remote-host.json +0 -344
- package/40-checker/results/sample60/wkfedor__deepseek-harness-voice-input.json +0 -350
- package/40-checker/results/sample60/wz20__dsh-dafeiyu-dot.json +0 -349
- package/40-checker/results/sample60/xfgil__dsh-hot-reloader.json +0 -344
- package/40-checker/results/sample60/yi-yezhiqiu__dsh-prompt-market.json +0 -360
- package/40-checker/results/sample60/yizhiyizhi0128__dsh-peak-scheduler.json +0 -360
- package/40-checker/results/sample60/yjh051108__dsh-routing-suite.json +0 -366
- package/40-checker/results/sample60-ci/123dbl__dsh-side-session.json +0 -344
- package/40-checker/results/sample60-ci/173787247__dsh-wsl-dns.json +0 -360
- package/40-checker/results/sample60-ci/863683348__dsh-insight.json +0 -375
- package/40-checker/results/sample60-ci/Anionex__dsh-turn-rewind.json +0 -379
- package/40-checker/results/sample60-ci/Ansellwan__DSH-Custom-Wallpaper.json +0 -344
- package/40-checker/results/sample60-ci/Ebony-Vinyl__EAC-Pack.json +0 -362
- package/40-checker/results/sample60-ci/EricWang1358__dsh-web-studyhub.json +0 -378
- package/40-checker/results/sample60-ci/GanyuanRan__Aegis.json +0 -349
- package/40-checker/results/sample60-ci/HiSeax__dsh-codely.json +0 -368
- package/40-checker/results/sample60-ci/Jamailar__beav-deepseek-harness.json +0 -367
- package/40-checker/results/sample60-ci/LiarMTTT__TavernWeave.json +0 -231
- package/40-checker/results/sample60-ci/ManoloRemiddi__DSH-Metafolder-Plugin.json +0 -344
- package/40-checker/results/sample60-ci/MichengAI__dsh-archive-manager.json +0 -395
- package/40-checker/results/sample60-ci/MichengAI__dsh-im-connect.json +0 -404
- package/40-checker/results/sample60-ci/MindLab-Research__dsh-generative-ui.json +0 -410
- package/40-checker/results/sample60-ci/NEAZ71eve__dsh-tool-github.json +0 -392
- package/40-checker/results/sample60-ci/README.md +0 -7
- package/40-checker/results/sample60-ci/RINGOLINK__dsh-desktop-shell.json +0 -361
- package/40-checker/results/sample60-ci/Ruler4396__dsh-launcher.json +0 -231
- package/40-checker/results/sample60-ci/SeanTolstoyevski__dsh-code-review.json +0 -363
- package/40-checker/results/sample60-ci/Tasihi89__dsh-talk-map.json +0 -372
- package/40-checker/results/sample60-ci/Tyan66666__billion-context-dsh.json +0 -469
- package/40-checker/results/sample60-ci/V1ki__dsh-plugin-subscriptions.json +0 -368
- package/40-checker/results/sample60-ci/Yu-tao-Li__dsh-computer-use-win.json +0 -349
- package/40-checker/results/sample60-ci/ZSeven-W__dsh-ios.json +0 -344
- package/40-checker/results/sample60-ci/Zxznb666__dsh-qoder-cn-subagent.json +0 -349
- package/40-checker/results/sample60-ci/agent-mobile__dsh-mobile-gateway.json +0 -384
- package/40-checker/results/sample60-ci/c3cvld7aag__fujiang-dsh.json +0 -361
- package/40-checker/results/sample60-ci/cxzrdxy__dsh-file-explorer.json +0 -399
- package/40-checker/results/sample60-ci/dhicoc__dsh-reverse-skill.json +0 -352
- package/40-checker/results/sample60-ci/fangqiing__dsh-knowledge-lite.json +0 -360
- package/40-checker/results/sample60-ci/fwerkor__local-shell-mcp.json +0 -387
- package/40-checker/results/sample60-ci/fzy0517__deepseek-harness-session-cleaner.json +0 -354
- package/40-checker/results/sample60-ci/gjy1992__dsh-diagram.json +0 -381
- package/40-checker/results/sample60-ci/howmp__dsh-pentest.json +0 -361
- package/40-checker/results/sample60-ci/linhay__harmony-next.skills.json +0 -344
- package/40-checker/results/sample60-ci/liustack__modsearch.json +0 -382
- package/40-checker/results/sample60-ci/mmparko__dsh-purge.json +0 -441
- package/40-checker/results/sample60-ci/mrme000m__dsh-prime-orchestrator.json +0 -452
- package/40-checker/results/sample60-ci/omdsh-dev__dsh_workflow.json +0 -439
- package/40-checker/results/sample60-ci/plastic-labs__honcho.json +0 -231
- package/40-checker/results/sample60-ci/redstonedust__dsh-solidworks-copilot.json +0 -371
- package/40-checker/results/sample60-ci/seriousz158__dsh-memory.json +0 -351
- package/40-checker/results/sample60-ci/shanliuling__dsh-image-gen.json +0 -382
- package/40-checker/results/sample60-ci/shanliuling__skills-link.json +0 -344
- package/40-checker/results/sample60-ci/shengsheng90__DSH-taskboard.json +0 -370
- package/40-checker/results/sample60-ci/sjh9714__dsh-win32.json +0 -410
- package/40-checker/results/sample60-ci/skymecode__deepseek-harness-for-vscode.json +0 -391
- package/40-checker/results/sample60-ci/sopaco__deepwiki-rs.json +0 -231
- package/40-checker/results/sample60-ci/sopaco__terrain.json +0 -352
- package/40-checker/results/sample60-ci/summary.json +0 -555
- package/40-checker/results/sample60-ci/tinqiao-oss__engramory.json +0 -362
- package/40-checker/results/sample60-ci/tong-io__tongflow.json +0 -393
- package/40-checker/results/sample60-ci/vibeinging__dsh-desktop.json +0 -555
- package/40-checker/results/sample60-ci/w2112515__dsh-remote-host.json +0 -399
- package/40-checker/results/sample60-ci/wkfedor__deepseek-harness-voice-input.json +0 -358
- package/40-checker/results/sample60-ci/wz20__dsh-dafeiyu-dot.json +0 -390
- package/40-checker/results/sample60-ci/xfgil__dsh-hot-reloader.json +0 -344
- package/40-checker/results/sample60-ci/yi-yezhiqiu__dsh-prompt-market.json +0 -373
- package/40-checker/results/sample60-ci/yizhiyizhi0128__dsh-peak-scheduler.json +0 -370
- package/40-checker/results/sample60-ci/yjh051108__dsh-routing-suite.json +0 -437
- package/40-checker/results/sample60-ci/zed1902209846-dotcom__DPwhale-plugin.json +0 -231
- package/40-checker/results/triage/REPORT.md +0 -317
- package/40-checker/results/triage/evidence/g2-rejections.txt +0 -63
- package/40-checker/results/triage/evidence/purge-baseline-0.2.1-rc.5.json +0 -51
- package/40-checker/results/triage/evidence/purge-baseline-0.2.2-alpha.2.json +0 -51
- package/40-checker/results/triage/evidence/purge-postinstall.txt +0 -62
- package/40-checker/results/triage/evidence/purge-with-profile-0.2.1-rc.5.json +0 -71
- package/40-checker/results/triage/evidence/purge-with-profile-0.2.2-alpha.2.json +0 -71
- package/40-checker/results/triage/evidence/semver-matrix.json +0 -32
- package/40-checker/results/triage/triage.json +0 -295
- package/40-checker/results/webapp/README.md +0 -10
- package/40-checker/results/webapp/summary.json +0 -46
- package/40-checker/results/webapp/web-auth.json +0 -19
- package/40-checker/results/webruntime/DDDMUC__dsh-free-search/client-export.json +0 -7
- package/40-checker/results/webruntime/DDDMUC__dsh-free-search/installed-package.json +0 -123
- package/40-checker/results/webruntime/DDDMUC__dsh-free-search/probe.json +0 -129
- package/40-checker/results/webruntime/DDDMUC__dsh-free-search/shot.png +0 -0
- package/40-checker/results/webruntime/DDDMUC__dsh-free-search/summary.md +0 -16
- package/40-checker/results/webruntime/Ebony-Vinyl__dsh-our-free-model/client-export.json +0 -7
- package/40-checker/results/webruntime/Ebony-Vinyl__dsh-our-free-model/installed-package.json +0 -76
- package/40-checker/results/webruntime/Ebony-Vinyl__dsh-our-free-model/probe.json +0 -129
- package/40-checker/results/webruntime/Ebony-Vinyl__dsh-our-free-model/shot.png +0 -0
- package/40-checker/results/webruntime/Ebony-Vinyl__dsh-our-free-model/summary.md +0 -16
- package/40-checker/results/webruntime/REPORT.md +0 -253
- package/40-checker/results/webruntime/SeaOf0__dsh-redteam-model/client-export.json +0 -7
- package/40-checker/results/webruntime/SeaOf0__dsh-redteam-model/installed-package.json +0 -97
- package/40-checker/results/webruntime/SeaOf0__dsh-redteam-model/probe.json +0 -129
- package/40-checker/results/webruntime/SeaOf0__dsh-redteam-model/shot.png +0 -0
- package/40-checker/results/webruntime/SeaOf0__dsh-redteam-model/summary.md +0 -16
- package/40-checker/results/webruntime/YuJunZhiXue__dsh-purge/client-export.json +0 -7
- package/40-checker/results/webruntime/YuJunZhiXue__dsh-purge/installed-package.json +0 -98
- package/40-checker/results/webruntime/YuJunZhiXue__dsh-purge/probe.json +0 -136
- package/40-checker/results/webruntime/YuJunZhiXue__dsh-purge/shot.png +0 -0
- package/40-checker/results/webruntime/YuJunZhiXue__dsh-purge/summary.md +0 -16
- package/40-checker/results/webruntime/ci-diet/client-export.json +0 -10
- package/40-checker/results/webruntime/ci-diet/installed-package.json +0 -100
- package/40-checker/results/webruntime/ci-diet/probe.json +0 -129
- package/40-checker/results/webruntime/ci-diet/shot.png +0 -0
- package/40-checker/results/webruntime/ci-diet/summary.md +0 -16
- package/40-checker/results/webruntime/daily-log/client-export.json +0 -10
- package/40-checker/results/webruntime/daily-log/installed-package.json +0 -113
- package/40-checker/results/webruntime/daily-log/probe.json +0 -129
- package/40-checker/results/webruntime/daily-log/shot.png +0 -0
- package/40-checker/results/webruntime/daily-log/summary.md +0 -16
- package/40-checker/results/webruntime/howmp__dsh-pentest/client-export.json +0 -7
- package/40-checker/results/webruntime/howmp__dsh-pentest/installed-package.json +0 -90
- package/40-checker/results/webruntime/howmp__dsh-pentest/probe.json +0 -129
- package/40-checker/results/webruntime/howmp__dsh-pentest/shot.png +0 -0
- package/40-checker/results/webruntime/howmp__dsh-pentest/summary.md +0 -16
- package/40-checker/results/webruntime/kingcharleslzy-ai__dsh-purge/client-export.json +0 -7
- package/40-checker/results/webruntime/kingcharleslzy-ai__dsh-purge/installed-package.json +0 -164
- package/40-checker/results/webruntime/kingcharleslzy-ai__dsh-purge/probe.json +0 -129
- package/40-checker/results/webruntime/kingcharleslzy-ai__dsh-purge/shot.png +0 -0
- package/40-checker/results/webruntime/kingcharleslzy-ai__dsh-purge/summary.md +0 -16
- package/40-checker/results/webruntime/liguobao__ds-harness-remote/client-export.json +0 -7
- package/40-checker/results/webruntime/liguobao__ds-harness-remote/installed-package.json +0 -166
- package/40-checker/results/webruntime/liguobao__ds-harness-remote/probe.json +0 -129
- package/40-checker/results/webruntime/liguobao__ds-harness-remote/shot.png +0 -0
- package/40-checker/results/webruntime/liguobao__ds-harness-remote/summary.md +0 -16
- package/40-checker/results/webruntime/local-pre-ci/README.md +0 -67
- package/40-checker/results/webruntime/local-pre-ci/client-exports.json +0 -158
- package/40-checker/results/webruntime/local-pre-ci/dsh-free-search.probe.json +0 -119
- package/40-checker/results/webruntime/local-pre-ci/dsh-pocket.probe.json +0 -119
- package/40-checker/results/webruntime/local-pre-ci/dsh-redteam-model.probe.json +0 -119
- package/40-checker/results/webruntime/local-pre-ci/qiushi-shell-only.probe.json +0 -104
- package/40-checker/results/webruntime/local-pre-ci/ui-auth-no-login.fail.json +0 -52
- package/40-checker/results/webruntime/local-pre-ci/ui-auth.probe.json +0 -123
- package/40-checker/results/webruntime/mmparko__dsh-purge/client-export.json +0 -7
- package/40-checker/results/webruntime/mmparko__dsh-purge/installed-package.json +0 -95
- package/40-checker/results/webruntime/mmparko__dsh-purge/probe.json +0 -136
- package/40-checker/results/webruntime/mmparko__dsh-purge/shot.png +0 -0
- package/40-checker/results/webruntime/mmparko__dsh-purge/summary.md +0 -16
- package/40-checker/results/webruntime/project-memory/client-export.json +0 -7
- package/40-checker/results/webruntime/project-memory/installed-package.json +0 -118
- package/40-checker/results/webruntime/project-memory/probe.json +0 -129
- package/40-checker/results/webruntime/project-memory/shot.png +0 -0
- package/40-checker/results/webruntime/project-memory/summary.md +0 -16
- package/40-checker/results/webruntime/qiushi/client-export.json +0 -7
- package/40-checker/results/webruntime/qiushi/installed-package.json +0 -84
- package/40-checker/results/webruntime/qiushi/probe.json +0 -114
- package/40-checker/results/webruntime/qiushi/shot.png +0 -0
- package/40-checker/results/webruntime/qiushi/summary.md +0 -16
- package/40-checker/results/webruntime/shaobeichen__dsh-pocket/client-export.json +0 -7
- package/40-checker/results/webruntime/shaobeichen__dsh-pocket/installed-package.json +0 -85
- package/40-checker/results/webruntime/shaobeichen__dsh-pocket/probe.json +0 -129
- package/40-checker/results/webruntime/shaobeichen__dsh-pocket/shot.png +0 -0
- package/40-checker/results/webruntime/shaobeichen__dsh-pocket/summary.md +0 -16
- package/40-checker/results/webruntime/status-rotator/client-export.json +0 -7
- package/40-checker/results/webruntime/status-rotator/installed-package.json +0 -107
- package/40-checker/results/webruntime/status-rotator/probe.json +0 -129
- package/40-checker/results/webruntime/status-rotator/shot.png +0 -0
- package/40-checker/results/webruntime/status-rotator/summary.md +0 -16
- package/40-checker/results/webruntime/summary.json +0 -323
- package/40-checker/results/webruntime/telemetry/probe.json +0 -20
- package/40-checker/results/webruntime/telemetry/summary.md +0 -4
- package/40-checker/results/webruntime/ui-auth/client-export.json +0 -7
- package/40-checker/results/webruntime/ui-auth/installed-package.json +0 -94
- package/40-checker/results/webruntime/ui-auth/probe.json +0 -129
- package/40-checker/results/webruntime/ui-auth/shot.png +0 -0
- package/40-checker/results/webruntime/ui-auth/summary.md +0 -16
- package/40-checker/results/webruntime/verification/probe.json +0 -20
- package/40-checker/results/webruntime/verification/summary.md +0 -4
- package/40-checker/results/webruntime/ysr666__dsh-vision-router/client-export.json +0 -7
- package/40-checker/results/webruntime/ysr666__dsh-vision-router/installed-package.json +0 -142
- package/40-checker/results/webruntime/ysr666__dsh-vision-router/probe.json +0 -129
- package/40-checker/results/webruntime/ysr666__dsh-vision-router/shot.png +0 -0
- package/40-checker/results/webruntime/ysr666__dsh-vision-router/summary.md +0 -16
package/40-checker/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> 版本:0.1.0 | 日期:2026-10-31 | 标准:DS-C v1.0.0 | 许可:Apache-2.0
|
|
4
4
|
> 零依赖,Node ≥ 20。只读目标包;不修改被检对象。
|
|
5
5
|
>
|
|
6
|
-
>
|
|
6
|
+
> **发行方式**:本仓直接运行时用 `node 40-checker/bin/...`;npm 上通过 `dsh-standards` 包分发(提供 `dsh-standards` 与 `dsh-levels` 两个命令)。不要用 `npx dsh-plugin-verify`、`npx dsh-levels`——npm 上这两个名字属于其他项目。
|
|
7
7
|
|
|
8
8
|
## 1. 它做什么
|
|
9
9
|
|
|
@@ -50,7 +50,7 @@ node bin/dsh-plugin-verify.mjs /path/to/plugin --format sarif --out report.sarif
|
|
|
50
50
|
# package:作者本地
|
|
51
51
|
node bin/dsh-plugin-verify.mjs ./my-plugin
|
|
52
52
|
|
|
53
|
-
# listing
|
|
53
|
+
# listing:市场条目校验(收录前提醒,不是门禁)
|
|
54
54
|
node bin/dsh-plugin-verify.mjs ./my-plugin \
|
|
55
55
|
--profile listing \
|
|
56
56
|
--market-index ./market.json \
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Runs L1-L3 in a disposable child process so a plugin cannot block or take over
|
|
3
|
+
// the checker. Input: JSON on stdin. Output: JSON { checks } on stdout.
|
|
4
|
+
import { runRuntimeChecks } from '../src/runtime.mjs'
|
|
5
|
+
import { readSources } from '../src/util.mjs'
|
|
6
|
+
|
|
7
|
+
const chunks = []
|
|
8
|
+
for await (const chunk of process.stdin) chunks.push(chunk)
|
|
9
|
+
const input = JSON.parse(Buffer.concat(chunks).toString('utf8'))
|
|
10
|
+
let sources = []
|
|
11
|
+
try { sources = readSources(input.dir) } catch { sources = [] }
|
|
12
|
+
const checks = await runRuntimeChecks({ ...input, sources })
|
|
13
|
+
process.stdout.write(JSON.stringify({ checks }))
|
package/40-checker/src/cli.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { fileURLToPath } from 'node:url'
|
|
|
4
4
|
import { runManifestChecks, DEFAULT_RUNTIME_VERSION } from './manifest.mjs'
|
|
5
5
|
import { checkCapabilities, checkCredentials, checkImportTimeAdvisory, checkLabels } from './declarations.mjs'
|
|
6
6
|
import { runRuntimeChecks } from './runtime.mjs'
|
|
7
|
-
import { spawnSync } from 'node:child_process'
|
|
7
|
+
import { spawn, spawnSync } from 'node:child_process'
|
|
8
8
|
import { readSources } from './util.mjs'
|
|
9
9
|
import { buildReport, writeReport } from './report.mjs'
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@ const DEFAULT_COMMIT = 'ce7073d51254c26cd63b22a60835b8f948deb447'
|
|
|
13
13
|
const DEFAULT_CORDIS = '4.0.6-alpha.1'
|
|
14
14
|
|
|
15
15
|
function usage() {
|
|
16
|
-
return
|
|
16
|
+
return `${process.env.DSH_CHECKER_BRAND || 'dsh-plugin-verify ' + VERSION} — DS-C conformance checker (MVP)
|
|
17
17
|
|
|
18
18
|
Usage:
|
|
19
19
|
dsh-plugin-verify <package-dir> [options]
|
|
@@ -133,6 +133,51 @@ function parseArgs(argv) {
|
|
|
133
133
|
return options
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
function runtimeNotRun(reason) {
|
|
137
|
+
const meta = {
|
|
138
|
+
'DSC-04': ['C-4', 'L1'], 'DSC-05': ['C-5', 'L1'], 'DSC-06': ['C-6', 'L1+L2'],
|
|
139
|
+
'DSC-07': ['C-7', 'L2'], 'DSC-08': ['C-8', 'L3'], 'DSC-09': ['C-9', 'L1'],
|
|
140
|
+
}
|
|
141
|
+
return Object.entries(meta).map(([id, [clause, layer]]) => ({
|
|
142
|
+
id, clause, layer, result: 'ERROR', coverage: 'not-run', reason,
|
|
143
|
+
details: [], evidence: [], method: 'M', advisory: false,
|
|
144
|
+
}))
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* L1-L3 run in a child process so that a plugin cannot block the event loop,
|
|
149
|
+
* read the checker's environment, or kill the process. The child is hard-killed
|
|
150
|
+
* after timeoutMs + 3s; a kill is reported as not-run, never as a pass.
|
|
151
|
+
*/
|
|
152
|
+
function isolatedRuntimeChecks(input) {
|
|
153
|
+
return new Promise((resolve) => {
|
|
154
|
+
const script = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', 'scripts', 'runtime-child.mjs')
|
|
155
|
+
const child = spawn(process.execPath, [script], { stdio: ['pipe', 'pipe', 'pipe'] })
|
|
156
|
+
let out = ''
|
|
157
|
+
let err = ''
|
|
158
|
+
const timer = setTimeout(() => { try { child.kill('SIGKILL') } catch {} }, input.timeoutMs + 3000)
|
|
159
|
+
child.stdout.on('data', (chunk) => { out += chunk })
|
|
160
|
+
child.stderr.on('data', (chunk) => { err += chunk })
|
|
161
|
+
child.on('error', (error) => {
|
|
162
|
+
clearTimeout(timer)
|
|
163
|
+
resolve(runtimeNotRun(`L1 child failed to start: ${error.message}`))
|
|
164
|
+
})
|
|
165
|
+
child.on('exit', (code, signal) => {
|
|
166
|
+
clearTimeout(timer)
|
|
167
|
+
if (signal === 'SIGKILL' || signal === 'SIGTERM') {
|
|
168
|
+
return resolve(runtimeNotRun(`L1 killed after ${input.timeoutMs}ms; plugin blocked the event loop`))
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const parsed = JSON.parse(out)
|
|
172
|
+
resolve(parsed.checks)
|
|
173
|
+
} catch {
|
|
174
|
+
resolve(runtimeNotRun(`L1 child produced no JSON (exit ${code}): ${String(err).slice(0, 200)}`))
|
|
175
|
+
}
|
|
176
|
+
})
|
|
177
|
+
child.stdin.end(JSON.stringify(input))
|
|
178
|
+
})
|
|
179
|
+
}
|
|
180
|
+
|
|
136
181
|
async function entryRunCheck(kind, runtimeChecks, options, dir) {
|
|
137
182
|
const byId = new Map(runtimeChecks.map(item => [item.id, item]))
|
|
138
183
|
const c4 = byId.get('DSC-04')
|
|
@@ -204,6 +249,10 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
204
249
|
process.stderr.write(`dsh-plugin-verify: target must be a package directory (tarball support is not in the MVP): ${dir}\n`)
|
|
205
250
|
return 3
|
|
206
251
|
}
|
|
252
|
+
if (!fs.existsSync(path.join(dir, 'package.json'))) {
|
|
253
|
+
process.stderr.write(`dsh-plugin-verify: not a package directory (no package.json): ${dir}\n`)
|
|
254
|
+
return 3
|
|
255
|
+
}
|
|
207
256
|
|
|
208
257
|
const { manifest, kind, kindInferred, entry, patch, g4, checks: manifestChecks } = runManifestChecks(dir, {
|
|
209
258
|
runtimeVersion: options.runtimeVersion,
|
|
@@ -223,6 +272,7 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
223
272
|
{ id: 'DSC-12', clause: 'C-12', layer: 'L0', result: 'ERROR', coverage: 'not-run', reason: 'manifest unavailable', details: [], evidence: [], method: 'M', advisory: false },
|
|
224
273
|
{ id: 'DSC-13', clause: 'C-13', layer: 'L0', result: 'ERROR', coverage: 'not-run', reason: 'manifest unavailable', details: [], evidence: [], method: 'M', advisory: false },
|
|
225
274
|
]
|
|
275
|
+
const declarationAdjusted = declarationChecks.map(item => (item.result === 'WARN' && ['DSC-11', 'DSC-13'].includes(item.id) ? { ...item, advisory: true } : item))
|
|
226
276
|
const advisoryChecks = [checkImportTimeAdvisory(sources)]
|
|
227
277
|
|
|
228
278
|
if (options.scope === 'entry' && options.entryRuntime === 'server-entry' && kind !== 'plugin') options.treatAsPlugin = true
|
|
@@ -248,9 +298,9 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
248
298
|
result: 'ERROR', coverage: 'not-run', reason, details: [], evidence: [], method: 'M', advisory: false,
|
|
249
299
|
}))
|
|
250
300
|
} else {
|
|
251
|
-
runtimeChecks = await
|
|
301
|
+
runtimeChecks = await isolatedRuntimeChecks({
|
|
252
302
|
dir, manifest, kind: runtimeKind, entry: runtimeEntry,
|
|
253
|
-
runtimePath: options.runtime, timeoutMs: options.timeoutMs,
|
|
303
|
+
runtimePath: options.runtime, timeoutMs: options.timeoutMs,
|
|
254
304
|
})
|
|
255
305
|
}
|
|
256
306
|
|
|
@@ -260,9 +310,18 @@ export async function main(argv = process.argv.slice(2)) {
|
|
|
260
310
|
...runtimeChecks,
|
|
261
311
|
runCheck,
|
|
262
312
|
advisoryChecks[0],
|
|
263
|
-
...
|
|
313
|
+
...declarationAdjusted,
|
|
264
314
|
]
|
|
265
315
|
|
|
316
|
+
if (g4?.result === 'FAIL') {
|
|
317
|
+
const dsc01 = checks.find(item => item.id === 'DSC-01')
|
|
318
|
+
if (dsc01 && dsc01.result !== 'FAIL') {
|
|
319
|
+
dsc01.result = 'FAIL'
|
|
320
|
+
dsc01.reason = dsc01.reason ? `${dsc01.reason}; ${g4.reason ?? 'G4 failed'}` : (g4.reason ?? 'G4 failed')
|
|
321
|
+
dsc01.details = [...(dsc01.details ?? []), { item: 'G4', result: 'FAIL', reason: g4.reason ?? 'client shape failed' }]
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
266
325
|
const subject = {
|
|
267
326
|
mode: options.profile === 'listing' || options.profile === 'both' ? 'listing' : 'package',
|
|
268
327
|
profile: options.profile,
|
|
@@ -31,6 +31,19 @@ function inside(root, target) {
|
|
|
31
31
|
export function resolveEntry(dir, manifest) {
|
|
32
32
|
const candidates = []
|
|
33
33
|
const exportTarget = rootExportTarget(manifest)
|
|
34
|
+
if (exportTarget) {
|
|
35
|
+
const absolute = path.resolve(dir, exportTarget)
|
|
36
|
+
if (!inside(dir, absolute)) {
|
|
37
|
+
return { exists: false, escape: true, source: 'exports["."]', target: exportTarget, absolute }
|
|
38
|
+
}
|
|
39
|
+
if (!isFile(absolute)) {
|
|
40
|
+
const sourceCandidates = ['src/index.ts', 'src/index.tsx', 'src/index.js', 'src/index.mjs']
|
|
41
|
+
const sourceEntry = sourceCandidates.find(relative => isFile(path.join(dir, relative))) ?? null
|
|
42
|
+
const scripts = isObject(manifest.scripts) ? manifest.scripts : {}
|
|
43
|
+
const buildHint = Boolean(sourceEntry) || ['build', 'prepare', 'compile'].some(name => typeof scripts[name] === 'string')
|
|
44
|
+
return { exists: false, escape: false, source: 'exports["."]', target: exportTarget, absolute, declaredMissing: true, sourceEntry, buildHint }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
34
47
|
if (exportTarget) candidates.push({ source: 'exports["."]', target: exportTarget })
|
|
35
48
|
if (typeof manifest.main === 'string' && manifest.main.trim() !== '') candidates.push({ source: 'main', target: manifest.main })
|
|
36
49
|
for (const fallback of ['index.js', 'index.mjs', 'index.cjs', 'index.ts']) candidates.push({ source: 'fallback', target: fallback })
|
|
@@ -183,12 +196,18 @@ export function runManifestChecks(dir, options = {}) {
|
|
|
183
196
|
}
|
|
184
197
|
if (entry.escape) {
|
|
185
198
|
manifestDetails.push(detail('C-1.2', 'FAIL', `entry escapes the package: ${entry.target}`, ['package.json#exports']))
|
|
199
|
+
} else if (entry.declaredMissing && entry.buildHint) {
|
|
200
|
+
manifestDetails.push(detail('C-1.2', 'WARN', `exports["."] target missing; build hint exists (${entry.sourceEntry ?? 'build script'})`, ['package.json#exports']))
|
|
201
|
+
} else if (entry.declaredMissing) {
|
|
202
|
+
manifestDetails.push(detail('C-1.2', 'FAIL', `exports["."] points to a missing file: ${entry.target}`, ['package.json#exports']))
|
|
186
203
|
} else if (entry.exists) {
|
|
187
204
|
manifestDetails.push(detail('C-1.2', 'PASS', `entry resolves via ${entry.source}: ${entry.relative}`, [entry.relative]))
|
|
188
205
|
} else if (entry.buildHint) {
|
|
189
206
|
manifestDetails.push(detail('C-1.2', 'WARN', `entry not present in checkout; source/build hint exists (${entry.sourceEntry ?? 'build script'})`, ['package.json#scripts']))
|
|
190
207
|
} else if (kind === 'bundle' || kind === 'client') {
|
|
191
208
|
manifestDetails.push(detail('C-1.2', 'WARN', `no runtime entry; ${kind} packages may be patch/client only`, ['package.json#exports']))
|
|
209
|
+
} else if (Array.isArray(manifest.workspaces) || (manifest.workspaces && typeof manifest.workspaces === 'object')) {
|
|
210
|
+
manifestDetails.push(detail('C-1.2', 'NA', 'workspace root; run the checker on a package subdirectory', ['package.json#workspaces']))
|
|
192
211
|
} else {
|
|
193
212
|
manifestDetails.push(detail('C-1.2', 'FAIL', 'no resolvable runtime entry', ['package.json#exports', 'package.json#main']))
|
|
194
213
|
}
|
|
@@ -207,7 +226,7 @@ export function runManifestChecks(dir, options = {}) {
|
|
|
207
226
|
manifestDetails.push(detail('C-1.5', 'PASS', `license=${manifest.license}`))
|
|
208
227
|
}
|
|
209
228
|
if (manifest.private === true) {
|
|
210
|
-
manifestDetails.push(detail('C-1.6', '
|
|
229
|
+
manifestDetails.push(detail('C-1.6', 'NA', 'private:true; not publishable to a registry', ['package.json#private']))
|
|
211
230
|
}
|
|
212
231
|
const manifestResult = worst(manifestDetails.map(item => item.result))
|
|
213
232
|
const manifestCheck = check({
|
|
@@ -45,7 +45,10 @@ export function buildReport({ subject, anchor, checks, g4 = null, scope, profile
|
|
|
45
45
|
? adjustedChecks.map(item => runtimeIds.has(item.id) ? { ...item, result: 'NA', coverage: 'not-run', reason: 'out of scope for M1 static-only' } : item)
|
|
46
46
|
: adjustedChecks
|
|
47
47
|
const byId = new Map(effectiveChecks.map(item => [item.id, item]))
|
|
48
|
-
const
|
|
48
|
+
const selectedAll = mandatory.map(id => byId.get(id)).filter(Boolean)
|
|
49
|
+
// Advisory checks are reported but never move the verdict.
|
|
50
|
+
const selected = selectedAll.filter(item => item.advisory !== true)
|
|
51
|
+
const advisoryWarnings = selectedAll.filter(item => item.advisory === true && item.result === 'WARN')
|
|
49
52
|
const missing = mandatory.filter(id => !byId.has(id))
|
|
50
53
|
const failed = selected.filter(item => item.result === 'FAIL')
|
|
51
54
|
const errored = selected.filter(item => item.result === 'ERROR')
|
|
@@ -80,6 +83,7 @@ export function buildReport({ subject, anchor, checks, g4 = null, scope, profile
|
|
|
80
83
|
if (failed.length > 0) reasonParts.push(`FAIL: ${failed.map(item => item.id).join(', ')}`)
|
|
81
84
|
if (notRunIds.length > 0) reasonParts.push(`not run: ${notRunIds.join(', ')}`)
|
|
82
85
|
if (warnings.length > 0) reasonParts.push(`WARN: ${warnings.map(item => item.id).join(', ')}`)
|
|
86
|
+
if (advisoryWarnings.length > 0) reasonParts.push(`advisory: ${advisoryWarnings.map(item => item.id).join(', ')}`)
|
|
83
87
|
|
|
84
88
|
return {
|
|
85
89
|
schema: 'dsh-conformance/1',
|
|
@@ -92,6 +96,7 @@ export function buildReport({ subject, anchor, checks, g4 = null, scope, profile
|
|
|
92
96
|
mandatory: mandatory.length,
|
|
93
97
|
pass: pass.length,
|
|
94
98
|
warn: warnings.length,
|
|
99
|
+
advisory: advisoryWarnings.length,
|
|
95
100
|
fail: failed.length,
|
|
96
101
|
na: selected.filter(item => item.result === 'NA').length,
|
|
97
102
|
notRun: notRunIds.length,
|
|
@@ -63,19 +63,85 @@ function upperForTilde(version) {
|
|
|
63
63
|
return { ...version, minor: version.minor + 1, patch: 0, prerelease: [] }
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
function
|
|
67
|
-
const
|
|
66
|
+
function parsePartial(text) {
|
|
67
|
+
const match = /^v?(\d+)(?:\.(\d+|[xX*]))?(?:\.(\d+|[xX*]))?(?:-([0-9A-Za-z.-]+))?$/.exec(text.trim())
|
|
68
|
+
if (!match) return null
|
|
69
|
+
return {
|
|
70
|
+
major: Number(match[1]),
|
|
71
|
+
minor: match[2] === undefined || /[xX*]/.test(match[2]) ? null : Number(match[2]),
|
|
72
|
+
patch: match[3] === undefined || /[xX*]/.test(match[3]) ? null : Number(match[3]),
|
|
73
|
+
prerelease: match[4] ? match[4].split('.') : [],
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function fullVersion(partial) {
|
|
78
|
+
return { major: partial.major, minor: partial.minor ?? 0, patch: partial.patch ?? 0, prerelease: partial.prerelease }
|
|
79
|
+
}
|
|
80
|
+
function nextMinor(partial) { return { major: partial.major, minor: (partial.minor ?? 0) + 1, patch: 0, prerelease: [] } }
|
|
81
|
+
function nextMajor(partial) { return { major: partial.major + 1, minor: 0, patch: 0, prerelease: [] } }
|
|
82
|
+
function fmt(version) {
|
|
83
|
+
const base = `${version.major}.${version.minor}.${version.patch}`
|
|
84
|
+
return version.prerelease && version.prerelease.length ? `${base}-${version.prerelease.join('.')}` : base
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function expandToken(raw) {
|
|
88
|
+
if (raw === '*' || raw === 'x' || raw === 'X') return '*'
|
|
89
|
+
const match = /^(>=|<=|>|<|=|\^|~)?\s*v?(\d+)(?:\.(\d+|[xX*]))?(?:\.(\d+|[xX*]))?(?:-([0-9A-Za-z.-]+))?$/.exec(raw)
|
|
90
|
+
if (!match) return null
|
|
91
|
+
const op = match[1] ?? '='
|
|
92
|
+
const partial = {
|
|
93
|
+
major: Number(match[2]),
|
|
94
|
+
minor: match[3] === undefined || /[xX*]/.test(match[3]) ? null : Number(match[3]),
|
|
95
|
+
patch: match[4] === undefined || /[xX*]/.test(match[4]) ? null : Number(match[4]),
|
|
96
|
+
prerelease: match[5] ? match[5].split('.') : [],
|
|
97
|
+
}
|
|
98
|
+
const low = fullVersion(partial)
|
|
99
|
+
const noMinor = partial.minor === null
|
|
100
|
+
const noPatch = partial.patch === null
|
|
101
|
+
if (!noMinor && !noPatch) return `${op}${fmt(low)}`
|
|
102
|
+
switch (op) {
|
|
103
|
+
case '^':
|
|
104
|
+
case '~':
|
|
105
|
+
case '=':
|
|
106
|
+
return noMinor ? `>=${fmt(low)} <${fmt(nextMajor(partial))}` : `>=${fmt(low)} <${fmt(nextMinor(partial))}`
|
|
107
|
+
case '>=': return `>=${fmt(low)}`
|
|
108
|
+
case '>': return noMinor ? `>=${fmt(nextMajor(partial))}` : `>=${fmt(nextMinor(partial))}`
|
|
109
|
+
case '<': return `<${fmt(low)}`
|
|
110
|
+
case '<=': return noMinor ? `<${fmt(nextMajor(partial))}` : `<${fmt(nextMinor(partial))}`
|
|
111
|
+
default: return null
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Hyphen ranges and x-ranges are normalized before tokenizing. */
|
|
116
|
+
function expandAlternative(alternative) {
|
|
68
117
|
const text = alternative.trim()
|
|
69
|
-
if (text === '' || text === '*' || text === 'x' || text === 'X') return
|
|
70
|
-
|
|
71
|
-
|
|
118
|
+
if (text === '' || text === '*' || text === 'x' || text === 'X') return '*'
|
|
119
|
+
const hyphen = /^(.+?)\s+-\s+(.+)$/.exec(text)
|
|
120
|
+
if (hyphen) {
|
|
121
|
+
const left = parsePartial(hyphen[1])
|
|
122
|
+
const right = parsePartial(hyphen[2])
|
|
123
|
+
if (!left || !right) return null
|
|
124
|
+
const low = `>=${fmt(fullVersion(left))}`
|
|
125
|
+
if (right.minor === null) return `${low} <${fmt(nextMajor(right))}`
|
|
126
|
+
if (right.patch === null) return `${low} <${fmt(nextMinor(right))}`
|
|
127
|
+
return `${low} <=${fmt(fullVersion(right))}`
|
|
128
|
+
}
|
|
129
|
+
const parts = []
|
|
72
130
|
for (const raw of text.split(/\s+/)) {
|
|
73
|
-
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
131
|
+
const expanded = expandToken(raw)
|
|
132
|
+
if (expanded === null) return null
|
|
133
|
+
parts.push(expanded)
|
|
134
|
+
}
|
|
135
|
+
return parts.join(' ')
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function tokenizeAlternative(alternative) {
|
|
139
|
+
const expanded = expandAlternative(alternative)
|
|
140
|
+
if (expanded === null) return null
|
|
141
|
+
if (expanded === '*') return [{ op: '*', version: null }]
|
|
142
|
+
const tokens = []
|
|
143
|
+
for (const raw of expanded.split(/\s+/)) {
|
|
144
|
+
const match = /^(>=|<=|>|<|=|\^|~)?\s*v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)$/.exec(raw)
|
|
79
145
|
if (!match) return null
|
|
80
146
|
const op = match[1] ?? '='
|
|
81
147
|
const version = parseVersion(match[2])
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
## 1.0.2 — 2026-11-03
|
|
2
|
+
|
|
3
|
+
- L1–L3 run in a child process and are hard-killed on timeout; a blocked event loop is reported as `not-run`, never a pass.
|
|
4
|
+
- `dsh.capabilities` / `dsh.labels` warnings are advisory: still reported, no longer flip the verdict.
|
|
5
|
+
- A `g4` client-shape failure now fails DSC-01 instead of being dropped.
|
|
6
|
+
- `private: true` and workspace roots report NA instead of WARN/FAIL.
|
|
7
|
+
- A directory without `package.json` returns exit 3 (usage), matching `dsh-levels`.
|
|
8
|
+
|
|
9
|
+
## 1.0.1 — 2026-11-03
|
|
10
|
+
|
|
11
|
+
- 打包:`files` 收窄,不再把 `40-checker/results/` 打进 npm 包(此前包含第三方插件结果、截图与本机路径)。
|
|
12
|
+
- 文档:`npx dsh-levels` 会装到第三方包,改为 `npx -p dsh-standards dsh-levels`;修正不存在的 `bin/` 路径;测试数 73→98。
|
|
13
|
+
- CLI:`dsh-standards --help` 首行显示自己的包名与版本。
|
|
14
|
+
- 检查器:`exports["."]` 指向缺失文件时不再回退到 `main`。
|
|
15
|
+
|
|
16
|
+
# Changelog
|
|
17
|
+
|
|
18
|
+
## 2026-11-03 — Node 24.9 baseline
|
|
19
|
+
- Require Node >=24.9.0 to match DeepSeek Harness 0.2.2-alpha.3.
|
|
20
|
+
|
|
21
|
+
## 2026-11-02 — P0–P2, Apache-2.0, and attestation migration
|
|
22
|
+
|
|
23
|
+
- Renamed certificate → attestation (`dsh-attestation/1`, `DSH-ATT-*`,
|
|
24
|
+
`publish/attestations/`); historical docs carry a migration banner.
|
|
25
|
+
- Added the gap ledger (43), role governance (44), and three-purpose kits (45).
|
|
26
|
+
- Added `scheme/`, `spec/clauses.json`, `spec/reference-suite.json`,
|
|
27
|
+
`spec/schemas/report.schema.json`, `evidence/` hash chain.
|
|
28
|
+
- Added G4 static check, clause-map, stale-check, surveillance, dashboard.
|
|
29
|
+
- Added developer/official/market kits and `publish/verify.mjs` / `verify.html`.
|
|
30
|
+
- CI: governance checks, 73 tests, attestation verify, shell syntax, cross-platform matrix.
|
|
31
|
+
- License: text CC BY 4.0 with a required Change Notice; code Apache-2.0 (D-013); marks separate.
|
|
32
|
+
- Cross-repo: portal `f882144`, guide `e75cd9f`, kit `9897213`, catalog `a272d06`, certification `2f27666`, cert-mcp `4f0cf72`.
|
package/NOTICE
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
DSH standards
|
|
2
|
+
Copyright 2026 PerryLink
|
|
3
|
+
|
|
4
|
+
Text/specifications/documentation: CC BY 4.0 (LICENSE-CC-BY).
|
|
5
|
+
Modifications must carry a prominent Change Notice (MODIFICATION-POLICY.md).
|
|
6
|
+
Code/scripts/schemas: Apache License 2.0 (LICENSE-APACHE).
|
|
7
|
+
|
|
8
|
+
Unless required by applicable law or agreed to in writing, software is
|
|
9
|
+
distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
|
|
10
|
+
See the applicable license for the specific language.
|
|
11
|
+
|
|
12
|
+
The words DSH-ENTRY, DSH-FLOW, DSH-BOOST and the level badges are not licensed
|
|
13
|
+
by either license. Their use is governed by governance/mark-policy.md.
|
|
14
|
+
No trademark registration is claimed.
|
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
| 层 | 规范/实践 | 当前状态 |
|
|
19
19
|
|---|---|---|
|
|
20
|
-
| 1 | **DSH-ENTRY 入门规范** | 18/18 `recognized`;base-only 10/18
|
|
20
|
+
| 1 | **DSH-ENTRY 入门规范** | 18/18 `recognized`;base-only 10/18 有 runtime 证据(8 clean + 2 reject);real web profile 16/18 无告警、2 个 host-gate reject(自评,无独立复核);client 15/15 loaded;18/18 clean 未达成 |
|
|
21
21
|
| 2 | **DSH-FLOW 顺畅规范** | draft;fixture 上 J1/J2/J4/J6 **12 PASS**;J3/J7 fixture runtime;J5/J8 static preflight;10 个真实包 **78 PASS / 4 FAIL / 2 blocked / 66 not-run** |
|
|
22
22
|
| 3 | **DSH-BOOST 加速实践** | draft;LEV-1–8 **8/8 measured**(loader / context / provider-capture / synthetic timer;非生产基线) |
|
|
23
23
|
|
|
@@ -57,21 +57,21 @@
|
|
|
57
57
|
```bash
|
|
58
58
|
# Published umbrella (package `dsh-standards`)
|
|
59
59
|
npx dsh-standards <plugin-dir> --scope entry --entry-claim static
|
|
60
|
-
npx dsh-levels
|
|
60
|
+
npx -p dsh-standards dsh-levels <dir> --format json
|
|
61
61
|
|
|
62
62
|
# From a source checkout
|
|
63
63
|
cd 40-checker
|
|
64
64
|
node --test test/*.test.mjs
|
|
65
65
|
|
|
66
66
|
# 只做结构识别(不声明运行)
|
|
67
|
-
node bin/dsh-plugin-verify.mjs <plugin-dir> --scope entry --entry-claim static
|
|
67
|
+
node 40-checker/bin/dsh-plugin-verify.mjs <plugin-dir> --scope entry --entry-claim static
|
|
68
68
|
|
|
69
69
|
# 声明运行(bundle 需要 host)
|
|
70
|
-
node bin/dsh-plugin-verify.mjs <bundle-dir> --scope entry \
|
|
70
|
+
node 40-checker/bin/dsh-plugin-verify.mjs <bundle-dir> --scope entry \
|
|
71
71
|
--host /path/to/@deepseek-ai/dsh-app-boot/lib/index.js
|
|
72
72
|
|
|
73
73
|
# 三层自检(ENTRY 自动;FLOW/BOOST 证据文件)
|
|
74
|
-
node bin/dsh-levels.mjs
|
|
74
|
+
node bin/dsh-levels.mjs <dir> --format json
|
|
75
75
|
|
|
76
76
|
# J1 安装/卸载旅程
|
|
77
77
|
node scripts/journey-runtime.mjs --package <dir> --json
|
|
@@ -95,7 +95,7 @@ node lev7-bench.mjs 64 20
|
|
|
95
95
|
- 18 包 base-only runtime:**18/18 有原始 JSON;10/18 G3 verified,8 partial,0 error**;host gate 后 **8 clean + 2 reject + 8 partial**;
|
|
96
96
|
- client runtime:**15/15 `client-module-loaded`**(真实 Chromium);web-app **4/4 loaded**;
|
|
97
97
|
- 不可用:**0 plugin code FAIL;2 host-gate reject(telemetry/verification)**;
|
|
98
|
-
- 检查器:**
|
|
98
|
+
- 检查器:**98/98 tests**(含治理/DCO/评价记录/声明/验真/链/漂移测试);
|
|
99
99
|
- J1:**6 PASS + 1 WARN**;LEV-3:volatile **0/20** vs control **20/20** remount;LEV-6:稳定 prefix **100%** vs 易变 **0%**;LEV-7:**8.24×**(合成,非生产基线)。
|
|
100
100
|
|
|
101
101
|
## 给插件开发者:什么时候用哪个工具
|
package/bin/dsh-standards.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-standards",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "DSH plugin standards and conformance checks: ENTRY/FLOW checks plus BOOST guidance. Non-official; no certification or ranking.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "40-checker/src/index.mjs",
|
|
@@ -13,22 +13,31 @@
|
|
|
13
13
|
"dsh-levels": "./bin/dsh-levels.mjs"
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
|
-
"
|
|
16
|
+
"bin",
|
|
17
|
+
"40-checker/bin",
|
|
18
|
+
"40-checker/src",
|
|
19
|
+
"40-checker/scripts",
|
|
20
|
+
"40-checker/samples",
|
|
21
|
+
"40-checker/fixtures",
|
|
22
|
+
"40-checker/test",
|
|
23
|
+
"40-checker/package.json",
|
|
24
|
+
"40-checker/README.md",
|
|
17
25
|
"spec",
|
|
18
26
|
"docs",
|
|
19
|
-
"bin",
|
|
20
27
|
"README.md",
|
|
28
|
+
"CHANGELOG.md",
|
|
21
29
|
"LICENSE",
|
|
22
30
|
"LICENSE-APACHE",
|
|
23
31
|
"LICENSE-CC-BY",
|
|
24
|
-
"NOTICE.md"
|
|
32
|
+
"NOTICE.md",
|
|
33
|
+
"NOTICE"
|
|
25
34
|
],
|
|
26
35
|
"scripts": {
|
|
27
36
|
"test": "node --test 40-checker/test/*.test.mjs",
|
|
28
37
|
"test:fixtures": "node bin/dsh-standards.mjs 40-checker/fixtures/good --scope entry --entry-claim static --format text"
|
|
29
38
|
},
|
|
30
39
|
"engines": {
|
|
31
|
-
"node": ">=
|
|
40
|
+
"node": ">=24.9.0"
|
|
32
41
|
},
|
|
33
42
|
"keywords": [
|
|
34
43
|
"dsh",
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
name: plugin-verify
|
|
2
|
-
on:
|
|
3
|
-
push:
|
|
4
|
-
pull_request:
|
|
5
|
-
workflow_dispatch:
|
|
6
|
-
jobs:
|
|
7
|
-
l0:
|
|
8
|
-
runs-on: ubuntu-latest
|
|
9
|
-
steps:
|
|
10
|
-
- uses: actions/checkout@v4
|
|
11
|
-
- uses: actions/setup-node@v4
|
|
12
|
-
with:
|
|
13
|
-
node-version: 22
|
|
14
|
-
- name: unit tests
|
|
15
|
-
run: node --test
|
|
16
|
-
- name: good fixture (static-only M1; expect 0)
|
|
17
|
-
run: |
|
|
18
|
-
node bin/dsh-plugin-verify.mjs fixtures/good \
|
|
19
|
-
--static-only \
|
|
20
|
-
--market-index fixtures/market-index.json \
|
|
21
|
-
--plugin-name @dsh-fixtures/good-plugin \
|
|
22
|
-
--format json --out /tmp/good.json
|
|
23
|
-
- name: bad fixture (expect 1; 0 would be a false green)
|
|
24
|
-
run: |
|
|
25
|
-
set +e
|
|
26
|
-
node bin/dsh-plugin-verify.mjs fixtures/bad --format json --out /tmp/bad.json
|
|
27
|
-
code=$?
|
|
28
|
-
test "$code" -eq 1
|
|
29
|
-
- name: SARIF smoke
|
|
30
|
-
run: |
|
|
31
|
-
node bin/dsh-plugin-verify.mjs fixtures/good \
|
|
32
|
-
--static-only \
|
|
33
|
-
--market-index fixtures/market-index.json \
|
|
34
|
-
--plugin-name @dsh-fixtures/good-plugin \
|
|
35
|
-
--format sarif --out /tmp/good.sarif
|
|
36
|
-
- uses: actions/upload-artifact@v4
|
|
37
|
-
with:
|
|
38
|
-
name: reports
|
|
39
|
-
path: |
|
|
40
|
-
/tmp/good.json
|
|
41
|
-
/tmp/bad.json
|
|
42
|
-
/tmp/good.sarif
|
|
43
|
-
|
|
44
|
-
l1-manual:
|
|
45
|
-
if: github.event_name == 'workflow_dispatch'
|
|
46
|
-
runs-on: ubuntu-latest
|
|
47
|
-
steps:
|
|
48
|
-
- uses: actions/checkout@v4
|
|
49
|
-
- uses: actions/setup-node@v4
|
|
50
|
-
with:
|
|
51
|
-
node-version: 22
|
|
52
|
-
- name: build host farm (requires a DSH checkout at DSH_HOST)
|
|
53
|
-
env:
|
|
54
|
-
DSH_HOST: ${{ vars.DSH_HOST }}
|
|
55
|
-
run: |
|
|
56
|
-
test -n "$DSH_HOST"
|
|
57
|
-
node scripts/host-farm.mjs --plugin fixtures/bundle --farm /tmp/farm --link --quiet
|
|
58
|
-
- name: L1 on bundle fixture
|
|
59
|
-
env:
|
|
60
|
-
DSH_HOST: ${{ vars.DSH_HOST }}
|
|
61
|
-
run: |
|
|
62
|
-
node bin/dsh-plugin-verify.mjs /tmp/farm/plugins/bundle \
|
|
63
|
-
--treat-as-plugin \
|
|
64
|
-
--runtime "$DSH_HOST/vendor/cordis/lib/index.js" \
|
|
65
|
-
--runtime-version 0.2.2-alpha.2 \
|
|
66
|
-
--format json --out /tmp/l1.json
|
|
67
|
-
- uses: actions/upload-artifact@v4
|
|
68
|
-
with:
|
|
69
|
-
name: l1-report
|
|
70
|
-
path: /tmp/l1.json
|