{"_id":"dsh-hashline-edittool","_rev":"22-901a1e593ef96d982a5e1265499d2b8d","name":"dsh-hashline-edittool","dist-tags":{"latest":"0.9.4"},"versions":{"0.4.1":{"name":"dsh-hashline-edittool","version":"0.4.1","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.4.1","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"58b0fb2363f89a2b347c09c055c5ab235058c809","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.4.1.tgz","fileCount":114,"integrity":"sha512-6mywiR29b4kj2vrYiNBlzZGDkOy1n6Zjx8tooQyKFudjfml0wj8HxoR9ISi6kabA6eFAdZLK6j9ingvWK3YZgA==","signatures":[{"sig":"MEUCIQDm46ofGnqlaP4azr9GfD6yVKvsVgGFpEWHhr44F17k1wIgKXfp/adkbht/xBGXw5K/oop+KHuo6ZQ6pgVo7FZQkH8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":533930},"main":"lib/index.js","type":"module","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"},"./package.json":"./package.json"},"gitHead":"befd1adfab17685324f9aec98c53ddd757e93a39","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>#<hash>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>#<hash>` is served back. Undo p","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.0-rc.6","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-agent":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6","@deepseek-ai/dsh-sandbox":"^0.1.0-rc.6","@deepseek-ai/dsh-session":"0.1.0-rc.6","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":">=0.1.0-rc.0","@deepseek-ai/dsh-home-paths":"0.1.0-rc.6"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.0-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.4.1_1788094553551_0.37312453774715215","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"dsh-hashline-edittool","version":"0.4.2","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.4.2","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"e3aeb15065ea98d12111833b856601121128c117","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.4.2.tgz","fileCount":138,"integrity":"sha512-5B0S33SH9G8dntqeUgBss7okQrDNJJCluctEMYn9AzXCaB2hInJxYKrZ9/zlWtnwNr6ZUWt4+5AF3NVVvvGgSg==","signatures":[{"sig":"MEUCIQDM6KJ9k6R6/vIcXQ/LzQumhHRpb1qxHX5Ka23PFloyawIgbfMwz3f2ISRkZLUuig5wojZLXwClNoVNhexTIj5vJOo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":694978},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"89b86185c3955c9435b693283bbd746e4bc4f0d2","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json && npm run build --prefix client","prepare":"tsc -p tsconfig.json","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build --prefix client && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.2-rc.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-tools":"0.1.2-rc.1","@deepseek-ai/dsh-sandbox":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.2-rc.1","@deepseek-ai/dsh-home-paths":"0.1.2-rc.1","@deepseek-ai/dsh-util-values":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.4.2_1788705509245_0.045834278824611996","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"dsh-hashline-edittool","version":"0.4.3","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.4.3","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"e5f7d1a5a6172e05d454207f6a492fa5f4cc002d","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.4.3.tgz","fileCount":142,"integrity":"sha512-wugmHHK5ht8y9SK6U2Cgc4++ZvPeljN/VME+p0gvGd+/DvhsDj2IUMZqmFLZgizhVdl8u5X+D3nQnkblqC/EOw==","signatures":[{"sig":"MEQCIE1fk2NtKbuoU17sHhGkD9Ipaqudfeosu/bUwxO+ia9rAiByskU8BiwdzCbyfIEV0tBgYzbki17mnfaKnBAzSi4drQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":719865},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"ffeb175a3bffc99dd068e44577797164bf192d53","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json && npm run build --prefix client","prepare":"tsc -p tsconfig.json","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build --prefix client && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.2-rc.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-tools":"0.1.2-rc.1","@deepseek-ai/dsh-sandbox":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.2-rc.1","@deepseek-ai/dsh-home-paths":"0.1.2-rc.1","@deepseek-ai/dsh-util-values":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.4.3_1788741076506_0.34531217499295597","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"dsh-hashline-edittool","version":"0.5.0","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.5.0","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"52ec78946851f5a59c1599a0b2993d01917f6a6d","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.5.0.tgz","fileCount":154,"integrity":"sha512-2Si6prMmS64xeE2zEN12m7LK/Gtiatc9cqsS2KNAgeC+fiuoKooYhIqM1uXfPNWnN/ignpAXcklGOGLa82HbRg==","signatures":[{"sig":"MEQCIHD0Rok3oxXNddXOj1SIuIYVCTi9QobQqg/YI5Imr3qsAiBfl/UdsSo9DtXfNMDMhBDjCcKph7gFUPPnMM6gwr75Xw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":803221},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"a8de58bdd54de8ac589cff2faf9a5b8dc6ef519a","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json && npm run build -w client","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build --prefix client && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"deprecated":"Ships 12 stale build artifacts from a removed feature branch; functionally fine but upgrade to 0.5.1 for a clean package.","repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.2-rc.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-tools":"0.1.2-rc.1","@deepseek-ai/dsh-sandbox":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.2-rc.1","@deepseek-ai/dsh-home-paths":"0.1.2-rc.1","@deepseek-ai/dsh-util-values":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.5.0_1789012662280_0.7097356792839979","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"dsh-hashline-edittool","version":"0.5.1","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.5.1","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"32a1c73b05b59056715f51b8367c9f7ddae712d7","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.5.1.tgz","fileCount":142,"integrity":"sha512-Edpn4KNUeNBQ+IJUqX1c011qbGXgOZv6DYC8x6JG0HnEEqARATQsDOV4wV94fwEdmaQHF5Rio1jL/OTVg92rkg==","signatures":[{"sig":"MEQCIDMMGNx02jF9JtKCgRRaVLIzvz8vuOMTbWWvNrZMBueAAiAI9pypwo+cxi+vNTNEh9Qaupb8S/tjB4HSWpeDvTHH6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":753211},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"91ef98160a3eb4abd947753279eb59a97189d05f","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.2-rc.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-tools":"0.1.2-rc.1","@deepseek-ai/dsh-sandbox":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.2-rc.1","@deepseek-ai/dsh-home-paths":"0.1.2-rc.1","@deepseek-ai/dsh-util-values":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.5.1_1789012894266_0.3715841047520574","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"dsh-hashline-edittool","version":"0.5.2","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.5.2","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"9f06b9aa66429dff1d1bd18b7857936003db27f2","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.5.2.tgz","fileCount":146,"integrity":"sha512-cCJk9nXl7dl6x3nhLjUPxJScvmqxln0U4dxjKFABfAb9QKePXy/svnUM6xpaLuc2mpNdN2fmsMQWkLBXpQJ9Rw==","signatures":[{"sig":"MEUCIQDb5YoDtA5taLwlEq5Bq+DeS8Sl3httrqqeR8TOd4NdZAIgVc4Bim4q+j5blQMV1hyKoTysinc4K2cgCaesBCZNdlU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":834640},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"0a5ce224c4b27686bec10981b954a20a74d973e4","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.2-rc.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-tools":"0.1.2-rc.1","@deepseek-ai/dsh-sandbox":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.2-rc.1","@deepseek-ai/dsh-home-paths":"0.1.2-rc.1","@deepseek-ai/dsh-util-values":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.5.2_1789046807073_0.725003790356501","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"dsh-hashline-edittool","version":"0.6.0","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.6.0","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"92d3f0af758a8bdf0dc329b1de529775e7a646b9","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.6.0.tgz","fileCount":206,"integrity":"sha512-LQVqLtJ0pVKX97ZIQkGQLi/VRr+gFQMU/jyiXMJCfs3uL2lGRmPhfzURsKSYwdDx+SyLna296JWms2uNO8Fhjg==","signatures":[{"sig":"MEQCICMTQyb5NgDJwrjtcS1gHPZ8QtOzASC6nRCp0WT3Lbh5AiBGhpJn7Cvc6qp3xBDJmp0FWnEYQWrEHkALy9pqkzthPg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGenY4e2HlDPAB4ec1H/FrzauCcFn81Xa5Ux/olgg2MIAiA7/ktU2qrzS7V0xgh6eyc2+vzCS6OwNxHhHG3PDXAjgg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1460719},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"8dd42a3d5ecc174ac6c7c36409ae6f391a7455fb","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.2-rc.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-tools":"0.1.2-rc.1","@deepseek-ai/dsh-sandbox":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.2-rc.1","@deepseek-ai/dsh-home-paths":"0.1.2-rc.1","@deepseek-ai/dsh-util-values":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.6.0_1789375265497_0.9344106332451321","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"dsh-hashline-edittool","version":"0.6.1","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.6.1","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"8246c4118bf28b3b8c7725a6038485c4c2cf0771","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.6.1.tgz","fileCount":214,"integrity":"sha512-M8nTx88hb8fo5DFmZO6JESGltoD1N03BHg1etNWjhHMaT3SesMzdZb1tJNaHUto/B7sLiUuP/LWKM1EYqi5e4w==","signatures":[{"sig":"MEQCIEvDyYigqtfx8hO7SaE1/MNnLGTYFS2pSTl/agylixgJAiAv0rawIJ3X8LhjwRdWYdPPOcV7ytwESXe77GGXGDatlQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFeNAT8KScVXCBQRvbvSKSqVmoPW8NNjdhI2BmaCjxBjAiEA7Wndy7R/h3+7l4FzUZYWuaLeRW//TwSFTYizrKC38Ho=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1603049},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"40ce5e3141a59e8dac7dc1c2f274d98e3ece1f17","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.2-rc.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.2-rc.1","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-tools":"0.1.2-rc.1","@deepseek-ai/dsh-sandbox":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.2-rc.1","@deepseek-ai/dsh-home-paths":"0.1.2-rc.1","@deepseek-ai/dsh-util-values":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.6.1_1789462725080_0.403923787031198","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"dsh-hashline-edittool","version":"0.6.2","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.6.2","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"9d0fddc9ace5f566ceff4908f6f93531879ea378","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.6.2.tgz","fileCount":216,"integrity":"sha512-qOVegUpw4w0Y59cI8spnbWO6FnH/qBG2etbFUcZYxuKMXMlRAIHCG7QXw7AE7gQGCBLQilFcbDNGJQ9BFBLVAA==","signatures":[{"sig":"MEQCIDSpgty89c9bwEgRmd+9YUqFCyr+i5eENHU5Us3Pmt9lAiBB0B/Et+ITZkRnxmN2OCO5HOj9t6jK8csUmimKgj8SoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIG66CRo3nD9Pz0VkrJr0Zq7WFCHxlo4iqxMUQV8dtx9/AiAAlOyVq1xaVoGOKX0U9KjKzJqhsJry9Xr5fb98S9ObuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1624329},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"3c7041b1ee9f1f0395d78085197f4e47855ef79b","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.2-rc.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.2-rc.1","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-tools":"0.1.2-rc.1","@deepseek-ai/dsh-sandbox":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.2-rc.1","@deepseek-ai/dsh-home-paths":"0.1.2-rc.1","@deepseek-ai/dsh-util-values":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.6.2_1789516654001_0.25161461524258155","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"dsh-hashline-edittool","version":"0.7.0","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.7.0","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"00e948eee104300f673cc5f58eb05f560dd071a6","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.7.0.tgz","fileCount":192,"integrity":"sha512-eOE4tEB0mejz3wayHfNXU/ujMWxu+2AODcbs0T0rOIFxBNRtyPYvyvyN1RCtqTJGNHVxEbghP6fY5Q09sozXOg==","signatures":[{"sig":"MEUCIFXxSlx+i2dlmT6IASw2zgJs/Y4dzbqYmVBVO16qxtYEAiEA07EKglKIq6yQ8b/gtSpG8y/uP7xgewpwqtXC9yKG/bM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDiUQ3+j/v4QNvcyxPDnmka/zeHtle8HRa8KCLcwEnE5QIgNUfJj5oAB8L6/03D6jAO+VYDqq9Xukrd1yzbU6WOOhE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1609292},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"5ebd551d05cd4a61445d7a4b432978cb8d4887a0","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.2-rc.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.2-rc.1","@deepseek-ai/dsh-agent":"0.1.2-rc.1","@deepseek-ai/dsh-tools":"0.1.2-rc.1","@deepseek-ai/dsh-sandbox":"0.1.2-rc.1","@deepseek-ai/dsh-session":"0.1.2-rc.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.2-rc.1","@deepseek-ai/dsh-home-paths":"0.1.2-rc.1","@deepseek-ai/dsh-util-values":"0.1.2-rc.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.7.0_1789569516994_0.18760151974093908","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"dsh-hashline-edittool","version":"0.7.1","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.7.1","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"27cf3111871d3760eee321b964abb38730b19291","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.7.1.tgz","fileCount":192,"integrity":"sha512-Iqz2WpDNDOGrPSxzsvjUt2QQiT9d34EOjWHYuwC+oWVrY8FsvHDb3xwtDkdzqxUYia2HyDove9XU5Ue+iD4dzQ==","signatures":[{"sig":"MEUCIGxxnaNMMJNwYa3Dh26oXs87qfTaBSS1dSQZWi+hQJ3jAiEAtQCH1tZfyeSQfD+GBeXAXXU/3bxnWqqhZbfq9/nXlAA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCB88Bncgr0YGxYAdopEPz1AwEmmVUVlOK9gzW98A+SggIhAKW22UnSX/y7QBWPnUSXryWMdJ6n1Tf446zrA4MVYw6g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1615846},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"291fd2fac982b21cfb5f3826e78fd92a9e4fe78d","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.6-alpha.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.6-alpha.1","@deepseek-ai/dsh-agent":"0.1.6-alpha.1","@deepseek-ai/dsh-brand":"^0.1.6-alpha.1","@deepseek-ai/dsh-scope":"^0.1.6-alpha.1","@deepseek-ai/dsh-tools":"0.1.6-alpha.1","@deepseek-ai/dsh-sandbox":"0.1.6-alpha.1","@deepseek-ai/dsh-session":"0.1.6-alpha.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.6-alpha.1","@deepseek-ai/dsh-home-paths":"0.1.6-alpha.1","@deepseek-ai/dsh-invariants":"^0.1.6-alpha.1","@deepseek-ai/dsh-ptc-runtime":"^0.1.6-alpha.1","@deepseek-ai/dsh-util-values":"0.1.6-alpha.1","@deepseek-ai/dsh-system-prompt":"^0.1.6-alpha.1","@deepseek-ai/dsh-user-approval":"^0.1.6-alpha.1","@deepseek-ai/dsh-sandbox-policy":"^0.1.6-alpha.1","@deepseek-ai/dsh-typert-protocol":"^0.1.6-alpha.1","@deepseek-ai/dsh-session-projection":"^0.1.6-alpha.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.7.1_1789571555963_0.03455153723480886","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"dsh-hashline-edittool","version":"0.7.2","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.7.2","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"79d425d105b9cf02a5c33c0e10e14c2affd95e25","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.7.2.tgz","fileCount":192,"integrity":"sha512-kL2q4i45gWfDHmlS8uCVMpUw7I+DxlpG+nvXawjM8k5lPV7oqridV1x+dnHIzhoLhEw+YskuGx2X5j7uKClFHA==","signatures":[{"sig":"MEYCIQC4/+noXv3L4vxr13u6ZsxHHyxhk/4Ymuh+1ZOTs3i0JQIhAKYb5SmBTt4ezT/aSE31aoM+M/0MARafsXLfi3OFh4RT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCmMJYsBykq/A4V8Y7X1jm8RD+yjCbD+cb9ThVPa8iyPwIhAIKq6b4Id+sieO6xnoWChSOXNKEkdJxwZi4I4voFymBA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1638094},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"b2a81e2cbd14b66ce0b6f4ac89d818c4a7aa5bb6","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.6-alpha.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.6-alpha.1","@deepseek-ai/dsh-agent":"0.1.6-alpha.1","@deepseek-ai/dsh-brand":"^0.1.6-alpha.1","@deepseek-ai/dsh-scope":"^0.1.6-alpha.1","@deepseek-ai/dsh-tools":"0.1.6-alpha.1","@deepseek-ai/dsh-sandbox":"0.1.6-alpha.1","@deepseek-ai/dsh-session":"0.1.6-alpha.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.6-alpha.1","@deepseek-ai/dsh-home-paths":"0.1.6-alpha.1","@deepseek-ai/dsh-invariants":"^0.1.6-alpha.1","@deepseek-ai/dsh-ptc-runtime":"^0.1.6-alpha.1","@deepseek-ai/dsh-util-values":"0.1.6-alpha.1","@deepseek-ai/dsh-system-prompt":"^0.1.6-alpha.1","@deepseek-ai/dsh-user-approval":"^0.1.6-alpha.1","@deepseek-ai/dsh-sandbox-policy":"^0.1.6-alpha.1","@deepseek-ai/dsh-typert-protocol":"^0.1.6-alpha.1","@deepseek-ai/dsh-session-projection":"^0.1.6-alpha.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.7.2_1789658078391_0.27384281927608245","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"dsh-hashline-edittool","version":"0.7.3","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.7.3","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"f717eb55da0ea16fec96090fc73e629fc6f16b76","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.7.3.tgz","fileCount":192,"integrity":"sha512-oBuNSKOROuPD2A1JBcVy8fVCyQt02mO5Dy0gPAOuYW2DTXNmp5yvubAl154VHJTJYRKd0ytkGPX0Upn5apwmRw==","signatures":[{"sig":"MEQCIC7mG6pmNExMS23tEnVhHizKSGAbuGfJJ+qsqgFT0R+RAiBeWhZhgcnV5/zNVdjCQ2YW+7+U5npguA3pB9TErgv+gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICW5TxkjmkEvzyNJcAiYo12YFRiZ3vu7zBBsd0iBXor6AiArSdOFXlXYc1/k3TVsl9qFBm6CRrb16y/FZg1ck9iA/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1624507},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"b5de71b45aad16ee4736de3eca70cc8fcd8d4de5","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.6-alpha.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.6-alpha.1","@deepseek-ai/dsh-agent":"0.1.6-alpha.1","@deepseek-ai/dsh-brand":"^0.1.6-alpha.1","@deepseek-ai/dsh-scope":"^0.1.6-alpha.1","@deepseek-ai/dsh-tools":"0.1.6-alpha.1","@deepseek-ai/dsh-sandbox":"0.1.6-alpha.1","@deepseek-ai/dsh-session":"0.1.6-alpha.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.6-alpha.1","@deepseek-ai/dsh-home-paths":"0.1.6-alpha.1","@deepseek-ai/dsh-invariants":"^0.1.6-alpha.1","@deepseek-ai/dsh-ptc-runtime":"^0.1.6-alpha.1","@deepseek-ai/dsh-util-values":"0.1.6-alpha.1","@deepseek-ai/dsh-system-prompt":"^0.1.6-alpha.1","@deepseek-ai/dsh-user-approval":"^0.1.6-alpha.1","@deepseek-ai/dsh-sandbox-policy":"^0.1.6-alpha.1","@deepseek-ai/dsh-typert-protocol":"^0.1.6-alpha.1","@deepseek-ai/dsh-session-projection":"^0.1.6-alpha.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.7.3_1789731611884_0.7028351720888344","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"dsh-hashline-edittool","version":"0.8.0","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.8.0","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"f9a646888cdc5b8645ff7969d6784835580f324c","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.8.0.tgz","fileCount":196,"integrity":"sha512-/JT98l8cmJ3ZOBk2ihBCzIIJ/XopEpgzjvbifmGQqRIiMyfEZuYUgL0QeLQLcxNhI2u3NneTJI/v5P/CqKO6ow==","signatures":[{"sig":"MEUCIQDzV3Xa0ymsBqR7lADfnFa9tzdJceFQyNd8usdcwkHXJAIgNcGAA4Qjq9TLqgiAMDY9N94U9JaF/GG+LStwbNZxTSM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDN4HYIAaS8sJ0O/Txp1c5fEvXzAP+hzy6jj9cHgvpwswIgLL5wsx+kn4hAPP5jcDJkKTWxmpXLb5BE8wg7sKp1M5w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1662167},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"c9b7087f01ae9c522b23c65c01cb7027bbca1393","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.6-alpha.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.6-alpha.1","@deepseek-ai/dsh-agent":"0.1.6-alpha.1","@deepseek-ai/dsh-brand":"^0.1.6-alpha.1","@deepseek-ai/dsh-scope":"^0.1.6-alpha.1","@deepseek-ai/dsh-tools":"0.1.6-alpha.1","@deepseek-ai/dsh-sandbox":"0.1.6-alpha.1","@deepseek-ai/dsh-session":"0.1.6-alpha.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.6-alpha.1","@deepseek-ai/dsh-home-paths":"0.1.6-alpha.1","@deepseek-ai/dsh-invariants":"^0.1.6-alpha.1","@deepseek-ai/dsh-ptc-runtime":"^0.1.6-alpha.1","@deepseek-ai/dsh-util-values":"0.1.6-alpha.1","@deepseek-ai/dsh-system-prompt":"^0.1.6-alpha.1","@deepseek-ai/dsh-user-approval":"^0.1.6-alpha.1","@deepseek-ai/dsh-sandbox-policy":"^0.1.6-alpha.1","@deepseek-ai/dsh-typert-protocol":"^0.1.6-alpha.1","@deepseek-ai/dsh-session-projection":"^0.1.6-alpha.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.8.0_1789805141046_0.05322989477613338","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"dsh-hashline-edittool","version":"0.8.1","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.8.1","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"f1051fd01cf1cd299cad8d6f426af2384c87473c","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.8.1.tgz","fileCount":198,"integrity":"sha512-CB2P72t4b3t30qQccQp44G3ux5B9rVnfI6IAD8PjYfHagoy/f9d+4zelT+ppYzCmAMArYmkCHNhejBIIZCv0KA==","signatures":[{"sig":"MEUCIQCpSRnJACcOgY09gyCygP67e0PH+GP/TneRnjScW+6OpgIgGvW5oE24pGIsbkMrVJsB4RcFj2AGugy92P8lmNjGIgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQChDPR/yh9xaalpOHJgRO8C5vWmrEObOgQqBIQZLf/5bQIgWltujNj4byk7ox/mcJu25DBwVaYC/rCKgQAm67hPrwI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1665154},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"fb3faab4633e57beb76235aacda26230bb553dea","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.6-alpha.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.6-alpha.1","@deepseek-ai/dsh-agent":"0.1.6-alpha.1","@deepseek-ai/dsh-brand":"^0.1.6-alpha.1","@deepseek-ai/dsh-scope":"^0.1.6-alpha.1","@deepseek-ai/dsh-tools":"0.1.6-alpha.1","@deepseek-ai/dsh-sandbox":"0.1.6-alpha.1","@deepseek-ai/dsh-session":"0.1.6-alpha.1","@deepseek-ai/schemastery":"^3.5.6","@deepseek-ai/dsh-settings":"0.1.6-alpha.1","@deepseek-ai/dsh-home-paths":"0.1.6-alpha.1","@deepseek-ai/dsh-invariants":"^0.1.6-alpha.1","@deepseek-ai/dsh-ptc-runtime":"^0.1.6-alpha.1","@deepseek-ai/dsh-util-values":"0.1.6-alpha.1","@deepseek-ai/dsh-system-prompt":"^0.1.6-alpha.1","@deepseek-ai/dsh-user-approval":"^0.1.6-alpha.1","@deepseek-ai/dsh-sandbox-policy":"^0.1.6-alpha.1","@deepseek-ai/dsh-typert-protocol":"^0.1.6-alpha.1","@deepseek-ai/dsh-session-projection":"^0.1.6-alpha.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.0.0","@deepseek-ai/dsh-settings":">=0.1.2-rc.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.8.1_1789908547360_0.23302401704873543","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"dsh-hashline-edittool","version":"0.9.0","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.9.0","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"f5c056c46e97d298b376890919fd7c03d1051dd4","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.9.0.tgz","fileCount":198,"integrity":"sha512-FOWh1nKdsZ+V669X/KGXNR5W7zTQQztTpk/YAapTIUzy+YkseK69MbNQPdRdZXCodfSrkPgA34vxJHnKeQApMw==","signatures":[{"sig":"MEUCIGWNXp54+jGsEbc5DxlNjdzTLxh2Ph+IrGDV80CXlnOwAiEA3TNPSNeyJI3u6TlHr17YxJGkBfl9eMwjXWVcLJjBVzc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCE5st16SqBfFMcvNSpGPq6dNoWSIplWqdJmII5Lf8SzwIhALxbNzJk0sVcNkRmcWUSbi/tYocHaO+B73IufKu0+iFc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1673310},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"b41bf8e9d5a824b7c8c92d39508fb8d826f5afb4","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.7-alpha.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.7-alpha.1","@deepseek-ai/dsh-agent":"0.1.7-alpha.1","@deepseek-ai/dsh-brand":"^0.1.7-alpha.1","@deepseek-ai/dsh-scope":"^0.1.7-alpha.1","@deepseek-ai/dsh-tools":"0.1.7-alpha.1","@deepseek-ai/dsh-sandbox":"0.1.7-alpha.1","@deepseek-ai/dsh-session":"0.1.7-alpha.1","@deepseek-ai/schemastery":"^3.18.3","@deepseek-ai/dsh-home-paths":"0.1.7-alpha.1","@deepseek-ai/dsh-invariants":"^0.1.7-alpha.1","@deepseek-ai/dsh-ptc-runtime":"^0.1.7-alpha.1","@deepseek-ai/dsh-util-values":"0.1.7-alpha.1","@deepseek-ai/dsh-system-prompt":"^0.1.7-alpha.1","@deepseek-ai/dsh-user-approval":"^0.1.7-alpha.1","@deepseek-ai/dsh-sandbox-policy":"^0.1.7-alpha.1","@deepseek-ai/dsh-typert-protocol":"^0.1.7-alpha.1","@deepseek-ai/dsh-session-projection":"^0.1.7-alpha.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.18.3"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.9.0_1790148075821_0.4035885372838004","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"dsh-hashline-edittool","version":"0.9.1","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.9.1","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"60215a1033fd81951704235c5c891e37582f9358","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.9.1.tgz","fileCount":198,"integrity":"sha512-jvwRLlDkTe6OvHYA6iKS2UAyZ/LkrVuvZt2/NUE9Yueq5PqnjDWgwMvdLpHuX1EVNmWdsMJBBhYNIGToAt0aQA==","signatures":[{"sig":"MEUCIGomJGmacQsvX0Wc1DwMe9M9j0W2UTFxKHZCne9FS9d1AiEA9DhsVJ07zd/KTU1Bq1S0Fqi5xeDN8DTuxVA82y6CCg8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFeGTFSeSJuo3JEtJcm+MiC/T/rnmmpWQL8/LOG149kZAiEA2fvYGnmyMdQcEaH5byHQ5Mdvb1P/bXN0WOBmeAh0tBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1674562},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"f6dbb88e1a14e9d3751f3b25678ede27fb072f1e","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.7-alpha.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.7-alpha.1","@deepseek-ai/dsh-agent":"0.1.7-alpha.1","@deepseek-ai/dsh-brand":"^0.1.7-alpha.1","@deepseek-ai/dsh-scope":"^0.1.7-alpha.1","@deepseek-ai/dsh-tools":"0.1.7-alpha.1","@deepseek-ai/dsh-sandbox":"0.1.7-alpha.1","@deepseek-ai/dsh-session":"0.1.7-alpha.1","@deepseek-ai/schemastery":"^3.18.3","@deepseek-ai/dsh-home-paths":"0.1.7-alpha.1","@deepseek-ai/dsh-invariants":"^0.1.7-alpha.1","@deepseek-ai/dsh-ptc-runtime":"^0.1.7-alpha.1","@deepseek-ai/dsh-util-values":"0.1.7-alpha.1","@deepseek-ai/dsh-system-prompt":"^0.1.7-alpha.1","@deepseek-ai/dsh-user-approval":"^0.1.7-alpha.1","@deepseek-ai/dsh-sandbox-policy":"^0.1.7-alpha.1","@deepseek-ai/dsh-typert-protocol":"^0.1.7-alpha.1","@deepseek-ai/dsh-session-projection":"^0.1.7-alpha.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.18.3"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.9.1_1790153296354_0.9728323792818152","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"dsh-hashline-edittool","version":"0.9.2","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.9.2","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"921937e7442fff0040da1cdaba91d7a6502ad90e","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.9.2.tgz","fileCount":210,"integrity":"sha512-MpWD3GNa0p9yZOKLvZT6dTF1UWFFMC1Mv8KBkRAKKmHM1zoQ7oBxtCQdp6aoUqOac6gPa62fKqv0I2aXfcZbfQ==","signatures":[{"sig":"MEUCIF5oKOdmzo4sVcfoFRIoPm/7f2mNvokwAjSqDAAsDLNiAiEA1ViMwZjFtydpcSmUO6v1s+e1fgyAxwt4vFabPIaIYMI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDMQM7UWx5NZ3AEEPhK/NftOVoSo59Wy91XxR7Mc6omBwIgHWpDZUwNZG91Iz3WyaVtdriVDzkaSAp3spwjrMd+3vA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1890562},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"5a023c5d56ae6851d38b4db84584cf4eee4478d1","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","@vscode/ripgrep":"^1.18.0","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.7-alpha.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.7-alpha.1","@deepseek-ai/dsh-agent":"0.1.7-alpha.1","@deepseek-ai/dsh-brand":"^0.1.7-alpha.1","@deepseek-ai/dsh-scope":"^0.1.7-alpha.1","@deepseek-ai/dsh-tools":"0.1.7-alpha.1","@deepseek-ai/dsh-sandbox":"0.1.7-alpha.1","@deepseek-ai/dsh-session":"0.1.7-alpha.1","@deepseek-ai/schemastery":"^3.18.3","@deepseek-ai/dsh-home-paths":"0.1.7-alpha.1","@deepseek-ai/dsh-invariants":"^0.1.7-alpha.1","@deepseek-ai/dsh-ptc-runtime":"^0.1.7-alpha.1","@deepseek-ai/dsh-util-values":"0.1.7-alpha.1","@deepseek-ai/dsh-system-prompt":"^0.1.7-alpha.1","@deepseek-ai/dsh-user-approval":"^0.1.7-alpha.1","@deepseek-ai/dsh-sandbox-policy":"^0.1.7-alpha.1","@deepseek-ai/dsh-typert-protocol":"^0.1.7-alpha.1","@deepseek-ai/dsh-session-projection":"^0.1.7-alpha.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.18.3"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.9.2_1790327814024_0.5589331988967796","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"dsh-hashline-edittool","version":"0.9.3","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","_id":"dsh-hashline-edittool@0.9.3","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"dist":{"shasum":"4986e664c60a196912d1113a1d08fcef6efb0760","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.9.3.tgz","fileCount":210,"integrity":"sha512-fFsTz3rG9Q+lQIMIyIGb31qkrq3T4T6kqJ3Ryhy4ECBeT8SxO5EsX9uBrNJQ0H5u/rZ6OD+dgSSOczifTpM0RA==","signatures":[{"sig":"MEYCIQDw1RRzDZ9ekMoScKlHq0PK1fVvp2RVLCRcZhU6uijQVAIhAI2057xBfvB2HTqHF7c5NTstoulSAT0DD9axzxJccYFM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCM/RD8MgNwNxLeln+WBwsuwX2TdOKc5ZB1aAErMvHInwIhAMevFxzVt5BhBaioIqRhzFguX5drRpssIGB0/2fPolsO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1894218},"main":"lib/index.js","type":"module","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":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"25a1a60a06bc3c4aaa16bc17be89e0fa2270accc","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","@vscode/ripgrep":"^1.18.0","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.7-alpha.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.7-alpha.1","@deepseek-ai/dsh-agent":"0.1.7-alpha.1","@deepseek-ai/dsh-brand":"^0.1.7-alpha.1","@deepseek-ai/dsh-scope":"^0.1.7-alpha.1","@deepseek-ai/dsh-tools":"0.1.7-alpha.1","@deepseek-ai/dsh-sandbox":"0.1.7-alpha.1","@deepseek-ai/dsh-session":"0.1.7-alpha.1","@deepseek-ai/schemastery":"^3.18.3","@deepseek-ai/dsh-home-paths":"0.1.7-alpha.1","@deepseek-ai/dsh-invariants":"^0.1.7-alpha.1","@deepseek-ai/dsh-ptc-runtime":"^0.1.7-alpha.1","@deepseek-ai/dsh-util-values":"0.1.7-alpha.1","@deepseek-ai/dsh-system-prompt":"^0.1.7-alpha.1","@deepseek-ai/dsh-user-approval":"^0.1.7-alpha.1","@deepseek-ai/dsh-sandbox-policy":"^0.1.7-alpha.1","@deepseek-ai/dsh-typert-protocol":"^0.1.7-alpha.1","@deepseek-ai/dsh-session-projection":"^0.1.7-alpha.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.18.3"},"_npmOperationalInternal":{"tmp":"tmp/dsh-hashline-edittool_0.9.3_1790330275771_0.23214126744971963","host":"s3://npm-registry-packages-npm-production"}},"0.9.4":{"_id":"dsh-hashline-edittool@0.9.4","dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"dist":{"shasum":"c8dbe858583c49c841d6a728cba9674a3839b288","tarball":"https://registry.npmjs.org/dsh-hashline-edittool/-/dsh-hashline-edittool-0.9.4.tgz","fileCount":210,"integrity":"sha512-Ifij5JGEY4HZb1je3uQ0AJq3lbahivrzeIexA9mY1sXPyeF6uK+llpOoYyFknZKMsVGtWaki/goQYDBrr5M+vQ==","signatures":[{"sig":"MEQCIC3c0Mj004C3dxfXiKPW3HUdX+ixSgpHjhMpZ1fnjzMOAiB2GaOblcdqFlHE/7pdLTxF2GOaKXDpww+TXCFR3z8hFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDoDaj+ulS8C/EKdz/yLZtMQ1humwaWf66vNMOvLjeGfAiA+a1eDgFBykXbNHl5FwZQoDt5enS61OQtpbZ6vjThVYw=="}],"unpackedSize":1896837},"main":"lib/index.js","name":"dsh-hashline-edittool","type":"module","types":"lib/types/index.d.ts","author":{"name":"dsh-hashline-edittool contributors"},"engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":"./client/lib/client.js","./package.json":"./package.json"},"gitHead":"223dfa088908d9706e7cb666fe762a5bc09b29e2","license":"MIT","scripts":{"test":"vitest run","build":"npm run clean && tsc -p tsconfig.json && npm run build -w client","clean":"node scripts/clean.mjs","prepare":"npm run build","release":"node scripts/release.mjs","benchmark":"node benchmark/run.mjs","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","dev:reload":"bash scripts/dev-reload.sh","test:watch":"vitest","postpublish":"node scripts/tag-current.mjs","prepublishOnly":"npm run typecheck && npm test && npm run build && node scripts/assert-tagged.mjs"},"version":"0.9.4","_npmUser":{"name":"hyperion2144","email":"3200828584@qq.com"},"homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"workspaces":["client"],"_npmVersion":"11.17.0","description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","directories":{},"maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"_nodeVersion":"26.5.0","dependencies":{"diff":"^8.0.2","file-type":"^21.3.0","minimatch":"^10.2.6","@vscode/ripgrep":"^1.18.0","web-tree-sitter":"^0.26.13","tree-sitter-python":"^0.25.0","tree-sitter-javascript":"^0.25.0","tree-sitter-typescript":"^0.23.2"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.8.0","@types/node":"^24.0.0","js-tiktoken":"1.0.21","tree-sitter-c":"^0.24.1","@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh-fs":"0.1.7-alpha.1","@vitest/coverage-v8":"^4.1.10","@deepseek-ai/dsh-llm":"0.1.7-alpha.1","@deepseek-ai/dsh-agent":"0.1.7-alpha.1","@deepseek-ai/dsh-brand":"^0.1.7-alpha.1","@deepseek-ai/dsh-scope":"^0.1.7-alpha.1","@deepseek-ai/dsh-tools":"0.1.7-alpha.1","@deepseek-ai/dsh-sandbox":"0.1.7-alpha.1","@deepseek-ai/dsh-session":"0.1.7-alpha.1","@deepseek-ai/schemastery":"^3.18.3","@deepseek-ai/dsh-home-paths":"0.1.7-alpha.1","@deepseek-ai/dsh-invariants":"^0.1.7-alpha.1","@deepseek-ai/dsh-ptc-runtime":"^0.1.7-alpha.1","@deepseek-ai/dsh-util-values":"0.1.7-alpha.1","@deepseek-ai/dsh-system-prompt":"^0.1.7-alpha.1","@deepseek-ai/dsh-user-approval":"^0.1.7-alpha.1","@deepseek-ai/dsh-sandbox-policy":"^0.1.7-alpha.1","@deepseek-ai/dsh-typert-protocol":"^0.1.7-alpha.1","@deepseek-ai/dsh-session-projection":"^0.1.7-alpha.1"},"peerDependencies":{"@deepseek-ai/schemastery":">=3.18.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-hashline-edittool_0.9.4_1790393450379_0.36213657761904017"}}},"time":{"created":"2026-08-30T12:55:53.470Z","modified":"2026-09-26T03:30:50.688Z","0.4.1":"2026-08-30T12:55:53.719Z","0.4.2":"2026-09-06T14:38:29.404Z","0.4.3":"2026-09-07T00:31:16.668Z","0.5.0":"2026-09-10T03:57:42.419Z","0.5.1":"2026-09-10T04:01:34.432Z","0.5.2":"2026-09-10T13:26:47.225Z","0.6.0":"2026-09-14T08:41:05.596Z","0.6.1":"2026-09-15T08:58:45.187Z","0.6.2":"2026-09-15T23:57:34.090Z","0.7.0":"2026-09-16T14:38:37.100Z","0.7.1":"2026-09-16T15:12:36.071Z","0.7.2":"2026-09-17T15:14:38.524Z","0.7.3":"2026-09-18T11:40:12.001Z","0.8.0":"2026-09-19T08:05:41.166Z","0.8.1":"2026-09-20T12:49:07.461Z","0.9.0":"2026-09-23T07:21:15.920Z","0.9.1":"2026-09-23T08:48:16.449Z","0.9.2":"2026-09-25T09:16:54.121Z","0.9.3":"2026-09-25T09:57:55.881Z","0.9.4":"2026-09-26T03:30:50.509Z"},"bugs":{"url":"https://github.com/hyperion2144/dsh-hashline-edittool/issues"},"author":{"name":"dsh-hashline-edittool contributors"},"license":"MIT","homepage":"https://github.com/hyperion2144/dsh-hashline-edittool","keywords":["dsh","dsh-plugin","deepseek-harness","coding-agent","oh-my-pi","hashline","line-anchored","line-hash","hash","anchors","read","edit","batch-edit","grep","undo","file-editing","web-ui","stable"],"repository":{"url":"git+https://github.com/hyperion2144/dsh-hashline-edittool.git","type":"git"},"description":"Line-anchored read/edit/batch_edit/grep/undo_last_edit tools for DeepSeek Harness (dsh). Every line is addressed by `<line>:<anchor>` so chained edits skip a re-read; stale or ambiguous anchors are rejected and a fresh `<line>:<anchor>` is served back. Un","maintainers":[{"name":"hyperion2144","email":"3200828584@qq.com"}],"readme":"<h1 align=\"center\">dsh-hashline-edittool</h1>\n\n<p align=\"center\">\n  <img src=\"docs/images/cards.png\" alt=\"hashline 卡片：读 / diff / grep / LSP / 设置\" width=\"760\">\n</p>\n\n<p align=\"center\">\n  <strong>DeepSeek Harness 的行锚定编辑工具<br>\n  每一行都有一个变长内容锚点 —— 不写行号、不回抄旧代码，更省 token，把上下文留给真正的工作。</strong>\n</p>\n\n<p align=\"center\">\n  <a href=\"README.md\">English</a> ·\n  <strong>简体中文</strong>\n</p>\n\n<p align=\"center\">\n  <a href=\"#快速开始\">快速开始</a> •\n  <a href=\"#锚点契约\">锚点契约</a> •\n  <a href=\"#工具\">工具</a> •\n  <a href=\"#设置\">设置</a> •\n  <a href=\"#错误码\">错误码</a> •\n  <a href=\"#架构\">架构</a> •\n  <a href=\"#致谢\">致谢</a>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/license-MIT-green.svg\" alt=\"MIT License\">\n  <img src=\"https://img.shields.io/badge/DeepSeek_Harness-Plugin-blueviolet.svg\" alt=\"DeepSeek Harness Plugin\">\n  <img src=\"https://img.shields.io/npm/v/dsh-hashline-edittool\" alt=\"npm version\">\n  <img src=\"https://img.shields.io/github/stars/hyperion2144/dsh-hashline-edittool?style=social\" alt=\"GitHub Stars\">\n</p>\n\n---\n\n## 它是什么\n\n一个 [DeepSeek Harness](https://github.com/deepseek-ai) 插件：用**哈希锚定**版本替换内置的\n`read` / `edit` / `grep` 工具，并在此基础上提供 `undo_last_edit`、`ast_grep`、`ast_edit`\n和 `lsp` 工具：\n\n- **每一行都携带内容锚点** —— 变长 Base62 标记（前 3,844 行只需 2 个字符，随文件规模\n  才会增长）。模型按标记编辑，永远不需要回抄要替换的代码。\n- **编辑会对照模型实际看到的内容做校验。** 每个解析出的范围都会对照 *served* 镜像\n  （锚点 + 内容）验证；行在会话期间被外部改动时会以 `[E_STALE]` 拒绝 —— 而拒绝信息会\n  回显当前行**并附带可直接使用的新鲜锚点**（reject-and-serve）。\n- **一次调用 = 一个原子批次。** 同一 `edit` 调用里的所有锚点都对照原始快照解析；任何\n  一条失败即整批拒绝、什么都不写。多文件批次按文件分组，每个文件独立 all-or-nothing，\n  部分成功会被明确上报。\n- **一切皆卡片。** 随包的 client 插件从结构化 `presentationMeta` 在 dsh web UI 渲染\n  读 / diff / grep / 撤销 / 写入 / 结构 / LSP 卡片 —— 模型文本与 UI 永远不需要靠字符串\n  解析达成一致。\n\n以单个 npm 包（`dsh-hashline-edittool`）交付：宿主插件 + web 卡片插件 + prompt sections，\n由一个 bundle patch 挂载。\n\n## 亮点\n\n**自渲染卡片。** 随包 client 插件自带 React 组件——`HashlineReadRow`、`HashlineEditRow`、`HashlineGrepRow`（文件 tab + 命中高亮）、`HashlineUndoRow`、`HashlineWriteRow`、`HashlineAstGrepRow`、`HashlineAstEditRow`、`HashlineLspRow`——直接注册进 dsh web UI 的插槽。每张卡片从工具的结构化 `presentationMeta` 渲染，锚点 gutter、diff 行、高亮 span 全部原生绘制：没有通用工具输出卡，没有字符串互解，不改上游 web。\n\n**动态长度锚点。** 锚点不是定宽哈希。分配最短优先：2 个字符覆盖前 3,844 行，只有文件真需要时才长出新层（上限 62⁸ 行，实际不可达）。全数字编码被跳过，标记永远不会与行号混淆；冲突在分配时探测消解；会话内编辑后幸存的行保持原锚点——分配/释放走统一生命周期门，重写与外部变更按行对齐继承。\n\n**AST + LSP 双语义后端。** `ast_grep` / `ast_edit` 通过沙箱化的 tree-sitter worker 回答「语法在哪里匹配」，配精选语法目录（SHA-256 校验下载、安装/卸载路由）与长文件的可编辑折叠大纲。`lsp` 工具通过每语言一个的真实语言服务器回答「这个符号是什么」——按需启动，与 dsh 自带 `lsp` 服务共享——起不了服务器时降级启发式后端。两者都会 serve 自己的行，结构与语义结果可直接编辑。\n\n**写入即诊断（自动诊断）。** 编辑/写入落盘后，插件以写入前的文本为基线通知语言服务器，拉取诊断并按写入文件逐一投递——短窗口内联胶囊挂在卡片下方（严重度着色），未竟部分在模型下一步自然边界异步补投；JSON 信封与 text 模式双通道可达。`lsp.auto_diagnostics` 一键关闭。\n\n**插件自渲染的设置面板。** 随包的 `HashlineSettingsCard` 是 web 端完整设置 UI：分隔符、输出格式、上下文行数、require_line_content、AST 总开关与按语言开关、命名 LSP 服务器、自动诊断。改完提交即生效——不用碰 YAML。\n\n**处处热切换。** 提交的设置改动**下一次工具调用**即生效——输出格式、分隔符、上下文行数、AST/LSP 开关（已实测：会话中途切换 `output_format`，模型收到的内容立即改变）。影响面最大的开关也有处理：切换 `require_line_content` 会销毁并重挂 `edit` 工具的 schema，模型下一步就看到新的 `{ anchor, line }` 参数集——全程无需重启。\n\n## 快速开始\n\n```sh\nnpx @deepseek-ai/dsh plugin --profile web add github:hyperion2144/dsh-hashline-edittool   # 从 github\nnpx @deepseek-ai/dsh plugin --profile web add dsh-hashline-edittool                       # 从 npm\nnpx @deepseek-ai/dsh plugin --profile web add /path/to/dsh-hashline-edittool              # 本地检出\n```\n\n该 profile 的下一个会话即装即用。验证层已挂载：\n\n```sh\ndsh --profile <name> --dump-config   # 会出现 \"# == dsh-hashline-edittool\" 层\n```\n\n| 要求 | |\n| --- | --- |\n| Node | `^22.19.0 \\|\\| >=24.0.0`（dsh 的要求；存储使用 `node:sqlite`） |\n| Profile | 一个 dsh profile（首次使用 `dsh plugin` 会自动初始化） |\n| 后端 | 支持沙箱 / 远程文件系统（写入走 `ctx.fs`） |\n\n## 锚点契约\n\n### 标记\n\n- 锚点是变长 Base62 标记，**每行唯一**（内容相同的行拿到*不同*的锚点 —— 锚点是行身份，\n  不是可以猜的内容哈希）。全数字的编码会被跳过，所以标记永远不会是纯数字。\n- 标记写作 `<anchor>` 或 `<anchor>:<line>`；`line` 只是**位置提示** —— 锚点才是权威，\n  提示与锚点不一致只给警告（`[E_LINE_HINT]`），不是错误。旧的 `<line>:<anchor>` 顺序\n  仍然接受。\n- `read` 输出以 `ANCHOR:FILELINE` 头开始，分隔标记列与逐字内容，使用配置的分隔符\n  （下例为 `|`）：\n\n```text\nANCHOR:FILELINE\nG8:1|// UI 演示文件\nur:2|export const APP = \"hashline\";\nD0:4|export function greet(name: string): string {\n```\n\n### 已读状态校验（reject-and-serve）\n\n工具结果向模型展示过的行即成为 **served**（`read`、`grep`、编辑 diff、结构结果、LSP\n行）。`edit` 在写入前对照该镜像验证每个解析出的范围：\n\n- 锚点未知或行从未 served → `[E_RANGE_UNSERVED]` / `[E_RANGE_UNVERIFIED]`；\n- served 内容与磁盘不一致 → `[E_STALE]` / `[E_RANGE_STALE]`；\n- 每次拒绝都会**把当前行作为 served 行回显并附带新鲜锚点** —— 修复方式就是：取回显里\n  的标记重新提交。served 行同时以 `fs/observed` 发出，立即可写。\n\n没有 `Shift:` 块 —— 编辑之后，从响应刚给出的 diff 行取锚点，或者重新 read。\n\n### 批量语义\n\n- `edits[]` **按序作用于同一快照**；范围重叠是 `[E_BATCH_CONFLICT]`；任何失败是\n  `[E_BATCH_ABORT]` —— 什么都不写。\n- 使用逐条 `path`（或每条都带 `path`）时，条目按文件分组，每个文件**独立\n  all-or-nothing**；结果聚合为 `success[]` / `fail[]`（多文件形态）。\n  `item.path === topLevelPath` 自动折叠为缺省。\n- 每次调用最多 32 条编辑。\n\n### `op` 语义\n\n| op | 锚点字段 | 行为 |\n| --- | --- | --- |\n| `replace` | `anchor_start`（+ 可选 `anchor_end`） | 用 `lines` 换掉该范围（非空；`[\"\"]` 把行清成空行，区别于 `del`）。省略 `anchor_end` = 单行替换；**`lines` 跨多行时必填**。 |\n| `ins` | `anchor_after` | 在该行**下方**插入 `lines` —— 锚点行保留，`lines` 只放新内容。`anchor_start`/`anchor_end` 会被拒绝。可以锚在其他 hunk 范围的**结束行**，绝不能是起点或内部。 |\n| `del` | `anchor_start`（+ 可选 `anchor_end`） | 删除范围（或单个 `anchor_start` 行）；`lines` 被忽略。 |\n| `sed` | `anchor_start`（+ 可选 `anchor_end`） | 用 `pattern` + `replacement` + 可选 `flags`（`gims`）**逐行**重写范围；不放 `lines`，`replacement` 不得含换行；sed 的 `\\1`/`&` 与 JS 的 `$1`/`$&` 都接受。 |\n\n锚点字段与 op 不匹配是 `[E_BAD_SHAPE]`。\n\n### `require_line_content`（可选加固）\n\n开启 `hashline.require_line_content` 后，每个锚点变成 `{ anchor, line }` 对 —— `line`\n是你对该行**当前完整文本**的声明。声明在陈旧锚点检查之后验证；不匹配则以\n`[E_CONTENT_MISMATCH]` 拒绝整次调用，并回显你声明的内容实际所在的位置。\n\n## 工具\n\n| 工具 | 功能 |\n| --- | --- |\n| `read` | 文件即 served 行：`ANCHOR:FILELINE` 头 + `<anchor>:<line>` 标记（`line_numbers: false` 得到裸锚点）。`offset`（1 起）/ `limit` 分页；超长行（>200KB）变成标记 + `sed` 提示 —— 锚点需要完整行。 |\n| `edit` | 通过 `{ path?, edits: [{ op, … }, …] }` 应用一或多条范围编辑 —— 完整契约见[上节](#锚点契约)。取代旧的 `batch_edit`。 |\n| `write` | 完全影子化：创建/覆盖文件，返回写入结果**外加带新鲜锚点的自动 read 预览**，下一次编辑不再需要单独 read。 |\n| `grep` | JavaScript 正则搜索（`regex: false` 为字面量），跨路径树逐文件一节、同一表头，只输出完整行。`-C N` 回显上下文行；命中即 served → 可直接编辑。 |\n| `undo_last_edit` | `{ path }` 撤销该文件最后一次 hashline 编辑 —— 仅当文件仍与存储的编辑后内容一致时；可跨重启。 |\n| `ast_grep` | 按语法形状结构搜索（`pat` 使用 `$NAME` / `$$$ARGS` / `$_` 元变量）。模式无法解析为单一节点时拒绝而不是猜测。长文件返回可编辑的折叠大纲。 |\n| `ast_edit` | 结构改写：按形状找到位置，把变更交给 `edit` **同一引擎** —— served 校验、undo 记录、diff 与语法门全部生效。 |\n| `lsp` | 能起语言服务器就做符号级工作（按语言启动，与 dsh 的 `lsp` 服务共享）；否则降级启发式后端。其行会被 serve，因此 LSP 输出可直接编辑。 |\n\n### 输出模式\n\n`hashline.output_format` 切换面向模型的文本：\n\n- **`text`**（默认）—— 上文的 `ANCHOR:FILELINE` 行格式；\n- **`json`** —— 纯 JSON 信封（如 edit 返回 `{ ok, path, diff, hints, warnings }`，\n  `diff` 是 `{\"<锚点>:<行>\": 内容}` 字典）。结构化，适合偏好解析的模型。\n\nweb 卡片不受影响 —— 它们从 `presentationMeta` 渲染，永远结构化。\n\n## 设置\n\n所有键是插件自身的 **Profile 配置**（dsh ≥ 0.1.7）：在网页端 **设置 → 插件 → `dsh-hashline-edittool`**（行页面的配置表单）里编辑并提交。所有改动**热更新**：下一次工具调用即生效，无需重启。同一份值的原生编辑视图是 profile 补丁（`$DSH_HOME/profiles/<名>/cordis.patch.yml`）中本条目的 `config:` 块；全部键可选：\n\n```yaml\n- id: dsh-hashline-edittool\n  config:\n    separator: \"|\"           # 标记/内容列分隔符（默认 \":\"）\n    output_format: text      # \"text\" | \"json\"\n    context_lines: 3         # 陈旧回显 / diff 的上下文行数（0..20）\n    require_line_content: false\n    ast:\n      enabled: true\n      languages: {}          # 按语言收窄：{ <id>: { enabled: false } }\n    lsp:\n      servers: {}            # 命名服务器：{ <languageId>: <command> }\n      auto_diagnostics: true # 写入后内联投递服务器诊断\n```\n\n从 0.1.6 迁移？旧 `~/.dsh/settings.yaml` 里的 `hashline:` 节会在插件首次启动时**一次性**自动导入本配置——除非你已在 0.1.7 上自行配置过（你的新值优先）。\n\n### 按 preset 配置指引\n\n`tool:read` / `tool:edit` / `tool:grep` / `tool:undo_last_edit` 指引段是插件共享目录里\n按 preset id 存放的纯 markdown 覆盖文件 —— 见\n[`docs/adr/0001`](docs/adr/0001-guidance-override-files.md)。清空文件即重置为编译默认；\nfront-matter 围栏损坏会快速失败并告警。\n\n## 错误码\n\n| 代码 | 含义 |\n| --- | --- |\n| `[E_ACCESS]` | 文件存在但不可读/不可写。 |\n| `[E_BAD_OP]` | 范围终点在起点之前（方向颠倒时自动纠正）。 |\n| `[E_BAD_REF]` | 锚点字段不是从行首列复制的标记。 |\n| `[E_BAD_SHAPE]` | 请求/字段形状错误（未知字段、op 与锚点字段不匹配等）。 |\n| `[E_BATCH_ABORT]` | 批内一条失败；什么都没写。 |\n| `[E_BATCH_CONFLICT]` | 两条目在同一快照上范围重叠。 |\n| `[E_CONTENT_MISMATCH]` | （require_line_content）声明的 `line` 不匹配。 |\n| `[E_ELISION_IN_PAYLOAD]` | 载荷携带大纲标记 `…`；警告，编辑继续。 |\n| `[E_HASH_SPACE]` | 锚点空间耗尽（> 62⁸ 行）。 |\n| `[E_INS_ANCHOR_DUP]` | `ins` 的 `lines[0]` 与锚点行重复；警告，继续。 |\n| `[E_INVALID_PATCH]` | diff 预览标记被粘进 `lines`；剥除并警告。 |\n| `[E_LINE_HINT]` | `<line>:<anchor>` 提示与锚点不一致；以锚点为准。 |\n| `[E_LINE_REF]` | 锚点字段传了纯数字；安全时按 served 状态解析。 |\n| `[E_NOOP_LOOP]` | 同一编辑反复无变化；再提交被拒绝。 |\n| `[E_NOT_FOUND]` / `[E_NOT_TEXT]` | 文件不存在 / 目录-二进制-非 UTF-8。 |\n| `[E_NOT_OBSERVED]` | 本会话未观察过该文件（先读后写策略）。 |\n| `[E_OP_INS]` | 提示：`ins` 已把行插入锚点之后。 |\n| `[E_PASTE_DUP]` | 替换行与相邻文件行相同；原样保留。 |\n| `[E_RANGE_STALE]` / `[E_RANGE_UNSERVED]` / `[E_RANGE_UNVERIFIED]` | served 校验失败；范围已回显为新鲜行。 |\n| `[E_STALE]` | 锚点不再匹配 served 内容；重新 read。 |\n| `[E_SYNTAX_AFTER_EDIT]` | `ast_edit` 的替换会让文件无法解析；未写入。 |\n| `[E_UNDO_STALE]` / `[E_UNDO_UNAVAILABLE]` | 编辑后文件被改动 / undo 历史无法持久化。 |\n| `[E_WOULD_EMPTY]` | 编辑会把非空文件清空；请用 `write`。 |\n| `[E_WIN_REPLACE]` | Windows 原子替换被其他进程占用。 |\n| `[E_AST_DISABLED]` / `[E_AST_PATTERN]` / `[E_AST_TOO_LARGE]` / `[E_AST_WORKER_ABORTED]` / `[E_AST_WORKER_FAILED]` / `[E_PARSE_FAILED]` | AST 能力：按语言关闭 / 模式无法解析为单一节点 / 超过 AST 大小上限 / worker 中止 / worker 失败 / 文档解析失败。 |\n| `[E_GRAMMAR_BUILTIN]` / `[E_GRAMMAR_NO_DESCRIPTOR]` / `[E_GRAMMAR_UNKNOWN]` | 语法目录：内置名冲突 / 该语言无描述符 / 未知语言。 |\n| `[E_GRAMMAR_FETCH_FAILED]` / `[E_GRAMMAR_HASH_MISMATCH]` / `[E_GRAMMAR_NOT_IN_TARBALL]` | 语法下载失败 / SHA-256 不匹配 / tarball 中缺少条目。 |\n| `[E_LSP_NO_SERVER]` / `[E_LSP_BAD_OPERATION]` / `[E_LSP_UNAVAILABLE]` / `[E_LSP_ABORTED]` / `[E_LSP_CLOSED]` / `[E_LSP_NOT_READY]` / `[E_LSP_TIMEOUT]` | LSP：该语言无服务器 / 操作无效 / 服务器不可用 / 请求中止 / 通道已关闭 / 仍在启动 / 超时。 |\n| `[E_BARE_HASH_PREFIX]` | `lines` 中粘入了带锚点前缀的行；剥除并警告。 |\n| `[E_ANCHOR_AMBIGUOUS]` | 锚点同时活在多行上（被释放的锚点在模型仍持旧绑定时被重新分配）——拒绝；请重新 read。未写入任何内容。 |\n\n## 存储\n\n锚点身份、served 行与 undo 历史保存在**按工作区键控**的一个 SQLite 存储中：\n\n```\n$DSH_HOME/plugins/dsh-hashline-edittool/<projectKey>/hash-store.sqlite\n```\n\n`<projectKey>` 是会话 cwd 的人类可读编码，并行工作区之间永不共享锚点与 undo 历史。\n工作区之外的调用方回落到共享主目录存储。served 行按 7 天 TTL 清理；损坏的存储自动\n隔离重建。\n\n## 架构\n\n一个插件，三个平面：\n\n```text\nsrc/\n├── index.ts              # 入口：挂载工具、设置、LSP、语法路由\n├── config.ts             # 设置 schema + 接线（热更新）\n├── tools/                # 8 个工具入口 —— 薄壳，不做 IO\n├── domain/\n│   ├── edit/             # 编辑引擎、变更事务、契约、prompts\n│   └── session/          # served 状态、hash store、文件视图\n├── render/               # 按卡片的投影：读 / 编辑 / grep 卡、diff 渲染器\n├── contract/             # 请求形状 + 校验（schema 是唯一权威）\n├── hashline/             # 锚点核心：分配、resolve/apply 引擎\n├── infra/                # fs 桥、沙箱、路径、设置快照、工作区作用域\n├── lsp/                  # 语言服务器会话、自动诊断\n├── ast/                  # tree-sitter worker、语法注册表\n└── guidance/             # 按 preset 的指引解析 + 物化\nclient/                   # web 卡片插件（同一包）\ntest/                     # 1,210 个测试\n```\n\n依赖只指向一个方向：`tools → domain → render/contract → hashline/infra`。卡片从结构化\n`presentationMeta` 渲染；模型文本与 UI 永远不互相解析。领域词汇表见\n[`CONTEXT.md`](CONTEXT.md)，契约背后的决策见 [`docs/adr/`](docs/adr/)。\n\n## DSH 版本支持\n\n兼容性通过 settings 服务对等依赖声明（`@deepseek-ai/dsh-settings >=0.1.2-rc.0`，\nnpm 强制），并在本仓库实际运行的 harness 上验证：\n\n| dsh 版本 | 插件版本 | 说明 |\n| --- | --- | --- |\n| **0.1.6-alpha.1**（当前环境） | **0.7.1+** | 双事件注册（`agent/created` + 旧 `agent/session-start`）；`systemPrompt` 按作用域服务解析 |\n| 0.1.5-rc.2（前一环境，实测通过） | 0.7.0 | 统一锚点生命周期、AST/LSP 拆分、设置卡片、卡片全景图 |\n| ≥ 0.1.2-rc.0 | 0.6.x – 0.7.1 | 自渲染卡片、按工作区存储、设置面板 |\n| 0.1.2 | 0.4.x – 0.5.x | v2 动态锚点；dsh 0.1.2 web 卡片适配完成（#69） |\n| 0.1.2（早期） | 0.1.x – 0.3.x | 旧 `line#hash` 锚点、batch_edit |\n\n- 构建/测试 SDK 基线：`0.1.6-alpha.1`（#134）；0.7.0 线在 dsh `0.1.5-rc.2` 上验证。\n- 更新的 dsh 0.1.x/rc 线预期可用；发现回归请提 issue。\n\n## 开发\n\n```sh\nnpm run typecheck   # tsc --noEmit（src + test 两个工程）\nnpm test            # vitest\nnpm run build       # 清理 lib/ + tsc + client 工作区\n```\n\n发布是**先打 tag**：`npm run release -- X.Y.Z` 升版本、移动 changelog、打 `vX.Y.Z` 标签\n并推送 —— tag 触发 GitHub Actions 发布流程。tag 存在之前 `npm publish` 会被阻止。PR\n优先；正文写 `Closes #NN`。见 [`.agents/skills/git-std.md`](.agents/skills/git-std.md)。\n\n## 许可证\n\n[MIT](LICENSE)\n\n## 致谢\n\n本项目 **fork 自\n[**Rianico/dsh-better-edit**](https://github.com/Rianico/dsh-better-edit)**，此后独立维护\n—— 感谢 [@Rianico](https://github.com/Rianico) 打下的基础，以及把哈希锚定编辑带给\nDeepSeek Harness 用户。\n\n那个 fork 本身也站在 hashline 谱系之上，本项目一并感谢：\n\n- [**pi-hashline-edit**](https://github.com/RimuruW/pi-hashline-edit)（RimuruW）—— 引入\n  内容哈希与冲突消解的原创 pi-coding-agent 扩展；\n- [**pi-hashline-edit-pro**](https://github.com/YuGiMob/pi-hashline-edit-pro)（YuGiMob）\n  —— 本仓库 hashline 核心所移植自的加固版 fork；\n- Can Bölük 的 [*The Harness Problem*](https://stencil.so/blog/the-harness-problem) ——\n  证明了瓶颈在 harness 而非模型的那篇文章。\n\n延伸阅读：[Hash anchors + Myers diff + single-token anchors\n(dirac.run)](https://dirac.run/posts/hash-anchors-myers-diff-single-token) 与独立的\n[hashline 与 replace 对比基准](https://nwyin.com/blogs/hashline-vs-replace-edit-bench.html)。\n\n---\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=hyperion2144/dsh-hashline-edittool&type=Date)](https://star-history.com/#hyperion2144/dsh-hashline-edittool&Date)\n\n---\n\n<p align=\"center\">\n  <strong>⭐ 如果 hashline 编辑让 Agent 的编辑更可靠，就给它一个 star 吧！</strong>\n</p>\n","readmeFilename":"README.zh.md"}