{"_id":"@ai-dossier/worktree-pool","_rev":"15-a180b46deb149ab859e1ace2f324b03c","name":"@ai-dossier/worktree-pool","dist-tags":{"latest":"0.7.3"},"versions":{"0.1.0":{"name":"@ai-dossier/worktree-pool","version":"0.1.0","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.1.0","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"5be813d8a481dcc0c767ac88a3fe4ceacbcaa2d1","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.1.0.tgz","fileCount":21,"integrity":"sha512-7QVbzKZgQI95aQ/Bk9i9/JyeofSMv/vkRWR88yXeIHQO5Iu4bJ44nQ4hg01AcQOuTHgPzPqhkB1wV1xYtGXNAQ==","signatures":[{"sig":"MEUCIBw8QmfPIlWzAOUPNJQg0HxxF2zpqZ5mS890puXOfbbvAiEA2RN1wTPC/0IlP/9CyGxJ6bQdI07wP/CEo/T2GeWkNXQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80302},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"458232c9dd08203b816dbe6436b4482a83ffa912","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"11.6.2","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.1.0_1772881385171_0.8287044015876432","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ai-dossier/worktree-pool","version":"0.1.1","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.1.1","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"252b1cdf8c4e8992ddbb98ccfc8beb6f1b201b3a","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.1.1.tgz","fileCount":22,"integrity":"sha512-/TdJvTiNqyq8qnsd0Sw6BHVhG5RpVAUo5wSx7bXnO6PIV8MwLDhcEo0gItz5dQJbeVks9cGTNucpNan20ClMog==","signatures":[{"sig":"MEQCIDI5rRQDtaGgYw14DrV/P7ld9UKlRo5kWuHAHOPm4PgIAiAvZwUBkOTGApjiNZ6njY++4MuZTwCyD/J8lxtCviHrpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":82374},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"f145d41b3db3a3c6390369e610747fdc226c9817","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"11.11.0","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.1.1_1772881876800_0.39119018780138326","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ai-dossier/worktree-pool","version":"0.2.0","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.2.0","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"8b8e2d2674c40df4589bb29a50c5e39f44c7c9fd","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.2.0.tgz","fileCount":22,"integrity":"sha512-mEfjOaP9olDc/6s1+PWFRKDpGGPxPnreyEbZK5QAYGS4Xjloo/XuomSUOVkgfUSGtLe6714sN3U1BUDePTGbSA==","signatures":[{"sig":"MEUCIGUECAMLYCRFmBPIeR4SsTnpp+Eymg/q+MKKdysjIleRAiEAxZDbU7TezBLEEW8f5H9lFuWR2jNDehhWnasc6aWK6SQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":84297},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"faea3aca39892e42b9276578e5999eb3b641d1bc","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"11.11.0","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.2.0_1772885468191_0.7533385839951301","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ai-dossier/worktree-pool","version":"0.3.0","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.3.0","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"87a5e2f6d77f63367be17d50c07086c746f0f961","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.3.0.tgz","fileCount":22,"integrity":"sha512-9i4MSXz+0q8FoVTnNMUXOXUyG0O18W7qe+Xvaqe5msiCXVOuouSbVgWlIpFZkdCnChGVW82h6ANhygLoWCAKdg==","signatures":[{"sig":"MEUCIB0c/TbF38n/2NmgZf13Dens6TTeW6fu6M4Xb833WZrDAiEA1AdID9t3MaRJpT6GdUti/pOsQrYc7dhnIeSNt0Wwldw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85161},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"3090edf11c41289cf701b8e766b769bc56fdb9f8","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"11.11.0","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.3.0_1772887286855_0.005060744230871661","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@ai-dossier/worktree-pool","version":"0.4.0","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.4.0","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"f713aafe9743fcd900ef4947090527528b5f6c1c","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.4.0.tgz","fileCount":22,"integrity":"sha512-RNsbHccMZMCal0IBLMjqxq/2qcmUtxMQpk37Y2XEf/UlVJv1434hh01VJRZFcD8T9oRbtPVQbiKk5LVHmTIsww==","signatures":[{"sig":"MEQCIAV3oUCmrpL4BYUcq5u33OYDM2MRT2c68pk6Os8+EfRZAiA8nH7egFFZMLQOPWjM8w3EuGQwvK9oHgfdgFspy7QZgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85493},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"8541dca61dfeed2235e9af6b24a84dc04ff09263","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"11.11.0","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.22.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.4.0_1772893533954_0.35642188087049065","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@ai-dossier/worktree-pool","version":"0.5.0","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.5.0","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"89982ce04e8bdbbcfdd338c32228096d3d25321b","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.5.0.tgz","fileCount":26,"integrity":"sha512-TZVaRTCg7Z5iqt8btdykrE9T8Misj9hl9bofDZS9TuEXs9Mued81NINfHEa4pPXP4+xR4D+uoUknMMej5zHONA==","signatures":[{"sig":"MEUCIAT/bA8hdgnd1cbxvieQPXuCDdJlTli+ZhnISesyW2w2AiEA2BAX+1ZUi8uHoUrr7AqhngNEYFQWMWMdqPlHMgVOoRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":113466},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"a6edcdaec19b3bc4bc5893d9f7179b873c057ba0","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"12.0.2","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.5.0_1787467681066_0.3269632480295044","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@ai-dossier/worktree-pool","version":"0.5.1","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.5.1","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"51734360bb302b2d19f0ba468c7e0c539bdf3b11","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.5.1.tgz","fileCount":26,"integrity":"sha512-zE529E0Bt1+bhIlXuxvwzBnTBuJke7EzzHiyAE2inf9l+e6aH3YFAY8WqDbR8lIBxJFRNIg/0CtqZt7uMY529w==","signatures":[{"sig":"MEUCIBhpYl22ykWf4c5ziHWAUb6wmJnrCskeVc5b5gg75/9zAiEAoxVJIZ5pRimgZ64jelpguryhUC08LDOLeG+YNVUi9lo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":144661},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"dc5d94248ed156872d15582638cda72ff637d636","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"12.0.2","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.5.1_1787499041971_0.09359681911359297","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@ai-dossier/worktree-pool","version":"0.5.2","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.5.2","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"c20f05bf90bb9c7d47735594d2fc6607ce61d0a5","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.5.2.tgz","fileCount":26,"integrity":"sha512-MgfzlUo6qp+acPO8Ed14XZFVBE8Ca/WTtep4OGcrHCUC0oBjqWDHC64bFRS/Gvd3CpCoacO5QhxZhVCoHdugxQ==","signatures":[{"sig":"MEYCIQCJp3riNRKfFxbRWanfDd6xFJ9CBqFQXuGxqrQQ9fVkQAIhAIrLKUhB+3ezk3j13Q9lla8xtu1C5+VBNxHVyRaUgRie","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.5.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":144759},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"200c07a17302f6bc1a2d519346bd37a94794fd8a","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"12.0.2","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.5.2_1787555744443_0.5670779753909001","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@ai-dossier/worktree-pool","version":"0.5.3","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.5.3","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"87601711b6f0ac922b0401e3a9746fa2ed3e22de","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.5.3.tgz","fileCount":26,"integrity":"sha512-IY1LzrM0+52tdwAceoLjgzt1teDunk356OCZiWxGoyh6xwOY4UxJPDuVrd7Xt5xxOMxkXUAwmWRmvCWN5b003A==","signatures":[{"sig":"MEUCIQCm3rtlylD4kUsO0Fx20oyuR3mmBzcsY9hSQZfqMMRK/QIgEXWwdcDuwfJ1CrrOksl9q0xHOPECDRt8muPe09pA5d0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.5.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":157116},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"8e419c58898fbdcd5e01abaeb46833ff9da787e7","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"12.0.2","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.5.3_1787556975224_0.3838022528613796","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@ai-dossier/worktree-pool","version":"0.6.0","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.6.0","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"6ee6d7184d063569e4b759680a2e223e37787bcd","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.6.0.tgz","fileCount":26,"integrity":"sha512-qBK3hWF6fhFJRtxw67ORQs/O6fm+WdoS3lItDs0hyallegvQ7ceriQ8dC6STBV6f0iNNaBdnx+S3n25IwaZgqA==","signatures":[{"sig":"MEUCIQD9cJdcVFshFnQwy41eoJVjyCUX6wDY7J8poxB0GsgTvAIgF8dwYV/wRyfVJXfF+0ABvc0zvUxUiuzW/JZxHhTaCm4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":191598},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"ce3e640196655ead1421aaa01d98a94220111a32","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"12.0.2","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.6.0_1787641783713_0.906136556953526","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@ai-dossier/worktree-pool","version":"0.6.1","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.6.1","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"3d7266c6c2677439dacfcde9607cda93887a0ffc","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.6.1.tgz","fileCount":26,"integrity":"sha512-WgY73IuLs+pCJ1fg6LY1IPOohKlgi0xv4+kc2J9fAg9e6427AkMuuiav44n34qvgYsOjNMCDjUr0lyCGVzQiPA==","signatures":[{"sig":"MEUCIQCxx8HuwdYC0d2eRt0C4NZFMj0EjA125LevAC/jyI5iKwIgNWU+XlinTjEmk3Siu34n634hmk5rO08hkHAtX1eWtnU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":192290},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"2a1e9f8ea087195c21ff992418b6de33a3d87a23","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"12.0.2","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.6.1_1788334334326_0.2600721638311192","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@ai-dossier/worktree-pool","version":"0.7.0","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.7.0","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"28c701422c5c82f88034bbc83e58c36fe31c432a","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.7.0.tgz","fileCount":30,"integrity":"sha512-SWBcEFCpBNlaNhDpN1dyTJ9cTDAhgmX0P/9aoX7u+fnmOi56QC8otN781JeidPFTPvyKftpuja24DLLnvnmvig==","signatures":[{"sig":"MEYCIQCfp3l5Bd35UppwCyoGK+HEdgGg7hLYKYXKVV+VUubEKgIhAP1SwwlkdlroPqYkr0qslZHIffOtxTXFa0AjeovDOpoi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":245152},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"cfa5e010a542e06c2d19628900d4d32d60b041a3","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"12.0.2","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.7.0_1789659909616_0.9365056826772886","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@ai-dossier/worktree-pool","version":"0.7.1","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.7.1","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"3f42b773cc56110c11066f7bae20903b61ea3192","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.7.1.tgz","fileCount":30,"integrity":"sha512-5xu3rWjF5ZfJXCGeLeKIhLxbBmxP5Jp41/4O+yazDzCUdvA6hw/J55ErmRfqKwftdhYZ2nnoTVEYcnz+xAPj3g==","signatures":[{"sig":"MEQCIFTN6bO88nbJOaGyJlJyI7U9dm0tDs+gAR3ZztDSHk4dAiAbBt5nYkIVNARcZsKvLa5TlGN5lG9ZGxw51l4ZulpxoA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":260220},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"495202ebdf5d2e0057dbfd1c1ff265a919a0cd2b","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"12.0.2","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.7.1_1789662239263_0.8098569851025712","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@ai-dossier/worktree-pool","version":"0.7.2","keywords":["worktree","pool","git","dossier","pre-warm"],"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","_id":"@ai-dossier/worktree-pool@0.7.2","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"homepage":"https://github.com/imboard-ai/ai-dossier#readme","bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"bin":{"worktree-pool":"dist/cli.js"},"dist":{"shasum":"6c8a7a432d7ec0949ace5e6c4be80f4c1de06536","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.7.2.tgz","fileCount":30,"integrity":"sha512-KBRXshv/8jvOMIN0xm/qd+GXqEndfHgfm++MCrPxhL3T+ky4Qwb57k+SF4id/s3lwkn2k9UzkbiTgh7ftJ9wAQ==","signatures":[{"sig":"MEUCIQDImkSBSuK/dTfxEp/NCWbln2knSRp28to1zrT2bVkv7wIgXkB2K0BHfFYN+B3YVUwEhlaqbTx2FnYjmRR3gG+SxY0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCzRMCI2OVBm+o/dZx+n1UPb9xldGD4qJHkD7/vpt7l2AIgJwqnthaP3cVb1gMKly5dter5CYWixytJBnCk/JmUqD4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":263264},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.0.0"},"gitHead":"73d49bd61707539673bb8c130c55e1af17775ae1","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"12.1.0","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"tmp":"tmp/worktree-pool_0.7.2_1790198562618_0.4365214013381933","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"_id":"@ai-dossier/worktree-pool@0.7.3","bin":{"worktree-pool":"dist/cli.js"},"bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"dist":{"shasum":"d80bc21180f700e1a98e4da80e5426da0534785d","tarball":"https://registry.npmjs.org/@ai-dossier/worktree-pool/-/worktree-pool-0.7.3.tgz","fileCount":30,"integrity":"sha512-EzO1plQEDQNW2ezwRwq1bF1kt10SZ5TZnA7XJlQ6jBKS9mU3rcMwUcW6N+yARPhm50pz2R/HR0dhPP8dQL6uRw==","signatures":[{"sig":"MEUCIQDe1hIMw295KPK7LmrM6rdeob1r2CRhvUerNjGdDGSKugIgaAubyY1q3XVF4ySJh4yMRYaV/ntj6y3cGfusBXZgf/o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDTLKDBbpV5pNpjV1ZBiKoltrc3r0Q5hm3WtOMKqgn6IwIgcPak8+O4X5KdhPE54aZi6tWRpdlrvcfij/JvTdnZdQ4="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ai-dossier%2fworktree-pool@0.7.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":263254},"main":"dist/index.js","name":"@ai-dossier/worktree-pool","types":"dist/index.d.ts","author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"engines":{"node":">=20.0.0"},"gitHead":"8fb815c77fe3028f5b39fabb4ba42b7bef62d3f8","license":"AGPL-3.0-only","scripts":{"dev":"tsc --watch","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage"},"version":"0.7.3","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"d482c027-c271-49d5-aa38-ae03d0f2eed6"}},"homepage":"https://ai-dossier-imboard.vercel.app","keywords":["worktree","pool","git","dossier","pre-warm"],"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"_npmVersion":"12.1.0","description":"Pre-warmed git worktree pool for instant issue setup","directories":{},"maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"_nodeVersion":"22.23.2","publishConfig":{"access":"public","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.9","typescript":"^5.9.3","@types/node":"^24.10.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/worktree-pool_0.7.3_1790729469479_0.981894712586646"}}},"time":{"created":"2026-03-07T11:03:05.073Z","modified":"2026-09-30T00:51:10.151Z","0.1.0":"2026-03-07T11:03:05.358Z","0.1.1":"2026-03-07T11:11:16.988Z","0.2.0":"2026-03-07T12:11:08.341Z","0.3.0":"2026-03-07T12:41:27.022Z","0.4.0":"2026-03-07T14:25:34.096Z","0.5.0":"2026-08-23T06:48:01.202Z","0.5.1":"2026-08-23T15:30:42.146Z","0.5.2":"2026-08-24T07:15:44.596Z","0.5.3":"2026-08-24T07:36:15.363Z","0.6.0":"2026-08-25T07:09:43.851Z","0.6.1":"2026-09-02T07:32:14.497Z","0.7.0":"2026-09-17T15:45:09.755Z","0.7.1":"2026-09-17T16:23:59.410Z","0.7.2":"2026-09-23T21:22:42.721Z","0.7.3":"2026-09-30T00:51:09.568Z"},"bugs":{"url":"https://github.com/imboard-ai/ai-dossier/issues"},"author":{"name":"Yuval Dimnik","email":"yuval.dimnik@gmail.com"},"license":"AGPL-3.0-only","homepage":"https://ai-dossier-imboard.vercel.app","keywords":["worktree","pool","git","dossier","pre-warm"],"repository":{"url":"git+https://github.com/imboard-ai/ai-dossier.git","type":"git","directory":"packages/worktree-pool"},"description":"Pre-warmed git worktree pool for instant issue setup","maintainers":[{"name":"yuvaldim","email":"yuval.dimnik@gmail.com"}],"readme":"# @ai-dossier/worktree-pool\n\n[![npm version](https://img.shields.io/npm/v/@ai-dossier/worktree-pool)](https://www.npmjs.com/package/@ai-dossier/worktree-pool)\n[![npm downloads](https://img.shields.io/npm/dm/@ai-dossier/worktree-pool)](https://www.npmjs.com/package/@ai-dossier/worktree-pool)\n[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](https://github.com/imboard-ai/ai-dossier/blob/main/LICENSE)\n\nPre-warmed git worktree pool for instant issue setup. Eliminates the ~3-5 minute cold start (git worktree add + install + build) by maintaining a pool of ready-to-use worktrees.\n\nWorks with pnpm, yarn, bun and npm — the package manager, lockfile and build command are detected from the project, or pinned explicitly in `.worktree-pool.json`.\n\n## Install\n\n```bash\nnpm install -g @ai-dossier/worktree-pool\n```\n\nOr use directly with npx:\n\n```bash\nnpx @ai-dossier/worktree-pool status\n```\n\nRequires Node.js >= 20.0.0.\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `worktree-pool status [--json]` | Show pool inventory (warm/assigned/broken counts); `--json` prints the whole inventory, including per-entry `status`, for callers |\n| `worktree-pool replenish [--count N]` | Pre-warm spares up to target count |\n| `worktree-pool claim --issue N --branch B` | Claim a warm worktree, print path |\n| `worktree-pool return --path P [--json]` | Return worktree to pool for reuse; kills any process still running out of it first, self-checks on success, and on failure marks the entry `broken` and exits non-zero naming the step |\n| `worktree-pool refresh` | Fetch origin + rebuild in all warm worktrees |\n| `worktree-pool gc [--dry-run] [--yes]` | Remove stale/orphaned pool worktrees (never anything else), killing any process still running out of one first |\n| `worktree-pool reap [--older-than H] [--dry-run] [--yes]` | Kill processes orphaned by a removed or non-assigned worktree, at least `H` hours old (default 24) — the sweep for what `return`/`gc` already missed |\n| `worktree-pool init` | Configure pool directory for this project |\n| `worktree-pool detect [dir]` | Print the detected package-manager env as JSON |\n\n## Quick Start\n\n```bash\n# Initialize pool in your repo\nworktree-pool init\n\n# Pre-warm 3 worktrees\nworktree-pool replenish --count 3\n\n# Check pool status\nworktree-pool status\n\n# Claim a worktree for an issue (~2 seconds)\nWORKTREE_PATH=$(worktree-pool claim --issue 42 --branch feature/42-add-dashboard)\ncd \"$WORKTREE_PATH\"\n\n# Return worktree to pool when done\nworktree-pool return --path \"$WORKTREE_PATH\"\n\n# Clean up stale worktrees (prints the plan first, then asks)\nworktree-pool gc --dry-run   # show what would go\nworktree-pool gc --yes       # remove it, no prompt (required when stdin is not a TTY)\n\n# Sweep processes orphaned by worktrees return/gc already lost track of —\n# run this on a schedule (a host cron/timer), not per-issue\nworktree-pool reap --older-than 24 --dry-run\nworktree-pool reap --older-than 24 --yes\n```\n\n## How It Works\n\n```\nreplenish          claim               return\n    |                 |                   |\n    v                 v                   v\n base_ref  ──> [warm worktree] ──> [assigned] ──> [recycled/warm]\n                 install             rename to       reset to\n                 + build             feature branch  temp branch\n```\n\n1. **Replenish** creates worktrees from `base_ref` (default `origin/main`) on temp branches, then runs the warm commands (install + build)\n2. **Claim** renames a warm worktree, switches to your feature branch — instant setup (~2s)\n3. **Return** first kills any process still running out of the worktree (see [Process cleanup](#process-cleanup) below), then recycles it back to pool on a fresh temp branch, then verifies the result against reality — the entry really reads `warm`, no tracked file is dirty, and the new `pool/spare-*` branch is really checked out — before reporting success. A failure at any step leaves the entry `broken` (never `assigned`, never a falsely-`warm` spare), leaves the directory on disk, and exits non-zero naming the step\n4. **GC** kills any process still running out of a worktree it is about to touch, then removes broken entries and stale entries (>72h) and reconciles disk state vs pool state — only for worktrees the pool created (see [Sharing the pool directory](#sharing-the-pool-directory))\n\nClaim and return only re-run the warm commands when the project's lockfile changed between the worktree's base commit and `base_ref` — otherwise the existing `node_modules` and build output are reused.\n\n## Process cleanup\n\nA dev server, jest run, or vite server started inside a worktree by a verification step does not stop on its own when the worktree it was started in is recycled or removed. Left unaddressed, these outlive the worktree, the branch and the issue that spawned them — a real sweep on hcc found 13 such processes across four merged worktrees, one holding open connections to a shared test database for 10 days.\n\n- **`return` and `gc` kill first.** Before recycling or removing a worktree, both send SIGTERM to every process whose cwd or command line is rooted under that exact worktree path, wait up to 5 seconds, then SIGKILL anything still alive. The kill is scoped to that one worktree — a sibling worktree sharing the same pool directory is never touched — and the killed pids are printed and included in `return --json`'s `killedProcesses` / `gc`'s `killedProcesses` field.\n- **`reap` is the sweep for what got away** — a process from a worktree that was removed by something other than this tool, or that is otherwise no longer `assigned`:\n\n  ```bash\n  $ worktree-pool reap --older-than 24 --dry-run\n  Found 1 orphaned process(es):\n    pid 48213  age 11.4h  worktree bug-701-fix-something\n        node /repo/../worktrees/bug-701-fix-something/node_modules/.bin/vite\n  ```\n\n  `reap` never touches a worktree the pool did not create (the same [ownership rule](#sharing-the-pool-directory) `gc` uses), and never a currently-registered worktree in an active pool status (`assigned`, `recycling`, `creating`, `warming`) — that is active work, not an orphan, and includes a `return` that is mid-flight but has not reached its own kill step yet. Run it on a schedule (a host cron/timer calling `reap --older-than 24 --yes`), not per-issue; `return`/`gc` already handle the common case at the moment a worktree changes hands.\n- The Linux discovery path (`/proc/*/cwd` + `/proc/*/cmdline`) always excludes the invoking process and its whole parent chain, so running `return --path <wt>` from a shell whose own cwd is inside `<wt>` cannot kill its own invoker. The `ps`-based fallback (non-Linux) can only exclude the invoking process itself — an ancestor's cwd/ppid is not determinable without `/proc`. `return`, `gc`, and `reap` all print `skipped self/ancestors: <pids>` whenever a match was excluded this way — routinely true for `return`, since its own command line contains the worktree path it was given.\n- **`return` and `gc` refuse an unsafe kill root outright** rather than silently skipping it: an empty path, the filesystem root, the git root itself, or anything outside the pool directory. Every current call site already derives a safe path, so this should never fire — it exists so a future one cannot skip the check.\n\n### Pool State\n\nPool state is stored in `worktrees/.pool-state.json` (automatically gitignored). Each worktree transitions through:\n\n```\ncreating -> warming -> warm -> assigned -> recycling -> warm\n                                       -> destroying\n                                          recycling -> broken   (a failed return)\n```\n\nA `broken` entry is never handed out — `claim` only ever selects `warm`.\n\nConcurrent access is protected by atomic `mkdir`-based file locking.\n\n## Sharing the pool directory\n\n`pool_dir` may be — and usually is — the same directory you keep your own\nworktrees in. **The pool never touches a worktree it did not create.**\n\nA worktree in `pool_dir` belongs to the pool only when either:\n\n- its path is recorded in `.pool-state.json`, **or**\n- its directory name matches the pool's own `pool-<timestamp>-<pid>` naming\n  **and** it has a `pool/spare-*` temp branch checked out.\n\nEverything else — your branch worktrees, plain directories, even a directory\nthat happens to match the pool's naming but is on a branch of yours — is\n*foreign*. Foreign worktrees are listed by `status` and `gc` as\n`foreign, skipped` and are never removed, reset, or cleaned by `gc` or\n`refresh`. A failed `return` removes nothing at all — not even its own worktree\n(see [Broken entries](#broken-entries-a-failed-return)). Branches are held to\nthe same rule: `gc` only ever deletes\n`pool/spare-*` refs.\n\nBecause deletions are irreversible for uncommitted work, `gc` also prints the\nexact list it is about to remove and then either asks for confirmation (TTY) or\nrequires `--yes`. Use `--dry-run` to see the plan and exit.\n\n```bash\n$ worktree-pool gc --dry-run\nWill remove 1 item(s):\n  [stale] /repo/../worktrees/pool-1750000000000-4242\n      stale past 72h (warmed 2026-08-13T15:13:22.790Z); recorded in .pool-state.json\n\nForeign, skipped (2) — not created by the pool:\n  /repo/../worktrees/2332-budget-composable-dashboard\n      not recorded in .pool-state.json and the directory name does not match the pool's own pool-<timestamp>-<pid> naming\n  /repo/../worktrees/fix-1173-playwright-start\n      not recorded in .pool-state.json and the directory name does not match the pool's own pool-<timestamp>-<pid> naming\n\nDry run — nothing was removed.\n```\n\nIf a pool worktree's directory has drifted — the recorded path now holds a\ndifferent branch — `gc` drops the stale row from `.pool-state.json` and leaves\nthe directory on disk rather than guessing.\n\n### Corrupted directories\n\nA pool directory that is still on disk but that git no longer has an admin dir\nfor (`.git/worktrees/<id>`) is **corrupted**: every git command inside it fails\nwith `fatal: not a git repository`. `status` lists these separately, and\n`claim` skips them and hands out the next warm spare instead of failing:\n\n```bash\n$ worktree-pool status\n...\nCorrupted directories (no git admin dir, skipped by claim): 1\n  pool-1787468026330-1079658  recorded in .pool-state.json as pool-1787468026330-1079658, no longer a registered worktree — its git admin dir is gone (a `git worktree prune` after an unrepaired rename), so every git command inside it fails\nRun 'worktree-pool gc --yes' to clear corrupted pool directories.\n```\n\nCorrupted directories are reported, never removed silently — `gc` clears them\nunder the same ownership rules as everything else.\n\n### Broken entries (a failed `return`)\n\nDistinct from a corrupted *directory* above: a **broken entry** is a pool entry\nwhose `return` failed part-way. Rather than being destroyed, it is left behind\nwith `status: \"broken\"`, recording which step failed and why, so the failure is\nvisible instead of silent:\n\n```bash\n$ worktree-pool return --path ../worktrees/bug-453-x\nError: return failed at step 'rename': Recycle target already exists: /repo/../worktrees/pool-...\nPool entry pool-1787468026330-1079658 is now marked 'broken' and was NOT destroyed.\n  Worktree left at: /repo/../worktrees/bug-453-x\n  Inspect with 'worktree-pool status --json'; clear with 'worktree-pool gc'.\n```\n\n`status` counts them in their own column and names the failed step:\n\n```\nWarm: 2  Assigned: 1  Creating: 0  Broken: 1  Other: 0  Total: 4\n\nWorktrees:\n  pool-1787468026330-1079658  [broken]  bug-453-x -> issue #453 (bug/453-x) failed at 'rename': Recycle target already exists\n```\n\n`claim` never hands one out. The directory is deliberately left on disk so the\nfailure can be inspected; `gc` collects broken entries immediately — they are\nunusable from the moment they are marked and occupy `max_pool_size` capacity\nuntil removed — under the same ownership rules as everything else.\n\n## Checking the pool from a script\n\n`status --json` prints the whole inventory on stdout, so a caller can assert\nthat a `return` actually landed instead of trusting the exit code of whoever\nclaimed it did:\n\n```bash\nworktree-pool status --json | jq '.worktrees[] | select(.status == \"broken\")'\n```\n\nNote the two distinct fields, matching the two sections above: the top-level\n`broken[]` array lists *corrupted directories* (#443), while an entry with\n`\"status\": \"broken\"` in `worktrees[]` is a *failed return* (#453). The\n`broken_entries` count covers the latter.\n\n`return --path P --json` prints the same self-check as a JSON object:\n\n```json\n{\n  \"id\": \"pool-1787468026330-1079658\",\n  \"path\": \"/repo/../worktrees/pool-1787468026330-1079658\",\n  \"verification\": {\n    \"entry_status\": \"warm\",\n    \"directory_clean\": true,\n    \"dirty_entries\": [],\n    \"checked_out_branch\": \"pool/spare-pool-1787468026330-1079658\",\n    \"expected_branch\": \"pool/spare-pool-1787468026330-1079658\"\n  },\n  \"killedProcesses\": [\n    { \"pid\": 48213, \"command\": \"node .../vite\", \"signal\": \"SIGTERM\" }\n  ]\n}\n```\n\n### Programmatic use\n\n`returnWorktree` is `async` (it kills processes before recycling — see\n[Process cleanup](#process-cleanup)):\n\n```ts\nimport { returnWorktree, ReturnFailure } from '@ai-dossier/worktree-pool';\n\ntry {\n  const result = await returnWorktree(worktreePath);\n  // result.id, result.path, result.verification, result.killedProcesses, result.killErrors\n} catch (err) {\n  if (err instanceof ReturnFailure) {\n    // err.step (a ReturnStep), err.entryId, err.worktreePath, err.killedProcesses, err.killErrors\n    // The entry is 'broken' and the directory was NOT destroyed — unless\n    // err.markError is non-null, which means the marking write itself failed\n    // and pool state should be re-checked before the next claim.\n  }\n}\n```\n\n`reap` is the same shape, without the try/catch — it never throws:\n\n```ts\nimport { reap } from '@ai-dossier/worktree-pool';\n\nconst result = await reap({ olderThanHours: 24, dryRun: true });\n// result.candidates (what matched the age threshold), result.killed (empty on a dry run),\n// result.aborted (confirmation missing / declined), result.errors\n```\n\nThe lower-level primitives `return`/`gc`/`reap` are built on — `findWorktreeProcesses`, `killProcesses`, `killWorktreeProcesses` — are also exported, for a caller that wants process discovery/kill on its own terms.\n\n## Configuration\n\n### Pool sizing — `.pool-state.json`\n\n| Setting | Default | Description |\n|---------|---------|-------------|\n| `target_spares` | 5 | Number of warm spares to maintain |\n| `max_pool_size` | 10 | Maximum total worktrees in pool |\n| `stale_after_hours` | 72 | Hours before a warm worktree is considered stale |\n\n### Project layout — `.worktree-pool.json`\n\nLives at the repo root. Every key is optional; `worktree-pool init` writes `pool_dir` into it without touching the others.\n\n| Key | Default | Description |\n|-----|---------|-------------|\n| `pool_dir` | `../worktrees` | Directory holding pool worktrees, relative to the repo root |\n| `project_subdir` | _(none)_ | Package root relative to the worktree root, for repos whose `package.json` is nested (e.g. `\"main\"`). Warm commands run here, and the lockfile is looked for here |\n| `warm_commands` | _(detected)_ | Explicit warm-up commands as argv arrays. Wins over detection |\n| `base_ref` | `origin/main` | Ref that pool worktrees are branched from and reset to. The remote to fetch is taken from its prefix (`upstream/develop` fetches `upstream`) |\n\n```json\n{\n  \"pool_dir\": \"../worktrees\",\n  \"project_subdir\": \"main\",\n  \"base_ref\": \"origin/develop\",\n  \"warm_commands\": [\n    [\"pnpm\", \"install\", \"--frozen-lockfile\", \"--prefer-offline\"],\n    [\"pnpm\", \"run\", \"build:libs\"]\n  ]\n}\n```\n\n### Package-manager detection\n\nWhen `warm_commands` is not set, the warm-up is derived from the project directory (`<worktree>/<project_subdir>`):\n\n1. **Package manager** — the `packageManager` field in `package.json` wins; otherwise the first lockfile found, probed in the order `pnpm-lock.yaml`, `yarn.lock`, `bun.lockb` / `bun.lock`, `package-lock.json`; otherwise npm.\n2. **Install** — the frozen variant when the lockfile is present, a plain install when it is not (`npm ci`, `pnpm install --frozen-lockfile`, and `yarn install --immutable` all fail without a lockfile).\n3. **Build** — `build:libs` if that script exists, else `build`, else no build step.\n\n| Manager | Lockfile | Install (lockfile present) | Install (no lockfile) |\n|---------|----------|----------------------------|-----------------------|\n| pnpm | `pnpm-lock.yaml` | `pnpm install --frozen-lockfile --prefer-offline` | `pnpm install --prefer-offline` |\n| yarn | `yarn.lock` | `yarn install --immutable` | `yarn install` |\n| bun | `bun.lockb` / `bun.lock` | `bun install` | `bun install` |\n| npm | `package-lock.json` | `npm ci` | `npm install` |\n\nInspect what would run:\n\n```bash\nworktree-pool detect            # this repo's package root\nworktree-pool detect ./apps/api # any directory\n```\n\n```json\n{\n  \"pm\": \"pnpm\",\n  \"lockfile\": \"pnpm-lock.yaml\",\n  \"installCmd\": [\"pnpm\", \"install\", \"--frozen-lockfile\", \"--prefer-offline\"],\n  \"buildCmd\": [\"pnpm\", \"run\", \"build:libs\"]\n}\n```\n\n## Integration\n\nWorks with [ai-dossier](https://github.com/imboard-ai/ai-dossier) workflows:\n\n- `setup-issue-workflow` v1.6.0+ auto-claims from pool when available\n- `full-cycle-issue` v2.5.0+ returns worktrees to pool after merge\n- `batch-issues.sh --pool` pre-warms before spawning agents\n\n### Batch Example\n\n```bash\n# Pre-warm pool, then spawn agents for issues 100-105\n./scripts/batch-issues.sh --pool 100..105\n```\n\n## Development\n\nPart of the [ai-dossier](https://github.com/imboard-ai/ai-dossier) monorepo.\n\n```bash\nnpm run build -w packages/worktree-pool    # build\nnpm run test -w packages/worktree-pool     # test\nmake build-pool                            # build via Makefile\n```\n\n## License\n\n[AGPL-3.0](https://github.com/imboard-ai/ai-dossier/blob/main/LICENSE)\n","readmeFilename":"README.md"}