{"_id":"@86d-app/registry","_rev":"14-039e3cd247a914f5dda205b6dc67f0c2","name":"@86d-app/registry","dist-tags":{"latest":"0.0.42"},"versions":{"0.0.17":{"name":"@86d-app/registry","version":"0.0.17","license":"MIT","_id":"@86d-app/registry@0.0.17","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"895d8b7880c0b618848dd60e4b666539190d8433","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.17.tgz","fileCount":57,"integrity":"sha512-jfpl+Ojb2j34bR9hU5KrZ3+mXjjr/Rc42hrYaTo8Ql6hXNhLp2EOssKbk39+rbiM2dJ1rUJgiAZj22xOmNJb9A==","signatures":[{"sig":"MEUCIQDywohINdcUscoi/J+Y5mGduynrNrM9ARU1eYU4ZXmJUwIgXVdx/vUapn6ZtMEKMqPCrtkex4gQY2QrTRlOKwUCMiE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":128803},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"04225251e91768875654067ab150ddd129ae3c3d","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.17_1774377862716_0.4330404159965684","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.18":{"name":"@86d-app/registry","version":"0.0.18","license":"MIT","_id":"@86d-app/registry@0.0.18","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"ada31eef85abf691bfbe5278c4b8ade9986fb80c","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.18.tgz","fileCount":57,"integrity":"sha512-0OjdttlaP7np4Y6TDpWtkpq+KZuzhYiZjnZJz13JPd4pv0VuQkTfnlii4+18bjxGjHxn0s2DcgWcCVLDfPycaw==","signatures":[{"sig":"MEUCIH/a4yalmJBYOIgDvnrAzBVxs/E9WAEYC70FSab46frPAiEAvFHBp+sEJCA1ydQ73lWrkILUHGvbkTq4OD7FvwNIUTc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":128803},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"b3aecdc669f370e5d30907100a61bab7028a2eb0","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.18_1774380261818_0.42109990280790033","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.19":{"name":"@86d-app/registry","version":"0.0.19","license":"MIT","_id":"@86d-app/registry@0.0.19","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"61ba8a7f2a2c19a40daca4c2e471579503020da4","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.19.tgz","fileCount":57,"integrity":"sha512-0cd9b/E2nCWL0RUMFaG0kSOFSEeual4JgWB0NnROXwAA7aRVolEWIfGh+GwUbCQz6FQXlN6ql1NdH/7d+UOdCA==","signatures":[{"sig":"MEUCIBIWMsQURCQACotYJyJpsoB/WEBC5DAT2qayhA6FGg8nAiEAh4/FnnBuMDPg+nH1r/oIU90xZ306z546yq9v9VUQsZI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":128803},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"c30b33eb8cca3939b37ae26806217181951009b4","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.19_1774382310055_0.19830027191885713","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.21":{"name":"@86d-app/registry","version":"0.0.21","license":"MIT","_id":"@86d-app/registry@0.0.21","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"e5e894cf01aff92f7733ff690b484f2b7701b7f7","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.21.tgz","fileCount":57,"integrity":"sha512-+QEcO4Pcsfts/AKcN/x5fhHMj2gfG6nmCxDK2oYNpk2qxXPgWmuA3fLEZeMcOu9DYxWo1WxNbog3tkc5ch+zMg==","signatures":[{"sig":"MEUCIQCevvStEUAVHDbLArtRUPc18Jpa3sVf5mVZSv2gmvvZCwIgUkZNx6zrVBMh/+UE62GKSi+XYSJ9nSjubhA2woUZqUU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":128803},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"28f04b7a233b7e7bc38cfe1d85b28120b7a768d0","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.21_1774383005873_0.36585010766394","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.22":{"name":"@86d-app/registry","version":"0.0.22","license":"MIT","_id":"@86d-app/registry@0.0.22","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"c764a8de2e8555d55c9caf48f2519917ef8af5f6","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.22.tgz","fileCount":57,"integrity":"sha512-f8R4rJE/x0FqrsgF5Ca4aZaoxBp53j5yE7tDrB34uc6qGjplVk9Zqc2IBA+OMjE9Ir45+nolEnPcgqXvWEYIZw==","signatures":[{"sig":"MEYCIQDH7+fLEdUHSOUvFU9WPqn8tZLYVnPl989wIuAUCQJ0GgIhANZNN1hchX4uGxHmSl8gKA8IeeXMQwqUqbS5r8Fa3L9C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":128803},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"ba47ba86ba869ba9ee4d49979af92c58477cecbd","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.22_1774504236627_0.5865505203252295","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.23":{"name":"@86d-app/registry","version":"0.0.23","license":"MIT","_id":"@86d-app/registry@0.0.23","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"84f46e6e079ad82856c2051f4e456521d8035b7c","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.23.tgz","fileCount":57,"integrity":"sha512-yVcW/3F2TejSgr5jjuof5oNLyT31fhr6RzqZM5kwFhfcuNhfL7cT+TGZeOh3Isqd9lHbSRKfnPGLtqvjxAXRuA==","signatures":[{"sig":"MEYCIQCXs89gkUtzvhcrUSUUavUWekFycMBazx1dxozIoKxr6AIhAMjx1EFvYIMnbaDOgSkW0uX7agKjVaJ85WOsWV3rqZQL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":128803},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"1a80305846d65bdb194b811a4f79c03f385114f0","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.23_1774560150808_0.5838886015949776","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.24":{"name":"@86d-app/registry","version":"0.0.24","license":"MIT","_id":"@86d-app/registry@0.0.24","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"f5656b75183f2800bc3fe44d02a9d547222ca6bc","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.24.tgz","fileCount":40,"integrity":"sha512-VMUlLClmgb2FnPG3b/AXA/HNoPqES1P6yEoKT0UeWbYMAsc+mEMqVIcJN+3puyPwV/7VEBzbJsrV853sitNg+Q==","signatures":[{"sig":"MEYCIQDnzW28AX74a5p+iKc9RCCTYJro2cFz2j4p0oEMIOYb9AIhAMQPMh6Gpwo1S9jgOEnDDp19nQpkdxUll0om2a93Essc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":199727},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"781b2eb7e83903eceee7559748fe706138124f08","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.24_1774725197108_0.5979870619657885","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.25":{"name":"@86d-app/registry","version":"0.0.25","license":"MIT","_id":"@86d-app/registry@0.0.25","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"7b6e850c63044a7efe8a986e64289b972f62b2c2","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.25.tgz","fileCount":40,"integrity":"sha512-X83tXdis9uZhOI7jNKpBPCIESf4RIr7UEWHG6ILqMhktFV04hN7un8Qfb74bA7RgTSm2wXd5mAd/4JHWJX8KAw==","signatures":[{"sig":"MEQCIGpchOOItkt8FdOntD23vGZ9dmAo8Au8wooxzSPdyDCuAiAhJ9hn6H2G2cy0cXPGHW2mHIrSv0NfJT9laMXeg3HbHw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":199727},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"6da9da75345973fe138293ec82890b20fc013bf9","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.25_1774769839927_0.14031443707564062","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.26":{"name":"@86d-app/registry","version":"0.0.26","license":"MIT","_id":"@86d-app/registry@0.0.26","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"a16989790d9624a9c23337761fd378fea65a3687","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.26.tgz","fileCount":40,"integrity":"sha512-ZS2qow2/jLflV6zZzYSmEqytLPp/gyTt5dFGMlNMd6uXDGNOLeHMqzQruIY0Sl/J8eTU/dLDQkCww6UntLNCJg==","signatures":[{"sig":"MEYCIQD9wCqPzS9zJsMbTacUNxyK+zVbV13gON15xe8cHJTJqAIhAIndfDzqcu+y05d9sNrO8sQREravAbUWtFY/PhTRf0iM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":199736},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"a9d6a9717bd3672f6a910a48c115d8868efee771","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write --unsafe src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.26_1776108612923_0.7017930705050606","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.30":{"name":"@86d-app/registry","version":"0.0.30","license":"MIT","_id":"@86d-app/registry@0.0.30","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"0cbaa5438a80099bd0a24e6bc782a28a14dbf0b0","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.30.tgz","fileCount":40,"integrity":"sha512-AVgDBUv9k8Dq7iPNUw5QbNvHhVMYLQLx/HeynQ6ndh6KY3m/VA9Z/mh2gXS316uEqxwpZrr+QGf/8JSl/y0EUw==","signatures":[{"sig":"MEQCIDgk7vdPIn0lk4U597ntKkVe1gSqs45S439kzMviHKvuAiBHvY0OHqT379RimwMJ+M/EFudRuxEfrxa3FWF+2XkU8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":201185},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"f5c3606cdb3fd160b7cda8b1375e0aa40aec6b12","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write --unsafe src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.30_1777436262760_0.6322652737472441","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.40":{"name":"@86d-app/registry","version":"0.0.40","license":"MIT","_id":"@86d-app/registry@0.0.40","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"b8a2bcf0782a27faa76d8dfe2ecabba59cfa444e","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.40.tgz","fileCount":40,"integrity":"sha512-WcV14Omj0nw8qImS+yZec8JY+ulgiPrQeoyfd1fNU/W6S/cPRui+16REq6LWvkkFB5R6MOXX66WM+3RyCyqTnQ==","signatures":[{"sig":"MEUCIF2osmQKYip4/9mtjcaMSGD28PQQPPYjhfkUJP4yFEn7AiEA4r5YPd/Nf8v0da2I4GdZEmy1SCZElrIuOTJX5SdF2I4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.40","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":201185},"type":"module","exports":{".":{"types":"./src/index.ts","default":"./src/index.ts"}},"gitHead":"6e9d474bb954ff69396fa50d9847089a8c35c429","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write --unsafe src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"imsanchez","email":"isaiah@mymx.io"},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.11.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"25.8.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.40_1779074512299_0.6361795531824719","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.41":{"name":"@86d-app/registry","version":"0.0.41","license":"MIT","_id":"@86d-app/registry@0.0.41","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"9f1945a758b514be7b7a7c43a2833e169c9246f5","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.41.tgz","fileCount":54,"integrity":"sha512-AXjRafiiUhT563Dv5VV5e4apsmG2XCS6QaVur6DesLcitJ8FMSSpvTi4QisYz3F9fSEUop6BVOp3NPGuhhHBqg==","signatures":[{"sig":"MEUCIQCM0DSC9Ipyw6Swr9BoG+Gqy0SgumlDYWRwYtNEnHgvBAIgdGJmzPnnLTmzyoAHgUo2y+yhBX7CCL5AUr+lIwxebsE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.41","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":272988},"type":"module","exports":{"./paths":{"types":"./src/paths.ts","default":"./src/paths.ts"},"./types":{"types":"./src/types.ts","default":"./src/types.ts"},"./config":{"types":"./src/config.ts","default":"./src/config.ts"},"./fetcher":{"types":"./src/fetcher.ts","default":"./src/fetcher.ts"},"./lockfile":{"types":"./src/lockfile.ts","default":"./src/lockfile.ts"},"./manifest":{"types":"./src/manifest.ts","default":"./src/manifest.ts"},"./maturity":{"types":"./src/maturity.ts","default":"./src/maturity.ts"},"./resolver":{"types":"./src/resolver.ts","default":"./src/resolver.ts"},"./template":{"types":"./src/template.ts","default":"./src/template.ts"},"./admission":{"types":"./src/admission.ts","default":"./src/admission.ts"},"./integrity":{"types":"./src/integrity.ts","default":"./src/integrity.ts"},"./specifier":{"types":"./src/specifier.ts","default":"./src/specifier.ts"}},"gitHead":"53717ffe8c6e036317f4c7ecb8c5bb2ecb6b525e","scripts":{"test":"vitest run","build":"tsc","check":"biome check src","check:fix":"biome check --write --unsafe src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f84c2ffe-cb61-4910-a9d2-a1907d231179"}},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.19.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"26.7.0","dependencies":{"zod":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"catalog:vite","typescript":"catalog:","@types/node":"catalog:node","@biomejs/biome":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.41_1787344275158_0.5515693019679893","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"0.0.42":{"name":"@86d-app/registry","version":"0.0.42","license":"MIT","_id":"@86d-app/registry@0.0.42","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"homepage":"https://github.com/86d-app/86d#readme","bugs":{"url":"https://github.com/86d-app/86d/issues"},"dist":{"shasum":"fd9958e7cf8996f6716ccf67ca0a9863f0d87875","tarball":"https://registry.npmjs.org/@86d-app/registry/-/registry-0.0.42.tgz","fileCount":38,"integrity":"sha512-uNJtxEL4OX7Uf1KFenTsaIPT1k39NEEf9l2QcflIKh74wiHsNXyQxE6wpk28nC1QUoRsY+vWKqVWRISYu7hOfA==","signatures":[{"sig":"MEYCIQC/hZTaxohUJgagM52Xj/+4Ntn6fTO0U0ttfqKb5+hIkgIhALv6DDd64iUXvCyKeMjoVEhORQzbJJeqpt60T7zRbasa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@86d-app%2fregistry@0.0.42","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":107869},"type":"module","exports":{"./paths":{"types":"./dist/paths.d.ts","default":"./dist/paths.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./fetcher":{"types":"./dist/fetcher.d.ts","default":"./dist/fetcher.js"},"./lockfile":{"types":"./dist/lockfile.d.ts","default":"./dist/lockfile.js"},"./manifest":{"types":"./dist/manifest.d.ts","default":"./dist/manifest.js"},"./maturity":{"types":"./dist/maturity.d.ts","default":"./dist/maturity.js"},"./resolver":{"types":"./dist/resolver.d.ts","default":"./dist/resolver.js"},"./template":{"types":"./dist/template.d.ts","default":"./dist/template.js"},"./admission":{"types":"./dist/admission.d.ts","default":"./dist/admission.js"},"./integrity":{"types":"./dist/integrity.d.ts","default":"./dist/integrity.js"},"./specifier":{"types":"./dist/specifier.d.ts","default":"./dist/specifier.js"}},"gitHead":"60613a46cc5d3493d1083c4a80cae458f23dd0e1","scripts":{"test":"vitest run","build":"tsc && bun ../../internals/generators/src/copy-package-assets.ts","check":"biome check src","check:fix":"biome check --write --unsafe src","typecheck":"tsc --noEmit --emitDeclarationOnly false","test:watch":"vitest watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f84c2ffe-cb61-4910-a9d2-a1907d231179"}},"repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"_npmVersion":"11.19.0","description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","directories":{},"_nodeVersion":"26.7.0","dependencies":{"zod":"4.4.3"},"publishConfig":{"access":"public","exports":{"./paths":{"types":"./dist/paths.d.ts","default":"./dist/paths.js"},"./types":{"types":"./dist/types.d.ts","default":"./dist/types.js"},"./config":{"types":"./dist/config.d.ts","default":"./dist/config.js"},"./fetcher":{"types":"./dist/fetcher.d.ts","default":"./dist/fetcher.js"},"./lockfile":{"types":"./dist/lockfile.d.ts","default":"./dist/lockfile.js"},"./manifest":{"types":"./dist/manifest.d.ts","default":"./dist/manifest.js"},"./maturity":{"types":"./dist/maturity.d.ts","default":"./dist/maturity.js"},"./resolver":{"types":"./dist/resolver.d.ts","default":"./dist/resolver.js"},"./template":{"types":"./dist/template.d.ts","default":"./dist/template.js"},"./admission":{"types":"./dist/admission.d.ts","default":"./dist/admission.js"},"./integrity":{"types":"./dist/integrity.d.ts","default":"./dist/integrity.js"},"./specifier":{"types":"./dist/specifier.d.ts","default":"./dist/specifier.js"}}},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/registry_0.0.42_1787371899259_0.5843753429000116","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."}},"time":{"created":"2026-03-24T18:44:22.587Z","modified":"2026-09-10T04:10:48.611Z","0.0.17":"2026-03-24T18:44:22.859Z","0.0.18":"2026-03-24T19:24:21.955Z","0.0.19":"2026-03-24T19:58:30.195Z","0.0.21":"2026-03-24T20:10:06.028Z","0.0.22":"2026-03-26T05:50:36.766Z","0.0.23":"2026-03-26T21:22:30.950Z","0.0.24":"2026-03-28T19:13:17.258Z","0.0.25":"2026-03-29T07:37:20.062Z","0.0.26":"2026-04-13T19:30:13.073Z","0.0.30":"2026-04-29T04:17:42.991Z","0.0.40":"2026-05-18T03:21:52.444Z","0.0.41":"2026-08-21T20:31:15.299Z","0.0.42":"2026-08-22T04:11:39.486Z"},"bugs":{"url":"https://github.com/86d-app/86d/issues"},"license":"MIT","homepage":"https://github.com/86d-app/86d#readme","repository":{"url":"git+https://github.com/86d-app/86d.git","type":"git","directory":"packages/registry"},"description":"Module registry for 86d — resolve, fetch, and cache modules from local, GitHub, or npm sources","maintainers":[{"name":"imsanchez","email":"isaiah@mymx.io"}],"readme":"<p align=\"center\">\n  <a href=\"https://86d.app\">\n    <img src=\"https://86d.app/icon\" height=\"96\" alt=\"86d\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  The Modern Foundation for Commerce\n</p>\n\n<p align=\"center\">\n  <a href=\"https://x.com/86d_app\"><strong>X</strong></a> ·\n  <a href=\"https://www.linkedin.com/company/86d\"><strong>LinkedIn</strong></a>\n</p>\n<br/>\n\n> [!WARNING]\n> This project is under active development and is not ready for production use. Please proceed with caution. Use at your own risk. \n\n# @86d-app/registry\n\nGit-based module registry for the 86d commerce platform. Enables modules to be sourced from local workspace directories, GitHub repositories, or npm packages.\n\n## Overview\n\nThe registry provides the module resolution layer for 86d stores. When a store's `config.json` lists modules, the registry determines where each module lives and how to fetch it.\n\n**Key features:**\n- Resolve modules and templates from local workspace, GitHub repos, or npm\n- Generate and consume `registry.json` manifests with integrity verification\n- Discover available modules with `\"*\"` without auto-enabling Experimental entries\n- **Lock file** (`apps/registry/registry.lock.json`) for reproducible builds with `--frozen` CI support\n- **Circular dependency detection** — throws on cycles with descriptive error messages\n- Template resolution — fetch store templates from GitHub or npm\n- Graceful handling of missing modules/templates with warnings\n- Retry with exponential backoff for transient network failures\n\n## Usage\n\n### Module Specifiers\n\nModules can be referenced in `config.json` using several formats:\n\n```json\n{\n  \"modules\": \"*\"\n}\n```\n\nOr with explicit module references:\n\n```json\n{\n  \"modules\": [\n    \"products\",\n    \"@86d-app/cart\",\n    \"github:owner/repo/modules/custom-module\",\n    \"github:owner/repo/modules/loyalty#v2.0\",\n    \"npm:@acme/commerce-module\",\n    \"npm:@acme/commerce-module@^1.0.0\"\n  ],\n  \"advanced\": {\n    \"version\": 1,\n    \"allowExperimentalModules\": true\n  }\n}\n```\n\nUse the `advanced` block only when every selected Experimental Module is intentional. The resolver treats entries without maturity evidence as Experimental.\n\n| Format | Source | Description |\n|---|---|---|\n| `products` | local/registry | Official module by short name |\n| `@86d-app/products` | local/registry | Official module by full package name |\n| `github:owner/repo/path` | GitHub | Module from a GitHub repository subpath |\n| `github:owner/repo/path#ref` | GitHub | GitHub module at a specific branch/tag |\n| `npm:@scope/package` | npm | Module from npm registry |\n| `npm:@scope/package@version` | npm | npm module with version constraint |\n\n### Resolving Modules\n\n```ts\nimport { resolveModules, readStoreConfig } from \"@86d-app/registry\";\n\nconst config = readStoreConfig(\"templates/brisa/config.json\");\nconst resolved = await resolveModules(config, {\n  root: \"/path/to/project\",\n});\n\nfor (const mod of resolved) {\n  console.log(mod.specifier.name, mod.status, mod.localPath);\n}\n```\n\n### Building the Registry Manifest\n\n```ts\nimport { buildManifest } from \"@86d-app/registry\";\n\nconst manifest = buildManifest(\"/path/to/project\", {\n  baseUrl: \"https://github.com/86d-app/86d\",\n  defaultRef: \"main\",\n});\n// manifest.modules contains all discovered modules with metadata\n```\n\n### Fetching Remote Modules\n\n```ts\nimport { fetchModule, parseSpecifier } from \"@86d-app/registry\";\n\nconst spec = parseSpecifier(\"github:owner/repo/modules/loyalty\");\nconst result = await fetchModule(spec, \"/path/to/project\");\n\nif (result.success) {\n  console.log(`Installed to: ${result.localPath}`);\n}\n```\n\n## CLI Integration\n\nThe registry integrates with the 86d CLI:\n\n```sh\n# Add a module from the registry (auto-installs required dependencies)\n86d module add products\n\n# Add from GitHub\n86d module add github:owner/repo/modules/loyalty\n\n# Add from npm\n86d module add npm:@acme/commerce-module\n\n# Check for module updates (compares local vs registry versions/integrity)\n86d module update\n86d module update cart\n\n# Search the registry\n86d module search shipping\n\n# Generate registry manifest\n86d generate registry\n```\n\nWhen adding a module, the CLI automatically resolves and installs any required dependencies (declared via the `requires` field in the registry manifest).\n\n## Config Format\n\nThe store's `config.json` supports these registry-related fields:\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `modules` | `\"*\" \\| string[]` | `\"*\"` | Explicit Module specifiers or wildcard discovery |\n| `advanced` | `{ version: 1, allowExperimentalModules?: boolean }` | None | Versioned opt-in for explicitly named Experimental Modules |\n| `template` | `string` | — | Template specifier (local name, GitHub, or npm) |\n| `registry` | `string` | GitHub raw URL | Custom registry manifest URL |\n| `moduleOptions` | `Record<string, object>` | `{}` | Per-module configuration |\n\n### Module maturity and admission\n\nThe resolver applies maturity rules before code generation:\n\n- Stable Modules resolve through ordinary explicit selection or wildcard discovery\n- Experimental Modules must be named in `modules` and require `advanced.version: 1` with `allowExperimentalModules: true`\n- Deprecated Modules return an error that directs you to their transition path\n- Unknown names return a missing result with guidance to check the specifier or use a GitHub or npm source\n\nAn omitted `modules` field behaves like `\"*\"`. Neither form can enable Experimental Modules, even when the advanced flag is present.\n\n### Resolving Templates\n\n```ts\nimport { resolveTemplate, fetchTemplate } from \"@86d-app/registry\";\n\n// Resolve from local, registry, GitHub, or npm\nconst result = resolveTemplate(\"brisa\", \"/path/to/project\", manifest);\n\nif (result.status === \"missing\") {\n  const fetched = await fetchTemplate(result.specifier, \"/path/to/project\", manifest);\n}\n```\n\nTemplate specifiers use the same formats as modules:\n- `\"brisa\"` — local template in `templates/`\n- `\"github:owner/repo/templates/custom\"` — from GitHub\n- `\"npm:@acme/store-template\"` — from npm\n\n## Registry Manifest\n\nThe `apps/registry/registry.json` file indexes all available modules and templates:\n\n```json\n{\n  \"version\": 1,\n  \"baseUrl\": \"https://github.com/86d-app/86d\",\n  \"defaultRef\": \"main\",\n  \"modules\": {\n    \"products\": {\n      \"name\": \"@86d-app/products\",\n      \"description\": \"Product catalog management\",\n      \"version\": \"0.0.4\",\n      \"category\": \"catalog\",\n      \"path\": \"modules/products\",\n      \"requires\": [],\n      \"hasStoreComponents\": true,\n      \"hasAdminComponents\": true,\n      \"hasStorePages\": true,\n      \"integrity\": \"sha256-...\"\n    }\n  },\n  \"templates\": {\n    \"brisa\": {\n      \"name\": \"brisa\",\n      \"description\": \"86d Starter Kit\",\n      \"version\": \"0.0.1\",\n      \"path\": \"templates/brisa\"\n    }\n  }\n}\n```\n\nGenerate it with:\n\n```sh\nbun run generate:registry\n```\n\n## API Reference\n\n### `parseSpecifier(raw: string): ModuleSpecifier`\nParse a module specifier string into a structured object with source type, name, and metadata.\n\n### `resolveModules(config, options): Promise<ResolvedModule[]>`\nResolve a store config's module list into concrete entries with status (`found`, `missing`, `error`).\n\n### `evaluateModuleAdmission(input): ModuleAdmissionDecision`\nApply selection and maturity rules to one resolved or generated Module. Import it from `@86d-app/registry/admission` when a runtime needs the same fail-closed decision as the resolver.\n\n### `fetchModule(spec, root, manifest?): Promise<FetchResult>`\nDownload a module from its remote source (GitHub tarball or npm) and install it locally.\n\n### `buildManifest(root, options?): RegistryManifest`\nScan the `modules/` directory and build a registry manifest with full metadata for each module.\n\n### `readStoreConfig(path): StoreConfig`\nRead and parse a store's `config.json` file.\n\n### `getModuleDependencies(name, manifest): string[]`\nGet the full transitive dependency list for a module, topologically sorted (dependencies before dependents). Throws if a circular dependency is detected.\n\n### `detectCircularDependencies(manifest): string[]`\nScan all modules in a manifest for circular dependencies. Returns an array of cycle descriptions (e.g., `\"a → b → c → a\"`). Returns empty array if no cycles exist.\n\n### `generateLockfile(resolved, root): Lockfile`\nGenerate a lock file from resolved modules, capturing source, version, integrity hash, and location.\n\n### `writeLockfile(root, lockfile): void`\nWrite the lock file to `apps/registry/registry.lock.json`.\n\n### `readLockfile(root): Lockfile | undefined`\nRead the lock file from the project root. Returns undefined if not found or invalid.\n\n### `verifyLockfile(lockfile, resolved): LockfileDiff`\nCompare a lock file against current resolved modules. Returns `{ added, removed, changed }`.\n\n### `isLockfileSatisfied(diff): boolean`\nReturns true if the diff has no added, removed, or changed modules.\n\n### `getLocalModuleNames(root): string[]`\nGet sorted list of all locally available module names.\n\n### `resolveTemplate(spec, root, manifest?): ResolvedTemplate`\nResolve a template specifier to a local directory, checking local templates first then registry.\n\n### `fetchTemplate(spec, root, manifest?): Promise<FetchResult>`\nDownload a template from GitHub or npm and install it into `templates/`.\n\n### `getLocalTemplateNames(root): string[]`\nGet sorted list of all locally available template names.\n\n### `readTemplateConfig(path): Record<string, unknown> | undefined`\nRead a template's `config.json` contents.\n\n### `computeIntegrity(modulePath): string | undefined`\nCompute SHA-256 integrity hash for a module's `package.json`.\n\n## Buildtime Integration\n\nThe registry is used at buildtime by `internals/generators/src/generate-modules.ts`:\n\n1. Reads `config.json` and resolves all module specifiers\n2. For missing modules (registry/GitHub/npm), fetches them automatically\n3. Generates the store's import files in `apps/store/generated/`\n\nThis means `bun run generate:modules` pulls missing admitted Modules before generating code. Modules that fail resolution, admission, or fetching are skipped with warnings.\n\n## Lock File\n\nThe `apps/registry/registry.lock.json` file captures the exact resolved state of all modules for reproducible builds. It is generated automatically by `bun run generate:modules`.\n\n```json\n{\n  \"lockfileVersion\": 1,\n  \"generatedAt\": \"2026-03-12T18:00:00.000Z\",\n  \"modules\": {\n    \"products\": {\n      \"source\": \"local\",\n      \"packageName\": \"@86d-app/products\",\n      \"version\": \"0.0.4\",\n      \"integrity\": \"sha256-...\",\n      \"localPath\": \"modules/products\"\n    }\n  }\n}\n```\n\n### Frozen Installs (CI)\n\nUse `--frozen` to fail if the lock file is outdated:\n\n```sh\nbun run generate:modules -- --frozen\n```\n\nThis ensures CI builds use the exact same module resolution as the developer who last generated the lock file.\n\n## Circular Dependency Detection\n\nThe registry detects circular dependencies in the module dependency graph and throws descriptive errors:\n\n```\nCircular dependency detected: cart → checkout → orders → cart\n```\n\nThis runs automatically during `generate:modules` and will fail the build if cycles are found.\n\n## Notes\n\n- When `modules` is `\"*\"` or omitted, all local workspace modules are included\n- GitHub fetching uses the tarball API; `tar` must be available on the system\n- Set `GITHUB_TOKEN` environment variable for private repos or to avoid rate limits\n- npm modules are installed to `node_modules/` via `bun add` (falls back to `npm install`)\n- The resolver always checks local workspace first before attempting remote sources\n","readmeFilename":"README.md"}