{"_id":"@aiwayds/dsh-ask-router","_rev":"9-83fb84142b1613fb4a83ed57661cdd48","name":"@aiwayds/dsh-ask-router","dist-tags":{"latest":"0.6.0"},"versions":{"0.1.0":{"name":"@aiwayds/dsh-ask-router","version":"0.1.0","author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-ask-router@0.1.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-ask-router","bugs":{"url":"https://github.com/fan56/dsh-ask-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"9e0a7ca9cae07918465da84a80083c63c212612e","tarball":"https://registry.npmjs.org/@aiwayds/dsh-ask-router/-/dsh-ask-router-0.1.0.tgz","fileCount":7,"integrity":"sha512-+4SRV7TuuJDyD2ZbdrTb4iZ6QQrHZNz0XdFWcSMJBqrM9Xgu5OFgtcmJzdp16cZgEPBtDK3X57fyPYyuLy/wHg==","signatures":[{"sig":"MEYCIQD/1hXtEhV2py9T/6fUYqarj8/WOcK8gQ9KOd+ADVcL3AIhAPzS7GqDQ3g3zuLN9mm76FD/7l0CjGidUptOY2DNAskg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20488},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"2b1db431f6fcfc3042106bc9aae57abb29376d2d","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-ask-router.git","type":"git"},"_npmVersion":"11.17.0","description":"dsh plugin: routes ask-user questions to every interaction surface bound to the asking session (TUI panel, Feishu card, web, ...) — first answer wins","directories":{},"_nodeVersion":"26.4.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ask-router_0.1.0_1787714384367_0.303822942680418","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aiwayds/dsh-ask-router","version":"0.1.1","keywords":["dsh","dsh-plugin","deepseek-harness","ask-user","routing"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-ask-router@0.1.1","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-ask-router","bugs":{"url":"https://github.com/fan56/dsh-ask-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"c722c8c52823f1d1b95c0dae37a0d5c8cb4e6b46","tarball":"https://registry.npmjs.org/@aiwayds/dsh-ask-router/-/dsh-ask-router-0.1.1.tgz","fileCount":7,"integrity":"sha512-71iLgqQ/VdXXHKw0HUS8p7Hl2PuGNdVpVmOsa3h3T4RNhL48nduofI4EmoQ/P+wBqTFuwHiB9XOJLSLTJmlBNA==","signatures":[{"sig":"MEUCIQCfGs7sw5ow0xYdjYI5Q+Xp/+vB+HgfRxpMBsgxt4NWOwIgGz0sl/z0Gr+AlFl0EHPe/tFVqUI0SkoQPQp27Odxp7g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20592},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"97db57eeece16b62db8cf7d77e099400e7faa16d","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-ask-router.git","type":"git"},"_npmVersion":"11.12.1","description":"dsh plugin: routes ask-user questions to every interaction surface bound to the asking session (TUI panel, Feishu card, web, ...) — first answer wins","directories":{},"_nodeVersion":"25.4.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ask-router_0.1.1_1787977701227_0.021057242702105405","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aiwayds/dsh-ask-router","version":"0.2.0","keywords":["dsh","dsh-plugin","deepseek-harness","ask-user","routing"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-ask-router@0.2.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-ask-router","bugs":{"url":"https://github.com/fan56/dsh-ask-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"ee428501747e6992de671a521ffd4673ebbe4d38","tarball":"https://registry.npmjs.org/@aiwayds/dsh-ask-router/-/dsh-ask-router-0.2.0.tgz","fileCount":7,"integrity":"sha512-xs7FV/EPWM9EameM95aeaR6BSlOmlKlPp5zwbqoA6iyAa/WuZPZ1SZ1L0uBmA4US7D7I/w8BvPFTHqnCwmdXRA==","signatures":[{"sig":"MEYCIQCOCsrh8ysqjXsJYuxGDgtMJ4EzKjrmblPkQmhi74UC1wIhAKAy38FpkFHmumZAbTlqI0aSVI65vIOTldR6NQ3CbdlV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-ask-router@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25501},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"489ff583c44593fd7dbf2ef955a099c4d20e36c9","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-ask-router.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: routes ask-user questions to every interaction surface bound to the asking session (TUI panel, Feishu card, web, ...) — first answer wins","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ask-router_0.2.0_1787995169494_0.36140878854420766","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aiwayds/dsh-ask-router","version":"0.3.0","keywords":["dsh","dsh-plugin","deepseek-harness","ask-user","routing"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-ask-router@0.3.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-ask-router","bugs":{"url":"https://github.com/fan56/dsh-ask-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"b39849e728d8e70f8e5e6863e4f7533898c50f9a","tarball":"https://registry.npmjs.org/@aiwayds/dsh-ask-router/-/dsh-ask-router-0.3.0.tgz","fileCount":8,"integrity":"sha512-JrHlS/1Yt6v0N0HsHft1OF+ohh5G5rv2wz3uN0W2fBvOd5wzY5d1gL6mDXAsJj3arSc9gWSL2gibUUysfrrEFw==","signatures":[{"sig":"MEQCIH4iXxr/kpFXr6wy7NItSGn64cK4SCHt4pVcE9KSvHF1AiAwaBVmRUOZ6gs75G0OWiH70JMIjpof1gZTE1aGnwntlg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-ask-router@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28604},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"5b0733f1c6d29eea5ca128e00001e805e22f99e5","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-ask-router.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: routes ask-user questions to every interaction surface bound to the asking session (TUI panel, Feishu card, web, ...) — first answer wins","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ask-router_0.3.0_1788281522016_0.047885913513352474","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aiwayds/dsh-ask-router","version":"0.4.0","keywords":["dsh","dsh-plugin","deepseek-harness","ask-user","routing"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-ask-router@0.4.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-ask-router","bugs":{"url":"https://github.com/fan56/dsh-ask-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"14d229c4a73ecb69f619b60ba44bb876da01a6bd","tarball":"https://registry.npmjs.org/@aiwayds/dsh-ask-router/-/dsh-ask-router-0.4.0.tgz","fileCount":8,"integrity":"sha512-v8+TC+djE417jUK5jX/kS+MxeWm59rR9pyFXAA/9+yR5B1Eluvq573vpp6UpZaBO4WA9XjSqXe+GQ1Kp2ITFog==","signatures":[{"sig":"MEUCICgr+dEKayaEZx/ppQP3MP6yRvene7xiS+CiLk73eVonAiEA/71D8ROY3ZynWs/9JWuXRtfW9JehyFHU8oDuRl9EQYc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-ask-router@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":28693},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"3504f95e12506144476903f5c18706be5956296a","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-ask-router.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: routes ask-user questions to every interaction surface bound to the asking session (TUI panel, Feishu card, web, ...) — first answer wins","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ask-router_0.4.0_1788442278248_0.11338107103366069","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@aiwayds/dsh-ask-router","version":"0.4.1","keywords":["dsh","dsh-plugin","deepseek-harness","ask-user","routing"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-ask-router@0.4.1","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-ask-router","bugs":{"url":"https://github.com/fan56/dsh-ask-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"d979ff7a9d8caea6dac6c9c0d4f1bcf4012edbd7","tarball":"https://registry.npmjs.org/@aiwayds/dsh-ask-router/-/dsh-ask-router-0.4.1.tgz","fileCount":8,"integrity":"sha512-kx7nAD6gNcvb86uzowHJCo5b6TIXr0DxY9e81Pu9gbq6G8fYd3NcpVVUzSQ5PBp8bbfe3ruDhR7302bQ6DLXyQ==","signatures":[{"sig":"MEQCIGKm9/9+KXh5OzsYCgNS1Sd0YwBHGJFkHDJiJ5vTpX1jAiBqHNoF0iE7aMCSc7as5HSsRIQmZRPYTXAvjNbJOv4GLg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-ask-router@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":30168},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"38874119ca52ec458a866fc0cf457264f913cc3b","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-ask-router.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: routes ask-user questions to every interaction surface bound to the asking session (TUI panel, Feishu card, web, ...) — first answer wins","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ask-router_0.4.1_1788603286115_0.35193498332337647","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@aiwayds/dsh-ask-router","version":"0.4.2","keywords":["dsh","dsh-plugin","deepseek-harness","ask-user","routing"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-ask-router@0.4.2","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-ask-router","bugs":{"url":"https://github.com/fan56/dsh-ask-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"8c14ed7e209c17d63a9418d39dc498be3409336b","tarball":"https://registry.npmjs.org/@aiwayds/dsh-ask-router/-/dsh-ask-router-0.4.2.tgz","fileCount":8,"integrity":"sha512-GFi5r1cfelK9iwAcHv7hGc4YXBj66m7XOWMkMhYbmwnRVXQgblXGf18Ph4oR0aAa3t7kHBQeVP+5Hk0e+Oft4w==","signatures":[{"sig":"MEQCIBNs5JrPLFjLAb+YvZig3OUXED/L0/w3jIoj3pCNe4HlAiAGVFsRLwLFAT5EvZz8FE/4MFu66q/EAyyM5UfRCdUDyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH9tyKnlXqYcm/ImSv8xp+tQEzMibXFdXNuVNE3GlJMOAiEA08oH3t4jkZ7SFFpvZVLWcJL71Cpnb42GWqikQ0SZbEQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-ask-router@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":30168},"main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"e21a2327033443ff638b3e942b3717e171235b22","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-ask-router.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: routes ask-user questions to every interaction surface bound to the asking session (TUI panel, Feishu card, web, ...) — first answer wins","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ask-router_0.4.2_1789097857942_0.41154380115915434","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aiwayds/dsh-ask-router","version":"0.5.0","keywords":["dsh","dsh-plugin","deepseek-harness","ask-user","routing"],"author":{"name":"fan56"},"license":"MIT","_id":"@aiwayds/dsh-ask-router@0.5.0","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"homepage":"https://github.com/fan56/dsh-ask-router","bugs":{"url":"https://github.com/fan56/dsh-ask-router/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"d984fa9b37590cf4a9ba062bbc6b88581115974c","tarball":"https://registry.npmjs.org/@aiwayds/dsh-ask-router/-/dsh-ask-router-0.5.0.tgz","fileCount":11,"integrity":"sha512-yJ0dnBBZLZLtI+zEsQ1xhBnjpc1lkwGosAT0/DzIX8yMHsIc4NlgRiXdX7n+8b+tHRvjaRJbL5UOR340EKDBaQ==","signatures":[{"sig":"MEUCIH/xjubYUn3QmcDJKEOgxEnLhpVx9Ls/5hbU4fXZC44yAiEArwOg/99DdUHaWGVeI4VxZiuz0iwmATGOIrXHd6xQJ+Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAUC86ve3+Cr4LUMI7LNpb+gR7KU3JmSlubMQQSSprWtAiEAmp94zIlEbENznzTCy/NGrp3DRzjzi2Ak7SG/ebuMXhg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-ask-router@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":30686},"icon":"./icon.svg","main":"lib/index.js","type":"module","types":"lib/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"152a70484a3ec7fe9c7662bb912febadf042f828","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"repository":{"url":"git+https://github.com/fan56/dsh-ask-router.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: routes ask-user questions to every interaction surface bound to the asking session (TUI panel, Feishu card, web, ...) — first answer wins","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"peerDependencies":{"@deepseek-ai/dsh":">=0.1.7-rc.1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ask-router_0.5.0_1790230187632_0.49327481529871364","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"_id":"@aiwayds/dsh-ask-router@0.6.0","dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"bugs":{"url":"https://github.com/fan56/dsh-ask-router/issues"},"dist":{"shasum":"c7d2c60f3222b004bc7060bf8d839b270b46d08d","tarball":"https://registry.npmjs.org/@aiwayds/dsh-ask-router/-/dsh-ask-router-0.6.0.tgz","fileCount":11,"integrity":"sha512-8L5DDKIz52YLrYmy05aKZBEGVFS4v8xGDB8S60Xz/eYWTYoHnrzgAdW66i8bGrWqulf+db1yFeGKWLERgiml7w==","signatures":[{"sig":"MEQCIFP9bFJ9plTy2rnbbMWW9Bv5lB4lFZoZ5Y2UJpOuA/TQAiA+8BrsfXgTgQXvkWFbs0COGDKdCz9LcMB1MMSjqiJQxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDcH2lIqGnf5Y2yw4VprmRamebjViUkvGr2FGg3esTd7AIhAP18qUvViNjMVg2RlYFPF8gKqnUvpVRF+jM3B2rY9cPZ"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aiwayds%2fdsh-ask-router@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":30686},"icon":"./icon.svg","main":"lib/index.js","name":"@aiwayds/dsh-ask-router","type":"module","types":"lib/index.d.ts","author":{"name":"fan56"},"engines":{"node":">=22.19.0"},"gitHead":"509d7b2bc00521f9c6842aa0c8bccd8b31f515d9","license":"MIT","scripts":{"test":"node --test test/*.test.mjs","build":"tsc -p tsconfig.json","check":"tsc --noEmit -p tsconfig.json","smoke":"node scripts/smoke-boot.mjs","pretest":"npm run build","precheck":"node scripts/link-dsh-closure.mjs","link-closure":"node scripts/link-dsh-closure.mjs"},"version":"0.6.0","_npmUser":{"name":"aiwayds","email":"aiway.ds@qq.com"},"homepage":"https://github.com/fan56/dsh-ask-router","keywords":["dsh","dsh-plugin","deepseek-harness","ask-user","routing"],"repository":{"url":"git+https://github.com/fan56/dsh-ask-router.git","type":"git"},"_npmVersion":"10.9.8","description":"dsh plugin: routes ask-user questions to every interaction surface bound to the asking session (TUI panel, Feishu card, web, ...) — first answer wins","directories":{},"maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"~5.9.0","@types/node":"^24.0.0"},"peerDependencies":{"@deepseek-ai/dsh":">=0.2.0-rc.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-ask-router_0.6.0_1790685439639_0.5133939499007067"}}},"time":{"created":"2026-08-26T03:19:44.179Z","modified":"2026-09-29T12:37:20.208Z","0.1.0":"2026-08-26T03:19:44.509Z","0.1.1":"2026-08-29T04:28:21.383Z","0.2.0":"2026-08-29T09:19:29.628Z","0.3.0":"2026-09-01T16:52:02.157Z","0.4.0":"2026-09-03T13:31:18.424Z","0.4.1":"2026-09-05T10:14:46.247Z","0.4.2":"2026-09-11T03:37:38.034Z","0.5.0":"2026-09-24T06:09:47.714Z","0.6.0":"2026-09-29T12:37:19.745Z"},"bugs":{"url":"https://github.com/fan56/dsh-ask-router/issues"},"author":{"name":"fan56"},"license":"MIT","homepage":"https://github.com/fan56/dsh-ask-router","keywords":["dsh","dsh-plugin","deepseek-harness","ask-user","routing"],"repository":{"url":"git+https://github.com/fan56/dsh-ask-router.git","type":"git"},"description":"dsh plugin: routes ask-user questions to every interaction surface bound to the asking session (TUI panel, Feishu card, web, ...) — first answer wins","maintainers":[{"name":"aiwayds","email":"aiway.ds@qq.com"}],"readme":"# dsh-ask-router — ask-user 多端路由\n\n> dsh 插件：把 ask-user 的应答入口变成多路分发器（`ctx.askSurfaces`）。\n> 一次提问同时弹给**所有**认领该会话的交互面（TUI 面板 / 飞书卡片 / …），\n> **先答先得**，落选端自动收起。\n\n**要求 dsh >= 0.2.0-rc.2**（package.json 以 `peerDependencies` 声明该地板——dsh 0.1.7 起官方安装预检读取插件 peerDependencies 做兼容性检查）。本插件只跟随 dsh RC/stable 线（CI 与发版在运行时解析 latest/next 中更新的 dist-tag）。**不再支持 alpha 线。** rc 时代的 provider 槽位路径（含 DUPLICATE_PROVIDER 让位与加载顺序要求）已删除。\n\n## 为什么要做\n\ndsh 的 `ask_user_question`（AI 中途停下向用户提问）需要一个 UI 来渲染问题、收集答案。\nrc 时代的 dsh（≤ v0.1.1）曾规定**每进程只允许一个应答入口**（provider）——同一个 profile\n里装两个 UI（如 dsh-tui-pi + dsh-feishu），只有一个能收到提问，另一个永远沉默\n（0.1.2 起官方改为 `'user-questions/request'` waterfall，多应答者共存，槽位已成历史）。\n\n而真实场景恰恰是：人在工位想在 TUI 里答，人离开座位想在手机飞书卡片上答。\n一个入口逼着二选一，意味着你一起身，AI 的提问就挂在那里等人。\n\n本插件把那个唯一的入口变成**多路分发器**：UI 不再抢入口，而是注册成\n「surface」，提问路由给该答的人——\n\n- `claim(request)` 认领「我正在驱动这个会话」（按 `agent.session.id` 过滤）；\n- 无人认领时问所有 surface——**宁可多弹，不可漏问**；\n- 所有认领的 surface **同时弹出**，**先答先得**；\n- 落选的 surface 收到 `settled(request, 胜者名)` 自动收起；\n- turn 中止 → 全部撤销。\n\n```\nagent 调 ask_user_question\n  → dsh-ask-router（waterfall 应答者）\n      → claim(request) 过滤：只问「当前驱动该会话」的 surface\n        （无人认领时问全部——宁可多弹不可漏问）\n      → fan-out → 第一个答案胜出\n      → 其余 surface 收到 settled(request, 胜者名) 自动收起\n      → abort（turn 中止）全部撤销\n```\n\n## v0.1.2-rc 之后呢？—— 仍然需要，而且定位更清晰了\n\nrc/stable 线的 dsh 移除了单入口：应答者可以共存于 `'user-questions/request'`\ncordis waterfall 上（返回即应答、调 `next()` 即让位），**官方解决了「共存」**——\n只装单个 UI 的用户不再需要本插件，「绝不装进 web profile」的旧禁令也随之作废。\n\n但官方机制是**排队，不是抢答**：提问按注册顺序逐个传递，前面的应答者答了，\n后面的连问题都看不到；它表达不了「电脑和手机同时弹、人在哪边就在哪边答、\n另一边自动收起」。\n\n所以在 rc/stable 线上本插件从「必需品」变成「增强件」：作为一层**多端竞答协议**\n叠在 waterfall 之上——\n\n```\nrc/stable 宿主 waterfall 队列\n  └─ dsh-ask-router（占一个队列位，唯一的应答者）\n       └─ 广播抢答：claim 过滤 → 全员同弹 → 先答先得 → settled 收摊\n```\n\nrc/stable 宿主想要多端同时竞答就装它（alpha 宿主已不受支持）。单 UI 用户可以不装。\n\nask 请求带 `agent`（上游 `AskUserQuestionRequest`），surface 用\n`agent.session.id` 判定会话归属。\n\n## 🎬 Demo\n\nAI 发起 `ask_user_question` 时，问题同时弹到手机飞书，点选项即答\n（视频来自 dsh-feishu，另含交互式 /resume；竞答的另一端是桌面 TUI 面板）：\n\nhttps://github.com/user-attachments/assets/c0d7092f-deda-4443-b75a-2bc93bd30d86\n\n## 安装\n\n```bash\nnpm install -D @aiwayds/dsh-ask-router   # 或作为 dsh-tui-pi 的依赖自动带上\n```\n\n本地开发用 link（tui / headless profile）：\n\ndependencies 用 `link:` 指向本仓库；bundles 里放在 `dsh-base` 之后即可\n（waterfall 上多应答者共存，无加载顺序要求）：\n\n```jsonc\n{\n  \"dsh\": { \"profile\": { \"bundles\": [\n    \"@deepseek-ai/dsh-base\",\n    \"@aiwayds/dsh-ask-router\",      // ← dsh-base 之后、UI 之前\n    \"@aiwayds/dsh-tui-pi\",\n    \"@aiwayds/dsh-feishu\"\n  ]}}\n}\n```\n\n装进 web profile 也是安全的（waterfall 多应答者共存；rc 时代「绝不装进\nweb profile」的禁令随槽位一起成为历史）：没有 surface 的请求会自动让位给\nweb UI 应答。\n\n## 卸载\n\n```bash\ndsh plugin --profile <name> remove @aiwayds/dsh-ask-router\n```\n\n宿主自动清掉 profile `bundles` 里对应的条目和插件的 patch 层。本插件\n**零落盘状态**——没有数据文件，也不占用 settings 命名空间——卸载后不留任何残留。\n\n移除后 `ask_user_question` 的 waterfall 自然回落给其它应答者：dsh-tui-pi 检测不到\n本插件时会以自身作为应答者接住提问；两者都没有时，`ask_user_question` 调用按失败\n收场（fail closed）。\n\n## Surface 协议（UI 插件实现）\n\n```ts\nctx.get('askSurfaces').register({\n  name: 'my-ui',\n  claim: request => 我当前驱动的会话 === String(request.agent?.session?.id),\n  ask: request => 渲染问题并返回答案 Promise,\n  settled: (request, by) => 另一端先答，收起我的 UI,\n})\n```\n\n- UI 检测不到本插件时应当独立可用：自行注册 `'user-questions/request'` waterfall 应答者（零回归）\n- `claim` 抛错按不认领处理；`settled` 抛错被吞（胜者不受影响）\n- 所有 surface 失败才 reject（取第一个错误）；无人认领时全体弹\n\n## 测试\n\n```bash\nnpm test   # 10 个纯逻辑单测（先答先得/认领路由/abort/失败聚合/注册表\n           #  + apply() waterfall 应答者注册与释放）\n```\n\nLicense: MIT. 作者 fan56. 设计背景见\n`~/github/docs/dsh-feishu-interactive-cards-research.md`。\n","readmeFilename":"README.md"}