{"_id":"@aperovn/funnel-cli","_rev":"10-801c89ffdbe4fb8a5a0455729540fd3f","name":"@aperovn/funnel-cli","dist-tags":{"latest":"0.3.2"},"versions":{"0.1.0":{"name":"@aperovn/funnel-cli","version":"0.1.0","_id":"@aperovn/funnel-cli@0.1.0","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"726f53b3558e73b50927ccf3027a7f9f207b34bf","tarball":"https://registry.npmjs.org/@aperovn/funnel-cli/-/funnel-cli-0.1.0.tgz","fileCount":13,"integrity":"sha512-bpUW9s355nF55HmFGfXywZVBxpmf8VkvWrOQow4PCI7r1Xw40AzaM2zFHsdnJVoDon0hTrBcmhrPW/2XXVYEQQ==","signatures":[{"sig":"MEUCIEtrAwqt4qrsaGB8Y2YyxaCm+DxsMy+Cs0X/RL0iAU/jAiEA0N9bVMuXlVPFWKPCYQRhYb0ue7XvXLVlKYf3vpWmxR0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":112738},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"8bee94181edb4fa8bbde5571dd2d8448c364563e","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/funnel-cli_0.1.0_1778063809419_0.6614128563644792","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aperovn/funnel-cli","version":"0.2.0","_id":"@aperovn/funnel-cli@0.2.0","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"0603b29115730153d924af1e4555d201bbcb8649","tarball":"https://registry.npmjs.org/@aperovn/funnel-cli/-/funnel-cli-0.2.0.tgz","fileCount":13,"integrity":"sha512-WQCLw0y8pd+Iig7vYTFBOniSrlLx8ipEmlQncBQr9vWtRKCL57yJGLkcZdkLTbAraUhu01SDhA6NIInWAGmgEA==","signatures":[{"sig":"MEYCIQCu/L3vIBzhCSQnfuO6DL61vBcbuWjYc6LzKJWXcEvpmQIhALXyyb4m30zzZZSRTfaXo7+p7OHlibTS32+opJh/n0jk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110779},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"8bee94181edb4fa8bbde5571dd2d8448c364563e","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/funnel-cli_0.2.0_1778084255593_0.48523295091998664","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@aperovn/funnel-cli","version":"0.2.1","_id":"@aperovn/funnel-cli@0.2.1","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"51e06909641d5ca9e285a1b0a6edde2d86b5944d","tarball":"https://registry.npmjs.org/@aperovn/funnel-cli/-/funnel-cli-0.2.1.tgz","fileCount":13,"integrity":"sha512-ycz2WFXo4++BTotKF9QUgZOm6GtFvLJ4z9neF5Ie+q/9DG4i/Be7Zl7FzVsP3aqw+p2EUPMmKKGamgb6pfhkEw==","signatures":[{"sig":"MEQCIHV5UkInd2U9OKx6OIYC9zsynHiA4xWJtZ0eLffM63cgAiAOvjFXIzSVXEpe9h5biW3mBQI4GzH7ZyZ/ErAzjJL18w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110795},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"494ad285ccdc690e4023c51af0a24f5936967c39","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/funnel-cli_0.2.1_1778087571919_0.37743906871024513","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@aperovn/funnel-cli","version":"0.2.2","_id":"@aperovn/funnel-cli@0.2.2","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"2220f44ba316ee21642b24a29ba1c14b95af1f95","tarball":"https://registry.npmjs.org/@aperovn/funnel-cli/-/funnel-cli-0.2.2.tgz","fileCount":13,"integrity":"sha512-yZG72EufNKGALD1NIZl1okxz8UNBdP3NWAo8hHmCjYgWZL8YTKYYZH5z2M/wGQrPtMiTxmP1K37RXPwSV0AXhw==","signatures":[{"sig":"MEUCIQCNGllE8kjKA2QHRCYb4kResCKDhXNBAXv6gP9QKGD1nAIgFNASidD/DwhPNGbJ3dpAmpDk7oBKyhVX9QLrY4gC1mU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110795},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"494ad285ccdc690e4023c51af0a24f5936967c39","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/funnel-cli_0.2.2_1778087853188_0.8845916313371076","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@aperovn/funnel-cli","version":"0.2.3","_id":"@aperovn/funnel-cli@0.2.3","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"711c42dec403125319f5b8aa0a63fae3cde4fa0e","tarball":"https://registry.npmjs.org/@aperovn/funnel-cli/-/funnel-cli-0.2.3.tgz","fileCount":13,"integrity":"sha512-vU25X2U+9KBdkVsM3AWwyR1E+5PhxnD/d64grNI9EHH6ARk8mlLciLhzBkzYe9JWC4wvmbyo+DPmXU47DXFILA==","signatures":[{"sig":"MEUCIF4UN4KhSORdFp7tPuFI/5lpKU0T8BmRjD+P6vJz/wlzAiEAp0r30D8YvT6wAPivLrB63g2rt4cpoNpQ320CzhFcEic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110795},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"494ad285ccdc690e4023c51af0a24f5936967c39","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/funnel-cli_0.2.3_1778088072881_0.23883817597024537","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@aperovn/funnel-cli","version":"0.2.4","_id":"@aperovn/funnel-cli@0.2.4","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"0c6c5cce1b16adc2c1c918b72456c4366b9d808d","tarball":"https://registry.npmjs.org/@aperovn/funnel-cli/-/funnel-cli-0.2.4.tgz","fileCount":13,"integrity":"sha512-hClz+Q/AGSuSQgKQvn/A4YZC6nJsQAtCTtGVchB2yn3CbHvcTiykVT17MzxeJjuuKKrRlr4o2EkiawK5F2qOHg==","signatures":[{"sig":"MEUCIQDNfI7ybUR99szx7k1uuYzp7ejKOkkz1LNUcYw+PbE4WgIgMevs67WxgmkWW21FWe8JTi6GSkh+C+kXBvDGdCVPC50=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111216},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"494ad285ccdc690e4023c51af0a24f5936967c39","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/funnel-cli_0.2.4_1778088201668_0.5375411122533027","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@aperovn/funnel-cli","version":"0.2.5","_id":"@aperovn/funnel-cli@0.2.5","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"0049e22d766b3917904ab4b4a501ed4edc6e16c7","tarball":"https://registry.npmjs.org/@aperovn/funnel-cli/-/funnel-cli-0.2.5.tgz","fileCount":13,"integrity":"sha512-wTNyptlknuMTRvbylmZW1gv/QyCPHRIevTiHapllmprmqjGqYJfQh340h8aqgNQb/V/FWnxDQtyxBh/d8wDx6w==","signatures":[{"sig":"MEUCIQCD3R3R89bdbYcTlA+6shEPvpxcTJd8mf2ztbiSEGYESQIgdn2j64sFi4VNE5nSMU+fpW8ZXm//7lWN5I7qHla+LSc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111270},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"494ad285ccdc690e4023c51af0a24f5936967c39","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/funnel-cli_0.2.5_1778088484853_0.31956316007042296","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@aperovn/funnel-cli","version":"0.2.6","_id":"@aperovn/funnel-cli@0.2.6","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"283276d1ede5e62e255ec984ba6c042449c32188","tarball":"https://registry.npmjs.org/@aperovn/funnel-cli/-/funnel-cli-0.2.6.tgz","fileCount":15,"integrity":"sha512-ENoBvHNuXBytADKrdgZ0/iK+7jPH+yXFTlCdbssO/KXRKwBspWoPkOEvTyw+JP6rDexQznnoZVkXMmF9jKJM1w==","signatures":[{"sig":"MEUCIQDs/sz0XwN2kOsd0QYGC0OMQ29zWa1Kx1FMjbi6Q2i8zwIgfUZ3ZP8H9do7/dwJy7neZAEnLA0OK+tRLmflWND4dUI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219656},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"gitHead":"11542db988b2e1ab0dfda0e6ddfaab7165e9b499","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/funnel-cli_0.2.6_1778225848626_0.3905478436952168","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@aperovn/funnel-cli","version":"0.3.1","_id":"@aperovn/funnel-cli@0.3.1","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"bin":{"aperofunnel":"dist/index.js"},"dist":{"shasum":"a2dbe07d512211e98b73cc146e4458ee21deb22e","tarball":"https://registry.npmjs.org/@aperovn/funnel-cli/-/funnel-cli-0.3.1.tgz","fileCount":25,"integrity":"sha512-dxpnS8ktrtlYyC86p9ybOTRka1+F/Ffr7bEVBQOYOhrXoBqld0n1DRQyQeiNyseGdANepgAGN/o6ifPcbYBXWQ==","signatures":[{"sig":"MEUCIQD8rQ8JgJf2oQrYAz27WY0rU9rnTJBLlcjNojJ1iFe+ZgIgEb8g3QsQLI/vMBOjA6CiJT/J9mKMYVo8JQ0LEmccbco=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":196747},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepack":"chmod +x dist/index.js","typecheck":"tsc --noEmit","sync:skill":"bash scripts/sync-skill.sh","prepublishOnly":"bun run build && bun run sync:skill"},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"_npmVersion":"11.8.0","description":"CLI tool for deploying AperoFunnel projects","directories":{},"_nodeVersion":"24.13.1","dependencies":{"ora":"^8.1.0","tar":"^7.4.0","zod":"^3.23.0","glob":"^11.0.0","chalk":"^5.3.0","commander":"^12.1.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.0","@types/tar":"^6.1.13","typescript":"^5.6.0","@types/node":"^22.0.0","@repo/config":"workspace:*"},"_npmOperationalInternal":{"tmp":"tmp/funnel-cli_0.3.1_1778570893752_0.39948329661206494","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@aperovn/funnel-cli","version":"0.3.2","description":"CLI tool for deploying AperoFunnel projects","main":"./dist/index.js","bin":{"aperofunnel":"dist/index.js"},"exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","test":"bun test","sync:skill":"bash scripts/sync-skill.sh","prepack":"chmod +x dist/index.js","prepublishOnly":"bun run build && bun run sync:skill"},"dependencies":{"commander":"^12.1.0","chalk":"^5.3.0","ora":"^8.1.0","glob":"^11.0.0","tar":"^7.4.0","zod":"^3.23.0","node-fetch":"^3.3.2","formdata-node":"^6.0.3"},"devDependencies":{"@repo/config":"workspace:*","@types/node":"^22.0.0","tsup":"^8.3.0","typescript":"^5.6.0","@types/tar":"^6.1.13"},"publishConfig":{"access":"public"},"engines":{"node":">=18.0.0"},"gitHead":"8ddcf9f967c6f21a6ca581e9820587c2aa1b5d2d","types":"./dist/index.d.ts","_id":"@aperovn/funnel-cli@0.3.2","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-6wZUFXIqpt98awmpK+htLY4gYA1w1IUOrvENfaqhLhG7Jt7+qET0st7RZEhIbATrT1OZjLGPkZPlCMO/q9mbiA==","shasum":"6c00947c802dc1910b08887aa8dbd6f63634c0f0","tarball":"https://registry.npmjs.org/@aperovn/funnel-cli/-/funnel-cli-0.3.2.tgz","fileCount":66,"unpackedSize":537407,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCnHr6qFRELYzuKiRlbbGH8b6pS1VUc+yJKiEpCnTTApQIgJUAAjIjyl79s1TTMJYj7GiamTMyXLhVhgqNkMKHt9cI="}]},"_npmUser":{"name":"coderhanoi","email":"longlehoang2013@gmail.com"},"directories":{},"maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/funnel-cli_0.3.2_1780665723645_0.9041248791832059"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-06T10:36:49.277Z","modified":"2026-06-05T13:22:04.243Z","0.1.0":"2026-05-06T10:36:49.562Z","0.2.0":"2026-05-06T16:17:35.739Z","0.2.1":"2026-05-06T17:12:52.065Z","0.2.2":"2026-05-06T17:17:33.340Z","0.2.3":"2026-05-06T17:21:13.086Z","0.2.4":"2026-05-06T17:23:21.822Z","0.2.5":"2026-05-06T17:28:04.996Z","0.2.6":"2026-05-08T07:37:28.771Z","0.3.1":"2026-05-12T07:28:13.886Z","0.3.2":"2026-06-05T13:22:04.133Z"},"description":"CLI tool for deploying AperoFunnel projects","maintainers":[{"name":"coderhanoi","email":"longlehoang2013@gmail.com"}],"readme":"# @aperovn/funnel-cli\n\nCLI tool for deploying AperoFunnel projects.\n\n## Installation\n\n```bash\nnpm install -g @aperovn/funnel-cli\n# or\nbun install -g @aperovn/funnel-cli\n```\n\n## Commands\n\n### `aperofunnel config`\n\nManage CLI configuration. **Run `config set-url` once before `login`.**\n\n```bash\naperofunnel config set-url <url>   # Persist API base URL\naperofunnel config show            # Print current URL + auth status\naperofunnel config clear --force   # Remove config file\n```\n\n- `set-url` validates the URL, probes `${url}/health` (3s timeout, warn-only), and writes to `~/.aperofunnel/config.json`.\n- `show` never prints the API key — only whether one is set.\n- All other commands fail fast if the URL is not configured.\n\n### `aperofunnel login`\n\nAuthenticate with AperoFunnel API. Requires `config set-url` to have been run first.\n\n```bash\naperofunnel login\n```\n\n- Prompts for API key (starts with `af_`)\n- Validates key against the configured API URL\n- Stores in `~/.aperofunnel/config.json`\n\n### `aperofunnel init [name]`\n\nInitialize a new AperoFunnel project.\n\n```bash\naperofunnel init [name] [--use-npm]\n```\n\n- Creates Next.js project with `@aperovn/funnel-sdk` preconfigured\n- Sets up `aperofunnel.json` config file\n- Installs dependencies (uses bun by default, `--use-npm` to use npm)\n- **Bundles a Claude Code skill** at `.claude/skills/apero-funnel/` — see [AI Integration](#ai-integration)\n\n### `aperofunnel deploy`\n\nDeploy funnel to AperoFunnel platform.\n\n```bash\naperofunnel deploy [--skip-scan]\n```\n\n**Pipeline:**\n1. Read `aperofunnel.json` config\n2. Validate `@aperovn/funnel-sdk` in dependencies\n3. Check Node.js version\n4. Run security scan (npm audit or socket-cli)\n5. Build Next.js static export\n6. Check bundle budget (250KB JS / 500KB total)\n7. Create tar.gz bundle\n8. Sign manifest (SHA256 + HMAC-SHA256)\n9. Upload to API\n10. Print draft URL + version ID\n\n**Exit conditions:**\n- Critical vulnerabilities found (use `--skip-scan` to bypass, not recommended)\n- Build fails\n- Bundle budget exceeded\n\n### `aperofunnel publish <version-id>`\n\nPublish a draft version to live.\n\n```bash\naperofunnel publish <version-id>\n```\n\n### `aperofunnel rollback <version-id>`\n\nRollback to a previous version.\n\n```bash\naperofunnel rollback <version-id>\n```\n\n### `aperofunnel list`\n\nList all versions of the funnel.\n\n```bash\naperofunnel list\n```\n\nShows version ID, status (draft/live/archived), creation date, and bundle sizes.\n\n## Configuration\n\n### `aperofunnel.json`\n\nRequired in project root:\n\n```json\n{\n  \"funnelId\": \"fn_xxx\",\n  \"buildDir\": \"out\",\n  \"budget\": {\n    \"maxJsKb\": 250,\n    \"maxTotalKb\": 500\n  }\n}\n```\n\n- `funnelId`: Funnel ID from dashboard (workspaceId resolved automatically at deploy time)\n- `buildDir`: Next.js export output directory (default: `out`)\n- `budget.maxJsKb`: Maximum JS bundle size in KB\n- `budget.maxTotalKb`: Maximum total bundle size in KB\n\n## AI Integration\n\nProjects scaffolded via `aperofunnel init` ship with a Claude Code skill at\n`.claude/skills/apero-funnel/`. The skill teaches Claude how to use the CLI\nand `@aperovn/funnel-sdk` accurately — commands, component props, and patterns\nstraight from the published versions.\n\n**How it works:**\n\n- Claude Code auto-discovers the skill on session start\n- `SKILL.md` is a decision matrix routing common asks (build a quiz, wire up\n  Stripe checkout, add session tracking) to detailed reference docs under\n  `references/`\n- Version-stamped at scaffold time to match the bundled CLI + SDK\n\n**Other AI tools:** Point Cursor / Aider / Copilot at\n`.claude/skills/apero-funnel/SKILL.md` — it's a single-file entry point with\nrelative links to detail docs.\n\n**Updating the skill:** The bundled copy is frozen at scaffold time. To pull\nnewer guidance, scaffold a fresh project with the latest CLI and copy\n`.claude/skills/apero-funnel/` over your existing project.\n\n## Migrating from 0.2.x\n\nThe `--api-url` flag was removed in `0.3.0`. Set the API URL once with `config set-url` instead:\n\n```bash\n# Before (0.2.x)\naperofunnel login --api-url https://app.example.com\n\n# After (0.3.0+)\naperofunnel config set-url https://app.example.com\naperofunnel login\n```\n\nCI scripts must invoke `config set-url` before any other command. The location can be overridden via `APEROFUNNEL_CONFIG_DIR` for sandboxed environments.\n\n## Security\n\n- API keys stored in `~/.aperofunnel/config.json` (OS keychain integration planned)\n- Manifest signature proves scan ran on dev's machine\n- Build output (static HTML/JS/CSS) uploaded, not source code\n- Socket.dev/npm audit results uploaded for verification\n\n## Requirements\n\n- Node.js >= 18.0.0\n- Next.js project with `output: 'export'` in `next.config.js`\n- `@aperovn/funnel-sdk` in dependencies\n\n## Development\n\n```bash\n# Install dependencies\nbun install\n\n# Build\nbun run build\n\n# Type check\nbun run typecheck\n\n# Test locally (from package dir)\nnode dist/index.js --help\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}