{"_id":"@agenshield/patcher","_rev":"15-31312ae400e2af77a76640f61da6b5bb","name":"@agenshield/patcher","dist-tags":{"latest":"0.7.2"},"versions":{"0.1.0":{"name":"@agenshield/patcher","version":"0.1.0","license":"MIT","_id":"@agenshield/patcher@0.1.0","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"9f811c515b86431fe5d7a1e0ecfc41a2293db002","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.1.0.tgz","fileCount":20,"integrity":"sha512-LE9qt/o99ziL6VJ0eYQ7E2Y/S2/AZ+s8oRHDvjsbSeppB5iL4kK2aCkHqmjRG3CMPVNW5RZVHBCgkj2ZE1vq5w==","signatures":[{"sig":"MEQCICwNIqdw5Vg8HmhKVjMjtXPh+tjPwo7z/AOvcZyIH9xDAiB5oaZU8o/EKJnnzKb7AH0Be1MAxrCoSv/r8Fq/H6n/tA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"1436122a0c4e547243310e5e33581a048656190d","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.1.0_1770343905969_0.42152162908797175","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@agenshield/patcher","version":"0.2.0","license":"MIT","_id":"@agenshield/patcher@0.2.0","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"2dd19e4f4226296a1395167f78859a57b7f53146","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.2.0.tgz","fileCount":20,"integrity":"sha512-agQtRTbhucSiBPY7CGUxs7jBGtUJPQwq+psthrE1kaoi0juNYmqDZ59QVHpM8CF0T5R4DaZN38yH7f0gYbGs9A==","signatures":[{"sig":"MEQCIBC0QrDAVcq/BtPz1tjbH9/9OmBC8vZ/ey6eZtLbFbUyAiA2cyFwZPD+BngXviuq+BEr0rOM8OLsK93585KWerA3BQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"1436122a0c4e547243310e5e33581a048656190d","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.2.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.2.0_1770345200209_0.3200141294101113","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@agenshield/patcher","version":"0.3.0","license":"MIT","_id":"@agenshield/patcher@0.3.0","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"c27a6e104100f9abed67e118b41a424fc528e7a3","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.3.0.tgz","fileCount":20,"integrity":"sha512-QVb6brNCKxGYqv2vMcUplzHSzMcVrfXOnU8M9ClQ6dG1C48GGjNn8SYuCr7OjFxuOVb6AOYl7S8Xi2UmcaR0gg==","signatures":[{"sig":"MEUCIQDN1xH9VCI17EoQYjhydPHq6jYa8CmuTSqqfiU/MWOXYQIgIb7DcMNUEkH7WmxTW4BVOmtrO2MrBJWA8wOESgToxhU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"bdcfc09294e7e79da87e60ebd753a192ad908977","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.3.0_1770346769320_0.2654490113527892","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@agenshield/patcher","version":"0.4.0","license":"MIT","_id":"@agenshield/patcher@0.4.0","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"1f7a35b0e94490bd9b9f273f93ab9eb726925d7d","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.4.0.tgz","fileCount":20,"integrity":"sha512-95g5ApiHEGG1k4QhmSWs4d/db8/nwGo/YFp1blBiHPf8AYUkUT/13ZGOMYHzfxOsDp2CjEJfJbwAMzNrMTXtEw==","signatures":[{"sig":"MEYCIQCsbvXJ3otiNs2eiGRY0U3k0bdn0HYiAqsaz3nfpINmwAIhAOu/p2mF0EEjZ2ofn5b4XyyzzR7mSQpYqLvmD7ln3Zd+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"bdcfc09294e7e79da87e60ebd753a192ad908977","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.4.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.4.0_1770347509727_0.5373985844096383","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@agenshield/patcher","version":"0.4.1","license":"MIT","_id":"@agenshield/patcher@0.4.1","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"2a28819eaf3785b926d1ee9cb4704d2d12267ad3","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.4.1.tgz","fileCount":20,"integrity":"sha512-QhQHZ1XUAh+rR/6B/rg3MjAHObK1r+AAD3UhAQQmoOV5WpkrU1KIB5Xesd8kHRShvTDICQ/Tcqcqq9zhOxuUbw==","signatures":[{"sig":"MEUCIQCn+q+m/8UAyrp5XU/QbR/dm0b38wFDTkc/fYIhhI5ItgIgVNMO3+jRLMubpajjTKXgcXvX1Xd/wtu4SQkAmFh8UDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"bdcfc09294e7e79da87e60ebd753a192ad908977","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.4.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.4.1_1770348765077_0.8040235013824213","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@agenshield/patcher","version":"0.4.2","license":"MIT","_id":"@agenshield/patcher@0.4.2","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"2f76d072f92d985336610082bee2bf18a37febe0","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.4.2.tgz","fileCount":20,"integrity":"sha512-7aaIPkd0Qb6YV2uvYmtyd88URVbmn5RMzgdQto7Cgx47Kzwjf0/y1lb7vkEUR+YHLae1TaTRXpaX3doQ3/uHHg==","signatures":[{"sig":"MEUCIQCjh0WUQqmzxflAZufM4lMxwIM84K1ceoT//nWMAtQw1wIgRc/hL7Ua9kdikTNVGT2J7oKfYZ15eV90+K0q/UxLuYQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"bdcfc09294e7e79da87e60ebd753a192ad908977","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.4.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.4.2_1770349845953_0.8517232236346581","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@agenshield/patcher","version":"0.4.3","license":"MIT","_id":"@agenshield/patcher@0.4.3","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"400ca5f07bc478cc475e3f5bad7b968d1afbfe4c","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.4.3.tgz","fileCount":20,"integrity":"sha512-QKTqVXlqyMsppokkkhjcrxSRg4xBHDqxMOMbWj8grg9/+Bo7sJoGnM0EkybnQaCSgedgfz+uETLORqst/QwypA==","signatures":[{"sig":"MEUCIQCPN9hW2pXVZp9LKeaxGZukIyHA5tWFk3uZQjTgup+OQwIgd/+m/fU5YgSUfqYqxxjSKCxMxcZeSmz9iq3mxsurk+Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"bdcfc09294e7e79da87e60ebd753a192ad908977","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.4.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.4.3_1770351189043_0.6026500742932437","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@agenshield/patcher","version":"0.4.4","license":"MIT","_id":"@agenshield/patcher@0.4.4","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"6ab0a6822e3d2926132b66f1f101745a217b8f99","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.4.4.tgz","fileCount":20,"integrity":"sha512-ovorrsY3uhw2omFVexE45l5Fba8Js7hToNqz3h7bisZr/S6XiZsMM0IYPGje9Wpey9DWGF4e2YgtdFu1jipOnQ==","signatures":[{"sig":"MEUCIQDCcCuYlvrpPBQk7+c2X7bewpCmQiTfXlapqXYKtKheqQIgSBsOchyTxjUa7qkSjZnE2/00+40RW4MBqBck4ibbvew=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"bdcfc09294e7e79da87e60ebd753a192ad908977","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.4.4"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.4.4_1770356672351_0.12143512051334016","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@agenshield/patcher","version":"0.5.0","license":"MIT","_id":"@agenshield/patcher@0.5.0","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"681eeedda03823d3f2ae4eed1b0468727339921c","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.5.0.tgz","fileCount":20,"integrity":"sha512-snBN9GnBssqSDeEM+DzD+vb/h0TLEkU/oFg+CmTv+HlM1zpBE2H+T8DlNs4f5NVHNSmEFbY+cx6zdwFxoEARtw==","signatures":[{"sig":"MEYCIQCDgw6M1/A3GKfkimQqVNEGFyRV3QvH41KQTd6LFF8MNgIhAPVPi+DWpFoKECTe0vSastiPluJ/zhX2KofHkTBEJzrE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"6455ebe7147c8db98171e1f660ce94e3470e792f","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.5.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.5.0_1770363460950_0.6945913871315246","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@agenshield/patcher","version":"0.6.0","license":"MIT","_id":"@agenshield/patcher@0.6.0","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"2176c89f134806938ab4dd5d97b5be1e24acedbb","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.6.0.tgz","fileCount":20,"integrity":"sha512-OHFNcqKX4k0SBRYh1NBEQsdZgdT020IsgzFfCNBCONdMqpdbO7i+cIygJcTxtx3oGvZONdZ6HZ+wDbo5SwyEBw==","signatures":[{"sig":"MEYCIQDztdxfkIBp/sbCoyIg0hev52QLoW3Xhc2fad6lY/W1vAIhALt9WKFr/Of1rabR98qvtNRM9wQGMRe4nEEIkklXg94h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"41aad9df3810faf60d3ba8f02f60c2fb2eeab5d8","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.6.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.6.0_1770402513038_0.4915522777733372","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@agenshield/patcher","version":"0.6.1","license":"MIT","_id":"@agenshield/patcher@0.6.1","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"7c749383a22aab37afb3c10f1fb324273130a371","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.6.1.tgz","fileCount":20,"integrity":"sha512-DefwBZslmQK0zjxb8JxVqfekiWpKN3oAyfFigsQPrOfH8Q2TiSiQsMPq9j5Q6a4SALe3W1WYTWUzaN4p8nVO+g==","signatures":[{"sig":"MEYCIQDsReLtJnCuI6GMYMIp2jsxt+0UgKBqUHZom1cq47uZKgIhAKlEKd0TfLB/hxY1u3G4ON9xb85zlEf0PDG+jWJBWfMQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"29023ecff757f5fa9f7843b4d57f4ea0314377b4","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.6.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.6.1_1770413222667_0.1675389064193893","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@agenshield/patcher","version":"0.6.2","license":"MIT","_id":"@agenshield/patcher@0.6.2","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"47bb958a27095e8cb715d6f3daea26b1808af0bd","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.6.2.tgz","fileCount":20,"integrity":"sha512-Thi8Fo811wpkH/pWlCgUvFkyjMNWbx5i/G+our+t0ciRI4BbViw7wYLe2Mi5r+UEw+6pzZ/+bUZnOM54u9+a4g==","signatures":[{"sig":"MEYCIQD7i4NqrmPIaFk9cC9HISH3PDiJBv8nQsaMbEenod1D0gIhAN5mv0ckxR+kjqMaiS2X2EuuKbF4DTvVACruzFvHh+3c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"29023ecff757f5fa9f7843b4d57f4ea0314377b4","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.6.2"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.6.2_1770415921878_0.5598040341080848","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@agenshield/patcher","version":"0.7.0","license":"MIT","_id":"@agenshield/patcher@0.7.0","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"bcb457875a38b810afc8478dd92d99a5c204b712","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.7.0.tgz","fileCount":20,"integrity":"sha512-3BnnmQOHldaycvlk14zHXeYK0sFdsuYd+1xXRl1znBfcHz+lP1DqNJZ8rB6QvjgtjKrpZjx/7qHjDJfD4D2v6w==","signatures":[{"sig":"MEQCIBIMNEsCTYBMQEpI5gfkFdN3Kf5YTYUPWusZYwpq8Qs/AiBE1gE23esc6NZ6EqNNjTJB1gP+QF2Kt506TTeyw+UOzw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"95ae2337cf2ef30ebfad0284c2f8263c4633e5aa","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.7.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.7.0_1770584721727_0.9720912995775579","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@agenshield/patcher","version":"0.7.1","license":"MIT","_id":"@agenshield/patcher@0.7.1","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"dist":{"shasum":"301f64bc91f1a270b2207c14f142fbb7b6d41ef9","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.7.1.tgz","fileCount":20,"integrity":"sha512-9jTe2uwUbs6EkCYP4Da52t77EoRc0G5YC9gf0W9QlN9p6s05kLFDqkomhUx37K5X2LWA5Ke8O4aixEYEtjhj2g==","signatures":[{"sig":"MEUCIQCi3FQB5nCDDWy+lpZov1W5mEqGvsmm+tDCYcSm0t1pNgIgZNi2Wo7s5fhLScz59FcwBWqAuc93+GSRlohtC5ZYiIg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44440},"main":"./index.js","type":"module","types":"./index.d.ts","exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./package.json":"./package.json"},"gitHead":"3b9e9f8a23b3477169d3206443b1d5ea42bfcc93","_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"_npmVersion":"11.6.2","description":"Python network isolation via sitecustomize.py patching","directories":{},"_nodeVersion":"24.11.1","dependencies":{"@agenshield/ipc":"0.7.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.0.0"},"_npmOperationalInternal":{"tmp":"tmp/patcher_0.7.1_1770593468391_0.08045774988291465","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@agenshield/patcher","version":"0.7.2","type":"module","description":"Python network isolation via sitecustomize.py patching","main":"./index.js","types":"./index.d.ts","exports":{"./package.json":"./package.json",".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"}},"license":"MIT","dependencies":{"@agenshield/ipc":"0.7.2"},"devDependencies":{"@types/node":"^24.0.0","tsx":"^4.21.0","typescript":"^5.9.3"},"gitHead":"3adc5ac7b5ba865ef9b374e500bd061940f24313","_id":"@agenshield/patcher@0.7.2","_nodeVersion":"24.11.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-ExaeSn5bS9bGNVkKz/vh3qvSaWpbEn20vAzT16J+EGC2Verx5M8tP+plGiyMOHMo+lmI6VI5Xks7c6DrFaBGxw==","shasum":"9b82eb05ed493d4d38b1acec11e812436bda5dee","tarball":"https://registry.npmjs.org/@agenshield/patcher/-/patcher-0.7.2.tgz","fileCount":20,"unpackedSize":44440,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIENyQ8N/sRjLyEtq2MF2BOkSH3Jq4PtcyFKsm2EFj/VLAiAA9fA97xhhuKOkVPpZVFI/C3QFZjmhVhSQo8J2S0sXwA=="}]},"_npmUser":{"name":"davidfrontegg","email":"david@frontegg.com"},"directories":{},"maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/patcher_0.7.2_1770601563536_0.9618274276292882"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-06T02:11:45.877Z","modified":"2026-02-09T01:46:03.831Z","0.1.0":"2026-02-06T02:11:46.117Z","0.2.0":"2026-02-06T02:33:20.372Z","0.3.0":"2026-02-06T02:59:29.460Z","0.4.0":"2026-02-06T03:11:49.897Z","0.4.1":"2026-02-06T03:32:45.224Z","0.4.2":"2026-02-06T03:50:46.090Z","0.4.3":"2026-02-06T04:13:09.206Z","0.4.4":"2026-02-06T05:44:32.480Z","0.5.0":"2026-02-06T07:37:41.094Z","0.6.0":"2026-02-06T18:28:33.224Z","0.6.1":"2026-02-06T21:27:02.842Z","0.6.2":"2026-02-06T22:12:02.065Z","0.7.0":"2026-02-08T21:05:21.856Z","0.7.1":"2026-02-08T23:31:08.522Z","0.7.2":"2026-02-09T01:46:03.685Z"},"license":"MIT","description":"Python network isolation via sitecustomize.py patching","maintainers":[{"name":"davidfrontegg","email":"david@frontegg.com"}],"readme":"# @agenshield/patcher\n\nPython network isolation via `sitecustomize.py` patching and optional macOS seatbelt wrappers. This package installs a Python runtime patch that blocks direct network access and routes selected HTTP traffic through the AgenShield broker.\n\n## Purpose\n- Prevent direct outbound network calls from Python code.\n- Route `requests` traffic through the broker HTTP fallback.\n- Optionally wrap Python with `sandbox-exec` on macOS.\n\n## Key Components\n- `src/install.ts` - `PythonPatcher` (install/uninstall/isInstalled).\n- `src/verify.ts` - `PythonVerifier` to validate the patch.\n- `src/python/sitecustomize.ts` - Generates patched `sitecustomize.py`.\n- `src/python/wrapper.ts` - Generates a wrapper shell script.\n- `src/python/sandbox-profile.ts` - Generates a macOS seatbelt profile.\n\n## Usage\n### Install\n```ts\nimport { PythonPatcher } from '@agenshield/patcher';\n\nconst patcher = new PythonPatcher({\n  pythonPath: '/usr/bin/python3',\n  brokerHost: 'localhost',\n  brokerPort: 5200,\n  useSandbox: true,\n  workspacePath: '/Users/clawagent/workspace',\n  socketPath: '/var/run/agenshield.sock',\n  installDir: '/Users/clawagent/bin'\n});\n\nconst result = await patcher.install();\n```\n\n### Verify\n```ts\nimport { PythonVerifier } from '@agenshield/patcher';\n\nconst verifier = new PythonVerifier({ pythonPath: '/usr/bin/python3' });\nconst report = await verifier.verify();\n```\n\n### Generate Assets\n```ts\nimport { generateSitecustomize, generatePythonWrapper, generateSandboxProfile } from '@agenshield/patcher';\n\nconst sitecustomize = generateSitecustomize({\n  brokerHost: 'localhost',\n  brokerPort: 5200,\n  logLevel: 'warn',\n  enabled: true,\n});\n\nconst wrapper = generatePythonWrapper({\n  pythonPath: '/usr/bin/python3',\n  sitecustomizePath: '/path/to/sitecustomize.py',\n  useSandbox: true,\n  sandboxProfilePath: '/etc/agenshield/seatbelt/python.sb',\n});\n\nconst profile = generateSandboxProfile({\n  workspacePath: '/Users/clawagent/workspace',\n  pythonPath: '/usr/bin/python3',\n  brokerHost: 'localhost',\n  brokerPort: 5200,\n});\n```\n\n## How the Patch Works\n- `socket.connect` and `socket.create_connection` are overridden to allow only broker connections.\n- `requests.Session.request` is patched to proxy HTTP requests through the broker (`/rpc`).\n- `urllib3` is patched to *block* non-broker connections (it does not proxy).\n- `aiohttp` is patched to *block* non-broker connections.\n\n## Environment Variables (sitecustomize)\n- `AGENSHIELD_ENABLED` - `true`/`false` to toggle patching.\n- `AGENSHIELD_BROKER_HOST` - Broker HTTP host.\n- `AGENSHIELD_BROKER_PORT` - Broker HTTP port.\n- `AGENSHIELD_LOG_LEVEL` - `debug|info|warn|error`.\n\n## Limitations and Caveats\n- Installs `sitecustomize.py` into the *system* site-packages; requires permissions.\n- Virtual environments are not explicitly supported; `getsitepackages()[0]` may not be the active venv.\n- Only `requests` is proxied through the broker; `urllib3` and `aiohttp` are blocked rather than proxied.\n- macOS-only sandboxing (`sandbox-exec`) is used when `useSandbox` is true.\n- Wrapper scripts do not remove seatbelt profiles on uninstall.\n- The wrapper sets `PYTHONPATH` to a file path; site-packages installation is the primary mechanism.\n\n## Roadmap (Ideas)\n- Venv-aware installation and uninstall.\n- Proxy support for `urllib3` and `aiohttp`.\n- Cross-platform sandboxing alternatives.\n- Cleaner wrapper env handling and profile lifecycle management.\n\n## Development\n```bash\n# Build\nnpx nx build shield-patcher\n```\n\n## Contribution Guide\n- Keep generated Python output minimal and deterministic.\n- Any changes to `sitecustomize.py` should include a verifier update.\n- Ensure new patches fail closed by default.\n\n## Agent Notes\n- `PythonPatcher.install()` writes to site-packages and optionally creates a wrapper and seatbelt profile.\n- `PythonVerifier.verify()` uses real network probes; keep timeouts reasonable.\n- `generateSandboxProfile()` emits a restrictive policy; any new paths should be explicit.\n","readmeFilename":"README.md"}