{"_id":"@bobhuhu/dsh-llm-github-copilot-cli","_rev":"6-3fcb7e3458290bda845d335b83991af3","name":"@bobhuhu/dsh-llm-github-copilot-cli","dist-tags":{"latest":"0.1.6"},"versions":{"0.1.0":{"name":"@bobhuhu/dsh-llm-github-copilot-cli","version":"0.1.0","keywords":["dsh-plugin","deepseek-harness","github-copilot","copilot-cli","llm-provider"],"license":"MIT","_id":"@bobhuhu/dsh-llm-github-copilot-cli@0.1.0","maintainers":[{"name":"bobhuhu","email":"huxin18162650785@gmail.com"}],"homepage":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli#readme","bugs":{"url":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-general"],"platform":"web"}},"dist":{"shasum":"1f05acfb0ebbe95c086db2d426b47cfc8716ae3c","tarball":"https://registry.npmjs.org/@bobhuhu/dsh-llm-github-copilot-cli/-/dsh-llm-github-copilot-cli-0.1.0.tgz","fileCount":103,"integrity":"sha512-tuqJUz1MAGETpWlnlJNSDq8bd+LsbD0fUtTw9sTYl++lunNld4xdzQk11zc+8iEAxTUUqZOtJgSA0j4+F0a8tA==","signatures":[{"sig":"MEQCIQDaCbbgEe1AC9Fs0Gbhku9AMWZ6FIUgGQv6WlLAyE9iSQIfXTJarKzpBRCM/yv+DbkH3twHG3b/0YaLrqkZTMR2Mg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":907383},"main":"./dist/plugin.js","type":"module","_from":"file:bobhuhu-dsh-llm-github-copilot-cli-0.1.0.tgz","types":"./dist/plugin.d.ts","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./client":{"default":"./dist/client.js"},"./plugin":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./adapter":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json && node scripts/build-client.mjs","clean":"rimraf dist *.tgz","prepack":"npm run clean && npm run build && npm run verify:package && npm test","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json","test:watch":"vitest","verify:package":"node scripts/verify-package.mjs"},"_npmUser":{"name":"bobhuhu","email":"huxin18162650785@gmail.com"},"_resolved":"/Users/huxin/IdeaProjects/dsh-llm-github-copilot-cli/bobhuhu-dsh-llm-github-copilot-cli-0.1.0.tgz","overrides":{"brace-expansion":"5.0.9"},"_integrity":"sha512-tuqJUz1MAGETpWlnlJNSDq8bd+LsbD0fUtTw9sTYl++lunNld4xdzQk11zc+8iEAxTUUqZOtJgSA0j4+F0a8tA==","repository":{"url":"git+https://github.com/BobHuHu/dsh-llm-github-copilot-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"A DeepSeek Harness provider backed by the official GitHub Copilot SDK and CLI","directories":{},"_nodeVersion":"25.8.0","dependencies":{"@github/copilot":"1.0.81","@github/copilot-sdk":"1.0.11","@deepseek-ai/schemastery":"3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"6.1.2","vitest":"4.1.11","typescript":"5.9.3","@types/node":"25.2.0","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2","@deepseek-ai/dsh-llm":"0.1.1-rc.2","@deepseek-ai/dsh-commands":"0.1.1-rc.2","@deepseek-ai/dsh-attachment":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-llm":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-commands":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-attachment":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-renderer":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings-general":"0.1.1-rc.2 || 0.1.2-alpha.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-fs":{"optional":true},"@deepseek-ai/dsh-llm":{"optional":true},"@deepseek-ai/dsh-commands":{"optional":true},"@deepseek-ai/dsh-attachment":{"optional":true},"@deepseek-ai/dsh-client-locale":{"optional":true},"@deepseek-ai/dsh-client-runtime":{"optional":true},"@deepseek-ai/dsh-host-webserver":{"optional":true},"@deepseek-ai/dsh-client-ui-renderer":{"optional":true},"@deepseek-ai/dsh-client-ui-settings":{"optional":true},"@deepseek-ai/dsh-client-ui-settings-general":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-github-copilot-cli_0.1.0_1788104925086_0.8847738435185255","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bobhuhu/dsh-llm-github-copilot-cli","version":"0.1.1","keywords":["dsh-plugin","deepseek-harness","github-copilot","copilot-cli","llm-provider"],"license":"MIT","_id":"@bobhuhu/dsh-llm-github-copilot-cli@0.1.1","maintainers":[{"name":"bobhuhu","email":"huxin18162650785@gmail.com"}],"homepage":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli#readme","bugs":{"url":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-general"],"platform":"web"}},"dist":{"shasum":"8619940e877120fb6bae001873dc3901b4c804a5","tarball":"https://registry.npmjs.org/@bobhuhu/dsh-llm-github-copilot-cli/-/dsh-llm-github-copilot-cli-0.1.1.tgz","fileCount":103,"integrity":"sha512-1LFP0JyVnEVruK6vrVvBJW+81AHyC7xNeenyh9E7WX5fFkU9MRWYLh3sqiHfKPv2x/2qzzZIS/qDR9r5xKjK6Q==","signatures":[{"sig":"MEUCIA9pyJCBre5RxDc3WLQ2qMThMHtiTB9znRW21UC7ruZ/AiEA8xlId7GZKwAaB522blzMrWazSZMNUEKqosdOZEegmWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":908196},"main":"./dist/plugin.js","type":"module","_from":"file:bobhuhu-dsh-llm-github-copilot-cli-0.1.1.tgz","types":"./dist/plugin.d.ts","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./client":{"default":"./dist/client.js"},"./plugin":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./adapter":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.json && node scripts/build-client.mjs","clean":"rimraf dist *.tgz","prepack":"npm run clean && npm run build && npm run verify:package && npm test","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json","test:watch":"vitest","verify:package":"node scripts/verify-package.mjs"},"_npmUser":{"name":"bobhuhu","email":"huxin18162650785@gmail.com"},"_resolved":"/Users/huxin/IdeaProjects/dsh-llm-github-copilot-cli/bobhuhu-dsh-llm-github-copilot-cli-0.1.1.tgz","overrides":{"brace-expansion":"5.0.9"},"_integrity":"sha512-1LFP0JyVnEVruK6vrVvBJW+81AHyC7xNeenyh9E7WX5fFkU9MRWYLh3sqiHfKPv2x/2qzzZIS/qDR9r5xKjK6Q==","repository":{"url":"git+https://github.com/BobHuHu/dsh-llm-github-copilot-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"A DeepSeek Harness provider backed by the official GitHub Copilot SDK and CLI","directories":{},"_nodeVersion":"25.8.0","dependencies":{"@github/copilot":"1.0.81","@github/copilot-sdk":"1.0.11","@deepseek-ai/schemastery":"3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"6.1.2","vitest":"4.1.11","typescript":"5.9.3","@types/node":"25.2.0","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2","@deepseek-ai/dsh-llm":"0.1.1-rc.2","@deepseek-ai/dsh-commands":"0.1.1-rc.2","@deepseek-ai/dsh-attachment":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-llm":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-commands":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-attachment":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-renderer":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings-general":"0.1.1-rc.2 || 0.1.2-alpha.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-fs":{"optional":true},"@deepseek-ai/dsh-llm":{"optional":true},"@deepseek-ai/dsh-commands":{"optional":true},"@deepseek-ai/dsh-attachment":{"optional":true},"@deepseek-ai/dsh-client-locale":{"optional":true},"@deepseek-ai/dsh-client-runtime":{"optional":true},"@deepseek-ai/dsh-host-webserver":{"optional":true},"@deepseek-ai/dsh-client-ui-renderer":{"optional":true},"@deepseek-ai/dsh-client-ui-settings":{"optional":true},"@deepseek-ai/dsh-client-ui-settings-general":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-github-copilot-cli_0.1.1_1788106293748_0.3355390073615132","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bobhuhu/dsh-llm-github-copilot-cli","version":"0.1.2","keywords":["dsh-plugin","deepseek-harness","github-copilot","copilot-cli","llm-provider"],"license":"MIT","_id":"@bobhuhu/dsh-llm-github-copilot-cli@0.1.2","maintainers":[{"name":"bobhuhu","email":"huxin18162650785@gmail.com"}],"homepage":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli#readme","bugs":{"url":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-general"],"platform":"web"}},"dist":{"shasum":"4747eb39f6b45a92037ace59ac0a7fb82f37813d","tarball":"https://registry.npmjs.org/@bobhuhu/dsh-llm-github-copilot-cli/-/dsh-llm-github-copilot-cli-0.1.2.tgz","fileCount":103,"integrity":"sha512-EJEt7rQPSUsR6d27Ib7xOdZEwvHTXvcs0bR1OtdS6xTBZEQVuXFSx3cMsfr62DTV3fuNFhFyEEnmcbBA3EEvnQ==","signatures":[{"sig":"MEYCIQDu6vUClX+wuH76R4q7RlU+8PT8G59fdQZ4WWeGn7T3PwIhAMUUszA2pv+iH/FRis7iUVuRshJoalW3yLz+YGd4C3T+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":917096},"main":"./dist/plugin.js","type":"module","types":"./dist/plugin.d.ts","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./client":{"default":"./dist/client.js"},"./plugin":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./adapter":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"d54776e59bf8952d0bb708652718d4575d7cf8f4","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json && node scripts/build-client.mjs","clean":"rimraf dist *.tgz","prepack":"npm run clean && npm run build && npm run verify:package && npm test","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json","test:watch":"vitest","verify:package":"node scripts/verify-package.mjs"},"_npmUser":{"name":"bobhuhu","email":"huxin18162650785@gmail.com"},"overrides":{"brace-expansion":"5.0.9"},"repository":{"url":"git+https://github.com/BobHuHu/dsh-llm-github-copilot-cli.git","type":"git"},"_npmVersion":"11.11.0","description":"A DeepSeek Harness provider backed by the official GitHub Copilot SDK and CLI","directories":{},"_nodeVersion":"25.8.0","dependencies":{"@github/copilot":"1.0.81","@github/copilot-sdk":"1.0.11","@deepseek-ai/schemastery":"3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"6.1.2","vitest":"4.1.11","typescript":"5.9.3","@types/node":"25.2.0","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2","@deepseek-ai/dsh-llm":"0.1.1-rc.2","@deepseek-ai/dsh-commands":"0.1.1-rc.2","@deepseek-ai/dsh-attachment":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-llm":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-commands":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-attachment":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-renderer":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings-general":"0.1.1-rc.2 || 0.1.2-alpha.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-fs":{"optional":true},"@deepseek-ai/dsh-llm":{"optional":true},"@deepseek-ai/dsh-commands":{"optional":true},"@deepseek-ai/dsh-attachment":{"optional":true},"@deepseek-ai/dsh-client-locale":{"optional":true},"@deepseek-ai/dsh-client-runtime":{"optional":true},"@deepseek-ai/dsh-host-webserver":{"optional":true},"@deepseek-ai/dsh-client-ui-renderer":{"optional":true},"@deepseek-ai/dsh-client-ui-settings":{"optional":true},"@deepseek-ai/dsh-client-ui-settings-general":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-github-copilot-cli_0.1.2_1788183589579_0.9441859548787108","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@bobhuhu/dsh-llm-github-copilot-cli","version":"0.1.4","keywords":["dsh-plugin","deepseek-harness","github-copilot","copilot-cli","llm-provider"],"license":"MIT","_id":"@bobhuhu/dsh-llm-github-copilot-cli@0.1.4","maintainers":[{"name":"bobhuhu","email":"huxin18162650785@gmail.com"}],"homepage":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli#readme","bugs":{"url":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-general"],"platform":"web"}},"dist":{"shasum":"c6f3fe50a6a1c0ca9913fe81aa777da298daff5c","tarball":"https://registry.npmjs.org/@bobhuhu/dsh-llm-github-copilot-cli/-/dsh-llm-github-copilot-cli-0.1.4.tgz","fileCount":119,"integrity":"sha512-VIcnQ5Sd32UXrre5ai7301Sq6lifq6TO4bSYj/ViAVGKCC/yfzYwlvMYPk+CGpFh0AzGaZIGYvk+n90u8QY7ew==","signatures":[{"sig":"MEUCIFo5Aia43+1U90Hk0sCnXM0okcLnRPeRghJG8JVYXsIYAiEA+uPCsA+HQ2/vBucwOVwkVsxfkuGvlGh10T2UeNkrSHk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1072306},"main":"./dist/plugin.js","type":"module","types":"./dist/plugin.d.ts","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./client":{"default":"./dist/client.js"},"./plugin":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./adapter":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"fe5076ee057cf4e9e3100c8c9a6719fdb7157ef4","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json && node scripts/build-client.mjs","clean":"rimraf dist *.tgz","prepack":"npm run clean && npm run build && npm run verify:package && npm test","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json","test:watch":"vitest","verify:package":"node scripts/verify-package.mjs","test:live-files":"node scripts/live-generic-file-probe.mjs"},"_npmUser":{"name":"bobhuhu","email":"huxin18162650785@gmail.com"},"overrides":{"brace-expansion":"5.0.9"},"repository":{"url":"git+https://github.com/BobHuHu/dsh-llm-github-copilot-cli.git","type":"git"},"_npmVersion":"11.16.0","description":"A DeepSeek Harness provider backed by the official GitHub Copilot SDK and CLI","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@github/copilot":"1.0.81","@github/copilot-sdk":"1.0.11","@deepseek-ai/schemastery":"3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"6.1.2","vitest":"4.1.11","typescript":"5.9.3","@types/node":"25.2.0","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2","@deepseek-ai/dsh-llm":"0.1.1-rc.2","@deepseek-ai/dsh-commands":"0.1.1-rc.2","@deepseek-ai/dsh-attachment":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-llm":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-commands":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-attachment":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-renderer":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings-general":"0.1.1-rc.2 || 0.1.2-alpha.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-fs":{"optional":true},"@deepseek-ai/dsh-llm":{"optional":true},"@deepseek-ai/dsh-commands":{"optional":true},"@deepseek-ai/dsh-attachment":{"optional":true},"@deepseek-ai/dsh-client-locale":{"optional":true},"@deepseek-ai/dsh-client-runtime":{"optional":true},"@deepseek-ai/dsh-host-webserver":{"optional":true},"@deepseek-ai/dsh-client-ui-renderer":{"optional":true},"@deepseek-ai/dsh-client-ui-settings":{"optional":true},"@deepseek-ai/dsh-client-ui-settings-general":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-github-copilot-cli_0.1.4_1788313557938_0.802443679639953","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@bobhuhu/dsh-llm-github-copilot-cli","version":"0.1.5","keywords":["dsh-plugin","deepseek-harness","github-copilot","copilot-cli","llm-provider"],"license":"MIT","_id":"@bobhuhu/dsh-llm-github-copilot-cli@0.1.5","maintainers":[{"name":"bobhuhu","email":"huxin18162650785@gmail.com"}],"homepage":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli#readme","bugs":{"url":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-general"],"platform":"web"}},"dist":{"shasum":"afebd0667b99ce6eae96a5c5c32e33eaafe499c5","tarball":"https://registry.npmjs.org/@bobhuhu/dsh-llm-github-copilot-cli/-/dsh-llm-github-copilot-cli-0.1.5.tgz","fileCount":119,"integrity":"sha512-YMQF8F4MZzeW6d5ZF6ok1ACoBgJDANMNxYLxRaCOVf2LXwaRxjxSll7tzXIJv2Z7DaOGoalIy3TgahsiE5vatA==","signatures":[{"sig":"MEUCIElv+nIXxBZUzc8iWlWQ6o62Vc9kantmftpqTI2JV5J9AiEA7nhARhqya9Yksq4+ZXOpSvU9g3ZTthjbWstYszxsmoY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1097160},"main":"./dist/plugin.js","type":"module","types":"./dist/plugin.d.ts","engines":{"node":"^20.19.0 || >=22.12.0"},"exports":{".":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./client":{"default":"./dist/client.js"},"./plugin":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./adapter":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"f1530d7996ef854e68ce794d39da44d39b61b9e8","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json && node scripts/build-client.mjs","clean":"rimraf dist *.tgz","prepack":"npm run clean && npm run build && npm run verify:package && npm test","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json","test:watch":"vitest","verify:package":"node scripts/verify-package.mjs","test:live-files":"node scripts/live-generic-file-probe.mjs"},"_npmUser":{"name":"bobhuhu","email":"huxin18162650785@gmail.com"},"overrides":{"brace-expansion":"5.0.9"},"repository":{"url":"git+https://github.com/BobHuHu/dsh-llm-github-copilot-cli.git","type":"git"},"_npmVersion":"11.16.0","description":"A DeepSeek Harness provider backed by the official GitHub Copilot SDK and CLI","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@github/copilot":"1.0.81","@github/copilot-sdk":"1.0.11","@deepseek-ai/schemastery":"3.18.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"6.1.2","vitest":"4.1.11","typescript":"5.9.3","@types/node":"25.2.0","@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2","@deepseek-ai/dsh-llm":"0.1.1-rc.2","@deepseek-ai/dsh-commands":"0.1.1-rc.2","@deepseek-ai/dsh-attachment":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-llm":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-commands":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-attachment":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-renderer":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings-general":"0.1.1-rc.2 || 0.1.2-alpha.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-fs":{"optional":true},"@deepseek-ai/dsh-llm":{"optional":true},"@deepseek-ai/dsh-commands":{"optional":true},"@deepseek-ai/dsh-attachment":{"optional":true},"@deepseek-ai/dsh-client-locale":{"optional":true},"@deepseek-ai/dsh-client-runtime":{"optional":true},"@deepseek-ai/dsh-host-webserver":{"optional":true},"@deepseek-ai/dsh-client-ui-renderer":{"optional":true},"@deepseek-ai/dsh-client-ui-settings":{"optional":true},"@deepseek-ai/dsh-client-ui-settings-general":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-llm-github-copilot-cli_0.1.5_1788324138494_0.07878528029065057","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@bobhuhu/dsh-llm-github-copilot-cli","version":"0.1.6","description":"A DeepSeek Harness provider backed by the official GitHub Copilot SDK and CLI","type":"module","main":"./dist/plugin.js","types":"./dist/plugin.d.ts","exports":{".":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./plugin":{"types":"./dist/plugin.d.ts","default":"./dist/plugin.js"},"./adapter":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./client":{"default":"./dist/client.js"},"./package.json":"./package.json"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web","inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-locale","@deepseek-ai/dsh-client-ui-renderer","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-settings-general"]}},"scripts":{"clean":"rimraf dist *.tgz","build":"tsc -p tsconfig.json && node scripts/build-client.mjs","test":"vitest run","test:live-files":"node scripts/live-generic-file-probe.mjs","test:watch":"vitest","typecheck":"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json","verify:package":"node scripts/verify-package.mjs","prepack":"npm run clean && npm run build && npm run verify:package && npm test"},"keywords":["dsh-plugin","deepseek-harness","github-copilot","copilot-cli","llm-provider"],"repository":{"type":"git","url":"git+https://github.com/BobHuHu/dsh-llm-github-copilot-cli.git"},"homepage":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli#readme","bugs":{"url":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli/issues"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"license":"MIT","engines":{"node":"^20.19.0 || >=22.12.0"},"dependencies":{"@deepseek-ai/schemastery":"3.18.1","@github/copilot":"1.0.81","@github/copilot-sdk":"1.0.11"},"overrides":{"brace-expansion":"5.0.9"},"peerDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-attachment":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-commands":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-runtime":"0.1.1-rc.2","@deepseek-ai/dsh-client-ui-renderer":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-client-ui-settings-general":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-fs":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2 || 0.1.2-alpha.1","@deepseek-ai/dsh-llm":"0.1.1-rc.2 || 0.1.2-alpha.1"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-attachment":{"optional":true},"@deepseek-ai/dsh-commands":{"optional":true},"@deepseek-ai/dsh-client-locale":{"optional":true},"@deepseek-ai/dsh-client-runtime":{"optional":true},"@deepseek-ai/dsh-client-ui-renderer":{"optional":true},"@deepseek-ai/dsh-client-ui-settings":{"optional":true},"@deepseek-ai/dsh-client-ui-settings-general":{"optional":true},"@deepseek-ai/dsh-fs":{"optional":true},"@deepseek-ai/dsh-host-webserver":{"optional":true},"@deepseek-ai/dsh-llm":{"optional":true}},"devDependencies":{"@deepseek-ai/cordis":"4.0.1","@deepseek-ai/dsh-attachment":"0.1.1-rc.2","@deepseek-ai/dsh-commands":"0.1.1-rc.2","@deepseek-ai/dsh-client-locale":"0.1.1-rc.2","@deepseek-ai/dsh-fs":"0.1.1-rc.2","@deepseek-ai/dsh-host-webserver":"0.1.1-rc.2","@deepseek-ai/dsh-llm":"0.1.1-rc.2","@types/node":"25.2.0","rimraf":"6.1.2","typescript":"5.9.3","vitest":"4.1.11"},"gitHead":"f1530d7996ef854e68ce794d39da44d39b61b9e8","_id":"@bobhuhu/dsh-llm-github-copilot-cli@0.1.6","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-tpJgkcpR7DtTPgKAPhP5HLVpVX0+j+uAhECATkF+s1IHpUshNT4b7DvrM9zjrKPgueiawbhHbp6fDHTw93kpQQ==","shasum":"87e71ee9dbce14a7172b7026e6e18dab2d56e73d","tarball":"https://registry.npmjs.org/@bobhuhu/dsh-llm-github-copilot-cli/-/dsh-llm-github-copilot-cli-0.1.6.tgz","fileCount":119,"unpackedSize":1106832,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCRIpxYxdbWMWON4iiESoAC7aAnLaWoRsGjSLZCL3tD1AIhAJQBh4x2hRube7KemFraaC2pEIlC4/WLmuwk9REc3m2p"}]},"_npmUser":{"name":"bobhuhu","email":"huxin18162650785@gmail.com"},"directories":{},"maintainers":[{"name":"bobhuhu","email":"huxin18162650785@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-llm-github-copilot-cli_0.1.6_1788340561351_0.3600704137195283"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-30T15:48:44.908Z","modified":"2026-09-02T09:16:01.729Z","0.1.0":"2026-08-30T15:48:45.248Z","0.1.1":"2026-08-30T16:11:33.875Z","0.1.2":"2026-08-31T13:39:49.721Z","0.1.4":"2026-09-02T01:45:58.141Z","0.1.5":"2026-09-02T04:42:18.651Z","0.1.6":"2026-09-02T09:16:01.537Z"},"bugs":{"url":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli/issues"},"license":"MIT","homepage":"https://github.com/BobHuHu/dsh-llm-github-copilot-cli#readme","keywords":["dsh-plugin","deepseek-harness","github-copilot","copilot-cli","llm-provider"],"repository":{"type":"git","url":"git+https://github.com/BobHuHu/dsh-llm-github-copilot-cli.git"},"description":"A DeepSeek Harness provider backed by the official GitHub Copilot SDK and CLI","maintainers":[{"name":"bobhuhu","email":"huxin18162650785@gmail.com"}],"readme":"# @bobhuhu/dsh-llm-github-copilot-cli\n\nA standalone DeepSeek Harness provider that uses the published GitHub Copilot\nSDK and its official CLI subprocess. The DSH provider route is `copilot`.\n\nThe plugin does not call Copilot service endpoints directly, implement OAuth,\nread credentials, copy a client identity, or carry a fork of the Copilot SDK.\nAuthentication, protocol handling, model routing, and service communication\nremain owned by the official CLI.\n\n## Runtime architecture\n\n```text\nDSH host\n  -> @bobhuhu/dsh-llm-github-copilot-cli\n    -> @github/copilot-sdk 1.0.11\n      -> official @github/copilot 1.0.81 CLI subprocess\n        -> GitHub Copilot service\n```\n\nThe package pins and verifies both official GitHub packages at startup. It\nresolves the public `@github/copilot/npm-loader.js` entry and connects through\n`RuntimeConnection.forStdio()`. A mismatched SDK, CLI package, platform package,\nor binary fails closed.\n\n## Supported versions\n\n| Component | Supported version |\n| --- | --- |\n| Published DSH | `0.1.1-rc.2` |\n| Tagged DSH source host | `dsh-v0.1.2-alpha.1` at `cd5ef8148158c3a752a658978873241fdf8e2bbc` |\n| `@github/copilot-sdk` | `1.0.11` |\n| `@github/copilot` CLI package | `1.0.81` |\n| Node.js | `^20.19.0 || >=22.12.0` |\n\nOne package artifact supports both DSH contracts. Compatibility for the\n`CallId`/`ToolCallId`, image-handle, placeholder, image-access, usage, and model\ndiscovery differences is isolated behind runtime capability probes. Other DSH\nversions are not claimed as compatible.\n\n## Capabilities\n\n- Dynamic official model discovery with exact model ids, context metadata,\n  and supported reasoning-effort metadata. Discovered vision metadata remains\n  authoritative except for the pinned official `auto` router: CLI `1.0.81`\n  omits its vision flag while its public SDK attachment path demonstrably\n  accepts images; an explicit future `vision: false` still wins.\n- Ordered streaming text, reasoning, DSH tool-call blocks, usage, terminal\n  finish reasons, request ids, and stable DSH errors.\n- Stateful mapping between a DSH conversation and an official Copilot session.\n- Versioned DSH replay state for warm continuation, cold official-session\n  resume, structural integrity checks, finite pending-work expiry,\n  stale-state rejection, and deterministic full-history bootstrap.\n- Declaration-only DSH tools. Copilot may request only the exact tools declared\n  by DSH; DSH remains the sole approver and executor.\n- Parallel external tool calls, rich text/image tool results, failed results,\n  multiple tool rounds, pending-work retention, and restart recovery through\n  the public official SDK pending-tool RPC.\n- DSH image attachments with verified MIME type, byte, count, and pixel limits;\n  protected current-user/latest-tool images; configurable overflow policy; and\n  sequential, aggregate-bounded reads.\n- Same-conversation serialization, cross-conversation concurrency, bounded\n  cancellation, late-event fencing, unhealthy-client rotation, and bounded\n  plugin disposal.\n- Localized English/Chinese read-only status through `/copilot-status`, the Web\n  settings section, and `POST /github-copilot-cli/status`; command status lists\n  the exact discovered model ids as well as their count.\n- Guidance-only `/copilot-login` and `/copilot-logout` commands. They never read,\n  store, refresh, or delete credentials.\n\nAll model-facing Copilot built-in tools, MCP tools, skills, plugins, shell, Git,\nfilesystem, canvas, extension, and agent capabilities are excluded. The\neffective official tool catalog is checked before each request and immediately\nafter every catalog/MCP lifecycle refresh. A monotonic refresh revision forces\nmetadata reads to repeat when a refresh arrives during inspection; any\nunexpected tool fails the request closed. `copilot-cli` may report a connection lifecycle for its official\n`github-mcp-server`, but that record is not treated as tool availability unless\nthe authoritative effective catalog exposes an MCP tool.\n\nThe pinned CLI can occasionally draft a built-in tool call even when only a\nDSH custom tool is exposed, reject that draft internally, and retry the root\nturn. The adapter quarantines that candidate and accepts only its correlated\nfailed-execution lifecycle; an actual, successful, or uncorrelated undeclared\nexecution still fails closed. Declared tool deltas whose `toolName` is briefly\nnull or absent are buffered by call id and released only after the declared\nname is authoritatively resolved.\n\nDSH `0.1.1-rc.2` advertises optional `glob.path`, `grep.path`, and\n`grep.include` as ordinary strings even though the filesystem-search runtime\nrejects blank values after schema validation. For these exact DSH tool shapes,\nthe adapter buffers the candidate until complete arguments are available and\nuses the official CLI permission callback to reject an invalid candidate with\nrepair feedback. The CLI performs the retry; the adapter neither changes\n`\"\"` to `\".\"` nor removes fields from a model-produced call. DSH therefore\nreceives only the official repaired call.\n\n## Authentication\n\nAuthenticate with the official GitHub Copilot CLI before using the provider:\n\n```bash\nnpx @github/copilot@1.0.81 login\n```\n\nIf the CLI is already installed globally, `copilot login` is equivalent. The\nprovider starts the same official CLI mode with `useLoggedInUser: true`; it does\nnot inspect how the official CLI stores the login.\n\nTo log out, launch the official CLI and run `/logout`:\n\n```bash\nnpx @github/copilot@1.0.81\n```\n\n## Installation\n\n### Published package\n\nAfter the package is published:\n\n```bash\ndsh plugin --profile web add @bobhuhu/dsh-llm-github-copilot-cli\n```\n\n### GitHub source\n\nThe repository commits prebuilt `dist/` files and has no `prepare` script, so\nGitHub installation does not need authorization to compile this package:\n\n```bash\ndsh plugin --profile web add 'github:<owner>/<repository>#<commit-or-tag>'\n```\n\nQuote a GitHub specifier containing `#` in zsh.\n\n### Local packed artifact\n\n```bash\nnpm ci\nnpm pack\ndsh plugin --profile web add /absolute/path/bobhuhu-dsh-llm-github-copilot-cli-0.1.5.tgz\n```\n\n`npm pack` rebuilds the package, verifies the packed allowlist, source maps,\nbrowser bundle, and public server imports, then runs the deterministic test\nsuite before producing the tarball. Consumers use its precompiled ESM and\ndeclarations.\n\n### Native dependency authorization\n\nThe official SDK depends on `koffi`, which has a native install script. pnpm 11\nblocks dependency build scripts until the profile explicitly allows them. Add\nthis to the profile-owned workspace file (for example,\n`~/.dsh/profiles/web/pnpm-workspace.yaml`):\n\n```yaml\nallowBuilds:\n  koffi: true\n```\n\nThen run the same `dsh plugin ... add` command again. This profile directory is\nused by DSH for plugins even when DSH itself was installed globally with npm;\nit is not a source-checkout-only file. No `allowBuilds` entry is needed for this\nplugin package because the distributed artifact is already built.\n\n### DSH Web attachment boundary\n\nThe current client bundle does not register any `conversation.input.*` slot,\ninput trigger, file picker, drag/paste handler, attachment rail, or model\nselector. DSH owns the complete Chat Input surface; this provider contributes\nonly its status settings page plus server-side provider, model, reasoning-effort,\nstreaming, tool, image, and replay behavior.\n\nThe official DSH `0.1.1-rc.2` and `0.1.2-alpha.1` attachment contracts are\nimage-only: their composer attachment type is `kind: \"image\"`, and their public\nactions are `onAddImages` and `onRemoveImage`. They do not expose a\nprovider-neutral arbitrary-file picker or an additive generic-attachment item\ninterface. The provider therefore does not invent a Copilot-specific composer\nentry. Native PNG, JPEG, WebP, and GIF drag/drop remains owned and rendered by\nDSH. Generic-file browser intake must wait for a provider-neutral DSH contract.\n\nThe server keeps its content-addressed generic-file validation and official SDK\n`{ type: \"file\", path, displayName }` projection for backward compatibility\nwith already serialized opaque references and non-UI callers. It is not exposed\nas a DSH Web composer capability by this plugin.\n\nThe CLI exposes binary files twice: live `user.message` events carry inline\n`data`, while persisted events replace those bytes with `assetId` and\n`byteLength`. The isolation guard accepts both documented runtime forms only\nwhen the SHA-256 identity matches the provider's content-addressed path. It\ncontinues to reject unknown fields, altered paths or display names, omitted\ncontent, and mismatched bytes or asset ids.\n\n### 0.1.3 fix verification\n\nVersion `0.1.3` accepts the official CLI's root-level prompt-cache transition\nfrom an `agent`-initiated DSH tool-result continuation to the next\n`user`-initiated ordinary turn. Earlier builds treated the prior root\n`initiator: \"agent\"` as delegated capability drift even when the DSH tool\ncatalog, system prompt, and cache configuration were unchanged. Delegated\ninitiators and real tool-definition drift remain fail-closed. The release probe\nreproduces the exact `user -> agent -> user` native checkpoint sequence through\nDSH Web with an authenticated Copilot Free account.\n\nThe same release also closes the DSH filesystem-search schema/runtime gap for\n`glob` and `grep`. Its release probe installs the local tarball with\n`dsh plugin --profile web add`, deliberately makes the official model propose\n`{\"pattern\":\"**/pom.xml\",\"path\":\"\"}`, and requires the official permission\nlog to show one rejected candidate followed by one path-omitting repair. The\nDSH session log must contain exactly the repaired call, one successful result,\nzero failed results, and a completed turn.\n\nThe official `auto` catalog entry is a router, not a concrete text-only model.\nWith the pinned SDK `1.0.11` and CLI `1.0.81`, its `supports` object is empty,\nbut the public SDK accepts image blob attachments and routes them successfully.\nVersion `0.1.3` therefore exposes image input for exactly this omitted-field\ncase; it still preserves an explicit `vision: false`, and it does not infer\nvision for any other model id.\n\nThe authenticated Copilot Free release probe installs the packed `0.1.3`\nartifact into an isolated DSH Web profile and exercises both image ingress\npaths with the same 149,228-byte JPEG: a user image attachment, and a\nDSH-owned `read_image` tool result. Both turns complete through `copilot/auto`;\nthe official event logs contain one `image/jpeg` blob or binary respectively,\nand both resolve to `gpt-5-mini` without a failed DSH tool result.\n\n### 0.1.2 fix verification\n\nVersion `0.1.2` keeps successfully consumed pending-tool replay tombstones from\nbeing applied to the next ordinary non-pending replay, so a completed DSH tool\nturn can continue normally without weakening duplicate tool-result rejection.\nOnly a definitely consumed generation may advance: still-pending, cancelled,\nor ambiguously cleaned-up generations remain blocked, including when a terminal\ncallback arrives late. Deterministic regressions also include the normal DSH\nsystem-prompt and skill-catalog context messages injected before the next user\nmessage, plus consecutive external-tool rounds. A pending external-tool replay\nalso requires the original system instructions until its result is consumed;\ncompleted ordinary turns still support system-prompt rebinding.\nThe release probe exercises that exact sequence through DSH Web with an\nauthenticated Copilot Free account: one allowlisted tool execution, one\npersisted successful result, then a completed ordinary follow-up in the same\nsession with no `STALE_REPLAY`.\n\n### 0.1.1 fix verification\n\nVersion `0.1.1` fixes the scoped Web client registration required by DSH\n`client-modules`. The release probe fetches the client bundle from the running\nDSH `/plugins/@bobhuhu/dsh-llm-github-copilot-cli/client.js` route, executes it,\nand requires `ModuleLoader.load` to register the exact npm package name.\n\n### 0.1.0 verification scope\n\nThe release gate was exercised with the published DSH `0.1.1-rc.2`, the exact\ntagged `0.1.2-alpha.1` source host at commit\n`cd5ef8148158c3a752a658978873241fdf8e2bbc`, the packed npm artifact, the pinned\nofficial SDK/CLI, and an authenticated Copilot Free account. The alpha host was\ninstalled with its frozen lockfile and built before the plugin tests. The gate\ncovers fresh Web and headless profile installation, the native `koffi` build,\nclean-package imports, dynamic model discovery, exact text and tool streaming,\nhigh-fragmentation tool arguments, zero-tool isolation, active and pending\ncancellation, child-process fencing, unrelated-session concurrency, replay\nexpiry, recovery on the same DSH session, official-session restart, and\nredacted Web status. Both host generations passed the six-session cancellation,\nexpiry, concurrency, and recovery lifecycle probe against the packed artifact.\n\nFor `0.1.0`, the Free catalog exposed one usable `auto` route whose omitted\nvision flag was conservatively treated as text-only, so image input was not\nclaimed as live-tested then. Version `0.1.3` replaces that old conclusion with\npublic-SDK and installed-DSH evidence for both direct and tool-result images.\nAdditional paid-only model ids remain entitlement-dependent and are not\nclaimed as tested by the Free account.\n\n## Usage\n\nSelect provider `copilot` and one of the exact ids returned by model discovery.\nExamples of status surfaces:\n\n```text\n/copilot-status\n/copilot-login\n/copilot-logout\n```\n\nThe provider starts lazily on model discovery, status, or the first generation\nrequest. Authentication or entitlement failure is reported by status and does\nnot prevent DSH itself from booting. `/copilot-status` reports the exact model\nids returned by the official catalog without exposing login identity or paths.\n\nThe Web status query uses `POST` so a real browser supplies the `Origin` header\nrequired by the route. It always requires a loopback peer, a loopback `Host`,\nand a matching explicit loopback `Origin`. On DSH `0.1.2-alpha.1`, the public\nConnection service also validates the normal signed DSH Web session cookie.\nDSH `0.1.1-rc.2` does not expose public session validation to plugins, so that\nhost is limited to the loopback and same-origin fence. The response is redacted:\nit contains no login identity, credential, runtime path, or raw provider error.\nThe command surfaces remain local DSH commands.\n\n## Configuration\n\nThe Cordis plugin entry accepts these optional fields:\n\n| Field | Default | Meaning |\n| --- | ---: | --- |\n| `catalogTtlMs` | `300000` | Successful official model-catalog cache lifetime |\n| `negativeCatalogTtlMs` | `5000` | Empty or failed catalog refresh lifetime |\n| `defaultContextWindow` | `262144` | Conservative context for an exact id absent from the advisory catalog |\n| `fallbackModels` | `[]` | Explicit model metadata used only when official discovery returns no usable catalog |\n| `streamIdleTimeoutMs` | `300000` | Maximum time without relevant response progress; duplicate, empty, and subagent-only events do not extend it |\n| `pendingWorkRetentionMs` | `300000` | Lifetime of replayable external-tool work |\n| `maxTrackedPendingConversations` | `4096` | Maximum simultaneous or recently retained pending replay conversations |\n| `bridgeIdleTtlMs` | `300000` | Lifetime of an idle conversation bridge before eviction |\n| `cleanupTimeoutMs` | `5000` | Per-session abort/disconnect deadline |\n| `startupTimeoutMs` | `60000` | Official CLI startup and status-query deadline |\n| `shutdownTimeoutMs` | `5000` | Official client shutdown deadline before force-stop; an unconfirmed force-stop fails teardown explicitly |\n| `imageOverflowPolicy` | `offload-oldest` | `offload-oldest` or `error` |\n| `defaultImagePixelBudget` | `16000000` | Maximum decoded pixels per image |\n| `maxInlineRequestImageBytes` | `67108864` | Total base64 request-image budget |\n| `inlineImageOffloadByteQuantum` | `8388608` | Overflow removal quantum |\n| `maxFileBytes` | `52428800` | Maximum bytes for one Web-uploaded generic file |\n| `maxFilesPerRequest` | `20` | Maximum distinct generic file references in one request |\n| `maxAggregateFileBytes` | `209715200` | Maximum combined generic file bytes in one request |\n| `retryPolicy` | DSH normal policy | Host-owned retry configuration and retryable codes |\n\nThe direct-API reference provider also accepts `oauthTokenEnv`, `baseURL`,\n`defaultMaxTokens`, and per-model `maxTokens`. This official-CLI adapter\nrecognizes those compatibility fields so they cannot disappear silently, but\nrejects them before provider registration. Authentication and endpoint\nselection belong to the official CLI, while the pinned public SDK session API\ndoes not expose an output-token limit. The same public-interface limitation is\nwhy request-level `maxTokens` is rejected before session mutation.\n\nFallback models are configuration, never fabricated discovery results. A\nfailed or cancelled refresh preserves the last successful catalog. Whenever a\ncached or configured fallback hides a refresh failure, the provider emits a\nlocal diagnostic rather than presenting the fallback as fresh discovery.\nFallback ids and optional names must be non-empty, reasoning efforts and media\ntypes must be unique, and vision metadata is accepted only for a vision model.\n\n## Request and replay behavior\n\nRequest options `temperature`, `maxTokens`, and `stop` are rejected with\n`UNSUPPORTED_OPTION` before a native session is created or mutated because the\npinned public SDK session API does not expose those controls. Supported\nreasoning efforts are validated against official per-model metadata.\n\nThis also means DSH auxiliary features that always populate `maxTokens`,\nincluding the compaction and session-title implementations in the two pinned\nhosts, need a different provider until the public Copilot session API exposes an\nequivalent limit. The adapter fails explicitly instead of pretending to honor\nthe limit.\n\nThe model catalog is advisory in DSH. An exact model id that is absent from a\ncached catalog is passed through unchanged with conservative text-only metadata;\nthe official runtime either accepts that exact id or returns its model error.\nThe adapter never substitutes a different model.\n\nThe official catalog's `max_prompt_images` value is preserved as discovery\nmetadata but is not enforced as an adapter-side count limit. The pinned official\nSDK/CLI accepts multiple distinct images and repeated references when the same\ncatalog advertises `1`, so the official runtime remains authoritative instead\nof the adapter rejecting or deleting images first.\n\nRequest-image byte handling is applied in two phases. The pre-read phase uses a\nper-image-capped source-size estimate only for the configured local\n`offload-oldest` budget; strict `error` mode never rejects from an untrusted\nsource-size estimate. The exact phase uses storage-derived immutable bytes. It\nreads protected current-user and trailing tool-result images first, then keeps\neligible images from newest to oldest within the aggregate budget, with at most\none candidate image beyond that budget in memory. Every occurrence remains in\nthe model-visible prompt, while repeated references to one durable image are\nread, budgeted, and attached once. Pending tool-result images are all passed to\nthe official runtime and use their exact derived occurrence payload against the\nconfigured local aggregate byte budget.\n\n`purpose` remains model-hidden. Auxiliary `compaction` and `session-title`\nrequests use a replay namespace isolated from the ordinary conversation, and\nthe adapter does not put purpose, session identity, attribution, or credentials\ninto service request headers.\n\nWith valid replay state, the provider continues or resumes the same official\nsession. Without usable replay, it serializes the complete ordered DSH history\ninto one deterministic bootstrap prompt and records that mode in the next replay\nstate. This preserves DSH-visible history but is not a lossless import of\narbitrary foreign assistant history into native Copilot roles; the public SDK\nhas no such import operation.\n\nEach successful turn closes its SDK session wrapper and releases its client\nlease; the next turn creates a fresh wrapper that resumes the same validated\nofficial session id. Replay state is bound to the DSH session, model, system,\ntool catalog, transcript, purpose, official session, request correlation, and\npending-tool correlations. A SHA-256 integrity fingerprint detects torn or\ntampered replay structure. It is not a cryptographic attestation that an\nofficial request id originated at GitHub because the public SDK supplies no\nverification key or signed correlation. Missing, corrupt, expired, or\ncross-session pending replay fails closed before a tool result is submitted.\n\nCancelling retained pending work resumes the recorded official session when\nnecessary and calls the public SDK abort operation within the cleanup bound.\nAn aborted finish is returned only after that native cancellation succeeds or\nthe same official session generation emits its authoritative root `abort`/\naborted-idle event. The latter closes the race where the CLI has already\ncancelled the turn but the concurrent abort RPC response is lost. Uncorrelated,\nmissing, or timed-out cancellation evidence still fails explicitly instead of\nclaiming that later replay is safe. One cancellation request owns at most one\nofficial resume and abort attempt; concurrent callers join that result, and\nteardown never retries an ambiguous native mutation.\n\nConcurrent continuations use an explicit replay-ownership handshake. A sibling\nmay rely on another request only after that request has claimed pending work in\nits session bridge. If the first request fails during model or option\nvalidation, cancellation responsibility transfers to the waiting sibling.\n\nPending replay ownership is held in a bounded conversation ledger until the\nreplay retention and cleanup grace expire. The adapter fails closed when the\nconfigured `maxTrackedPendingConversations` limit is reached, while expired\nentries are pruned so later conversations can proceed. Expired replay is still\nrejected from its validated persisted expiry before any native resume, result\nRPC, or abort, even after the in-memory ledger entry has been pruned.\n\nPlugin disposal applies the same rule to pending work, including a continuation\nstill blocked in model discovery or tool-result image preparation. An\ninterrupted DSH prepared-call handshake exposes the complete request to teardown\nbefore the official client is stopped. Disposal then waits for the active\nbridge, resumes cold replay when necessary, and confirms the public SDK abort\nwithout submitting a result. An anonymous stream that detaches while native\nsession creation is still in flight remains tracked until full late-wrapper\ncleanup is confirmed. An unconfirmed pending abort, late-wrapper cleanup, or\nruntime shutdown rejects teardown.\n\nDSH tool results are submitted exactly once during a healthy in-process\ncontinuation. If submission succeeds but the stream subsequently fails, the\nbridge is poisoned rather than risking a duplicate submission. A process crash\nin the narrow interval after the public pending-tool RPC succeeds but before DSH\npersists new replay state cannot be made atomic because the public SDK exposes\nneither an idempotency key nor a query for completed pending requests.\nAfter the RPC acknowledges a result, the official CLI may replay the completed\ntool request while advancing the native session. The adapter suppresses that\nevent only when its call ID, request ID, tool name, and arguments exactly match\nthe validated pending replay; conflicting correlations fail closed and later\nnew tool calls are still returned to DSH.\n\nThe adapter issues one official SDK send per DSH attempt. DSH owns the exposed\nretry policy. The pinned official CLI may perform internal transport recovery;\nthe public SDK does not expose a switch that can prove those internal retries\nare disabled.\n\nOfficial usage fields are independently optional. Cache-only usage is preserved\nas cache read/write tokens with zero uncached input and output; an aggregate\ntotal is emitted only when every accumulated usage event supplies authoritative\ninput and output counters.\n\n## Updates and removal\n\nFor a registry installation:\n\n```bash\ndsh plugin --profile web update @bobhuhu/dsh-llm-github-copilot-cli\n```\n\nFor a pinned GitHub installation, re-run `add` with the new quoted commit or\ntag. Remove either form with:\n\n```bash\ndsh plugin --profile web remove @bobhuhu/dsh-llm-github-copilot-cli\n```\n\n## Troubleshooting\n\n- `loaded without registering \"@bobhuhu/dsh-llm-github-copilot-cli\"`: version\n  `0.1.0` used the pre-scope client registration id. Update to `0.1.1` or newer,\n  restart `dsh web`, and reload the browser page.\n- `ERR_PNPM_IGNORED_BUILDS ... koffi`: add `koffi: true` under `allowBuilds`\n  in the selected DSH profile, then retry installation.\n- Authentication unavailable: run the official CLI login command above, then\n  use `/copilot-status` again.\n- Version mismatch at startup: reinstall the plugin so its exact\n  `@github/copilot-sdk@1.0.11` and `@github/copilot@1.0.81` dependency graph is\n  restored.\n- `RUNTIME_SHUTDOWN_FAILED`: the manager intentionally refuses to start another\n  CLI because shutdown of the previous process was not confirmed. Dispose the\n  host, inspect the reported runtime failure, and restart only after resolving\n  the orphan-process condition.\n- `UNSUPPORTED_OPTION`: remove `temperature`, `maxTokens`, or `stop` from that\n  DSH request. Configure another compaction or session-title provider when the\n  calling DSH feature always supplies `maxTokens`.\n- `REPLAY_REQUIRED`: continue with the exact replay state, DSH conversation,\n  model, and pending tool results returned by the provider.\n- `STALE_REPLAY`: use the newest replay state for that conversation and never\n  resubmit a result from an older pending generation. If every ordinary message\n  after a successfully completed tool turn fails this way, update to `0.1.2` or\n  newer and restart `dsh web`; earlier builds incorrectly applied the pending\n  replay tombstone to the following non-pending replay.\n- `REPLAY_EXPIRED`, `INVALID_REPLAY`, or `SESSION_POISONED`: discard the unsafe\n  continuation and start a new conversation; the provider will not guess or\n  revive pending correlations.\n- `TOOL_ISOLATION_FAILED`: the official runtime exposed something outside the\n  exact DSH tool allowlist. The provider intentionally refuses to continue. If\n  the exact detail is `prompt-cache telemetry reported model-facing capability\n  drift` immediately after a completed tool continuation, update to `0.1.3` or\n  newer and restart `dsh web`; earlier builds rejected the official root\n  `agent -> user` cache-frontier transition.\n\n## Security boundary\n\nThe adapter imports only public package APIs, spawns only the official packaged\nCLI through the SDK, and never calls a Copilot HTTP endpoint. Source and packed\nartifact checks prohibit copied SDK implementation, OAuth/token code, private\nprotocol access, credentials, local paths, and development caches.\n\n## License\n\nThe adapter is MIT licensed. The installed official Copilot CLI remains subject\nto its own license and GitHub terms. See [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md).\n","readmeFilename":"README.md"}