{"_id":"@anionex/dsh-smarter-edit","_rev":"5-eb4bfaf7dcfbb8730ef017286354ab1e","name":"@anionex/dsh-smarter-edit","dist-tags":{"latest":"0.1.9"},"versions":{"0.1.5":{"name":"@anionex/dsh-smarter-edit","version":"0.1.5","keywords":["deepseek-harness","dsh","dsh-plugin","apply-patch","freeform-tool","codex"],"license":"MIT","_id":"@anionex/dsh-smarter-edit@0.1.5","maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"homepage":"https://github.com/Anionex/dsh-smarter-edit#readme","bugs":{"url":"https://github.com/Anionex/dsh-smarter-edit/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-primitives"],"platform":"web"},"compatibility":{"dsh":">=0.1.1-rc.1 <0.2.0","profiles":["desktop","web","headless"]}},"dist":{"shasum":"55cd1bab0939a66dbd990b8e64ada0f2b96c58d7","tarball":"https://registry.npmjs.org/@anionex/dsh-smarter-edit/-/dsh-smarter-edit-0.1.5.tgz","fileCount":49,"integrity":"sha512-5jj1hU/RFrw7sPpTJ88K57PFNyYXCJeFPa+p/Ry7UukUb1h0UB94UAylzpfW2xK9U7v7N4lxcsUJJ3cCilG3Lw==","signatures":[{"sig":"MEUCIQD2OVqB5KQyuVCELvM3Yk2bNVRRJtTExOeWeui7a1V9fwIgASfKfrjK17zZraNplFeKtCqZMYSQcNK9Z8R4JpjWADw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":283289},"main":"lib/index.js","type":"module","_from":"file:/tmp/dsh-smarter-edit-release.umUEHr/anionex-dsh-smarter-edit-0.1.5.tgz","types":"lib/types/index.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./engine":{"types":"./lib/types/engine.d.ts","default":"./lib/engine.js"},"./parser":{"types":"./lib/types/parser.d.ts","default":"./lib/parser.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.build.json && tsc -p tsconfig.client.json && node scripts/build-client.mjs","check":"tsc -p tsconfig.json && pnpm run build && node --test tests/*.test.mjs && pnpm pack --dry-run"},"_npmUser":{"name":"anionex","email":"davidyang042@gmail.com"},"_resolved":"/tmp/dsh-smarter-edit-release.umUEHr/anionex-dsh-smarter-edit-0.1.5.tgz","_integrity":"sha512-5jj1hU/RFrw7sPpTJ88K57PFNyYXCJeFPa+p/Ry7UukUb1h0UB94UAylzpfW2xK9U7v7N4lxcsUJJ3cCilG3Lw==","repository":{"url":"git+https://github.com/Anionex/dsh-smarter-edit.git","type":"git"},"_npmVersion":"11.19.0","description":"A better approach to editing files in DSH.","directories":{},"_nodeVersion":"26.8.1","dependencies":{"diff":"^8.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"18.2.0","typescript":"^6.0.3","@types/node":"^24.0.0","@types/react":"18.3.1","@types/react-dom":"18.3.0","@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-fs":"0.1.2-alpha.5","@deepseek-ai/dsh-llm":"0.1.2-alpha.5","@earendil-works/pi-ai":"0.84.4","@deepseek-ai/dsh-agent":"0.1.2-alpha.5","@deepseek-ai/dsh-scope":"0.1.2-alpha.5","@deepseek-ai/dsh-tools":"0.1.2-alpha.5","@deepseek-ai/dsh-sandbox":"0.1.2-alpha.5","@deepseek-ai/dsh-session":"0.1.2-alpha.5","@deepseek-ai/dsh-timeout":"0.1.2-alpha.5","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":"0.1.2-alpha.5","@deepseek-ai/dsh-llm-pi-ai":"0.1.2-alpha.5","@deepseek-ai/dsh-attachment":"0.1.2-alpha.5","@deepseek-ai/dsh-invariants":"0.1.2-alpha.5","@deepseek-ai/dsh-credentials":"0.1.2-alpha.5","@deepseek-ai/dsh-code-runtime":"0.1.2-alpha.5","@deepseek-ai/dsh-authorization":"0.1.2-alpha.5","@deepseek-ai/dsh-client-locale":"0.1.2-alpha.5","@deepseek-ai/dsh-system-prompt":"0.1.2-alpha.5","@deepseek-ai/dsh-user-approval":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-chat":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-tool":"0.1.2-alpha.5","@deepseek-ai/dsh-sandbox-policy":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-slots":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-renderer":"0.1.2-alpha.5","@deepseek-ai/dsh-launch-environment":"0.1.2-alpha.5","@deepseek-ai/dsh-session-projection":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-primitives":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-conversation":"0.1.2-alpha.5"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-llm":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-tools":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-sandbox":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-llm-pi-ai":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-system-prompt":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-tool":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-sandbox-policy":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-slots":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-primitives":">=0.1.1-rc.1 <0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-smarter-edit_0.1.5_1788541492015_0.9556184482952927","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@anionex/dsh-smarter-edit","version":"0.1.6","keywords":["deepseek-harness","dsh","dsh-plugin","apply-patch","freeform-tool","codex"],"license":"MIT","_id":"@anionex/dsh-smarter-edit@0.1.6","maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"homepage":"https://github.com/Anionex/dsh-smarter-edit#readme","bugs":{"url":"https://github.com/Anionex/dsh-smarter-edit/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-primitives"],"platform":"web"},"compatibility":{"dsh":">=0.1.1-rc.1 <0.2.0","profiles":["desktop","web","headless"]}},"dist":{"shasum":"f924a704ab1807b3c1488298470fbf1a29f3598a","tarball":"https://registry.npmjs.org/@anionex/dsh-smarter-edit/-/dsh-smarter-edit-0.1.6.tgz","fileCount":51,"integrity":"sha512-oJS7rrb0iPI2qlz0ce+niG0+2YzNHa2lCkednZZnZ4QEsQH14wND5h/GbigAe54SR7bagys76aLkLr5K/d1kLQ==","signatures":[{"sig":"MEUCIQD1v9o3vkrES2JXWfZtQOvZj1GLYVjw2UBR5Osy7e8V0wIgQ1BwSE8jeEiVYdZhpEdj2H38VUOQagU2+KV7lAJz5aY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":291227},"main":"lib/index.js","type":"module","_from":"file:/tmp/dsh-smarter-edit-release/anionex-dsh-smarter-edit-0.1.6.tgz","types":"lib/types/index.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./engine":{"types":"./lib/types/engine.d.ts","default":"./lib/engine.js"},"./parser":{"types":"./lib/types/parser.d.ts","default":"./lib/parser.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.build.json && tsc -p tsconfig.client.json && node scripts/build-client.mjs","check":"tsc -p tsconfig.json && pnpm run build && node --test tests/*.test.mjs && pnpm pack --dry-run"},"_npmUser":{"name":"anionex","email":"davidyang042@gmail.com"},"_resolved":"/tmp/dsh-smarter-edit-release/anionex-dsh-smarter-edit-0.1.6.tgz","_integrity":"sha512-oJS7rrb0iPI2qlz0ce+niG0+2YzNHa2lCkednZZnZ4QEsQH14wND5h/GbigAe54SR7bagys76aLkLr5K/d1kLQ==","repository":{"url":"git+https://github.com/Anionex/dsh-smarter-edit.git","type":"git"},"_npmVersion":"11.19.0","description":"A better approach to editing files in DSH.","directories":{},"_nodeVersion":"26.8.1","dependencies":{"diff":"^8.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"18.2.0","typescript":"^6.0.3","@types/node":"^24.0.0","@types/react":"18.3.1","@types/react-dom":"18.3.0","@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-fs":"0.1.2-alpha.5","@deepseek-ai/dsh-llm":"0.1.2-alpha.5","@earendil-works/pi-ai":"0.84.4","@deepseek-ai/dsh-agent":"0.1.2-alpha.5","@deepseek-ai/dsh-scope":"0.1.2-alpha.5","@deepseek-ai/dsh-tools":"0.1.2-alpha.5","@deepseek-ai/dsh-sandbox":"0.1.2-alpha.5","@deepseek-ai/dsh-session":"0.1.2-alpha.5","@deepseek-ai/dsh-timeout":"0.1.2-alpha.5","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":"0.1.2-alpha.5","@deepseek-ai/dsh-llm-pi-ai":"0.1.2-alpha.5","@deepseek-ai/dsh-attachment":"0.1.2-alpha.5","@deepseek-ai/dsh-invariants":"0.1.2-alpha.5","@deepseek-ai/dsh-credentials":"0.1.2-alpha.5","@deepseek-ai/dsh-code-runtime":"0.1.2-alpha.5","@deepseek-ai/dsh-authorization":"0.1.2-alpha.5","@deepseek-ai/dsh-client-locale":"0.1.2-alpha.5","@deepseek-ai/dsh-system-prompt":"0.1.2-alpha.5","@deepseek-ai/dsh-user-approval":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-chat":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-tool":"0.1.2-alpha.5","@deepseek-ai/dsh-sandbox-policy":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-slots":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-renderer":"0.1.2-alpha.5","@deepseek-ai/dsh-launch-environment":"0.1.2-alpha.5","@deepseek-ai/dsh-session-projection":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-primitives":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-conversation":"0.1.2-alpha.5"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-llm":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-tools":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-sandbox":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-llm-pi-ai":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-system-prompt":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-tool":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-sandbox-policy":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-slots":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-primitives":">=0.1.1-rc.1 <0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-smarter-edit_0.1.6_1788623910623_0.5198142478221204","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@anionex/dsh-smarter-edit","version":"0.1.7","keywords":["deepseek-harness","dsh","dsh-plugin","apply-patch","freeform-tool","codex"],"license":"MIT","_id":"@anionex/dsh-smarter-edit@0.1.7","maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"homepage":"https://github.com/Anionex/dsh-smarter-edit#readme","bugs":{"url":"https://github.com/Anionex/dsh-smarter-edit/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-primitives"],"platform":"web"},"compatibility":{"dsh":">=0.1.1-rc.1 <0.2.0","profiles":["desktop","web","headless"]}},"dist":{"shasum":"57f16f9db75b681738c81f9310fe96d388264537","tarball":"https://registry.npmjs.org/@anionex/dsh-smarter-edit/-/dsh-smarter-edit-0.1.7.tgz","fileCount":51,"integrity":"sha512-to0jAK8QTpNeMB0rEwvHKtS2MEpfsMttpbD6lQIVgJBPvHmocoaorR8gxk/6qm95xKDMbxEWPPkGA0abvC81Mg==","signatures":[{"sig":"MEYCIQDO+M488dOQ4g7y3L5pGNBr5IPJavg9ivJg689xTqNbowIhANHKjvUsIFiVuD3+yesHNTZT5K/uQQfApus33wg1/6b7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299653},"main":"lib/index.js","type":"module","_from":"file:/tmp/dsh-smarter-edit-0.1.7-publish/anionex-dsh-smarter-edit-0.1.7.tgz","types":"lib/types/index.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./engine":{"types":"./lib/types/engine.d.ts","default":"./lib/engine.js"},"./parser":{"types":"./lib/types/parser.d.ts","default":"./lib/parser.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.build.json && tsc -p tsconfig.client.json && node scripts/build-client.mjs","check":"tsc -p tsconfig.json && pnpm run build && node --test tests/*.test.mjs && pnpm pack --dry-run"},"_npmUser":{"name":"anionex","email":"davidyang042@gmail.com"},"_resolved":"/tmp/dsh-smarter-edit-0.1.7-publish/anionex-dsh-smarter-edit-0.1.7.tgz","_integrity":"sha512-to0jAK8QTpNeMB0rEwvHKtS2MEpfsMttpbD6lQIVgJBPvHmocoaorR8gxk/6qm95xKDMbxEWPPkGA0abvC81Mg==","repository":{"url":"git+https://github.com/Anionex/dsh-smarter-edit.git","type":"git"},"_npmVersion":"11.19.0","description":"A better approach to editing files in DSH.","directories":{},"_nodeVersion":"26.8.1","dependencies":{"diff":"^8.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"18.2.0","typescript":"^6.0.3","@types/node":"^24.0.0","@types/react":"18.3.1","@types/react-dom":"18.3.0","@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-fs":"0.1.2-alpha.5","@deepseek-ai/dsh-llm":"0.1.2-alpha.5","@earendil-works/pi-ai":"0.84.4","@deepseek-ai/dsh-agent":"0.1.2-alpha.5","@deepseek-ai/dsh-scope":"0.1.2-alpha.5","@deepseek-ai/dsh-tools":"0.1.2-alpha.5","@deepseek-ai/dsh-sandbox":"0.1.2-alpha.5","@deepseek-ai/dsh-session":"0.1.2-alpha.5","@deepseek-ai/dsh-timeout":"0.1.2-alpha.5","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":"0.1.2-alpha.5","@deepseek-ai/dsh-llm-pi-ai":"0.1.2-alpha.5","@deepseek-ai/dsh-attachment":"0.1.2-alpha.5","@deepseek-ai/dsh-invariants":"0.1.2-alpha.5","@deepseek-ai/dsh-credentials":"0.1.2-alpha.5","@deepseek-ai/dsh-code-runtime":"0.1.2-alpha.5","@deepseek-ai/dsh-authorization":"0.1.2-alpha.5","@deepseek-ai/dsh-client-locale":"0.1.2-alpha.5","@deepseek-ai/dsh-system-prompt":"0.1.2-alpha.5","@deepseek-ai/dsh-user-approval":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-chat":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-tool":"0.1.2-alpha.5","@deepseek-ai/dsh-sandbox-policy":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-slots":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-renderer":"0.1.2-alpha.5","@deepseek-ai/dsh-launch-environment":"0.1.2-alpha.5","@deepseek-ai/dsh-session-projection":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-primitives":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-conversation":"0.1.2-alpha.5"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-llm":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-tools":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-sandbox":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-llm-pi-ai":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-system-prompt":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-tool":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-sandbox-policy":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-slots":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-primitives":">=0.1.1-rc.1 <0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-smarter-edit_0.1.7_1788866371385_0.7833722046383245","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@anionex/dsh-smarter-edit","version":"0.1.8","keywords":["deepseek-harness","dsh","dsh-plugin","apply-patch","freeform-tool","codex"],"license":"MIT","_id":"@anionex/dsh-smarter-edit@0.1.8","maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"homepage":"https://github.com/Anionex/dsh-smarter-edit#readme","bugs":{"url":"https://github.com/Anionex/dsh-smarter-edit/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-primitives"],"platform":"web"},"compatibility":{"dsh":">=0.1.1-rc.1 <0.2.0","profiles":["desktop","web","headless"]}},"dist":{"shasum":"c3bbca86970bfd95c4205c742f63aea0e1417c16","tarball":"https://registry.npmjs.org/@anionex/dsh-smarter-edit/-/dsh-smarter-edit-0.1.8.tgz","fileCount":51,"integrity":"sha512-GqjJIExthjLtTWC5PeEJHu5uI4a5dpA1oFlPbabwe1aUvFB/o9mwGPA4Q7tVR1a7Z8rEOHuo0SsjUuTDNRLHig==","signatures":[{"sig":"MEUCIQCmvIds55xlQSc4is0d4YTxFwYb1UG5RFpRCr4oxTz+UwIgChropvYEkiVSla+faPNMJT7q5fx4WHKgclV9yZJamkg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":315494},"main":"lib/index.js","type":"module","_from":"file:/tmp/dsh-smarter-edit-0.1.8-final/anionex-dsh-smarter-edit-0.1.8.tgz","types":"lib/types/index.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./engine":{"types":"./lib/types/engine.d.ts","default":"./lib/engine.js"},"./parser":{"types":"./lib/types/parser.d.ts","default":"./lib/parser.js"},"./package.json":"./package.json","./cordis.patch.yml":"./cordis.patch.yml"},"scripts":{"test":"pnpm run build && node --test tests/*.test.mjs","build":"tsc -p tsconfig.build.json && tsc -p tsconfig.client.json && node scripts/build-client.mjs","check":"tsc -p tsconfig.json && pnpm run build && node --test tests/*.test.mjs && pnpm pack --dry-run"},"_npmUser":{"name":"anionex","email":"davidyang042@gmail.com"},"_resolved":"/tmp/dsh-smarter-edit-0.1.8-final/anionex-dsh-smarter-edit-0.1.8.tgz","_integrity":"sha512-GqjJIExthjLtTWC5PeEJHu5uI4a5dpA1oFlPbabwe1aUvFB/o9mwGPA4Q7tVR1a7Z8rEOHuo0SsjUuTDNRLHig==","repository":{"url":"git+https://github.com/Anionex/dsh-smarter-edit.git","type":"git"},"_npmVersion":"11.19.0","description":"A better approach to editing files in DSH.","directories":{},"_nodeVersion":"26.8.1","dependencies":{"diff":"^8.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"18.2.0","typescript":"^6.0.3","@types/node":"^24.0.0","@types/react":"18.3.1","@types/react-dom":"18.3.0","@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-fs":"0.1.2-alpha.5","@deepseek-ai/dsh-llm":"0.1.2-alpha.5","@earendil-works/pi-ai":"0.84.4","@deepseek-ai/dsh-agent":"0.1.2-alpha.5","@deepseek-ai/dsh-scope":"0.1.2-alpha.5","@deepseek-ai/dsh-tools":"0.1.2-alpha.5","@deepseek-ai/dsh-sandbox":"0.1.2-alpha.5","@deepseek-ai/dsh-session":"0.1.2-alpha.5","@deepseek-ai/dsh-timeout":"0.1.2-alpha.5","@deepseek-ai/schemastery":"3.18.2","@deepseek-ai/dsh-settings":"0.1.2-alpha.5","@deepseek-ai/dsh-llm-pi-ai":"0.1.2-alpha.5","@deepseek-ai/dsh-attachment":"0.1.2-alpha.5","@deepseek-ai/dsh-invariants":"0.1.2-alpha.5","@deepseek-ai/dsh-credentials":"0.1.2-alpha.5","@deepseek-ai/dsh-code-runtime":"0.1.2-alpha.5","@deepseek-ai/dsh-authorization":"0.1.2-alpha.5","@deepseek-ai/dsh-client-locale":"0.1.2-alpha.5","@deepseek-ai/dsh-system-prompt":"0.1.2-alpha.5","@deepseek-ai/dsh-user-approval":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-chat":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-tool":"0.1.2-alpha.5","@deepseek-ai/dsh-sandbox-policy":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-slots":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-renderer":"0.1.2-alpha.5","@deepseek-ai/dsh-launch-environment":"0.1.2-alpha.5","@deepseek-ai/dsh-session-projection":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-primitives":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-conversation":"0.1.2-alpha.5"},"peerDependencies":{"react":"^18.2.0","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-llm":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-tools":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-sandbox":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/schemastery":"^3.18.1","@deepseek-ai/dsh-llm-pi-ai":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-system-prompt":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-tool":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-sandbox-policy":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-slots":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-primitives":">=0.1.1-rc.1 <0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-smarter-edit_0.1.8_1788875647123_0.09373866342527992","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@anionex/dsh-smarter-edit","version":"0.1.9","description":"A better approach to editing files in DSH.","homepage":"https://github.com/Anionex/dsh-smarter-edit#readme","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/Anionex/dsh-smarter-edit.git"},"bugs":{"url":"https://github.com/Anionex/dsh-smarter-edit/issues"},"type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./engine":{"types":"./lib/types/engine.d.ts","default":"./lib/engine.js"},"./parser":{"types":"./lib/types/parser.d.ts","default":"./lib/parser.js"},"./client":{"types":"./lib/types/client/index.d.ts","default":"./lib/client.js"},"./cordis.patch.yml":"./cordis.patch.yml","./package.json":"./package.json"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-ui-tool","@deepseek-ai/dsh-client-ui-primitives"],"platform":"web"},"compatibility":{"dsh":">=0.1.1-rc.1 <0.2.0","profiles":["desktop","web","headless"]}},"keywords":["deepseek-harness","dsh","dsh-plugin","apply-patch","freeform-tool","codex"],"license":"MIT","dependencies":{"diff":"^8.0.3"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-client-ui-primitives":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-slots":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-client-ui-tool":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-fs":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-llm":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-llm-pi-ai":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-sandbox":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-sandbox-policy":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-system-prompt":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/dsh-tools":">=0.1.1-rc.1 <0.2.0","@deepseek-ai/schemastery":"^3.18.1","react":"^18.2.0"},"devDependencies":{"@deepseek-ai/cordis":"4.0.2","@deepseek-ai/dsh-agent":"0.1.2-alpha.5","@deepseek-ai/dsh-attachment":"0.1.2-alpha.5","@deepseek-ai/dsh-authorization":"0.1.2-alpha.5","@deepseek-ai/dsh-client-locale":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-chat":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-conversation":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-primitives":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-renderer":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-slots":"0.1.2-alpha.5","@deepseek-ai/dsh-client-ui-tool":"0.1.2-alpha.5","@deepseek-ai/dsh-code-runtime":"0.1.2-alpha.5","@deepseek-ai/dsh-credentials":"0.1.2-alpha.5","@deepseek-ai/dsh-fs":"0.1.2-alpha.5","@deepseek-ai/dsh-invariants":"0.1.2-alpha.5","@deepseek-ai/dsh-launch-environment":"0.1.2-alpha.5","@deepseek-ai/dsh-llm":"0.1.2-alpha.5","@deepseek-ai/dsh-llm-pi-ai":"0.1.2-alpha.5","@deepseek-ai/dsh-sandbox":"0.1.2-alpha.5","@deepseek-ai/dsh-sandbox-policy":"0.1.2-alpha.5","@deepseek-ai/dsh-scope":"0.1.2-alpha.5","@deepseek-ai/dsh-session":"0.1.2-alpha.5","@deepseek-ai/dsh-session-projection":"0.1.2-alpha.5","@deepseek-ai/dsh-settings":"0.1.2-alpha.5","@deepseek-ai/dsh-system-prompt":"0.1.2-alpha.5","@deepseek-ai/dsh-timeout":"0.1.2-alpha.5","@deepseek-ai/dsh-tools":"0.1.2-alpha.5","@deepseek-ai/dsh-user-approval":"0.1.2-alpha.5","@deepseek-ai/schemastery":"3.18.2","@earendil-works/pi-ai":"0.84.4","@types/node":"^24.0.0","@types/react":"18.3.1","@types/react-dom":"18.3.0","react":"18.2.0","typescript":"^6.0.3"},"engines":{"node":"^22.19.0 || >=24.0.0"},"scripts":{"build":"tsc -p tsconfig.build.json && tsc -p tsconfig.client.json && node scripts/build-client.mjs","check":"tsc -p tsconfig.json && pnpm run build && node --test tests/*.test.mjs && pnpm pack --dry-run","test":"pnpm run build && node --test tests/*.test.mjs"},"_id":"@anionex/dsh-smarter-edit@0.1.9","_integrity":"sha512-FT9Cc1ivzISudLxi2qUjBWYyIYaETgG/rEp+5I8NgM0p++JEfzEc3rXTYzWQx1HAEyVgWHexateX1wZruS0GhQ==","_resolved":"/tmp/dsh-smarter-edit-0.1.9-final/anionex-dsh-smarter-edit-0.1.9.tgz","_from":"file:/tmp/dsh-smarter-edit-0.1.9-final/anionex-dsh-smarter-edit-0.1.9.tgz","_nodeVersion":"26.8.1","_npmVersion":"11.19.0","dist":{"integrity":"sha512-FT9Cc1ivzISudLxi2qUjBWYyIYaETgG/rEp+5I8NgM0p++JEfzEc3rXTYzWQx1HAEyVgWHexateX1wZruS0GhQ==","shasum":"90f3eddd2691eb21d0b623be5388c89c7a7712f2","tarball":"https://registry.npmjs.org/@anionex/dsh-smarter-edit/-/dsh-smarter-edit-0.1.9.tgz","fileCount":51,"unpackedSize":315963,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDEz49KTR0GlNux69xEW4fhtaExFvyesOGbYdNwiHbMVAiB19K6D7/02uWChsyWbgj/DavyB3W0wbMfbEarvO/IG2Q=="}]},"_npmUser":{"name":"anionex","email":"davidyang042@gmail.com"},"directories":{},"maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-smarter-edit_0.1.9_1788876760504_0.4271901333967769"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-04T17:04:51.746Z","modified":"2026-09-08T14:12:40.796Z","0.1.5":"2026-09-04T17:04:52.272Z","0.1.6":"2026-09-05T15:58:30.762Z","0.1.7":"2026-09-08T11:19:31.562Z","0.1.8":"2026-09-08T13:54:07.254Z","0.1.9":"2026-09-08T14:12:40.648Z"},"bugs":{"url":"https://github.com/Anionex/dsh-smarter-edit/issues"},"license":"MIT","homepage":"https://github.com/Anionex/dsh-smarter-edit#readme","keywords":["deepseek-harness","dsh","dsh-plugin","apply-patch","freeform-tool","codex"],"repository":{"type":"git","url":"git+https://github.com/Anionex/dsh-smarter-edit.git"},"description":"A better approach to editing files in DSH.","maintainers":[{"name":"anionex","email":"davidyang042@gmail.com"}],"readme":"# DSH Smarter Edit\n\n[English](README.md)\n\n[![npm version](https://img.shields.io/npm/v/@anionex/dsh-smarter-edit?style=flat-square)](https://www.npmjs.com/package/@anionex/dsh-smarter-edit)\n[![License](https://img.shields.io/github/license/Anionex/dsh-smarter-edit?style=flat-square)](LICENSE)\n[![CI](https://img.shields.io/github/actions/workflow/status/Anionex/dsh-smarter-edit/ci.yml?branch=main&style=flat-square&label=CI)](https://github.com/Anionex/dsh-smarter-edit/actions/workflows/ci.yml)\n[![TypeScript](https://img.shields.io/npm/types/@anionex/dsh-smarter-edit?style=flat-square)](https://www.npmjs.com/package/@anionex/dsh-smarter-edit)\n[![GitHub release](https://img.shields.io/github/v/release/Anionex/dsh-smarter-edit?style=flat-square&label=release)](https://github.com/Anionex/dsh-smarter-edit/releases)\n\n**为 DeepSeek Harness 提供更适合编码模型的文件编辑工具。**\n\nDSH 原生 `edit` 工具要求编码模型重新构造精确的源码字符串，并通过结构化 JSON\n参数同时提交修改前和修改后的代码。\n\nDSH Smarter Edit 改用兼容 Codex 的自由格式 `apply_patch`，让模型直接通过差异\n补丁描述代码变化。它希望减少工具参数格式造成的编辑失败和额外 token 消耗。\n\n```diff\n*** Begin Patch\n*** Update File: src/app.ts\n@@\n-const result = oldMethod(value)\n+const result = newMethod(value)\n*** End Patch\n```\n\n模型只需描述哪些代码要变，不必重新构造精确的\n`old_string` / `new_string` 参数对。\n\n**让模型把 token 用在修改代码上，而不是满足编辑协议。**\n\n![DSH Smarter Edit：为 DeepSeek Harness 提供更适合编码模型的文件编辑工具](assets/hero.png)\n\n## 为什么需要它\n\n编码模型本来只需要判断代码该怎么改。使用 DSH 原生 `edit` 时，它还得处理三件\n与修改代码无关的事。\n\n### 1. 重新拼出旧源码\n\n原生 `edit(file_path, old_string, new_string)` 要求模型重新生成已经读取过的\n源码，并让 `old_string` 与文件内容精确匹配：\n\n```text\n模型知道代码应该怎么改\n        ↓\nold_string 的空白、缩进或字符与文件不完全一致\n        ↓\n编辑失败\n```\n\n即使模型已经找对修改位置和内容，只要 `old_string` 的空白、缩进或字符与文件\n不一致，编辑工具仍会拒绝这次操作。Smarter Edit 不再要求模型提供完整的精确\n字符串参数对，而是通过带上下文的补丁片段定位修改。\n\n### 2. 重复生成源码\n\n精确字符串替换要求模型把旧代码块和新代码块都再写一遍，而两者的大部分内容\n相同：\n\n```text\nold_string = 已经存在的源码\nnew_string = 大量相同源码 + 实际变化\n```\n\n补丁只保留变化行和定位所需的上下文：\n\n```diff\n 必要上下文\n-变化前\n+变化后\n 必要上下文\n```\n\n这样可以减少重复的旧代码、未改代码和 JSON 转义，也能减少匹配失败后的重试。\n在受控 A/B 测试给出结果前，维护者不会公布具体的 token 节省比例。\n\n### 3. JSON 参数带来的额外工作\n\n模型还必须把多行源码放进固定的 JSON 参数结构：\n\n```json\n{\n  \"old_string\": \"...\",\n  \"new_string\": \"...\"\n}\n```\n\n引号、转义和完整的精确匹配字段都只是编辑工具的格式要求。自由格式\n`apply_patch` 让模型直接生成补丁。\n\n## OpenAI 的证据\n\nOpenAI 把 `apply_patch` 改成具名的自由格式工具。其\n[官方模型指南](https://developers.openai.com/api/docs/guides/latest-model?model=gpt-5.2)\n报告称，与 JSON 格式的函数调用相比，这项改动在测试中让\n`apply_patch` 失败率**降低了 35%**。\n\n该结果衡量的是 `apply_patch` 调用失败，不是任务成功率、SWE-bench 成绩或 token\n节省比例。这个结果说明，编辑工具采用什么输入格式会直接影响可靠性。\n\n## 精确字符串替换为什么脆弱\n\n精确字符串替换只有在 `old_string` 与目标内容完全一致时才会成功。Claude Code\n的公开问题展示了制表符、换行符等不可见细节怎样导致\n`String to replace not found in file`：\n\n- [#13152](https://github.com/anthropics/claude-code/issues/13152) 报告读取结果把\n  制表符显示为空格，随后精确匹配失败。\n- [#28831](https://github.com/anthropics/claude-code/issues/28831) 报告使用\n  CRLF 换行和制表符缩进的文件出现多行匹配不可靠，并把读取格式列为可能原因。\n- [#54876](https://github.com/anthropics/claude-code/issues/54876) 报告读取输出\n  使用 LF，而实际文件使用 CRLF。\n- [#40471](https://github.com/anthropics/claude-code/issues/40471) 报告编辑\n  制表符缩进的文件时，工具反复失败、重试，最后改用 Python 或 Bash。\n\n这些报告来自另一个编码工具，不能用来判断 DSH 的具体行为。它们揭示的是精确\n字符串替换本身的弱点：模型除了决定怎样修改代码，还必须重现与修改目的无关的\n文件细节。任何偏差都可能让工具拒绝编辑，继而触发重试或改用其他工具。\n\n## 其他功能\n\n除了改变模型使用的文件编辑工具，Smarter Edit 还支持：\n\n- 按顺序执行多个修改片段；\n- 新增、更新、移动和删除操作；\n- Codex 兼容的上下文匹配；\n- 提交前检查全部修改，失败时回滚；\n- DSH 原生差异视图。\n\n## 安装\n\n把当前 npm 版本安装到 Desktop Profile：\n\n```sh\ndsh plugin --profile desktop add @anionex/dsh-smarter-edit\n```\n\n安装到其他 Profile 时，把 `desktop` 换成 `web` 或 `headless`。安装后重启正在\n运行的 Profile，并新建会话。\n\n确认插件已加载：\n\n```sh\ndsh --profile desktop --dump-config | grep tool-apply-patch\n```\n\n## 工作原理\n\n1. 模型发送一个位于 `*** Begin Patch` 与 `*** End Patch` 之间的补丁。\n2. Smarter Edit 验证完整补丁，根据上下文定位每处修改，再通过当前 DSH 沙箱写入\n   文件。遇到可处理的失败时，它会撤销已经提交的修改。\n3. DSH 保存原始补丁，并使用原生差异视图展示结果。\n\n启用默认替换模式后，插件会从模型可用工具中移除 `edit`、`write` 和旧版\n`str_replace_editor` 及其提示内容；卸载插件后会恢复这些工具。\n\n## 兼容性与限制\n\n- DSH `>=0.1.1-rc.1 <0.2.0`。\n- 包开发和直接调用引擎需要 Node.js `^22.19.0 || >=24.0.0`。\n- 支持 `desktop`、`web` 和 `headless` Profile。\n- 需要当前 DSH 沙箱授权写入。`workspace-write` 保留已配置的边界；\n  `danger-full-access` 可以允许工作区外的绝对路径和父级相对路径。\n- 对可处理失败的回滚保护的是文件状态，不是重试成本。大型补丁中只要一个修改\n  片段失败，整份补丁都会被拒绝；重试时仍要再次提交完整补丁。\n- 一个范围较大的补丁可以修改或删除多个文件；范围较大时应审查原始补丁和结果\n  差异。\n\n项目仍处于 1.0 之前。兼容目标是声明的 DSH `0.1.x` 范围；发布验收会把安装包\n装入干净的 Profile。\n\n## 实现说明\n\nCodex 对齐、失败原子性、换行处理、包入口以及模型服务传输的详细说明见\n[实现说明](docs/implementation.zh.md)。\n\n## 语法\n\n支持的操作：\n\n```diff\n*** Add File: relative/path.ts\n+新增文件的每一行都以 + 开头\n*** Delete File: relative/obsolete.ts\n*** Update File: relative/current.ts\n*** Move to: relative/renamed.ts\n@@ 可选的函数或段落上下文\n 不变上下文\n-删除行\n+新增行\n*** End of File\n```\n\n`Move to` 可以省略；`End of File` 会把修改片段定位到文件末尾；只有新增行的\n更新片段会追加到文件末尾。相对路径从当前会话的工作目录解析；DSH 当前沙箱允许\n时，也可以使用绝对路径和父级相对路径。同一文件可以在补丁中出现多次，工具会按\n先后顺序处理。`Add File` 指向已有文件时会替换该文件，与 Codex 行为一致。\n\n## 配置\n\nProfile 中的默认配置：\n\n```yaml\n- id: tool-apply-patch\n  config:\n    replaceNativeEdit: true\n```\n\n只有在明确希望把 `edit`、`write` 和 `str_replace_editor` 与 `apply_patch`\n同时提供给模型时，才设置 `replaceNativeEdit: false`。这个选项不影响自由格式\n传输和事务行为。\n\n## 基准测试\n\n第一组 A/B 对比计划使用 DeepSeek V4 Flash，在同一批编码任务上测试 DSH 原生\n`edit` 和 DSH Smarter Edit。两组必须使用相同的提示词、模型配置、推理强度、\n沙箱、干净的工作区快照和测试次数。\n\n| 指标 | 定义 |\n| --- | --- |\n| 编辑调用次数 | 完成任务前调用文件编辑工具的总次数 |\n| 编辑失败率 | 被拒绝或失败的编辑调用数 / 编辑调用总数 |\n| 输出 token | 完整任务中的模型输出 token |\n| 交互轮次 | 最终回答前的模型请求次数 |\n| 首次测试通过 | 第一次运行测试的退出码为 0 |\n| 最终成功 | 编码任务的所有验收检查通过 |\n| 总耗时 | 从接受用户请求到给出最终结果的时间 |\n\n如果记录中发送给模型服务的请求把 `apply_patch` 描述为 `type: \"function\"`，\n该次测试不能计入自由格式组。有效测试必须是 OpenAI `type: \"custom\"` 且\n`format.syntax: \"lark\"`。只有完成多次受控试验后，才把实测结果写入 README。\n\n## 开发\n\n```sh\npnpm install --frozen-lockfile\npnpm peers check\npnpm run check\n```\n\n测试覆盖 Codex 官方场景、解析与匹配、沙箱路径、预演隔离、故障回滚、清理、\n并发修改检测、工具注册、原生工具过滤、包结构、DSH 原始调用还原、原生差异展示\n和 OpenAI 请求序列化。\n\n修改行为或打包前，请阅读 [CONTRIBUTING.md](CONTRIBUTING.md)。\n\n## 安全与社区\n\n- 通过 [SECURITY.md](SECURITY.md) 私下报告安全问题。\n- 通过 [SUPPORT.md](SUPPORT.md) 获取使用帮助。\n- 按 [CONTRIBUTING.md](CONTRIBUTING.md) 和\n  [GitHub Issues](https://github.com/Anionex/dsh-smarter-edit/issues) 提交修改建议。\n- 在 [CHANGELOG.md](CHANGELOG.md) 查看版本历史。\n- 社区参与遵循 [Code of Conduct](CODE_OF_CONDUCT.md)。\n\n由 [Anionex](https://github.com/Anionex) 维护，采用\n[MIT License](LICENSE)。\n","readmeFilename":"README.zh.md"}