{"_id":"@chasen-liao/resume-skills","_rev":"28-ce675cdb288808bf2d3dce539488878b","name":"@chasen-liao/resume-skills","dist-tags":{"latest":"0.10.0"},"versions":{"0.4.0":{"name":"@chasen-liao/resume-skills","version":"0.4.0","license":"MIT","_id":"@chasen-liao/resume-skills@0.4.0","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"e50e7399fbce955c58362c7d4e7ab7981674b365","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.4.0.tgz","fileCount":52,"integrity":"sha512-Txfdn0rv9vVypwM3vfSBh61o7hub0e19vr9p6cjG9wCyygkB1BJxh6CCQ6s9gHBIzoucSHXmVKo4QeXq+S7/hw==","signatures":[{"sig":"MEQCIEfU1p/rh756n26sQ+1rxZbI1L3z2px6ilXMEQbJar48AiA2Wtvt0eQyQuGtrtMttPpCILOLe93g6RiJMnELwK83Rg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1816533},"type":"module","engines":{"node":">=20"},"gitHead":"fd0ee1414982bf6ef3aac42ee97195691f74671f","scripts":{"test":"node --test tests/*.test.mjs"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"11.16.0","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.4.0_1784171363275_0.12896148207462055","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@chasen-liao/resume-skills","version":"0.4.1","license":"MIT","_id":"@chasen-liao/resume-skills@0.4.1","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"ef8ebd68b68c1dc3b811d30e5d78d0b761492317","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.4.1.tgz","fileCount":52,"integrity":"sha512-dDlKLA9L29Ei+94xCViCS8mimFeCZ90d2PZX7JtiRIWc1EqBPmJio4qESb9DNnv1vXckxAGNXmJn+kEWakyv4Q==","signatures":[{"sig":"MEYCIQC7UliEzw2HnH0NUR/m8rKj3HM3Zs38G848HEOXdtBQiwIhAJcs6nCLLYTOZabKsEYjrZysmMoFIyW9X7LD2OnsQUB5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1819395},"type":"module","engines":{"node":">=20"},"gitHead":"5c8afda81ea0e5b3769dcde496df0fdd73f7e017","scripts":{"test":"node --test tests/*.test.mjs"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"11.16.0","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.4.1_1784172723026_0.05508990134642233","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@chasen-liao/resume-skills","version":"0.4.2","license":"MIT","_id":"@chasen-liao/resume-skills@0.4.2","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"02ef03954a1e572a6140bbc968312005118bfd3f","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.4.2.tgz","fileCount":57,"integrity":"sha512-tFHA+6cIK9Ncyz2030bQT4Ten44gpRuY03jQnpi1vTvZumraKetBif3ELkBIUUZK+fNKdxOI3VnvS84aTyx3XA==","signatures":[{"sig":"MEUCIHr/G20D8WWyrya/F/f4+ZeyZDJ73KdNGlipAo3C0p/HAiEAgYI32usvy8Yy7cWBcUS4Cf9JmMeR2Ud76lv68HN26wg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1931269},"type":"module","engines":{"node":">=20"},"gitHead":"9dd06785d4221d59f50a6535dbeced7735b47931","scripts":{"test":"node --test tests/*.test.mjs"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"11.16.0","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.4.2_1784192020359_0.44632668868768177","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"@chasen-liao/resume-skills","version":"0.4.3","license":"MIT","_id":"@chasen-liao/resume-skills@0.4.3","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"670dcd15f41a723be5686de489298bc13b2b5a5a","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.4.3.tgz","fileCount":57,"integrity":"sha512-roXOYOAX7PO2RhhulfdLmBNkoNFM3NjG8tFvKl+mZu4A2NKuZCUgTT0VLxxnp8+im9EzSahy57sxQGyHmHs7tw==","signatures":[{"sig":"MEUCICkdw1IRrRmbnGlXG3MZ7L0ZnH761+WcQZ5+3tWCrCXiAiEA+unrcanvdALx4qWt6UVlRyvcIDLE0hjqZByaXGFERHU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1928873},"type":"module","engines":{"node":">=20"},"gitHead":"5e5f1f5849ce00f7db4a32343ebfc64757e8c9b0","scripts":{"test":"node --test tests/*.test.mjs"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"11.16.0","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.4.3_1784515158160_0.9917942464307254","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"@chasen-liao/resume-skills","version":"0.4.4","license":"MIT","_id":"@chasen-liao/resume-skills@0.4.4","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"33d571d4725cf0920f73a4b93c5d66d1fec1c3ca","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.4.4.tgz","fileCount":57,"integrity":"sha512-4ji1zIlAn8BxukWjL+j0SAc4m27/gCNwS+NuOZV1QherILL9G7gGfRx42S/pBjq4IE3KeFzN5yYavsKcC1OqRg==","signatures":[{"sig":"MEYCIQC7p8j48KpMfVhuC7RElq7LgjsD6pYEdvWGse1niZwHowIhAO4WYzMrPwoCIHj5IB5LpZd7buip4aR7vCk4QryOD3Vi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1929178},"type":"module","engines":{"node":">=20"},"gitHead":"81ab57d65d9d5fe3f7551547591c4fd279813c11","scripts":{"test":"node --test tests/*.test.mjs"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"11.16.0","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.4.4_1784691974529_0.20456209357295996","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"@chasen-liao/resume-skills","version":"0.4.5","license":"MIT","_id":"@chasen-liao/resume-skills@0.4.5","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"2142aa32a361a636a2dfe46277dd6b299a6876c4","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.4.5.tgz","fileCount":58,"integrity":"sha512-5Mkww1R4Bs2yiIfW8zvuJ60xqD3wtP0L1mVT/0/qk4RAWGSDuHQK2KnTjpA5L4adSqxn/5cwrfClgbjMM88Ncw==","signatures":[{"sig":"MEUCIFHddxZTkwsbzGgox81gRsZ0Q4Ye5JqGuC8LkrCiOic3AiEA3H46B7a2lYt4UkEAUCA3eOVyltarDbRqYJ9l8+mcoo8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1940339},"type":"module","engines":{"node":">=20"},"gitHead":"d8ec56411bde1bea908027f795cdc03424bc65e6","scripts":{"test":"node --test tests/*.test.mjs"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"11.16.0","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.4.5_1784905882614_0.8474083091838069","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@chasen-liao/resume-skills","version":"0.5.0","license":"MIT","_id":"@chasen-liao/resume-skills@0.5.0","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"53e5ef3df6d4770ef14693a3afbf67da64d1cc2e","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.5.0.tgz","fileCount":64,"integrity":"sha512-SPvDIkgDnNcZtnnRnUDwypsXoaJ9zdvUxi1yl09VNeRTPyXWOYGG1nR7u8PaM4/76onSrFcZdjAyvY+Sy/yByg==","signatures":[{"sig":"MEUCIAdEJVXhtee/ijZ3kOPiqOVS/BfqT2PWX8CykGIDoroHAiEAx4Aj4jP0P0dWQQKuuCFiAKyEXB8m38eniYpo72akSVI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2736282},"type":"module","engines":{"node":">=20"},"gitHead":"2ac41fa1760bb16ed86d37a48d68452061b4c775","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.5.0_1785562720807_0.9278485803952863","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@chasen-liao/resume-skills","version":"0.5.1","license":"MIT","_id":"@chasen-liao/resume-skills@0.5.1","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"d0e27977564fbc1552d429a8b3d9d90b7e2d0055","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.5.1.tgz","fileCount":64,"integrity":"sha512-DEHILAHLfh00iT8dKbiA8oJqFNYixLuvzht3H689U469r0kDAoDKrzrWOsBrkTZeifaJoydXYlEyxbMgxmTTFg==","signatures":[{"sig":"MEUCIG/y4JgSRmHCCCnsr/3Wz3JpC4ojM5a7NO++Y2G7AXcTAiEAovn9KWSt2+45yrn2jkaIy65uKiWWiwdJodj7Mf5a80M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2738869},"type":"module","engines":{"node":">=20"},"gitHead":"1bd411d0260a1e25ee2616f2415e6787b92189da","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.5.1_1785564485053_0.1235177747445313","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@chasen-liao/resume-skills","version":"0.5.2","license":"MIT","_id":"@chasen-liao/resume-skills@0.5.2","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"af9cd75b513d59adb3f68da078a3818a40afd7c8","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.5.2.tgz","fileCount":64,"integrity":"sha512-0CT0KTHhAiJIAQeX9J1p+6hGyYuIdNTNmOWkFmmaPCNmbgGU9iu1x4jpV5SUt2BQ2v2RfCvO3VN+2aScHSRkaA==","signatures":[{"sig":"MEYCIQDBdMoGcOFx84Ut5umWau9DfNHvPccwYVB6HD8kanPkZgIhAITNP3cmUPCS7q6YAFnawymJxcxO+ce7b39jeV98zuvl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2744229},"type":"module","engines":{"node":">=20"},"gitHead":"2dcd4f4df923af8613662e4309e54cc726656d37","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.5.2_1785911266072_0.45023825546245333","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@chasen-liao/resume-skills","version":"0.5.3","license":"MIT","_id":"@chasen-liao/resume-skills@0.5.3","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"97f5b22ca0ddb09e862bd041cd4432b4c1e6eae8","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.5.3.tgz","fileCount":65,"integrity":"sha512-yD2O85IujZKHSQa3kUbfebhfqsOSwgImmsYbOQxjTBd8ecaPCCt3vk3hURfmoGfPa8vVWYSU0fgBLJCW82uGNA==","signatures":[{"sig":"MEQCICWdMscmxfE5B16iqvIRblWu+k/bVMC2aA22h1oorFQqAiBerXB2k67D+m29fUxfzSiPvHekcXUFUd8XkTLcl4BlqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2750168},"type":"module","engines":{"node":">=20"},"gitHead":"3f2c8648f5586857435f4469818414aa2866f31b","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.5.3_1786815883218_0.9548545102995176","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@chasen-liao/resume-skills","version":"0.5.4","license":"MIT","_id":"@chasen-liao/resume-skills@0.5.4","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"a988ecd9ca44b873454f47b804d2cdb7715118f9","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.5.4.tgz","fileCount":65,"integrity":"sha512-wL40w/IyjKcP2sYr27/Nc3D3zohnux38KrIHSX1XJp9exYsMkUhbPIVBhOt9Bu89zT9WBvWv/oAZ7wCGCqJ49Q==","signatures":[{"sig":"MEQCID0DREHn8b27w8v/CQc8WSYdBNySUBxOWdotyAobcp/rAiBTSufSKXizbdhcoj89FFh++zHZutr155106TQBi6T81w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2751322},"type":"module","engines":{"node":">=20"},"gitHead":"4126a65a5e404eb8e77b650a559b2df968aad0a1","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.5.4_1786816160484_0.8951956132493819","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@chasen-liao/resume-skills","version":"0.5.5","license":"MIT","_id":"@chasen-liao/resume-skills@0.5.5","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"6faf405eb2b5a50dd379ac0489416dafdb05486a","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.5.5.tgz","fileCount":65,"integrity":"sha512-iaoeUgJhgZFIK9q4gZAc6LlCUC+KUiefvQzbLLwqEfpCzICDfI2S2CrNmSnqDJUE6VNrsln+CEOCkf4bjP9WsQ==","signatures":[{"sig":"MEUCIH6nlOTUSkk5MpFgcpyjgdDx1uvZj07CZD2j6wrtmMggAiEA/092obpYHc06Kxg7XvBAqqQ795oL8mjhiyXAVp/xIXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2756753},"type":"module","engines":{"node":">=20"},"gitHead":"4126a65a5e404eb8e77b650a559b2df968aad0a1","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.5.5_1787021604220_0.1534994774015661","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@chasen-liao/resume-skills","version":"0.5.6","license":"MIT","_id":"@chasen-liao/resume-skills@0.5.6","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"f25693a491db92b20a0e0afcf44fe5a7fcd66456","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.5.6.tgz","fileCount":66,"integrity":"sha512-MQJ27UtKxd93K3g8yLAXh7aLtWGqx0QdnKFEz3R06Vjo3UWBhCHHn7E8PVROyrxwpsUH8sxrXyx7q25fWtcAgg==","signatures":[{"sig":"MEQCIHg0EkcnhovVXVIymyHUqLKAJiFMdbXzP9DMkbS5r3GaAiA+QPOIesPXop8oULzn3wyh+w3ZhX5ERq3NN57ftpC/Pw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2784822},"type":"module","engines":{"node":">=20"},"gitHead":"a16634b6feacad914b3a0472156cdd9344a81d0a","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.5.6_1787040153861_0.14510371118788368","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@chasen-liao/resume-skills","version":"0.6.0","license":"MIT","_id":"@chasen-liao/resume-skills@0.6.0","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"0f3fb5aff0ce00f39ad4d05cc0bf6b5ce28750a3","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.6.0.tgz","fileCount":67,"integrity":"sha512-3ZrvYr9OoK/HPIQXvWQLDQOG5WSnuR97dRZkV0Ohz0mFT5BkiiKx2H16Vhb67PvuwYiB0i/wSxh2PBwOJxmHjQ==","signatures":[{"sig":"MEQCIDbl8Ty3gUMzOWM6qm+zfdMZqsmS5whXZ9/V3wdyZa/wAiBti1msxKFteg2N2g6tQh9HKRs4SOsld5oo9M6xLNk02A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2794730},"type":"module","engines":{"node":">=20"},"gitHead":"f1614bdb0ebdf7ad4553f5972d69fa63dc1ca384","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.6.0_1787108522032_0.5844920281319392","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@chasen-liao/resume-skills","version":"0.6.1","license":"MIT","_id":"@chasen-liao/resume-skills@0.6.1","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"f54b763ef40be748bd7eff2a973efeb6a1ad3622","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.6.1.tgz","fileCount":67,"integrity":"sha512-HomNrcV8P1TQNRquu+fLfFoUQYbQ065UHA45QruFGfaZt0oKuY6hltBFvwHdHQKP7xJsQkQ+LK1U4dR/JYyC6A==","signatures":[{"sig":"MEQCIAjgAroMyUdlcug5/M01XTAIrgxqVt/OjFxYFl9g6C/1AiBrIVHz7P0TXOGWqbZqxsRdcW3/6PVEh/4KVm43MgwEVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2796768},"type":"module","engines":{"node":">=20"},"gitHead":"3a33d2ac234dc77fc4f348b6f3ffe5636f603d8f","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.6.1_1787121971881_0.6698170703282926","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@chasen-liao/resume-skills","version":"0.6.2","license":"MIT","_id":"@chasen-liao/resume-skills@0.6.2","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"a090dcd472ae84848416c41face75584a0bb6a11","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.6.2.tgz","fileCount":67,"integrity":"sha512-eaZZmsHEVcqdkgAYk46g6ArTNmdK9KCc0bph/y3Y5oYougfe9+rkslhcQ3+2QhTcUaV9BeHF4s9uzO4NJ4aBDQ==","signatures":[{"sig":"MEUCIQDtDZY7gRRo75WruGXe8q1EZUyl9ucafOP0CM8oY6FJ+QIgePFlfGR3/0oaEvJ3J2iUgmS2IbElxo4GJDCMOmeD5Jo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2803042},"type":"module","engines":{"node":">=20"},"gitHead":"9a2d9e40ea76a21f003f6fccdcf45c7c893faa0c","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.6.2_1787126067495_0.5374195336007748","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@chasen-liao/resume-skills","version":"0.6.3","license":"MIT","_id":"@chasen-liao/resume-skills@0.6.3","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"2ac87049f4981235d5af6fb4f9ba859b3828085b","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.6.3.tgz","fileCount":67,"integrity":"sha512-PpXDMXyVeLNj12TIJpL5kCQuiomd8+elz/oXv0cqxdqRi94ctMAE/M/oBloRdYC4C1doboLdmqjBYyyTRoJtHA==","signatures":[{"sig":"MEUCIQDjd/tuLYsZVCcQBngE2iXJshLuIK+zXAKTPoci7hWI5wIgA7LIBDYA1EhMbm1gHHu/cwUlZ8LeIhXie140hpQlO6E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2804194},"type":"module","engines":{"node":">=20"},"gitHead":"7d6ba50240b752543f6d16b41a186723725bb58b","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.6.3_1787126835937_0.8390212007219877","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"@chasen-liao/resume-skills","version":"0.6.4","license":"MIT","_id":"@chasen-liao/resume-skills@0.6.4","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"4b5a789b01d7e580fd521d1d77db0e51c500ff46","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.6.4.tgz","fileCount":67,"integrity":"sha512-6SCwVfRDA94416TtJ5KdU+a32e5fd/qDbawCAQQef+NlTsXYHcg0ObvLX3U1vWa40NvPGuMwREQ2Ak9NtlfKFA==","signatures":[{"sig":"MEUCIQDoAIU0yu5FIidRqEYLOofhYzCrIPpF9isgnsv137y9gQIgSnmCLnAHQqbOFXsSaZcc6J9Nj0VIxr7RvCt3fUhDweU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2804937},"type":"module","engines":{"node":">=20"},"gitHead":"807c7f9362979e9cbcc25ed48adf04cdc09ed99b","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.6.4_1787127238338_0.701995105988219","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"@chasen-liao/resume-skills","version":"0.6.5","license":"MIT","_id":"@chasen-liao/resume-skills@0.6.5","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"759762c2b262982a34a0fb30eefcd45c849115d8","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.6.5.tgz","fileCount":67,"integrity":"sha512-tOUQoAux5+X3f8TDWmXK78VwMh6mqfo2VwJCCMCe8LabwShdmd/F9srlABpo+8UBOwF7jjv5VrzJiKhT0+6amw==","signatures":[{"sig":"MEUCIQDfSsQKtvmR+cykdJxB2nimRSCWrinVoJntZMFR9IqmDwIgJPBKlY0Dud3Hz1/d+5q28gti+KGjcCXCDKT2bOA0yys=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2805372},"type":"module","engines":{"node":">=20"},"gitHead":"5156af77ef398ad3c47685f041edd41d04c117f8","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.6.5_1787128297672_0.04840991700183683","host":"s3://npm-registry-packages-npm-production"}},"0.6.6":{"name":"@chasen-liao/resume-skills","version":"0.6.6","license":"MIT","_id":"@chasen-liao/resume-skills@0.6.6","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"039d22eed2b3e6c2a2455d9c51a206ec410ae89f","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.6.6.tgz","fileCount":67,"integrity":"sha512-feLAEOks8W2Rn36r2DuGf+HisHteRbEgPEsWxg71HQnn4F+AyRTNteGEFqER1td+TPFmM1InRUFC+aqVfX/TUA==","signatures":[{"sig":"MEQCIE/1dw/qg4UJWK8THuC6NDl2y27cK3JGwze0K2Q4fdK0AiBkoRMkhYsSqfBpSOLXHXTGdqiM/x/HeZn1W5JiRbRjTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2805720},"type":"module","engines":{"node":">=20"},"gitHead":"6f6409fb8bb19867485195f160e93eef1a36c04b","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.6.6_1787129323316_0.24605034254600722","host":"s3://npm-registry-packages-npm-production"}},"0.6.7":{"name":"@chasen-liao/resume-skills","version":"0.6.7","license":"MIT","_id":"@chasen-liao/resume-skills@0.6.7","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"956248c9ee61fcb015c69bfe6d213c1847eeedad","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.6.7.tgz","fileCount":67,"integrity":"sha512-jdWXu5p/3UJG0duFIOh33/QAkffCWuX3FVzvAOCUTunN9cbUwy4eU4rHotmt9LsSSA0Pyxg+BjspgderqIG+PQ==","signatures":[{"sig":"MEUCIQCjIqs3IujMdjGe6dVYazDZoBwhpUjK2Ov3BjxvsijNfAIgbWHPBb81gEu1AMziGLiVFEzyuV+rHsZ8tIVQm4x4w18=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2809465},"type":"module","engines":{"node":">=20"},"gitHead":"43c15dbd509030d571d037f4821f7b36e862ce02","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.6.7_1787459211024_0.5243469626933805","host":"s3://npm-registry-packages-npm-production"}},"0.6.8":{"name":"@chasen-liao/resume-skills","version":"0.6.8","license":"MIT","_id":"@chasen-liao/resume-skills@0.6.8","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"70c62078ffb1a310369b1a0c1f411732c805a12a","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.6.8.tgz","fileCount":67,"integrity":"sha512-QajVp81bk8+YtYY/eCMP/MXl5lTkJLeuLIYBNZy8B8crCZM3YGfs0FQ+0T1FW8Qe5CZUV5K2X3D0x/oISos4cQ==","signatures":[{"sig":"MEUCIEmyvYp8HGK4mYfnahnXKJzVAQgy9+ca0FWYqQXdR62GAiEAy2LxChnH3dhDjEv1p8DYZAA4w9f8BgvyIuXagM5HptQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2809714},"type":"module","engines":{"node":">=20"},"gitHead":"b8a687902bd85e43049c0b8876f06628b0fecc34","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.6.8_1787460053152_0.15422724354028872","host":"s3://npm-registry-packages-npm-production"}},"0.6.9":{"name":"@chasen-liao/resume-skills","version":"0.6.9","license":"MIT","_id":"@chasen-liao/resume-skills@0.6.9","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"d1bf17b275662d4946849c9bb32d71252299bae7","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.6.9.tgz","fileCount":67,"integrity":"sha512-CEtYHAXMDi0VNwlYbhMpiIXka/4Tp2tV+1Dp3itlnwL/11mKf1ktOnrPFaeMIG4JhgflxiRelKzow9DNIdHwcg==","signatures":[{"sig":"MEUCIQCGFiIlCmzjB27tdif9spOXWn9m7z0VwDe7cNwvHWD5bwIgHNsE5LRL5+xo1Wh+7CTyzKVq+GhUQjMRdbs5UJxDBxI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2810166},"type":"module","engines":{"node":">=20"},"gitHead":"5f85b20f27a72b782467148eaea76e69aa4e16d7","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.6.9_1788770027618_0.7436421289320347","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@chasen-liao/resume-skills","version":"0.7.0","license":"MIT","_id":"@chasen-liao/resume-skills@0.7.0","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"bb26b068f32faba3d703f6ba1b371884161261b5","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.7.0.tgz","fileCount":68,"integrity":"sha512-7v+uBs3CFbzst4SDFVtSUGXEv0KrLz0HVfBU47BFFNOsZqHVkt7fB+uXGw0Rx747/Ic9bF86qslS7M4iqtLs8A==","signatures":[{"sig":"MEQCIDMrC5j7DQDOnmwV8p7gIvjpXgMctbbXf6gm6Vfzr8eVAiAZHmhwOzWXPFw17IOP9xf6ug6pXrfMN5eXIsTBus839A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2819490},"type":"module","engines":{"node":">=20"},"gitHead":"e30be9d79b17c458993f39cb5867144a51103087","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.7.0_1788859046344_0.8997759073063298","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@chasen-liao/resume-skills","version":"0.8.0","license":"MIT","_id":"@chasen-liao/resume-skills@0.8.0","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"8ac04da47bf55912ff3722db4c0254d1d22ab22b","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.8.0.tgz","fileCount":70,"integrity":"sha512-2DGh/4YUYCHKcn81yFNFAA5QPczydthI7IPUHCMNwqHUZ4nqxSqoDW78gcamKkmRhMbOJVZCkO9x2+dEtHWptg==","signatures":[{"sig":"MEQCIGmOwDis1WYJhZJ4gkp3XYcLSGKl/0F5C8X22JK3Z991AiA7g8Cz6cwnnsDpS9ssfyJ8Vy51UOHwYXbbkUyzeAVD3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD36kGo92cwKQmeVuvplX6buPshDI6pkqzylrLIkKVFjQIgB1F7vqwDjIP0PZ2d3o0GGkm2MnZS7gl3O0gTpKl6aFs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2841643},"type":"module","engines":{"node":">=20"},"gitHead":"b82be9fcb699ce9b162da6e513184fe29e11f1b0","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.8.0_1789364558463_0.8812612091594583","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@chasen-liao/resume-skills","version":"0.9.0","license":"MIT","_id":"@chasen-liao/resume-skills@0.9.0","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"e34ecbd8c043e717a8a4f767a33c21e61aa08275","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.9.0.tgz","fileCount":52,"integrity":"sha512-368Jg6mLC9z6DYQ4wh2JsGiMIkN8hjnCRsUecyYBtMgI3BhDIwfJaClx+zm546qxDSUbjjOnnwqBsVeSH4geQA==","signatures":[{"sig":"MEQCID3lRiwHCEtOdBUDl5FNNTmBAg4q7h9p+9E3FdsFcGJ3AiAwPzD7wIrGGpOHmNeXg708bXV0nhkXZJtNTVHHTrk3fQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDBLik7ik/OvU1K9mgmlTe6goax7fcfUV8tTxhsepaaIQIgaysUbit6PacVirI1J8mRoWgT3Oz7pVf7pLiwzGzIzfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":375242},"type":"module","engines":{"node":">=20"},"gitHead":"5419cb7e6fac3350d6257306df7144a7d1353dea","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.9.0_1789713231803_0.9722187236058377","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@chasen-liao/resume-skills","version":"0.9.1","license":"MIT","_id":"@chasen-liao/resume-skills@0.9.1","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"homepage":"https://chasen-liao.github.io/resume-skills/","bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"bin":{"resume-skills":"bin/resume-skills.mjs"},"dist":{"shasum":"65e3f75542049e937e9221bbaf11c2cfff97a4ca","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.9.1.tgz","fileCount":52,"integrity":"sha512-r3l3mn4bJVP9tP6dldr46KfgT/S8FuNlLUgr2SJ4iBAH1+oVcAqBVWbior8rehC9Vr4tSEY6gYa5hFPWZZhXzw==","signatures":[{"sig":"MEUCIQDtnxxyBiLQ57N5yNCJZdLzyW1o/PyfpPWMh91kNYd51AIgSs7uWfYEsMIszic32HqMrK97Fu2QdeNA9brE+reE5x8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCsnUc9P5C0NEyktLV1Rjj0ysaEOWn6S5w8NfdJoBU+DgIhALp17DGyO5bXe2k8QwryvqSLfthVB4rp8+KrufV5+NY+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":380802},"type":"module","engines":{"node":">=20"},"gitHead":"2f9956f14c3a0a395b10e4566a006b97b21dcba7","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"tmp":"tmp/resume-skills_0.9.1_1789721632965_0.46673094834946327","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"_id":"@chasen-liao/resume-skills@0.10.0","bin":{"resume-skills":"bin/resume-skills.mjs"},"bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"dist":{"shasum":"52a9c5dcdb69bf751eea33efd8032445eb803e81","tarball":"https://registry.npmjs.org/@chasen-liao/resume-skills/-/resume-skills-0.10.0.tgz","fileCount":53,"integrity":"sha512-jlmsB8ZPwms8VWho7mAWH3FZsHsh0XXM8p/l2ATTCJrrVratz9z/slhCaYcuHHGWZyEkza/EDcyA0czsCqOAjA==","signatures":[{"sig":"MEUCIQDWDgDD29MT6T+zyVahJ0ErAwotan5q0y8OWTG2DKXatQIgD8uEyYjkQhcwSm/cimpvI5UWHv6G2mg9Tgnqm4Y5JLA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCbZPU/+M76COA+/dpewRQf7Z1EQS6TFCa9EuOro2SqRwIgORA/6FrSquxhFPYK2Ap95yvij05cjtVNwFQNF7lML+8="}],"unpackedSize":396992},"name":"@chasen-liao/resume-skills","type":"module","engines":{"node":">=20"},"gitHead":"07047ac202c25ceb23e38db24b35376542e310f9","license":"MIT","scripts":{"test":"npm run test:node && npm run test:python","test:node":"node --test tests/*.test.mjs","test:python":"python -m unittest discover -s tests -p \"test_*.py\" && python skills/resume-builder/tests/test_validate_resume.py","test:integration":"python skills/resume-builder/tests/test_render_integration.py"},"version":"0.10.0","_npmUser":{"name":"chasen-liao","email":"liaochasen@gmail.com"},"homepage":"https://chasen-liao.github.io/resume-skills/","repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"_npmVersion":"12.0.1","description":"Agent skills and a local canvas editor for generated HTML resumes","directories":{},"maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"_nodeVersion":"24.16.0","dependencies":{"parse5":"^8.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"playwright":"1.62.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/resume-skills_0.10.0_1790827541114_0.8283028447491885"}}},"time":{"created":"2026-07-16T03:09:22.981Z","modified":"2026-10-01T04:05:41.380Z","0.4.0":"2026-07-16T03:09:23.466Z","0.4.1":"2026-07-16T03:32:03.233Z","0.4.2":"2026-07-16T08:53:40.623Z","0.4.3":"2026-07-20T02:39:18.330Z","0.4.4":"2026-07-22T03:46:14.723Z","0.4.5":"2026-07-24T15:11:22.850Z","0.5.0":"2026-08-01T05:38:41.058Z","0.5.1":"2026-08-01T06:08:05.299Z","0.5.2":"2026-08-05T06:27:46.315Z","0.5.3":"2026-08-15T17:44:43.425Z","0.5.4":"2026-08-15T17:49:20.700Z","0.5.5":"2026-08-18T02:53:24.480Z","0.5.6":"2026-08-18T08:02:34.130Z","0.6.0":"2026-08-19T03:02:02.364Z","0.6.1":"2026-08-19T06:46:12.113Z","0.6.2":"2026-08-19T07:54:27.741Z","0.6.3":"2026-08-19T08:07:16.185Z","0.6.4":"2026-08-19T08:13:58.569Z","0.6.5":"2026-08-19T08:31:37.895Z","0.6.6":"2026-08-19T08:48:43.526Z","0.6.7":"2026-08-23T04:26:51.307Z","0.6.8":"2026-08-23T04:40:53.344Z","0.6.9":"2026-09-07T08:33:47.825Z","0.7.0":"2026-09-08T09:17:26.556Z","0.8.0":"2026-09-14T05:42:38.629Z","0.9.0":"2026-09-18T06:33:51.906Z","0.9.1":"2026-09-18T08:53:53.048Z","0.10.0":"2026-10-01T04:05:41.211Z"},"bugs":{"url":"https://github.com/Chasen-Liao/resume-skills/issues"},"license":"MIT","homepage":"https://chasen-liao.github.io/resume-skills/","repository":{"url":"git+https://github.com/Chasen-Liao/resume-skills.git","type":"git"},"description":"Agent skills and a local canvas editor for generated HTML resumes","maintainers":[{"name":"chasen-liao","email":"liaochasen@gmail.com"}],"readme":"# Resume Skills\r\n\r\n> 详细教程参考我的 X 推文：https://x.com/chasen_liao/status/2077689805752942619?s=20\r\n\r\n![alt text](https://raw.githubusercontent.com/Chasen-Liao/resume-skills/main/image.png)\r\n\r\n这是一个面向 Codex、Claude Code 和其他兼容 Agent Skills 的简历工作流技能。\r\n\r\n它把做简历拆成一条可复用的工作流：从已有简历解析并补充，或从真实经历采访开始，建立一份简历母版；再分析目标 JD、生成岗位定制版、检查 ATS 可读性，并维护不同投递版本。生成的简历是独立 HTML，可在浏览器中打印为 PDF；视觉版还可以用附带的本地 Canvas 做最后的排版微调。\r\n\r\n> 这不是一个独立的在线简历网站，而是一组让你的 Agent 按稳定流程工作的 Skills。你仍然需要在 Codex、Claude Code 或其他兼容客户端中与 Agent 对话。\r\n\r\n完整的分章节安装与使用指南见：[Resume Skills GitHub Pages 教程](https://chasen-liao.github.io/resume-skills/)（[页面源码](docs/index.html)）。\r\n\r\n![Resume Skills builder](https://raw.githubusercontent.com/Chasen-Liao/resume-skills/main/builder.png)\r\n\r\n## 适合谁\r\n\r\n- 想先整理一份可长期维护的简历母版，再针对不同岗位投递的人\r\n- 希望 Agent 先采访和核对事实，而不是直接套模板编内容的人\r\n- 需要同时保留视觉版和 ATS-safe 单栏版简历的人\r\n- 需要管理多家公司、多岗位投递版本的人\r\n\r\n## 30 秒开始\r\n\r\n### 1. 安装全部 Skills\r\n\r\n先确保本机已安装 Node.js 20 或更高版本，然后在终端执行：\r\n\r\n```bash\r\nnpx skills add Chasen-Liao/resume-skills\r\n```\r\n\r\n也可以先查看仓库中的 Skill 列表，不立即安装：\r\n\r\n```bash\r\nnpx skills add Chasen-Liao/resume-skills --list\r\n```\r\n\r\n安装完成后，重新打开或新建 Agent 会话。\r\n\r\n### npm 包：本地 Canvas 编辑器\r\n\r\n本仓库同时发布了 npm 包 [`@chasen-liao/resume-skills`](https://www.npmjs.com/package/@chasen-liao/resume-skills)，当前 latest 版本以 npm 页面为准。\r\n\r\n- GitHub 仓库中的 `SKILL.md`：提供简历采访、JD 定制、ATS 检查和版本管理流程\r\n- npm 包：提供 `resume-skills` CLI 和本地 Canvas 编辑器\r\n\r\n仓库当前版本为 **0.10.0**。此版本新增留白门禁和强制整页截图复核；GitHub 推送与 npm 发布独立进行，`@latest` 是否包含这些能力以 npm 实际版本为准。完整 PDF 渲染环境及命令路径见 [运行时初始化说明](skills/resume-builder/references/runtime-setup.md)。\r\n\r\nSkill 的安装不依赖 npm 包；只有需要手动打开本地 Canvas 时才需要使用 npm CLI：\r\n\r\n```bash\r\nnpx -p @chasen-liao/resume-skills@latest resume-skills editor resume_visual.html\r\n```\r\n\r\n> 推荐使用带 `-p @chasen-liao/resume-skills@latest resume-skills` 的显式形式：裸写 `npx @chasen-liao/resume-skills@latest resume_visual.html` 在 Git Bash 等环境下可能被 shim 拦截而无声失败。\r\n\r\n也可以全局安装后使用：\r\n\r\n```bash\r\nnpm install --global @chasen-liao/resume-skills\r\nresume-skills editor resume_visual.html\r\n```\r\n\r\n包地址：<https://www.npmjs.com/package/@chasen-liao/resume-skills>\r\n\r\n> **版本自检**：CLI 启动时会异步对比 npm registry 的 `@latest`，发现新版本时在终端提示更新命令（`--json` 模式输出 `update_available` 事件）；编辑器左下角也会显示当前版本号，并在有新版本时给出提示。离线或不想检查时设置 `RESUME_SKILLS_NO_UPDATE_CHECK=1`。\r\n\r\n### 2. 选择入口\r\n\r\n#### 空的简历工作区：先建立母版\r\n\r\n没有 `resume-facts.yaml` 和母版时，调用 `resume-workflow`。可以导入已有简历或采访真实经历，确认事实后生成母版：\r\n\r\n```text\r\n使用 `resume-workflow` 帮我创建或更新简历。我想申请前端开发实习，请先确认事实，不要编造任何经历或数据。\r\n```\r\n\r\n你不需要先准备固定格式的简历。已有简历会走“**解析 → 确认 → 增量追问**”：先确认已识别内容，再只补充模糊、缺失或可能过期的信息；没有简历时，Agent 才会逐步采访个人信息、教育背景、经历、项目和技能。事实确认完成后，再选择输出模式与视觉风格。\r\n\r\n#### 已有母版：输入 JD 生成岗位版本\r\n\r\n已有 `resume-facts.yaml` 和母版后，直接输入 JD 文本或文件：\r\n\r\n```text\r\n请用我的简历母版分析这份 JD，先告诉我匹配点和真实缺口，再生成定制版。不要把 JD 要求当成我的经历。\r\n```\r\n\r\n`jd-tailorer` 会输出岗位定制版和匹配分析，不会覆盖你的母版。\r\n\r\n## 你可以使用的 4 个核心 Skills\r\n\r\n| Skill | 什么时候用 | 主要输入 | 主要输出 |\r\n|---|---|---|---|\r\n| `resume-workflow` | 希望由 Agent 串联完整流程，不想自己挑选单个 skill | 已有简历或真实经历；可附 JD | 完整端到端生命周期编排（母版制作 + 针对 JD 定制） |\r\n| `resume-builder` | 创建或更新简历母版、就地打磨经历 | 已有简历或真实个人信息、经历、项目、技能 | 经确认的母版事实库、视觉版或 ATS-safe 版 HTML/PDF |\r\n| `jd-tailorer` | 针对具体岗位 JD 进行结构化解构、匹配评估与定向定制 | 目标 JD 文本/链接 + 简历母版/事实库 | 变更预览确认后的定制 HTML/PDF、匹配分析报告与版本归档 |\r\n| `resume-canvas` | 视觉版生成并验证后，进行本地可视化微调与重验闭环 | 已验证的视觉 HTML；可附带 manifest | 本地微调后 HTML、重新验证的 PDF 与更新的 manifest |\r\n\r\n### 推荐工作流\r\n\r\n```text\r\n空的简历工作区 → resume-workflow（端到端总编排）\r\n    ↓\r\n【阶段一：母版生命周期】\r\n已有简历 ──→ 解析 → 确认 → 增量追问 ──┐\r\n                                        ├→ resume-builder → 就地打磨经历 → 渲染单页母版\r\n从零开始 ──→ 逐步采访 ─────────────────┘\r\n    ↓\r\n（可选微调）resume-canvas → 本地可视化微调排版与文字 → 保存后重验闭环\r\n    ↓\r\n【阶段二：岗位定制生命周期】\r\n输入目标 JD ──→ jd-tailorer ──→ 结构化解构 JD & 输出要求地图\r\n                                  ↓\r\n                              变更预览（前置经历 / 对齐术语 / 真实缺口）\r\n                                  ↓\r\n                              用户确认门禁\r\n                                  ↓\r\n                              生成定制版 HTML/PDF + matching-analysis.md\r\n                                  ↓\r\n                              ATS 质量门禁与单页验证（validate_resume.py）\r\n                                  ↓\r\n                              输出至 tailored/<公司>-<岗位>/ 并更新版本记录\r\n    ↓\r\n（可选微调）resume-canvas → 本地微调定制版 → 保存后重验闭环\r\n```\r\n\r\n每个专业 Skill 均可单独使用；全程只基于用户明确确认的事实，不编造经历，不静默覆盖母版。\r\n\r\n## 两种输出模式\r\n\r\n开始生成前，Agent 会让你选择模式。两种模式使用同一份已确认的事实，不会因为换版式而增加经历。\r\n\r\n### 视觉 HTML/PDF\r\n\r\n适合人工阅读、作品集和需要更强视觉层次的场景。内置 6 种 A4 风格：\r\n\r\n<table>\r\n<tr>\r\n  <td align=\"center\"><b>现代简约</b></td>\r\n  <td align=\"center\"><b>经典商务</b></td>\r\n  <td align=\"center\"><b>创意个性</b></td>\r\n</tr>\r\n<tr>\r\n  <td><img src=\"https://raw.githubusercontent.com/Chasen-Liao/resume-skills/main/assets/modern-minimal.png\" width=\"280\" alt=\"现代简约\"></td>\r\n  <td><img src=\"https://raw.githubusercontent.com/Chasen-Liao/resume-skills/main/assets/classic-business.png\" width=\"280\" alt=\"经典商务\"></td>\r\n  <td><img src=\"https://raw.githubusercontent.com/Chasen-Liao/resume-skills/main/assets/creative-bold.png\" width=\"280\" alt=\"创意个性\"></td>\r\n</tr>\r\n<tr>\r\n  <td align=\"center\">留白、高对比、克制</td>\r\n  <td align=\"center\">深蓝、稳重、专业</td>\r\n  <td align=\"center\">大胆配色、强辨识度</td>\r\n</tr>\r\n<tr>\r\n  <td align=\"center\"><b>日式极简</b></td>\r\n  <td align=\"center\"><b>科技感</b></td>\r\n  <td align=\"center\"><b>简约蓝色商务</b></td>\r\n</tr>\r\n<tr>\r\n  <td><img src=\"https://raw.githubusercontent.com/Chasen-Liao/resume-skills/main/assets/japanese-minimal.png\" width=\"280\" alt=\"日式极简\"></td>\r\n  <td><img src=\"https://raw.githubusercontent.com/Chasen-Liao/resume-skills/main/assets/tech-dark.png\" width=\"280\" alt=\"科技感\"></td>\r\n  <td><img src=\"https://raw.githubusercontent.com/Chasen-Liao/resume-skills/main/assets/minimal-blue-business.png\" width=\"280\" alt=\"简约蓝色商务\"></td>\r\n</tr>\r\n<tr>\r\n  <td align=\"center\">暖色、轻质、呼吸感</td>\r\n  <td align=\"center\">深色、高对比、终端美学</td>\r\n  <td align=\"center\">深蓝、清晰、商务极简</td>\r\n</tr>\r\n</table>\r\n\r\n视觉版以 A4 单页和有效区域至少 98% 为目标。`resume-builder`、`jd-tailorer` 或 `resume-workflow` 生成视觉母版或视觉定制版并完成 PDF 验证后，应先询问用户是否需要 Canvas 预览：用户选择需要时，再执行 `npx -p @chasen-liao/resume-skills@latest resume-skills editor <实际生成的_visual.html路径> --manifest <实际_manifest路径>`；用户暂时不需要时不启动 Canvas，也不阻塞 HTML/PDF 交付。渲染脚本会对声明 `data-resume-layout=\"full-page\"` 的视觉 HTML 自动分布短内容、在安全密度下限内压缩长内容，并生成低分辨率 `*.preview.png`。若仍无法达到 98%、单页或底部安全区，必须明确报告原因。若用户选择 Canvas 但当前环境不能执行 `npx`，Agent 必须明确说明未启动并给出完整手动命令。内容过多时，应优先删减或确认事实，而不是为了塞进一页而缩小到难以阅读。最终 PDF 必须有 `*.resume-manifest.json`，其中 HTML/PDF/preview hash、Playwright renderer 版本与验证结果都对应当前文件。\r\n\r\n### ATS-safe HTML/PDF\r\n\r\n适合招聘平台或机器解析风险较高的投递场景。它使用单栏布局、标准章节标题、可复制文本和清晰的阅读顺序，尽量减少图片、复杂表格和装饰对解析的影响。\r\n\r\nATS-safe 只是降低解析风险，不代表一定通过任何 ATS，也不代表一定获得面试。当前项目输出 HTML 和浏览器打印 PDF，不生成 DOCX。\r\n\r\n## 本地 Canvas 编辑器\r\n\r\nAI 生成简历 HTML 之后，常常只需要一些小修小补：改一个错别字、微调字号或对齐。不必为这些小事重走一遍 Agent 工作流——在终端打开本地 Web 预览端，改完直接保存回本地 HTML，再导出 PDF 即可。\r\n\r\n完整闭环：**AI 生成 HTML → 打开 Web 预览端 → 小修小补 → 保存到本地 → 导出 PDF**。分步实操见 [Canvas 预览端指南](docs/canvas-editor-guide.md)。\r\n\r\nCanvas 只负责已生成视觉简历的最后文字与排版微调，不负责采访、AI 改写、JD 匹配或重新设计结构。文字修改后必须回到 Agent 工作流重新确认事实并验证 PDF。HTML 中已有的本地相对图片路径（例如 `../证件照/证件照-new.png`）可在预览中显示；保存时仍保留原始 `src`，不会把图片内嵌为 base64。\r\n\r\n下面是通过 `npx -p @chasen-liao/resume-skills@latest resume-skills editor <生成的_visual.html>` 打开的实际网页界面：\r\n\r\n<p align=\"center\">\r\n  <img src=\"assets/canvas-editor-preview.jpg\" width=\"1100\" alt=\"ResumeSkills Canvas 本地网页编辑器预览\">\r\n</p>\r\n\r\n### 这个界面怎么用\r\n\r\n1. **打开视觉版 HTML**：在简历文件所在目录执行下面的命令。编辑器会启动本机服务，并尝试自动打开浏览器。\r\n\r\n   ```bash\r\n   npx -p @chasen-liao/resume-skills@latest resume-skills editor resume_visual.html\r\n   ```\r\n\r\n2. **选择与编辑文字**：在中间的 A4 画布上单击文字即选中并可输入（仅纯文本，中文输入法可用）；双击同样进入编辑。Tab/方向键移动焦点，Enter/空格进入编辑，Ctrl/Cmd+Enter 或点击别处完成，Escape 撤销本次修改。\r\n\r\n3. **调整排版**：选中文字后，在右侧“排版”面板调整字号、字重、颜色、对齐、行高和段后间距；页面级设置可以调整页边距和主题色。修改会实时反映在画布中。\r\n\r\n4. **检查页面状态**：左侧会显示 A4 垂直溢出提示。出现溢出时，先回到内容或排版流程处理，不要把字号压缩到难以阅读。\r\n\r\n5. **保存修改后的 HTML**：点击左侧“保存修改”，会直接覆盖原始 HTML，并把同名前缀的 PDF manifest 标为失效。保存后必须重新渲染和验证 PDF。\r\n\r\n6. **打印 PDF**：点击“打印为 PDF”，在浏览器打印面板中选择 A4，并按需要关闭浏览器默认的页眉和页脚后保存。\r\n\r\n草稿会保存在当前浏览器中；关闭页面前请保存修改或打印 PDF。ATS-safe 单栏 HTML、普通外部模板和不带编辑协议的 HTML 不一定能被 Canvas 打开。\r\n\r\n可以调整：\r\n\r\n- 字号、字重、颜色和对齐方式\r\n- 行高、段后距、页边距和主题色\r\n\r\n不支持：\r\n\r\n- AI 改写或自动补充经历\r\n- JD 分析和关键词匹配\r\n- 新增字段、插入 HTML、自由拖拽、结构重排或图片编辑\r\n- ATS-safe 单栏模板\r\n\r\n对已有视觉 HTML 手动打开编辑器：\r\n\r\n```bash\r\nnpx -p @chasen-liao/resume-skills@latest resume-skills editor resume_visual.html\r\n```\r\n\r\n> **启动前强制校验**：`editor` 会先检查编辑协议（至少 1 个 `data-resume-editor-id` 位于叶子文本字段、ID 唯一、无容器级 ID），不合格时直接报错退出并给出 `rg -n` 定位命令，不会启动服务。需要单独检查时使用：\r\n>\r\n> ```bash\r\n> npx -p @chasen-liao/resume-skills@latest resume-skills validate resume_visual.html\r\n> ```\r\n>\r\n> `validate` 默认只做协议校验不启动服务；添加 `--check-layout` 可检查打印排版的溢出、底部/各栏留白和大块内部空隙（需要 Playwright 与 Chromium）。例如：`node bin/resume-skills.mjs validate resume_visual.html --check-layout --json`。退出码 0 = 通过、1 = 失败、2 = 浏览器测量不可用；未加此参数时，协议校验通过不代表排版合格。\r\n>\r\n> 留白门禁：底部空白不得超过有效高度的 2%，上下留白差不得超过 20mm，正文内部连续空隙不得超过有效高度的 25%；内置双栏按栏独立检查。`validate_resume.py --check-layout` 会检查 PDF 的上下平衡和内部空隙，同时提供 `--html` 时还会执行浏览器排版检查。所有测量通过后，AI 仍须打开最终整页截图复核，不能用 CI 或 manifest 通过代替实际看图。\r\n\r\n支持的高级 CLI 参数：\r\n\r\n- `--port <number>` 或 `-p <number>`：指定监听端口。**默认 `8848`**；被占用时自动顺延到 `8853`，仍不可用则回退随机端口。显式传入 `--port` 时为严格模式：占用即报错退出，不换端口。\r\n- `--host <host>`：仅允许 loopback 地址 `127.0.0.1` 或 `::1`（默认 `127.0.0.1`）；编辑器不会绑定到局域网或公网地址。\r\n- `--json`：以 **NDJSON 逐行**输出事件（`server_started` / `error` / `update_available` / `validation_passed`）；协议校验失败、参数校验失败、端口占用失败均输出 `event: \"error\"`。脚本请逐行 `JSON.parse`。\r\n- `--manifest <path>`：显式指定与该 HTML 关联的 PDF manifest，支持 HTML、PDF 和 manifest 分目录或不同文件名；未传时保存会自动失效与 HTML 同目录同前缀的 `<文件名>.resume-manifest.json`（若存在且关联当前 HTML）。\r\n- `--write-port-file <path>`：服务启动后把 `{url, port, pid, sourcePath}` 写入该文件（Jupyter 式端口文件），供后台启动/脚本轮询读取就绪状态。\r\n- `--no-open`：禁用自动调起系统浏览器（适合集成环境或无 GUI 控制台）。\r\n\r\n编辑器建立连接后支持 **Live Preview 实时热重载**：当源 HTML 文件在外部或由 Agent 更新时，预览与 Canvas 编辑器会自动拉取并刷新最新页面内容。\r\n\r\n点击“保存修改”后，文字修改和排版覆盖会原子写回原始 HTML（内置浏览器扩展免疫机制，保存时基于源文件白名单自动剔除沉浸式翻译、Dark Reader 等插件向页面注入的外部样式与脚本，确保落盘文件纯净）；关联的 `*.resume-manifest.json` 会立即失效，防止旧 PDF 被误认为仍对应当前 HTML。若 manifest 不在同目录或文件名不同，请用 `--manifest <path>` 显式关联。\r\n\r\n点击“打印为 PDF”后，在浏览器打印面板中选择 A4 并保存 PDF。若浏览器没有自动打开，请直接打开终端中显示的本地地址。\r\n\r\n## 文件会如何组织\r\n\r\n在**项目目录外**创建本地私有工作区，推荐保持“事实库和母版不动、定制版分目录”：\r\n\r\n```text\r\nresume/\r\n├── resume-facts.yaml                 # 唯一事实源；不存放未确认内容\r\n├── resume_visual.html\r\n├── resume_visual.pdf\r\n├── resume_visual.preview.png\r\n├── resume_visual.resume-manifest.json\r\n├── resume_ats.html\r\n├── resume_ats.pdf\r\n└── tailored/\r\n    └── company-role/\r\n        ├── resume_visual.html\r\n        ├── resume_visual.pdf\r\n        ├── resume_visual.preview.png\r\n        ├── resume_visual.resume-manifest.json\r\n        ├── resume_ats.html\r\n        ├── resume_ats.pdf\r\n        └── matching-analysis.md\r\n```\r\n\r\n`resume-facts.yaml` 使用 `resume-facts.example.yaml` 的结构，保存每条事实的来源、证据、置信度和确认时间。`jd-tailorer` 和 `resume-version-manager` 都遵循这个思路：定制版只能基于已确认事实进行重排、强调和改写，除非你明确要求，否则不回写或覆盖母版。\r\n\r\n### 用 Git 保留版本历史（推荐）\r\n\r\n可以将项目目录外的整个 `resume/` 工作区放入**本地私有 Git 仓库**。在确认事实库/母版变更或生成一份岗位定制版后创建一次提交，就可以清楚比较、恢复和追溯每次投递的依据；只有在试验互斥的母版方向时才需要分支。源码仓库根目录下的 `resume/` 已被忽略，避免误提交个人数据。\r\n\r\n简历包含个人信息，**不应推送到公开远程仓库**。Agent 不会自动初始化仓库、提交、推送或覆盖历史；这些会改变版本历史的操作都需要你确认。\r\n\r\n## 重要边界\r\n\r\n- 不编造经历、技能、指标、证书、公司或 JD 匹配结果。\r\n- JD 中的关键词是目标要求，不是你的个人事实；缺失项会被标记为缺口，而不是被补进简历。\r\n- 待确认的信息只能留在采访记录或匹配报告中，不能进入最终简历成稿。\r\n- “匹配度”是基于已提供材料的可解释比较，不是录用概率。\r\n- “ATS-safe”是结构和可解析性建议，不是对任何招聘系统的保证。\r\n- 你应在投递前核对联系方式、时间、数字、链接、页数和 PDF 中的文字复制结果。\r\n\r\n## 常用对话示例\r\n\r\n### 从零创建简历\r\n\r\n```text\r\n帮我创建一份后端开发实习简历。\r\n请先逐步采访我，再让我选择视觉版或 ATS-safe 版。\r\n所有经历和指标都必须来自我确认的信息。\r\n```\r\n\r\n### 改写经历，但不编数据\r\n\r\n```text\r\n请优化下面三条项目经历，目标岗位是 Python 后端实习。\r\n可以调整表达和顺序，但不要补充我没有提供的数字、技术或成果。\r\n```\r\n\r\n### 先分析 JD，再决定是否投递\r\n\r\n```text\r\n请分析这份 JD：列出硬性要求、加分项、关键词、我的匹配证据和真实缺口。\r\n先不要改写简历。\r\n```\r\n\r\n### 定制一个岗位版本\r\n\r\n```text\r\n请根据这份 JD 定制我的简历。\r\n保留母版，说明每处重排和改写的事实来源，并同时检查视觉版和 ATS-safe 版是否适合这个岗位。\r\n```\r\n\r\n### 投递前做 ATS 检查\r\n\r\n```text\r\n请检查这份 resume_ats.pdf 的文本提取顺序、章节结构和 JD 关键词覆盖。\r\n请把解析风险和真实内容缺口分开说明，不要承诺一定通过 ATS。\r\n```\r\n\r\n## 常见问题\r\n\r\n### Agent 没有自动使用 Skill\r\n\r\n重新打开或新建会话，然后在请求中明确写出 Skill 名称，例如 `resume-workflow`、`resume-builder` 或 `jd-tailorer`。也可以在客户端支持时使用 `$resume-workflow` 这样的显式调用方式。\r\n\r\n### `jd-tailorer` 提示缺少参考文件\r\n\r\n重新安装全部 Skills：\r\n\r\n```bash\r\nnpx skills add Chasen-Liao/resume-skills --skill '*' --agent codex --yes\r\n```\r\n\r\n`jd-tailorer` 会共享 `resume-builder` 的事实契约和写作规范；只安装单个 Skill 可能缺少这些参考文件。\r\n\r\n### Canvas 无法打开某个 HTML\r\n\r\nCanvas 只接受带 Resume Skills 编辑协议的内置视觉模板。ATS-safe HTML、普通外部模板或手写 HTML 不一定支持；请回到 Agent 重新生成视觉版，或直接用浏览器打开 HTML 并打印 PDF。\r\n\r\n### PDF 超过一页或排版溢出\r\n\r\n先确认是否有可以删减的低相关内容，再让 Agent 做排版调整。不要删除关键事实、压缩到不可读的字号，或把未确认信息塞进空白区域。\r\n\r\n## 相关链接\r\n\r\n- [Agent Skills 开放规范](https://agentskills.io/specification)\r\n- [`skills` CLI 文档](https://www.skills.sh/docs/cli)\r\n- [npm 包：`@chasen-liao/resume-skills`](https://www.npmjs.com/package/@chasen-liao/resume-skills)\r\n- [Resume Skills 源码仓库](https://github.com/Chasen-Liao/resume-skills)\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}