{"_id":"frontend-harness","_rev":"38-073478e2930d436a396dbd286640d975","name":"frontend-harness","dist-tags":{"latest":"0.8.5"},"versions":{"0.1.0":{"name":"frontend-harness","version":"0.1.0","_id":"frontend-harness@0.1.0","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"b5bd5992ccde3234643dd9834efc76b2dcb4bc37","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.1.0.tgz","fileCount":77,"integrity":"sha512-7not95n4UiqZKB3edJnoo15VeHhKeIA4fFBrO3NdxGs0RGtjT2WZGY1SA8j0Jx4RUAxOT9+OImiGgqN+uNA3Qw==","signatures":[{"sig":"MEUCIDK+Vjzs78O13cjpxXAeq0kEXXGGVkDpki1FkkY+E+IxAiEA+xeBlyQQqFdok7JJl21kSJx4xQb05hmYQLizRfkdzhE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":356540},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"ccbb89a75601f3b6f2b6e97fc5cb890d1b6e28a9","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"rm -rf dist","verify":"npm test && npm run typecheck && npm run build && npm run smoke:phase9","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit","smoke:phase9":"node scripts/smoke-phase9.mjs"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.1.0_1779098487099_0.36302915441176964","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"frontend-harness","version":"0.2.0","_id":"frontend-harness@0.2.0","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"604214afdc8f23e3504182ae75c9bf3973f853f4","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.2.0.tgz","fileCount":101,"integrity":"sha512-3T4zxNkMeJZRfEmJhxTNb0fK4pXwKpp2Ux2HyctPWDauC1EqSIkx0T/KBgvbzfF1ijj6nq0lk9l7f4sgHNgExA==","signatures":[{"sig":"MEUCIErYrt6Xx8pDLFhlvHhWJE+y+63XcYQNZW7t6RJolgc3AiEAmqUuicl70iclaOlC3SpU5m0Emup69C2fHff17rSTOYg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":464310},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"9faccf3ff2b484c9102178b10b44f9a1fa5ea442","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.2.0_1779179186922_0.9482164147696208","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"frontend-harness","version":"0.2.1","_id":"frontend-harness@0.2.1","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"1cdc4e7ebe4bf91881890edb3a217a216abf28e6","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.2.1.tgz","fileCount":107,"integrity":"sha512-VQHDk0yX7tf6lg1WEdLNm0T1uwHbWu0YW6gprzkQVszshAISz3sZeq6OxtWUoV49PC+8dZDzhkI/It1UB5N6Aw==","signatures":[{"sig":"MEQCIACNfBKdIWKEXKwjFkLDGa6niiYuvA2ykHD1WwJlY+wAAiA8CPxxyjNcod7VJhePUhs7mOi3y6ZKxkZoBjdugmHhFw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":566465},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"fb7a39d5b2bf89365ca5d6623600854b09a2b0d5","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.2.1_1779252035839_0.1575836779165558","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"frontend-harness","version":"0.2.2","_id":"frontend-harness@0.2.2","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"5c6be0d485f8e2817960521bfff300d9b78bd027","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.2.2.tgz","fileCount":107,"integrity":"sha512-PQnk7qT14ZSVdsomt+ATUb/Vm9AmVc5qcD1NsNKNf49IXJiEmZOLaolC741Z53fifqMAxgfnuPJpL7nuIi70Mg==","signatures":[{"sig":"MEUCIBoD0bcnKPLnfdEbV4e2ZufMYmCM2q9YWF6Q01tPScE9AiEA4SLDMPx5VaHaSzuGqiyAtAyTPoOnfXvJC9KbF3oyN08=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":567136},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"fb7a39d5b2bf89365ca5d6623600854b09a2b0d5","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.2.2_1779254281112_0.8519054211526484","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"frontend-harness","version":"0.2.3","_id":"frontend-harness@0.2.3","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"091ad5155c79edf4f0f8ad91d1ff46abce46cfde","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.2.3.tgz","fileCount":107,"integrity":"sha512-yZBRnTD1Z/eQhc29/4t4+clzCl484LFmmpC+revBqNSYVUE1F1472Er2CB+EUk3Vpn8YhJerJvixcgRlnGVElg==","signatures":[{"sig":"MEUCIQCVFEEGP+WmoACz6H0fRdlkjR0H66W/+kGtL2pANMEl6wIgAz+f+HMVOjTKVkveyrD0Wc9Cc6DSNmxgdJo7nUK5MLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":568157},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"863772dfd0562b8af8e7c41d97f4a433570677b2","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.2.3_1779256180083_0.18163475654827943","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"frontend-harness","version":"0.3.0","_id":"frontend-harness@0.3.0","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"4fd1e7848986062f517b9c32378a3710087eabcc","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.3.0.tgz","fileCount":105,"integrity":"sha512-uJeNdjax1m7kUg3IDDwD+/Zl7Eri5zaT3MvBBlxv6rYBNghIs+G8uW8u+soT+0Gh4o/QAjxLkW2ZB2k6rjsoEA==","signatures":[{"sig":"MEYCIQCpHwySOwyYRFK5edIJ00pG4O0HKkUES4QUz1m/fapRlQIhAL/tOeXeW6uWDIAvhnteMw//zUkLoRcLrDjDL73QSJlR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":597138},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"b1d7540e48295abbb9d427a2b5f163cb61e4f642","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.3.0_1779265629512_0.9276753955614356","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"frontend-harness","version":"0.3.1","_id":"frontend-harness@0.3.1","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"e00b95a1f769dfcdf11f6122e20f9d725ea1d2ff","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.3.1.tgz","fileCount":87,"integrity":"sha512-Tyfi8IHHhLcdCTwML6tO54noa7Tb/Mget0ErE0Hel278+2ngIVEF4KtLySRN9Yayco8H9R2VBS9YCYDKA4iA7Q==","signatures":[{"sig":"MEQCIEGgGuG5tMlnuptFt0bqHiYy9Ja/+IAHxKob7MJWdcOrAiBvx4Ep4gLGsWAJ/tTG1g2S1I7y2ysPDqK0QsW5zF9CnQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":568715},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"1fc16e62faa0eb78088e1bba035acd29d6226aef","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.3.1_1779269463460_0.5767710502250305","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"frontend-harness","version":"0.3.2","_id":"frontend-harness@0.3.2","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"fa7c4e987a24e9ed1a4b74635eaac0355d65b00a","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.3.2.tgz","fileCount":110,"integrity":"sha512-LqZgWnwfzVGXoTU1RW8InRM2l+q7jTdAETzPgAHtQxtTROQBRnn0yIAuu90QwFdAA0W/KrcO6FrzYhRMFyL25w==","signatures":[{"sig":"MEUCIFt0Ik+dRxtXQyGGdKedS+4ZZRPzn41LvzkQfOpFJ/E/AiEA4m0SGyPYv3IPyCP+eZZ+w8iU0CC0tkGryLiWEFt1jao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":623947},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"02f0befc258b864cf5872613a5a5ee4618c77165","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.3.2_1779270205235_0.39426845660899046","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"frontend-harness","version":"0.3.3","_id":"frontend-harness@0.3.3","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"cf6852aa4379e4c1c6cba0e8ac61a7f4720bdce0","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.3.3.tgz","fileCount":110,"integrity":"sha512-qlUn+Nvqe58rJYudLvO1iLdhTovCAdtQy34I9Jb1Vd2YpNs7hvIuyQhKkVxV8pWWhQS6yy1e6aBStBiJ9ocnVw==","signatures":[{"sig":"MEQCIGAIttwgiVe5gUlabNtpmKN+WG2iXS76HPpqdrEMPb5ZAiAM8xlkGER+kpBdOmjtnzs5fs78mewGI7wTVet5+YviMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":628176},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"1e0b2454968e0579a298adf2f2e2110b9b2eac33","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.3.3_1779342076095_0.6162182943650136","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"frontend-harness","version":"0.3.4","_id":"frontend-harness@0.3.4","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"7009abc75b9c15b0a9b19ffffb7d64ccfcdf0027","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.3.4.tgz","fileCount":110,"integrity":"sha512-yN7KiakBSjs9IfWTZyqtURrg0f9Xyxh0wm9x5JJRGOhakIsgtOmEg65FvwvfLgSLKFiYrvMty6jv4E1cBbeFGw==","signatures":[{"sig":"MEQCIDKAZHXGbFu/xU1AjayhHpmSaaIB65ROVr2WriG+gPXXAiAf8e2YOWHT0vFieJjm0DRCpXg1efgTR/jgIUWAbgPNqw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":632950},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"1e277455e8dd9084bd7ffefa3debdd308254994d","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.3.4_1779346096877_0.43122647658787105","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"frontend-harness","version":"0.3.5","_id":"frontend-harness@0.3.5","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"2974b97fdd4cd5a544584560c4c24e53f2c35738","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.3.5.tgz","fileCount":110,"integrity":"sha512-sVLFjMP204RwMxoxu/lpXazX/gp79SgjIASvUKwU3wXcxTTJu56o4uOw+My03rzeSvNJGI09MhNxVGWRu94atw==","signatures":[{"sig":"MEUCIBl/+S6euew6tB3uql+vRz0KdRNBQVjfgFa69H1SnNQyAiEA5SX1sA1o351oIV1M/Jz5iSpThweWPfP3gVzN67PBxF0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":647784},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"ff82df8fc6ea49a16a981278afb00414b1ecfca5","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.3.5_1779348915314_0.9145393485864923","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"frontend-harness","version":"0.3.6","_id":"frontend-harness@0.3.6","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"7923ff663f4b7b1b0496b5d916f4f23a50388d10","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.3.6.tgz","fileCount":110,"integrity":"sha512-sSvbFqJ0kmZFYMkNp2k28pmAulabybaBePhfcyosu6KXZFWjMc3Cn3nNroiSuL/QfG7MYJmEmbPdWxJNlVy+kg==","signatures":[{"sig":"MEYCIQD+Pk+VpaOqQcwbUSQ8jam1MPpNoOYrg08t5DskBNsZ5wIhAIr6WsRvM4UmJwPVCWX6oVmw6l479r7wjr8G6i2Jlhrt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":652621},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"80642b3503e2422b1fee0132b669f8334196945e","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.3.6_1779356032439_0.4542877726528711","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"frontend-harness","version":"0.3.7","_id":"frontend-harness@0.3.7","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"0bbe6c47837ec0d99f187549e49b73e95d4c8c62","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.3.7.tgz","fileCount":110,"integrity":"sha512-RXofhe5S1yRecOgnRN7uY8w4qjjeuFmMc0FZyAXOO9HvJcUG4xtm8I6JEqdBHDPlV8kOHqE3diYgK0jSSZSBFA==","signatures":[{"sig":"MEQCIDSZgQOtxlpDRjO0wl39giE3KhjTzhccqTmutX019Pr+AiBwiQKaZLlC96f+0dtqMwX8MLA+cMBcRF6z28f9eeo2+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":660902},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"e3e63b0e1fa41cc00ee70e98f4a1fe2b1debe350","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.3.7_1779357777630_0.5231643392331162","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"frontend-harness","version":"0.3.8","_id":"frontend-harness@0.3.8","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"5b84751d9c0dc1b9abb44507f1f9dc0ec1ad96db","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.3.8.tgz","fileCount":110,"integrity":"sha512-l8wd1+xrI7rm+mRwkl88a2cTx62W+vjhvge59sZgXqgXeBshXJ8h6uTwHpdDP9VDLYtf4fvJ+VK1QATLORp/RA==","signatures":[{"sig":"MEQCIFowvxec5HhYMBAxtpfi0EwCbaxfROSla/mmCMS3BZnuAiAilW/fLY9++BnVU75YlFJL5P0CJRIGmtKQkK9EvHEZnA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":675670},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"55c5db863d6662db33a55022dba8af4977dee5ee","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.3.8_1779411380775_0.20631249448751388","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"frontend-harness","version":"0.4.0","_id":"frontend-harness@0.4.0","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"7f7efe6d930d5b8da58375e7b9741c67e9577cef","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.4.0.tgz","fileCount":110,"integrity":"sha512-YUUFxDJxaynROjmlsly1dWyPNyHfa0Q9U9Q612Ywy+61Fx6pdB6l5mkVs/ljQID1bb/eqUHxrFJtro+PAheARg==","signatures":[{"sig":"MEYCIQCJAHwZkYs4Zng9OKdYH26EQEzpkUAukpPE+rdHsZaEEQIhALMAy4rYrxLXofqZf2cQGwRRxAc/qvB/TXuDTgUNqub6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":684267},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"8a11b95f54a1d9156c24aadc83f0895d4819a920","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.4.0_1779418764574_0.019249571017202705","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"frontend-harness","version":"0.4.1","_id":"frontend-harness@0.4.1","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"1ed840d452ff0274e4c0152da76bc4f01b3d45b0","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.4.1.tgz","fileCount":110,"integrity":"sha512-PRYMG5XrqpXNwnsISfxgScE/R5/qToJJhByTqNHDN230TNAQ4LxevFfDcexHh1WtQaA4MfcaqzTilnuJ2xgBEQ==","signatures":[{"sig":"MEUCIQCrX/ybu2+qBKGHrdmUmMKfdltcbNKl7IOW4rJbVzUxjgIgJ7GrVIvEC3SppdDfxmQ1w37qAbWf1+BR+Y48BqAXlck=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":690737},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"f754d7bcfda1fd94f2dcc47a7319dd0cb7ce7dc1","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.4.1_1779435263429_0.6349574542523335","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"frontend-harness","version":"0.4.2","_id":"frontend-harness@0.4.2","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"3ef9665cbaad059660f48baf8792e4b16831f9b9","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.4.2.tgz","fileCount":110,"integrity":"sha512-01eGftVjlwiKLTR999EcIrVEGuEoNJ6qUrMudz+Ui9cLkBaNSpXCgfQzWKlANyKAn8V3rekYXe9k45/ZXGAYvQ==","signatures":[{"sig":"MEYCIQDbIxQdfI1Ca6uHu72hw2Y6GA3Jb8GQvytOxYHEUsqTUQIhAOdSCtJebnLvHK2pEa0UXrvqad6THG+mNP+MxckM5cer","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":697298},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"f754d7bcfda1fd94f2dcc47a7319dd0cb7ce7dc1","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.4.2_1779441567468_0.919828911274857","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"frontend-harness","version":"0.5.0","_id":"frontend-harness@0.5.0","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"8cb728d82349f3b7facded18a5ab4e0c70016644","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.5.0.tgz","fileCount":110,"integrity":"sha512-9kcv/C681PN1OXN541AEPTmSzVkbCzQAt78xbc9DrY0eHr+ZKF7yjoB7fyJCGcW6go+V+S/nb3/RIm2t6K0UuQ==","signatures":[{"sig":"MEQCIAUSJkeZCT1jnKoW97hA5cIDc9jeNy3+lcpCKIxalwxgAiAT5a2RGFvqTf/aDX1aXNnXXOFTyBOOKAWJBmks5wLaGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":704536},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"229b5ceb2e6b092e4f59f2eb9248096e9c39e555","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.5.0_1779444538965_0.3473549267806231","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"frontend-harness","version":"0.6.0","_id":"frontend-harness@0.6.0","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"e49eac34ceb479b036f140374d34faef3f2a406c","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.6.0.tgz","fileCount":110,"integrity":"sha512-UXS8yyoWSaihFIrS5feaZHZ4VBf5O1mhihpDD+5eJAvzaqpS4Egbtz5D0Ovg8DXZPXydPJR5+JbCqYsSTNR+RA==","signatures":[{"sig":"MEQCIGW75Qv4zkT5VMtYw/tvWzjM1ZtiQqxMNuTMABE1rbTMAiBaKa/LxJoSgTbxcL+RXrguwIPahUGnAFLOwfCD6k+elA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":727880},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"10c8ea21a147af0f61d8f38ea92d8bfdb9e6eb3b","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.6.0_1779500458475_0.31951949863551166","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"frontend-harness","version":"0.6.1","_id":"frontend-harness@0.6.1","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"ab6eb2f342e63d7531ab747152c5adf0ebab99fd","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.6.1.tgz","fileCount":110,"integrity":"sha512-+iGzPbHfYkBXaeBUqa/xRI9PDdVTy0mrmKSuuOAAUX9MziNFJdpoiakoaP2YfbldNUyvF+foTCJpueSRCjOUIQ==","signatures":[{"sig":"MEQCIFlmQNxYFmy/G6fiqEdlTuLBGnBHk4NuUK+v4HabpRq0AiBKe6QPvJmZ78kVXaJ444Xo+aBcF36G+gHecO31W2Sc3A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":756922},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"4351f6c9b533ea83e3dcb6bceadcf5c2a7687dbb","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.6.1_1779508082505_0.7963990645766921","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"frontend-harness","version":"0.6.2","_id":"frontend-harness@0.6.2","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"0dbc9e73090d78e761cad2a8ba782c9cf6108842","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.6.2.tgz","fileCount":110,"integrity":"sha512-gGuBDBYE3Zoye3r8RAGa9SI0z25lz7FVCZx9SGDCqqg+0Xr5P56I1sE29dkpZx/UiehrkBTlNJ5O7rgEwBuUeQ==","signatures":[{"sig":"MEYCIQDIcM/DzjsJxOJRVJ3hZ3CUWQTBF3TrHdpcHFXOY5XmxQIhAPOsMMrv7rGDZlPH/VZxwbWwurYl80Lb4VXPxejtcBQf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":762116},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"17e1cad673cc02013ad3ffa621f0d3cc4ab75c29","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.6.2_1779513774949_0.020273933677292355","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"frontend-harness","version":"0.6.3","_id":"frontend-harness@0.6.3","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"c2bb6d75b46c95b8f2a2e596d6bdf3ac6fd238d1","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.6.3.tgz","fileCount":110,"integrity":"sha512-s75hLHa272dNuM4LTpgoi6888GbTRZ/JH6GOupZq6TNEnHiIhAyw98wwCA1ZQVSrDAISNeMjJaE0qNStcFcv4g==","signatures":[{"sig":"MEUCIG+yoDFdBFBLQAJ1mm0DfLEnD9XgruxZPLBqT99JUvRIAiEA14JDfijBBwW05kPdwGhyiamatEQqGDu0AXEiO7boeQ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":775014},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"4045abaab6be956511016522d31fec64a491c9b2","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.6.3_1779526803943_0.20304576789522932","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"frontend-harness","version":"0.6.4","_id":"frontend-harness@0.6.4","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"1db234c701d8afa3a1c380ad4064c2219ba1e2ec","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.6.4.tgz","fileCount":137,"integrity":"sha512-DkAFmJkVblRqxVqQzfPPRR/ErbMo78qC/nq4A0tl/zjyNd1yQWaYVchZoFON7ogq72UoaMAho/+1x7GdLBtnZA==","signatures":[{"sig":"MEUCIQDNYze9zpbjs9cVJxVtPKdstY0AVhE7ouf+5eLd9smLMwIgbeYWEq/IrEgYCaapTB22Z1YQ+9rTsViKGv+dyQlNFjs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":770236},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"d88808dbc2588b47f0933a74d732aac1b0c144f9","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.6.4_1779530191559_0.9606694699769072","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"frontend-harness","version":"0.6.5","_id":"frontend-harness@0.6.5","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"900f22eb601573537c0b8573fcf66cdb416c82a2","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.6.5.tgz","fileCount":137,"integrity":"sha512-+7CVYsKMsKGx3yOT8zmBCEEdV/6yH4szqcOGMZV2P7JFuZyT+4MN+68GVVn2jNfoWi3KT4uH4zjgi6VQqTJyjA==","signatures":[{"sig":"MEUCIQDY67mF3W22rMjLWMwo5oRmLGAStuOina6y1CTTrtidpAIgHxxOpk+UlqI51B+4CJStvwaWH2sfCwXD5DqAstu1s3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":772437},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"b3b6c16de2de662f7b8066172a544afbe73c4781","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.6.5_1779678573920_0.1991044885513491","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"frontend-harness","version":"0.7.0","_id":"frontend-harness@0.7.0","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"09ccdf820184c84118a12550a64ee1ac76964b7f","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.7.0.tgz","fileCount":137,"integrity":"sha512-UhZX4BuJ6NgwY+k5TtnFqP5bLDDGiRjSOYLKHy9U0s0jkWpGQXenH3kTeaG1FVMIBn2Hz3pEMB9Zkg5PeCtTGQ==","signatures":[{"sig":"MEUCIQCry6YLEIJuCOComuf07r1UZ4zaSc/uikELse2ivKEa0AIgNHS5zfvJH0gfr+BjTic7cJxSDBCtV/LLsUqclPW+OAU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":799965},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"f76afe0c8b49604e9804978a2c4d095939256c77","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.7.0_1779687065392_0.05460127428473327","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"frontend-harness","version":"0.7.4","_id":"frontend-harness@0.7.4","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"f00dfd7d9ed588240c957009a745025c31d39ef7","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.7.4.tgz","fileCount":140,"integrity":"sha512-0MNxuucWyDuz/kqwtABnwgpOlHQX4U3kM5F5Cn8FwPJuIFyNeQ/v/Rztc61XXq8nfiVFunYRNRo3Dxi35NvMaA==","signatures":[{"sig":"MEUCIE6zHM1a0icD3kPrqXw34qbJEZRUYQUR6bh09ky4sl0kAiEAx5fg6Lsy/16O2idDwSuykCzYzCRvvZdhh/60KEStEOM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":857577},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"9b2fe8f6de0e909af3c852ba63857ea6cd6eaafc","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.7.4_1779693749721_0.22451811527764565","host":"s3://npm-registry-packages-npm-production"}},"0.7.5":{"name":"frontend-harness","version":"0.7.5","_id":"frontend-harness@0.7.5","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"95d655a63b25e81861c58f36042337c1ed332aca","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.7.5.tgz","fileCount":140,"integrity":"sha512-gcMC8S3HQff6YWbLB99H91dCxXhFxv1sFmzrbimv7bc6PZy0kuD/4IjaZOaguftAMaPMF9+ax2DpPxKASsRICg==","signatures":[{"sig":"MEQCIA2cXKp3dHdpeo0EAxhQCxEdBFPFR9IdFemS0r+v3r2JAiBrUnvXEag/OlaP7qmxa+O/qpWOVSYyrwV66lW4B2Je+g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":861613},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"59b52d53a8ab3eddc2c10361febb732caa08c898","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.7.5_1779698138213_0.7133550235213859","host":"s3://npm-registry-packages-npm-production"}},"0.7.6":{"name":"frontend-harness","version":"0.7.6","_id":"frontend-harness@0.7.6","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"8ce75bcf56752f3b2af70284f635aef14175ea7a","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.7.6.tgz","fileCount":143,"integrity":"sha512-zPThlPHsnn+GsHLz2ggvwUHwaTFgzmdO7MRyBN/1HWPDI6dLPfnsDoUvZwkwzJLYFgSFXC30Ze/hhIuXB+nGtw==","signatures":[{"sig":"MEUCIA7YI2NI/AhJt7B/UerxG2JowHeuG0VhCGJAL0fVqG/ZAiEAmsNXGBL/oUw1YZp4jmO7awrTfPFIuZxoUtxZKNeyjTM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":870431},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"0918393d0f618554eb9dc5b66197c013700256a4","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.7.6_1779701589641_0.8153151776829306","host":"s3://npm-registry-packages-npm-production"}},"0.7.7":{"name":"frontend-harness","version":"0.7.7","_id":"frontend-harness@0.7.7","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"301bb92d8c22cb5565a56dbd5f8ef0d68436bc87","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.7.7.tgz","fileCount":146,"integrity":"sha512-/NFiAi63DVHGr9AFDipKG8zJ3p1IAegLSQ6daTtiqD5adyiZuyV2owmRPV0+z+s76EKLCKtJ/QhcFpQ3ns4CiA==","signatures":[{"sig":"MEUCIDH2jfICXro+tOUowMWgX96zUeVcFV9d8+en35i6UkUIAiEAlDXjeixxHuqBFkqWtrjRNrd7ZY8Ts3pNt+JXACFuGn0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":879485},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"7de04073433b528544d8d9f2ae404c94cc91abdd","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.7.7_1779765128631_0.19541324695360163","host":"s3://npm-registry-packages-npm-production"}},"0.7.8":{"name":"frontend-harness","version":"0.7.8","_id":"frontend-harness@0.7.8","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"5e68e5e2984b0f9b738f905cc6ebb7884b81ccee","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.7.8.tgz","fileCount":146,"integrity":"sha512-IhVCryy7LnIev0hJtGqKlslgjGG+ia32u9RgIdr6FfaMTdYs75OrkTloMen/QzYndHzEfhm4n5wYwoFwcvPOTA==","signatures":[{"sig":"MEUCIEbXDGeXd/Bcx/s3PSFoSCOTSyDR/GmJRXVNbMRgFUGZAiEA5YN7KaWUaNcsF6cl2mESYKognVR+koGpsctOn5H3wlI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":881919},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"e54f56c3b4e660c0c6535a596c053a7e30060968","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.7.8_1779777965327_0.7718392362823918","host":"s3://npm-registry-packages-npm-production"}},"0.7.9":{"name":"frontend-harness","version":"0.7.9","_id":"frontend-harness@0.7.9","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"e4e7e91fde37b6d8e2341a4138c873bab5587928","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.7.9.tgz","fileCount":146,"integrity":"sha512-NloX7J2nXaRaAyES8RZ7o4ZXRLU9mdrS2yRqVTW+tG5d32TeWR2uO9ILjWUw0xxWLYbjED48M4iuvB/xEuBHyw==","signatures":[{"sig":"MEQCIG4cGuNpdxUUM6RIYymhvrtOK7zO8MzhlBpOLAVD1oi6AiBBTq100QFBqhaxIzmBnTZ7ACntJ/PzI8SQrv452tAx8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":882378},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"d3224a624e2989b179fda9b18641ebf12ad1b43e","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.7.9_1779789571379_0.7887097437439798","host":"s3://npm-registry-packages-npm-production"}},"0.7.10":{"name":"frontend-harness","version":"0.7.10","_id":"frontend-harness@0.7.10","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"4d33a2eb3f8ff3bc3e6ca17948d9ccc5749d86f1","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.7.10.tgz","fileCount":155,"integrity":"sha512-BCmhdjbgcFpnUE7G5hleNl6ORSQMRGlAxeXHzpifWK0qf5GmbUQU/Cf0iD5+tNigmBcuI0mWQVd6u5FNpAHuFA==","signatures":[{"sig":"MEUCIDPz3eT+CrjN8b2EvmKm57hUgEDCi61wXwxXkDUUMjptAiEA1HZHDOaee/zh98IAcBwpj/4K8REJTFySwl5PLoxPG9k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":989133},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"0ee27d3f328c15ecf794f1a1c8ffe1ee2ed1bb96","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is an Execution Policy Layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.7.10_1780041402714_0.6683803212098947","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"frontend-harness","version":"0.8.0","_id":"frontend-harness@0.8.0","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"51a7d1fe3e391723d5a3f47d4732d4a93fcc3790","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.8.0.tgz","fileCount":164,"integrity":"sha512-4toXxOIa4CA35uKz5bEPc4oFkUF0r9Q9fq8xTCVhMUb7mgeag0p6SrLM4fmZecX0JEgl4Is+Y1nRJrTYfzx8eQ==","signatures":[{"sig":"MEYCIQDpF7NHT0ob6eCFahZKV5uZmFPnt93INTt+/G0JJ0ytEAIhAKM2GyQJJ8NMsH7o8P2PXcmM1kKPKnYi7hLINeiGE6Cj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1262916},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"a985a41f16042df9dc084697729105b5db7192d9","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is a context and evidence policy layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.8.0_1780453653701_0.32573276333188694","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"frontend-harness","version":"0.8.1","_id":"frontend-harness@0.8.1","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"b61b7de302f02d3a74d00072aa2f886776db2c79","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.8.1.tgz","fileCount":164,"integrity":"sha512-X8aDJgQq8/QVJHmM54U+7Gh067JRB5c04TbDcWOS57pTHmp1FFDIVFbgPySs1VnPicluHpRjs1qiMs+g49uEmA==","signatures":[{"sig":"MEUCIDn6xFQtntiucadSuKEQ/DpEFSRtNndTVzUNT786wHiLAiEAqpJVNjZbgevSVCa1kx9gvmjivPwIjFcc4bQ+LY1AIfc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1288068},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"d4c28817fa76101ee00195b75bd0172a2a9cc142","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is a context and evidence policy layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.8.1_1780458226863_0.019853063161649143","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"frontend-harness","version":"0.8.2","_id":"frontend-harness@0.8.2","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"2d0a0b9d1713f07b8a649cb36ff07a5fedc78423","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.8.2.tgz","fileCount":164,"integrity":"sha512-zeT9pHg53AyRNu/3AjO/Wk121HCjrnFYCfZDKN08AjjomdNVYUNm+WaHUenzguu9amdqJMAKGgG1gBwsZvu4Wg==","signatures":[{"sig":"MEUCIQDKw98F6iVzNAD9KoR+62FsJKg7Q4XhW18wwyn2Bg1nQQIgOVoM9/ezOWsnNseQzVjDeKr0HRLJuFf2HtKFte/EBAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1291466},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"60c2e7180d88c4f398124f7bdab6ccd934e7e837","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is a context and evidence policy layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.8.2_1780464745821_0.060238895135770854","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"frontend-harness","version":"0.8.3","_id":"frontend-harness@0.8.3","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"fbdb3758cc0916a9f9b251804dd4ee92f05aca29","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.8.3.tgz","fileCount":164,"integrity":"sha512-ocyJdAts1xTg96iD41VWCwuMCtxvDVquQzaoxDwesHHrci+q5T9gO2+K5NskqiwnSthV73At0z9CQF5h34NJ+Q==","signatures":[{"sig":"MEYCIQCDSylYsiN7tgkwC0BvSN54TNpGkRw4f7L0TDfhU+dWtAIhALa9apjhPl2s3E18Qu8FdST/CPsM3avfWRVJKp8ovGFd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1291838},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"9f8ba8319d4ae8a21216fc709ddccf23a7540787","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is a context and evidence policy layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.8.3_1780467317438_0.8318839166237324","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"frontend-harness","version":"0.8.4","_id":"frontend-harness@0.8.4","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"bin":{"frontend-harness":"dist/cli/index.js"},"dist":{"shasum":"8178a4bffbcd7ff451cd95e8359a1c100e6307ae","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.8.4.tgz","fileCount":164,"integrity":"sha512-hl2P47ytS3gGsuGsoFZENK3/B358ZqkbJ2iT89sM3bgz3hVYUXp7qagI5/2+oz7JWP2224SP2ukI3BTAMBQslA==","signatures":[{"sig":"MEUCIDUl+UhObIJmaEj+8HO0PVZJrPfrlXh+XzxvBaJLWQ3cAiEA1c1WaVAtLYXFQkvtDi0jOOhJbZZWgBLNRvBslYRCX/4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1295319},"type":"module","engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"gitHead":"b022af48a23b893accdf7c27ce3de0e4703e688b","scripts":{"test":"npm run build && node --test tests/*.test.mjs","build":"npm run clean && tsc","clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","verify":"npm test && npm run typecheck && npm run build","harness":"node dist/cli/index.js","prepare":"npm run build","typecheck":"tsc --noEmit"},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"_npmVersion":"10.9.4","description":"`frontend-harness` is a context and evidence policy layer for frontend teams using Codex or Claude Code.","directories":{},"_nodeVersion":"22.21.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.7.0","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/frontend-harness_0.8.4_1780473300457_0.35168357925856664","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"frontend-harness","version":"0.8.5","type":"module","bin":{"frontend-harness":"dist/cli/index.js"},"engines":{"node":">=20"},"exports":{".":"./dist/cli/index.js"},"scripts":{"clean":"node -e \"fs.rmSync('dist', { recursive: true, force: true })\"","build":"npm run clean && tsc","harness":"node dist/cli/index.js","prepare":"npm run build","verify":"npm test && npm run typecheck && npm run build","typecheck":"tsc --noEmit","test":"npm run build && node --test tests/*.test.mjs"},"devDependencies":{"@types/node":"^22.10.0","typescript":"^5.7.0"},"_id":"frontend-harness@0.8.5","gitHead":"292f15cb28db74677bc4fcdea7167e3818f505e4","description":"`frontend-harness` is a context and evidence policy layer for frontend teams using Codex or Claude Code.","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-Hel56S+QxlHL6HAyIloz7QX3xnyfIqS9eSAJ3TXHZ7t9zPeNS07pBzbnWACjBz/sT2M9ZMQA3rNNQvaXqZm6zQ==","shasum":"9454ed2b046a76249fa68a1b4faf6e959429039f","tarball":"https://registry.npmjs.org/frontend-harness/-/frontend-harness-0.8.5.tgz","fileCount":164,"unpackedSize":1288567,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDNJ2nXkvIyCNEGc85Xb68pzhf94PMDroJkcPyeg4LpmAIgPOhLXSiABU35+2KzzuUNH9WoULuKEgfSujdOXokwIA0="}]},"_npmUser":{"name":"qq1766141548","email":"18346665316@163.com"},"directories":{},"maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/frontend-harness_0.8.5_1780477896338_0.6812329526008138"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-18T10:01:27.098Z","modified":"2026-06-03T09:11:36.685Z","0.1.0":"2026-05-18T10:01:27.253Z","0.2.0":"2026-05-19T08:26:27.103Z","0.2.1":"2026-05-20T04:40:36.033Z","0.2.2":"2026-05-20T05:18:01.269Z","0.2.3":"2026-05-20T05:49:40.241Z","0.3.0":"2026-05-20T08:27:09.665Z","0.3.1":"2026-05-20T09:31:03.624Z","0.3.2":"2026-05-20T09:43:25.394Z","0.3.3":"2026-05-21T05:41:16.268Z","0.3.4":"2026-05-21T06:48:17.013Z","0.3.5":"2026-05-21T07:35:15.507Z","0.3.6":"2026-05-21T09:33:52.590Z","0.3.7":"2026-05-21T10:02:57.812Z","0.3.8":"2026-05-22T00:56:20.978Z","0.4.0":"2026-05-22T02:59:24.803Z","0.4.1":"2026-05-22T07:34:23.597Z","0.4.2":"2026-05-22T09:19:27.688Z","0.5.0":"2026-05-22T10:08:59.150Z","0.6.0":"2026-05-23T01:40:58.663Z","0.6.1":"2026-05-23T03:48:02.729Z","0.6.2":"2026-05-23T05:22:55.204Z","0.6.3":"2026-05-23T09:00:04.123Z","0.6.4":"2026-05-23T09:56:31.701Z","0.6.5":"2026-05-25T03:09:34.064Z","0.7.0":"2026-05-25T05:31:05.618Z","0.7.4":"2026-05-25T07:22:29.881Z","0.7.5":"2026-05-25T08:35:38.397Z","0.7.6":"2026-05-25T09:33:09.837Z","0.7.7":"2026-05-26T03:12:08.956Z","0.7.8":"2026-05-26T06:46:05.538Z","0.7.9":"2026-05-26T09:59:31.536Z","0.7.10":"2026-05-29T07:56:42.869Z","0.8.0":"2026-06-03T02:27:33.841Z","0.8.1":"2026-06-03T03:43:47.059Z","0.8.2":"2026-06-03T05:32:26.041Z","0.8.3":"2026-06-03T06:15:17.660Z","0.8.4":"2026-06-03T07:55:00.625Z","0.8.5":"2026-06-03T09:11:36.574Z"},"description":"`frontend-harness` is a context and evidence policy layer for frontend teams using Codex or Claude Code.","maintainers":[{"name":"qq1766141548","email":"18346665316@163.com"}],"readme":"# frontend-harness\n\n`frontend-harness` is a context and evidence policy layer for frontend teams using Codex or Claude Code.\n\nIt does not replace the agent runtime. Codex and Claude Code already provide the loop, tool execution, context handling, permissions, retries, subagents, and skill loading. `frontend-harness` adds the project-level rules those agents should follow inside a frontend repository.\n\nThe product goal is simple:\n\n```text\ninstall once -> inject AGENTS.md / CLAUDE.md -> work normally with AI\n```\n\nAfter initialization, team members should not need to manually run a heavy harness workflow for every task. They keep asking Codex or Claude Code for frontend work in plain language. The injected project protocol tells the agent when to use the full context, planning, evidence, and repair loop, and when ordinary task guidance is enough.\n\n## What It Does\n\n`frontend-harness` gives complex frontend tasks a deterministic execution contract:\n\n```text\ncontext -> plan -> implement -> record changes -> verify -> repair -> done\n```\n\nThe full loop is intended for work where source material, evidence, or durable verification matters: design-backed UI restoration, PRD-derived product knowledge, multi-source frontend changes, and handoffs that need validated artifacts. Simple bug fixes, tests, docs, maintenance, and small requirement edits should stay lightweight unless the task includes explicit PRD, API, UI, or audit evidence.\n\nThe CLI exists mainly as a protocol API for AI agents. Humans use it to install, initialize, and occasionally check health.\n\n## What It Is Not\n\n`frontend-harness` is not another agent platform.\n\nIt should not rebuild:\n\n- agent loops\n- generic tool execution\n- permission systems\n- subagent orchestration\n- long-running runtime launchers or supervised agent wrappers\n- replacement workflows for Codex or Claude Code\n\nThose belong to the official agent runtimes. This package owns only the frontend project context, policy, and evidence around them. It should not wrap ordinary agent conversation in process for its own sake.\n\n## Install\n\n```bash\nnpm install frontend-harness --save-dev\n```\n\nAdd the project-local harness scripts to `package.json`:\n\n```json\n{\n  \"scripts\": {\n    \"harness\": \"frontend-harness\",\n    \"harness:init\": \"frontend-harness init\",\n    \"harness:check\": \"frontend-harness protocol check\",\n    \"harness:clean\": \"frontend-harness clean --json\"\n  }\n}\n```\n\nUse the project scripts from `package.json` to run harness commands.\nInitialize the harness protocol after the scripts are in place:\n\n```bash\nnpm run harness:init\n```\n\nIn this source checkout, use `npm run harness -- ...` unless the package has intentionally been installed or linked.\n\n## Create a New Vue Project\n\nFrom any directory with Node.js/npm available, run:\n\n```bash\nnpx frontend-harness scaffold --preset vue --target my-vue-app\ncd my-vue-app\nnpm install\nnpm run harness:init\n```\n\nThe scaffold command creates the Vue project with `frontend-harness` in `devDependencies` and project-local harness scripts in `package.json`. After dependencies are installed, `npm run harness:init` injects the agent protocol into the generated project.\n\nUse these project scripts in the generated project:\n\n```bash\nnpm run harness:init\nnpm run harness:check\nnpm run harness:clean\nnpm run harness -- context --json\nnpm run harness -- verify --json\n```\n\n`init` injects managed protocol blocks into:\n\n- `AGENTS.md`\n- `CLAUDE.md`\n\nIt also scaffolds built-in project skills under `.frontend-harness/skills/`:\n\n- `frontend-discovery.md`\n- `architecture-boundary.md`\n- `ui-implementation.md`\n- `prd-knowledge.md`\n- `api-integration.md`\n- `form-workflow.md`\n- `frontend-test.md`\n- `bug-fix.md`\n- `requirement-change.md`\n- `frontend-change-review.md`\n- `git-commit.md`\n\nExisting project skill files are preserved. Rerun `init` after package upgrades to add newly introduced built-in skills.\nThe built-in git commit skill uses `<type>(<scope>): <short description>` with `feat`, `fix`, `docs`, `style`, `refactor`, `perf`, `test`, or `chore`.\n\nOnce those files are present, the normal team workflow is:\n\n```text\nOpen Codex or Claude Code.\nAsk for the frontend change.\nLet the injected protocol decide whether the task needs the full harness loop or lightweight project guidance.\n```\n\n## Human Commands\n\nMost team members only need these commands.\n\n```bash\nnpm run harness:init\nnpm run harness -- init --json\nnpm run harness -- init --dry-run --json\nnpm run harness -- init --check --json\nnpm run harness:check\nnpm run harness -- protocol check --json\nnpx frontend-harness scaffold --preset vue --target my-vue-app\nnpx frontend-harness scaffold --preset vue --target my-vue-app --dry-run --json\nnpm run harness:clean\n```\n\nUse `init` after installation or package upgrades. Use `protocol check` when you want to verify that `AGENTS.md` and `CLAUDE.md` are current. Use `clean` to remove ignored runtime artifacts while preserving durable project skills, knowledge, and config.\n\n`scaffold --preset vue` creates a general Vue 3 + Vite + TypeScript engineering baseline. It includes Vite config, ESLint/Prettier, Element Plus auto imports, product-neutral style layers, and small `utils`, `storage`, and `service` layers. Mature internal Vue applications can inform the baseline, but the default scaffold is not an admin template and does not create dashboards, sidebars, permission systems, business pages, or domain components. Admin-style shells, table pages, route permissions, and menu trees belong in optional recipes rather than the default preset.\n\nUI restoration work treats design exports, screenshots, and generated code as source evidence for implementation and loop repair, not as paperwork to backfill after coding. For design-backed restoration, visual equivalence is the highest priority for the first project implementation: source material does not mean the agent may redesign the screen. When design_to_code or generated design markup is available, preserve it and classify whether it is usable_as_visual_baseline, usable_for_patch_reference, usable_as_source, or unusable before deciding whether it can seed implementation or only guide repair; verify enforces that classification through visual-baseline metadata for design_to_code sources, and temporary asset localization is required only when the generated artifact is used as project source. Project-native rewrites may change file placement, framework integration, semantic markup, asset localization, naming, state wiring, and component boundaries only when the rendered result preserves the design's primary layout, spacing, typography, color, density, hierarchy, and visible states. When a design contains images, classify each one as required content, functional UI element, brand/product asset, decorative sample, or replaceable placeholder before implementation. Required images should become durable assets; decorative samples and placeholders should be replaced or documented in design evidence. Final handoff evidence should include a restoration verdict with score or pass/fail judgement, key visual differences, accepted gaps, and links to evidence artifacts. Component splits should follow semantic responsibility, reuse, and interaction boundaries rather than mirroring every design layer as a component.\n\n## Agent Protocol Commands\n\nThese commands are intended for Codex / Claude Code through the injected protocol:\n\n```bash\nnpm run harness -- context --json\nnpm run harness -- context task --json \"<task>\" --prd <prd-file> --api-source <openapi-file-or-url> --ui-source <ui-artifact-or-design-url>\nnpm run harness -- proposal check --json --file <agent-proposal.json>\nnpm run harness -- plan --json \"<task>\"\nnpm run harness -- plan --json \"<task>\" --prd <prd-file> --api-source <openapi-file-or-url> --ui-source <ui-artifact-or-design-url>\nnpm run harness -- plan --json \"<task>\" --agent-proposal <agent-proposal.json>\nnpm run harness -- state record-change <file>\nnpm run harness -- state record-change --from-git\nnpm run harness -- state check --json\nnpm run harness -- evidence template --json\nnpm run harness -- evidence record --json --file <evidence-input.json>\nnpm run harness -- visual compare --json --design <design.png> --actual <actual.png> --diff <diff.png>\nnpm run harness -- verify --json\nnpm run harness -- repair packet --json\nnpm run harness -- state next --json\nnpm run harness -- state explain --json\n```\n\nThe agent should call them automatically when the task needs harness-managed context, planning, or evidence. They persist local state under `.frontend-harness/` and provide deterministic evidence for each step. `context task --json` emits a compact task packet from workflow policy, selected knowledge cards, explicit PRD/API/UI inputs, candidate project files, and ingest provenance so agents can use PRD/UI/API context without loading entire source materials into the prompt. `evidence template --json` prints the machine-readable evidence entry shape for the current plan; it is a schema aid, not proof. Put real captures, checks, comparisons, and hashes in a project-local evidence input JSON, then use `evidence record --json --file <evidence-input.json>` so the harness validates and writes `.frontend-harness/verification/evidence.json`. Captured evidence and visual comparison files are local intermediate artifacts by default; scaffolded projects ignore them and `clean` may remove them.\n\n`state check --json` verifies that recorded changed files cover the current plan's execution-unit files before verification. `verify --json` runs that contract check first, checks PRD knowledge quality when the plan has PRD input, and then discovers the default `typecheck`, `test`, and `build` scripts when present. Projects can also declare custom verification commands in `.frontend-harness/config.json`:\n\n```json\n{\n  \"verification\": {\n    \"commands\": [\n      { \"name\": \"lint\", \"command\": \"npm run lint\" },\n      { \"name\": \"e2e\", \"command\": \"npm run test:e2e\" }\n    ]\n  }\n}\n```\n\n`plan --json` also classifies the frontend workflow and emits policy guidance for the agent. The current workflow classes are:\n\n- `ui_implementation`\n- `prd_knowledge`\n- `api_integration`\n- `frontend_test`\n- `bug_fix`\n- `frontend_review`\n- `requirement_change`\n- `documentation`\n- `maintenance`\n\nEach plan includes required knowledge actions, implementation constraints, and verification focus. UI restoration, PRD knowledge, explicit source-backed API work, and evidence-heavy changes use the full controlled loop. Ordinary tests, bug fixes, docs, maintenance, and requirement edits are intentionally lightweight policy guidance unless the task supplies PRD/API/UI source material or asks for auditable evidence. Project skills remain guidance, not executable runtime commands.\n\n### Agent Plan Proposals\n\nThe plan is system-owned. An agent may provide bounded planning evidence before planning; the system resolver validates and consumes safe workflow, target, verification, ambiguity, and component evidence, then records the decision trace and warnings in the final plan.\n\nValid proposal input:\n\n```json\n{\n  \"contractVersion\": 1,\n  \"proposal\": {\n    \"constraintHints\": [\"Handle loading, empty, and error states.\"],\n    \"planningEvidence\": {\n      \"workflowCandidates\": [\n        {\n          \"kind\": \"documentation\",\n          \"confidence\": 0.86,\n          \"reasons\": [\"The task names README as the documentation target.\"]\n        }\n      ],\n      \"targetCandidates\": [\n        {\n          \"path\": \"README.md\",\n          \"role\": \"documentation_target\",\n          \"confidence\": 0.9\n        }\n      ],\n      \"verificationCandidates\": [\n        {\n          \"kind\": \"documentation_review\",\n          \"reason\": \"The change is documentation-only.\"\n        }\n      ],\n      \"ambiguities\": []\n    },\n    \"componentHints\": [\n      {\n        \"name\": \"OrderSearchForm\",\n        \"responsibility\": \"query filters and submit behavior\"\n      }\n    ]\n  }\n}\n```\n\nValidate the proposal file before planning:\n\n```bash\nnpm run harness -- proposal check --json --file agent-proposal.json\nnpm run harness -- plan --json \"<task>\" --agent-proposal agent-proposal.json\n```\n\nThe final plan still owns execution units, concrete file paths, dependency graph, execution order, and verification requirements. Component hints only influence UI workflows; documentation and maintenance work use project or document boundaries instead of invented frontend component files.\n\n## Advisory Commands\n\nThese commands expose project-local knowledge and workflow guidance as provenance only. They do not launch agents, execute skills, or turn markdown into commands.\n\n```bash\nnpm run harness -- skills list --json\nnpm run harness -- skills check --json\nnpm run harness -- ingest record --json --kind prd|openapi|ui-package --id <source-id> --source <file-or-url> --summary \"<summary>\"\nnpm run harness -- ingest list --json\nnpm run harness -- ingest show --json --ref ingest://<kind>/<source-id>\nnpm run harness -- knowledge add --json --kind rule --subject \"<subject>\" --rule \"<rule>\"\nnpm run harness -- knowledge outline --json --ref ingest://<kind>/<source-id>\nnpm run harness -- knowledge draft --json --ref ingest://<kind>/<source-id>\nnpm run harness -- knowledge update --json --id <knowledge-id> --source \"docs/prd/<file>.md\"\nnpm run harness -- knowledge index --json\nnpm run harness -- knowledge coverage --json\nnpm run harness -- knowledge list --json\nnpm run harness -- knowledge search --json --query \"<query>\"\nnpm run harness -- knowledge show --json --id <knowledge-id>\nnpm run harness -- knowledge check --json\n```\n\nPrefer `knowledge add` for PRD digestion. It stores small atomic entries such as rules, workflows, permissions, terms, decisions, conventions, and pitfalls that must remain useful after source PRDs are deleted. Use `ingest record` only as a temporary input handle when PRD, OpenAPI, or UI package material needs to be referenced during extraction; source refs and coverage labels are optional retrieval aids, not quality gates. Use `knowledge outline` for project-file PRD Markdown to turn the source heading structure into a deterministic checklist with suggested knowledge kinds and extraction-required hints. Use `knowledge draft` to turn an ingest record into reviewed `knowledge add` / `knowledge module` scaffolds; for PRD Markdown, `extractionItems` is the source checklist and each required block should be added, updated, or explicitly skipped with a reason. Do not add scaffolds unchanged. When existing cards already point at the same ingest record, produced card IDs, or source file, draft output includes `knowledge update` candidates so agents can merge before adding duplicates. Use `knowledge update` when a requirement changes so existing cards are merged instead of duplicated. `knowledge index` writes `.frontend-harness/knowledge/index.json`, a deterministic manifest grouped by PRD source, card id, scope, and tag. `knowledge coverage` checks that active PRD semantics are self-contained and not thin placeholders. `knowledge promote` remains available for authored non-PRD Markdown cards or hand-written cards, but it is not the PRD digestion path; raw PRD prose should stay in source documents or temporary ingest inputs instead of being copied into knowledge.\n\n## Runtime Boundary\n\nThe boundary is strict:\n\n- Codex / Claude Code owns execution.\n- `frontend-harness` owns policy.\n- The project owns durable state and knowledge.\n\nProject skills under `.frontend-harness/skills/` are policy guidance and provenance for planning. They are intentionally separate from Codex or Claude runtime skills installed in the developer environment. For simple tasks, they should be enough on their own; the harness should not force a full stateful loop when direct agent conversation plus local verification is cheaper.\n\nThat means `frontend-harness` should stay small and focused. Its job is to make frontend work repeatable, not to become a second runtime.\n\n## Project State\n\nThe package writes project-local artifacts under `.frontend-harness/`:\n\n```text\n.frontend-harness/\n  context/\n  plans/\n  execution-units/\n  component-graph/\n  guidance/\n  state.json\n  verification/\n  design-sources/\n  evidence/\n  visual/\n  logs/\n  repair/\n  repair-decision/\n  state-explain/\n  protocol/\n  knowledge/\n  skills/\n  config.json\n```\n\nRuntime artifacts such as `context/`, `plans/`, `state.json`, `verification/`, `design-sources/`, `evidence/`, `visual/`, `logs/`, `repair/`, `state-explain/`, `execution-units/`, `component-graph/`, and stale runtime directories are generated local continuity and evidence. They are ignored by scaffolded project git and can be removed with `frontend-harness clean --json`.\n\nDurable project assets such as `knowledge/`, `skills/`, `config.json`, and protocol provenance are intentionally preserved by `clean` and may be committed when they represent project policy.\n\n## New Direction\n\nThe project is being recentered around the original idea:\n\n1. Keep `AGENTS.md` and `CLAUDE.md` injection as the primary product surface.\n2. Treat CLI commands as the agent-facing protocol API, not the daily human UI.\n3. Keep the public human workflow to install, initialize, and check protocol health.\n4. Preserve deterministic context, plan, verify, repair, and state primitives.\n5. Delete launcher/runtime features that duplicate Codex or Claude Code.\n6. Do not add `agent *` or `run --agent` surfaces unless the direction is explicitly revisited.\n7. Ship a small built-in set of project skills for common frontend workflows, while preserving project-local overrides.\n8. Keep documentation short, current, and product-oriented.\n\nThe success criterion is not more commands. The success criterion is that a team member can install the package, initialize the protocol, and then use AI-assisted frontend development normally while the agent follows a controlled engineering loop.\n\n## Development\n\nBuild:\n\n```bash\nnpm run build\n```\n\nRun the CLI from this source checkout without linking:\n\n```bash\nnpm run harness -- context --json\nnpm run harness -- plan --json \"<task>\"\nnpm run harness -- verify --json\nnpm run harness -- scaffold --preset vue --target tmp-vue-app --dry-run --json\n```\n\nUse `npm run harness -- ...` from project scripts for harness commands.\n\nVerify:\n\n```bash\nnpm run verify\n```\n\nPackage dry-run:\n\n```bash\nnpm_config_cache=/tmp/frontend-harness-npm-cache npm pack --dry-run\n```\n\nThe temporary npm cache avoids local global-cache permission issues on machines where `~/.npm` contains root-owned files.\n\nRelease checklist:\n\n```bash\nnpm run verify\nnpm_config_cache=/tmp/frontend-harness-npm-cache npm pack --dry-run\nnpm_config_cache=/tmp/frontend-harness-npm-cache npm pack --pack-destination /tmp\n```\n\nUpdate `CHANGELOG.md` before publishing, then install the generated tarball in a temporary consumer project and run `npx frontend-harness --help` plus scaffold dry-run. See `docs/RELEASE.md` for the full npm release process.\n","readmeFilename":"README.md"}