{"_id":"@elinpf/dsh-ops-access-ssh","_rev":"13-ec53acfb2fe10303f8290f6e7439ddff","name":"@elinpf/dsh-ops-access-ssh","dist-tags":{"latest":"0.4.1"},"versions":{"0.1.0":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.1.0","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.1.0","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"1290335ae6d1a4f2cb03471b2d50fc517b9dd7ff","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.1.0.tgz","fileCount":11,"integrity":"sha512-iZgSrZd4Gxw9yhRsJ7ZteaC+QdTrg0dBYcSNt8cC62w8Q2677bEnA8l9OZwBTEzqpncjYj2SD9Z6b3seLOn/Aw==","signatures":[{"sig":"MEUCIQDMGmPNkNhuAYWCwMpbaEAYaZMLPeSOBwBANsMmnGMUawIgNo0queyjZ19qOyyRlSI3/JfF77UaG/Gntdiu6dXj2SE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15840},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.1.0.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/eb62d1ff2cff93552e69888cadd2a30d/elinpf-dsh-ops-access-ssh-0.1.0.tgz","_integrity":"sha512-iZgSrZd4Gxw9yhRsJ7ZteaC+QdTrg0dBYcSNt8cC62w8Q2677bEnA8l9OZwBTEzqpncjYj2SD9Z6b3seLOn/Aw==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.1.0"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.1.0_1788320328479_0.704872735796741","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.1.1","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.1.1","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"7a6c0bce7fdf08cbacbe143b3f704c1b2f01d85b","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.1.1.tgz","fileCount":11,"integrity":"sha512-yzsaZhSK/u7LqeYOxNrAfWy8VcD5g+YugRpPJZVET4jQXtAJvYX3vo9fZEZutUp7GgHmN09xEwl1CA0dym+D8w==","signatures":[{"sig":"MEQCIDcvUgOEHEu748pKSNhSb3dtjwt3EztSGDx2T5IAo6t9AiBXisXqbyh1MisNm8syi6TYebGbWIG0smHaotUSX+vd9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15840},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.1.1.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/17db77d62372b379463041e9c2e224a2/elinpf-dsh-ops-access-ssh-0.1.1.tgz","_integrity":"sha512-yzsaZhSK/u7LqeYOxNrAfWy8VcD5g+YugRpPJZVET4jQXtAJvYX3vo9fZEZutUp7GgHmN09xEwl1CA0dym+D8w==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.1.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.1.1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.1.1_1788321453607_0.2004361354436428","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.1.2","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.1.2","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"e8faa5ec15ddfb9b7203f10511ad4df5967955ea","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.1.2.tgz","fileCount":11,"integrity":"sha512-7ydWphZT8n8biboKp2/eb1N6vAv/TLgCsO1GjmwsfcURb0bXD+aunpY1hn6hhSXax9l51br1LfdJ73EuhhaI0w==","signatures":[{"sig":"MEUCICLPFEOAdCJV4Ko1pIujoRVCK/VcNAx5USHlrExX07EWAiEAn/T4LjXXpYKpNeydADpg++DpCoCov+YDKecE1pff8zc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15840},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.1.2.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/b6e0bf9b8e61fa951b020f29cf06d7ff/elinpf-dsh-ops-access-ssh-0.1.2.tgz","_integrity":"sha512-7ydWphZT8n8biboKp2/eb1N6vAv/TLgCsO1GjmwsfcURb0bXD+aunpY1hn6hhSXax9l51br1LfdJ73EuhhaI0w==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.1.2"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.1.2"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.1.2_1788328461122_0.6566605689365004","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.1.3","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.1.3","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"b91ff4e1e524ff0a631be78f006a5b9120db5b8e","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.1.3.tgz","fileCount":11,"integrity":"sha512-q0iVzm9qLjXJO+7y+JLqmPTbEhK7LOZb02BJt3jh+/lmHsXMH5bnnnxvGaj/erUEXd/1vMFir99KxdwswyJjDQ==","signatures":[{"sig":"MEQCIQCXEpi0bnvOrDlvfbni/1crQiWEyqnrwq7Vzdo44m4mEwIfbPswpomCyhVt8uzvyfaYvUJSn5zxD/8KKjYyDbbdPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15840},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.1.3.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/a192c30e019a49ca9e86ee8d57ca6c05/elinpf-dsh-ops-access-ssh-0.1.3.tgz","_integrity":"sha512-q0iVzm9qLjXJO+7y+JLqmPTbEhK7LOZb02BJt3jh+/lmHsXMH5bnnnxvGaj/erUEXd/1vMFir99KxdwswyJjDQ==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.1.3"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.1.3"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.1.3_1788334212394_0.4464439534732638","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.1.4","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.1.4","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"eeccaf7ecf136d6b824a8b5eb5ce3dede0e850c6","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.1.4.tgz","fileCount":11,"integrity":"sha512-uKkBx2sj81ERf6mWBjE6Fn3mvtEP8s5mg023en4zxr7DGKJl8IY6L3nXGewU8MFpN+xZQNhKg1Uu6M0eDJO1yw==","signatures":[{"sig":"MEUCIBY3MUr9JmWfElRQ47xKpzxpnAjSmh+FgpzDEsQNVxdEAiEAkwtplrJH2DEBFax8vJOgwzS2jI2pNZUXl/Z0lgVBjzM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15840},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.1.4.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/8fd44cf7ea10f3d5d29a9fade13bec92/elinpf-dsh-ops-access-ssh-0.1.4.tgz","_integrity":"sha512-uKkBx2sj81ERf6mWBjE6Fn3mvtEP8s5mg023en4zxr7DGKJl8IY6L3nXGewU8MFpN+xZQNhKg1Uu6M0eDJO1yw==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.1.4"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.1.4"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.1.4_1788335592183_0.1747305123108056","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.1.5","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.1.5","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"9d2c093e44712b12f23342e1959b9cc6ec976e00","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.1.5.tgz","fileCount":11,"integrity":"sha512-5dGhIlDysmevO1YtzlvDqRKkf94z2FU0m+6/eMlfWeIYuQS+ht1GCUDFWv31CBZHnjb+gZ/hBqizrs7ScA1a9g==","signatures":[{"sig":"MEUCIFsgViXjtVodTcLVI8VDJc0pAauggXSFefmyzux6YFEKAiEA3yz0UYNPxNNWgbszW0O8BlrpY7kXGKvhpiEMRqHh+3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15840},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.1.5.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/923d26d092badb4c319fbba16f9ae5f5/elinpf-dsh-ops-access-ssh-0.1.5.tgz","_integrity":"sha512-5dGhIlDysmevO1YtzlvDqRKkf94z2FU0m+6/eMlfWeIYuQS+ht1GCUDFWv31CBZHnjb+gZ/hBqizrs7ScA1a9g==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.1.5"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.1.5"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.1.5_1788335923637_0.39584628618618867","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.1.6","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.1.6","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"cf866458110ba8d8b9e1e9f63952d00e0b662019","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.1.6.tgz","fileCount":11,"integrity":"sha512-RkLD8pc8WfAZlWVtv8CF57+Srkc0PArYpjlST44Cooa4RR31ZfpADSLfFSDCwUvjSk9J78g/e/nQq7LSeG5Xeg==","signatures":[{"sig":"MEYCIQCK+SxU96luOWBYgVt7+WIJnRlFiazB0TRM+o0Ply+sjgIhAMlk7299vUr48Skd/GaTkN/zBWEwBlKtn6y/fkcAwPxI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15840},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.1.6.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/f7ce75f82028a71b1640461fe335c3d2/elinpf-dsh-ops-access-ssh-0.1.6.tgz","_integrity":"sha512-RkLD8pc8WfAZlWVtv8CF57+Srkc0PArYpjlST44Cooa4RR31ZfpADSLfFSDCwUvjSk9J78g/e/nQq7LSeG5Xeg==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.1.6"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.1.6"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.1.6_1788491378961_0.5335518327482713","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.1.7","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.1.7","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"c57ffcdc6c0c540def98a3bd095c278f9bce8d8f","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.1.7.tgz","fileCount":11,"integrity":"sha512-2vKmxWH4UedKWvRx3IE+o5S904wIKHu6Z0otf1X92xw9TRIBuqeyiy7XBfXWDOrlcCYnwv2ywv0H87z9hJzwwA==","signatures":[{"sig":"MEQCIGOi3nP1mnmJccDvXRQwsvLs8FCZPU1JrAeqBM9ycS0hAiBPSJGlmdBIqn9mIY/wXNRPdlvJm6vj+q2vt04c86gpwQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15840},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.1.7.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/e6a798c5a14bd49f87b34347c34dbad3/elinpf-dsh-ops-access-ssh-0.1.7.tgz","_integrity":"sha512-2vKmxWH4UedKWvRx3IE+o5S904wIKHu6Z0otf1X92xw9TRIBuqeyiy7XBfXWDOrlcCYnwv2ywv0H87z9hJzwwA==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.1.7"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.1.7"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.1.7_1788768183073_0.49307603733444894","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.2.0","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.2.0","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"e234c073bb5d112c795ff588e40da66f6dd86a81","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.2.0.tgz","fileCount":11,"integrity":"sha512-mCp6xdA/KqIDJpjIpJHxkH9lhD3kjQtsRhtqRK67ny4btG7DxRUAOT6fvYWUxMuZJNiqV/fCEnTbsyIISnRcbA==","signatures":[{"sig":"MEUCIQDek9FVc0Udua9qRW92kr5tb6WeKEPLjZ78scwr1+ytFAIgVcRnP5CcViKKSd5yoPg22Vt0x2dIfmFV+cfp2FdjEl4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24685},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.2.0.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/08c7d8f2a49ac621db0e06f5868c4595/elinpf-dsh-ops-access-ssh-0.2.0.tgz","_integrity":"sha512-mCp6xdA/KqIDJpjIpJHxkH9lhD3kjQtsRhtqRK67ny4btG7DxRUAOT6fvYWUxMuZJNiqV/fCEnTbsyIISnRcbA==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.2.0"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.2.0_1789349552419_0.07764183866439289","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.2.1","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.2.1","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"689b5b425dcae13634a1ec3163df5418e2351054","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.2.1.tgz","fileCount":11,"integrity":"sha512-6Wxa9MG4ggInOkRUV0Q95r/mUF3NCB5JD0qc7gsv0iPGgBhjLotOKzuSS/HkJWdon1XXtPIQqRxhvv3P5HcYWA==","signatures":[{"sig":"MEYCIQDlGiXNIiqAMjNMpDV8tUbLNh3Qky4ILcTFc+1bnR1y4QIhALz8LiJPokJh3z9k081oKwsIF3U7sMjnv1wAm9GoC3Ks","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24685},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.2.1.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/df517a57c3af9adada93c5a606246ee3/elinpf-dsh-ops-access-ssh-0.2.1.tgz","_integrity":"sha512-6Wxa9MG4ggInOkRUV0Q95r/mUF3NCB5JD0qc7gsv0iPGgBhjLotOKzuSS/HkJWdon1XXtPIQqRxhvv3P5HcYWA==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.2.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.2.1_1789351358463_0.48641739098405257","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.3.0","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.3.0","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"0608745dd2fb5ef92a67e60b95f95e1076b7a261","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.3.0.tgz","fileCount":11,"integrity":"sha512-o1uW2w0n7UeNC9ORVIYhw4M6Q2ulOLtp6WSRSrjrtQYtBTfJM9FZVhu6djUX2xQp7TlL2TeqLKPrWHeahja11g==","signatures":[{"sig":"MEQCIA53Jrtd2M/MzxiDciRSgSpgT5wn4Vc6hbmUIzAshZTEAiAbZzp0c0QWXVCLbNdjqeXPgu4YnDwVFmDniz4hYD73QA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24685},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.3.0.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/87ef681286b851b21e47ff0d1f9aa641/elinpf-dsh-ops-access-ssh-0.3.0.tgz","_integrity":"sha512-o1uW2w0n7UeNC9ORVIYhw4M6Q2ulOLtp6WSRSrjrtQYtBTfJM9FZVhu6djUX2xQp7TlL2TeqLKPrWHeahja11g==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.3.0"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.3.0_1789355879592_0.13661548080172614","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@elinpf/dsh-ops-access-ssh","version":"0.4.0","license":"MIT","_id":"@elinpf/dsh-ops-access-ssh@0.4.0","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"15f579c3c59cf122bf5f97229c4e19c729d7527e","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.4.0.tgz","fileCount":11,"integrity":"sha512-QeFidEeGuRVuj5ZiNh6K0T6SWsNj2CVhdCAZJPRhL3a8h4LI2T1LGaFU5zalYyadTy987vSDv3KDwJXSgx3Y3g==","signatures":[{"sig":"MEQCIAP6eI4bKLrkDHiWW00EBqbf+uJC8L/2p5kAwmNGEqK2AiA4OFK8nfPtBGjLx4PifHFecW0v3d80itfk88drg9b7aQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDTRgYVNzM3xvgjpKU0z01EsGtzRZC5vTcAV0GSecAc2wIgC6UoWkMsALp0cOGiZJvhH1RfdNevu//wroSL+/b9vJI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24607},"main":"lib/index.js","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.4.0.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/6b5e814759fb25d0f517e38b6356bb7f/elinpf-dsh-ops-access-ssh-0.4.0.tgz","_integrity":"sha512-QeFidEeGuRVuj5ZiNh6K0T6SWsNj2CVhdCAZJPRhL3a8h4LI2T1LGaFU5zalYyadTy987vSDv3KDwJXSgx3Y3g==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.4.0"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.4.0"},"_npmOperationalInternal":{"tmp":"tmp/dsh-ops-access-ssh_0.4.0_1789542888547_0.8598633652389993","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"_id":"@elinpf/dsh-ops-access-ssh@0.4.1","dsh":{"bundle":{"patch":"./cordis.patch.yml"}},"dist":{"shasum":"45b19ea5a921b99c229f7eaad6ddc9baf358b1e1","tarball":"https://registry.npmjs.org/@elinpf/dsh-ops-access-ssh/-/dsh-ops-access-ssh-0.4.1.tgz","fileCount":11,"integrity":"sha512-wMPhIaRs5YFyx6vH5RywJTkZTDiDtug+3CqQMQDaDIfVkzUz3NM+RuF8unIVlrC3e4E7pCnR3I4+bVVp2OgzGA==","signatures":[{"sig":"MEUCIAbV9CElssZLXNIqzO2Dz6rxwNYKYCs4pR1hPOEvbxGFAiEAhBj/nHqHlIqdK82FjQbQgCoqH7fmkTwQAk8YdevWKNE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG6iTEqks8w2yFWUS3uzIZptx4ZyYdmLxhZVQNvGD2YkAiArlPBtgcLjj0qvaVmdKRDKPeEQ51v5LvinAldiXIzM6g=="}],"unpackedSize":24607},"main":"lib/index.js","name":"@elinpf/dsh-ops-access-ssh","type":"module","_from":"file:elinpf-dsh-ops-access-ssh-0.4.1.tgz","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./invariant":{"types":"./lib/invariant.d.ts","default":"./lib/invariant.js"},"./package.json":"./package.json"},"license":"MIT","scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit"},"version":"0.4.1","_npmUser":{"name":"elinpf","email":"365433079@qq.com"},"_resolved":"/tmp/f4e10fd1715ef44a07a25a03977e3f71/elinpf-dsh-ops-access-ssh-0.4.1.tgz","_integrity":"sha512-wMPhIaRs5YFyx6vH5RywJTkZTDiDtug+3CqQMQDaDIfVkzUz3NM+RuF8unIVlrC3e4E7pCnR3I4+bVVp2OgzGA==","_npmVersion":"10.9.8","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","directories":{},"maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"_nodeVersion":"22.23.2","dependencies":{"zod":"^4.4.3","@deepseek-ai/schemastery":"^3.18.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.11","typescript":"^5.4.0","@types/node":"^22.0.0","@deepseek-ai/cordis":"4.0.1","@elinpf/dsh-ops-access":"0.4.1"},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@elinpf/dsh-ops-access":"^0.4.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-ops-access-ssh_0.4.1_1789699614835_0.3570404474661948"}}},"time":{"created":"2026-09-02T03:38:48.307Z","modified":"2026-09-18T02:46:55.080Z","0.1.0":"2026-09-02T03:38:48.613Z","0.1.1":"2026-09-02T03:57:33.735Z","0.1.2":"2026-09-02T05:54:21.277Z","0.1.3":"2026-09-02T07:30:12.508Z","0.1.4":"2026-09-02T07:53:12.312Z","0.1.5":"2026-09-02T07:58:43.784Z","0.1.6":"2026-09-04T03:09:39.090Z","0.1.7":"2026-09-07T08:03:03.203Z","0.2.0":"2026-09-14T01:32:32.566Z","0.2.1":"2026-09-14T02:02:38.819Z","0.3.0":"2026-09-14T03:17:59.738Z","0.4.0":"2026-09-16T07:14:48.646Z","0.4.1":"2026-09-18T02:46:54.925Z"},"license":"MIT","description":"Ops access provider for SSH — validates ssh registry entries and expands key paths.","maintainers":[{"name":"elinpf","email":"365433079@qq.com"}],"readme":"# @elinpf/dsh-ops-access-ssh\n\nops access 接缝的 SSH provider — 两个凭证种类:`ssh`(主机条目)和 `ssh-cred`(可复用凭证条目),一把密钥或一个密码只登记一次,任意多台主机共享。\n\n## 功能\n\n`@elinpf/dsh-ops-access`(core) 下的 provider 插件之一。core 拥有 YAML 凭据 registry(`~/.dsh-ops/access.yaml`)和 `ctx.opsAccess` 服务;本包通过 `registerAccessProvider` 贡献两个凭证种类:\n\n- **`ssh` — 主机**:`host`,可选 `user` / `key` / `password` / `port`,以及可选 `cred` — 指向一个 `ssh-cred` 条目的引用。推荐形态是主机 + `cred`;内联 `key`/`password` 继续可用(遗留/一次性场景)。resolve 时 core 把被引用凭证的字段合并到主机条目**之下** — 主机上设的 `user` 覆盖凭证的默认登录用户。\n- **`ssh-cred` — 凭证**:可选 `user`(默认登录用户)、`key`、`password` — key/password 至少一个必填。不持有主机,只作为 `cred` 引用的目标被解析。秘密登记一次,N 台主机引用,轮换只改一处。\n- **字段处理**:展开 key/password 路径中的 `~`,让 `ssh -i` / `sshpass -f` 拿到绝对路径。\n- **保存时校验**:密钥内容先做廉价的 PEM armor 检查,再用 `ssh-keygen -y` 做真实解析(结构看似合法但内容损坏的粘贴会在此刻得到清晰报错,而不是在排查中途撞上 `error in libcrypto`;带口令的密钥也会提前得到 BatchMode 说明)。密码内容必须单行 — `sshpass -f` 只读文件第一行。\n- **粘贴内容**:admin UI 收到的是密钥/密码内容(而非路径)时,core 会写入 `~/.dsh-ops/credentials/` 下的 0600 受管文件;两个种类都声明尾随换行规范化(密钥粘贴恰好丢了 END 行末尾换行时,首次使用会在 libcrypto 里失败 — 2026-08-27)。\n\n## 为什么这样拆\n\n三角色规则(见仓库 `AGENTS.md`):core 拥有 registry 和服务,provider 只带一个 zod schema 加字段处理,消费端工具解析 profile 并拼 shell 命令。本包保持 schema + 处理的最小形态,意味着任何服务都不经手秘密材料 — profile 里只有路径和连接参数。\n\n主机/凭证分离用的是 core 的通用 `references` 机制(`references: { cred: 'ssh-cred' }`):一次 resolve 只对**主机条目**咨询一次 broker — 被引用的凭证是实现细节,不是单独门控的 profile。悬挂引用会让引用方的 resolve(及其 `canResolve` 预检)失败,并报出两端条目名。\n\n注册在 `registerAccessProvider` 内部经 `ctx.inject(['opsAccess'], ...)` 延迟挂载,并绑定在插件的 effect 生命周期上,fiber 销毁 / HMR 卸载会把 provider 从 registry 移除。\n\n## 安装\n\n加入 `dsh-web-app` 依赖,并在 ops preset 的 `agent.cordis.yml` 中引用:\n\n```yaml\n- id: ops-access-ssh\n  name: '@elinpf/dsh-ops-access-ssh'\n```\n\n## 配置项\n\n- `validateTimeoutMs`(数字,默认 `5000`)— 保存时 `ssh-keygen -y` 解析的超时时间。\n\n## 测试\n\n```sh\nnpm run build\nnpx vitest run\n```\n\n测试覆盖:两个种类的 schema 接受/拒绝、`~` 展开、`cred → ssh-cred` 引用声明、合并后用户校验、经 mock `opsAccess` 上下文的注册/销毁(含 HMR 卸载),以及 validateContent 的 armor 闸门 + 真实 `ssh-keygen` 解析 + 密码单行规则(在临时目录生成一次性 ed25519 密钥)。\n","readmeFilename":"README.zh.md"}